Supponiamo di dover provare diversi bit su un file std_logic_vector. sarebbe meglio implementare un singolo processo, for-loops per ogni bit o istanziare processi "n" usando for-generate su cui ogni processo verifica un bit?Qual è la differenza pratica tra l'implementazione di FOR-LOOP e FOR-GENERATE? Quando è meglio usare l'uno sull'altro?
FOR-LOOP
my_process: process(clk, reset) begin
if rising_edge (clk) then
if reset = '1' then
--init stuff
else
for_loop: for i in 0 to n loop
test_array_bit(i);
end loop;
end if;
end if;
end process;
generare FOR-
for_generate: for i in 0 to n generate begin
my_process: process(clk, reset) begin
if rising_edge (clk) then
if reset = '1' then
--init stuff
else
test_array_bit(i);
end if;
end if;
end process;
end generate;
Quale sarebbe l'impatto sulla FPGA e ASIC implementazioni per questi casi? Che cosa è facile da gestire con gli strumenti CAD?
EDIT: Solo l'aggiunta di una risposta che ho dato a uno aiutando ragazzo, per rendere la mia domanda più chiaro:
Per esempio, quando sono andato un pezzo di codice utilizzando per-loop sul ISE, la sintesi di sintesi ha dato un risultato equo, mi ci vorrà molto tempo per calcolare tutto. quando ho ri-codificato il mio design, questa volta usando for-generate, e diversi processi, ho usato un po 'più di area, ma lo strumento è stato in grado di calcolare tutto in modo più veloce e il mio risultato di timing era anche migliore. Quindi, implica una regola, che è sempre meglio usare per-genera con un costo di area extra e una complessità inferiore o è uno dei casi che devo verificare ogni singola possibilità di implementazione?
Ciao Eugene, grazie mille per aver risposto. Mi dispiace, ma avrei dovuto essere più chiaro sulla mia domanda. Conosco le basi della codifica e le implicazioni "logiche" dell'uso di entrambe le strutture. Il mio dubbio è sul risultato pratico del loro utilizzo. Ho usato l'esempio con un semplice vettore proprio come una vetrina, ma in pratica le cose sono molto più complicate. Quindi, riformulando: se ho un pezzo di codice che dovrebbe darmi una risposta in un ciclo di clock (o eseguire tutti i suoi contenuti in parallelo, se questo si adatta meglio) cosa, dal punto di vista fisico lvl, sarebbe la migliore implementazione strategia? –
Ad esempio, quando eseguo un pezzo di codice usando for-loops su ISE, il sommario di sintesi mi ha dato un risultato equo, impiegando molto tempo per calcolare tutto. quando ho ricodificato il mio progetto, questa volta usando for-generate, e diversi processi, ho usato un po 'più di area, ma gli strumenti sono stati in grado di calcolare tutto in modo più veloce e anche il mio risultato di timing era migliore. Quindi, implica una regola, che è sempre meglio usare per-genera con un costo di area extra o è uno dei casi che devo verificare ogni singola possibilità di implementazione? –
Il calcolo più veloce è il risultato della natura parallela della seconda implementazione. E, come sempre, c'è un compromesso con il numero di risorse utilizzate. Se osservate lo schema RTL di entrambe le implementazioni, vedrete la differenza. Personalmente sto usando i cicli 'generate' quando codifico la logica RTL, cioè quando specifichi la struttura hardware esatta ei loop' for' con descrizioni comportamentali (beh, quasi mai :)) –