Предположим, что мне нужно протестировать разные биты на std_logic_vector. было бы лучше реализовать один процесс, который для циклов для каждого бита или для создания «n» процессов с использованием for-generate, на котором каждый процесс проверяет один бит?Какова практическая разница между внедрением FOR-LOOP и FOR-GENERATE? Когда лучше использовать один над другим?
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;
FOR-GENERATE
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;
Что бы влияние на FPGA и ASIC реализаций для этих случаях? С чем легко справиться с инструментами САПР?
EDIT: Просто добавить ответ я дал одному помочь парню, чтобы сделать мой вопрос более ясно:
Например, когда я побежал кусок кода, используя для петель на ISE, резюме синтез дал мне справедливый результат, занять много времени, чтобы вычислить все. когда я перекодировал свой дизайн, на этот раз используя for-generate и несколько процессов, я использовал немного больше области, но инструмент смог быстрее вычислить все, и мой результат синхронизации был лучше. Итак, подразумевает ли это правило, которое всегда лучше использовать для генерирования со стоимостью дополнительной области и меньшей сложности, или это один из случаев, когда я должен проверять каждую возможность реализации?
Привет, Евгений, большое спасибо за ответ. Мне очень жаль, но я должен был более четко ответить на мой вопрос. Я знаю основы кодирования и «логические» последствия использования обеих структур. Я сомневаюсь в практическом результате их использования. Я использовал пример с одним простым вектором так же, как и в случае с шоу, но на практике все усложняется. Итак, переформулируем: если у меня есть кусок кода, который должен дать мне ответ за один такт (или запустить все его содержимое параллельно, если это будет лучше), то с физической точки зрения lvl будет лучшей реализацией стратегия? –
Например, когда я запускаю фрагмент кода с использованием for-loops на ISE, обобщение сводки дало мне справедливый результат, за считанные секунды вычислить все. Итак, это подразумевает правило, которое всегда лучше использовать для генерирования со стоимостью дополнительной области или это один из случаев, когда я должен проверять каждую возможность реализации? –
Более быстрое вычисление было результатом параллельного характера второй реализации. И, как всегда, существует компромисс с количеством используемых ресурсов. Если вы посмотрите на схему RTL обеих реализаций, вы увидите разницу. Лично я использую «генерации» циклов при кодировании логики RTL, то есть при указании точной структуры аппаратного обеспечения и циклов 'for' с поведенческими описаниями (ну, почти никогда :) :) –