假设我需要测试std_logic_vector上的不同位。是实现一个单一进程,对每个位进行for循环,还是使用for-generate实例化'n'个进程,每个进程测试一个位,哪种方式更好?
FOR-LOOP
使用for循环实现单一进程会更好一些。这样可以避免创建过多的进程,从而减少资源消耗。同时,通过for循环逐个测试每个位,可以更好地控制代码的执行顺序和流程。
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实现会有什么影响? CAD工具易处理哪种情况?
编辑: 为了更明确我的问题,我只是添加了一个回答,当我在ISE上使用for循环运行代码时,综合摘要给出了一个公平的结果,花费了很长时间来计算一切。 当我重新编写我的设计,这次使用for-generate和几个进程,我使用了更多区域,但工具能够计算一切得更快,我的时间结果也更好。 那么,这是否意味着有一个规则,总是更好地使用for-generate,付出额外的区域和较低的复杂性的代价,还是我必须验证每个单独的实现可能性?
generate
循环来指定确切的硬件结构,并使用for
循环进行行为描述(几乎从不使用)。 - Eugene Sh.for...loop
版本也是固有的并行,因为它必须在单个周期内执行。这些描述(忽略看不见的代码)完全等效。为什么综合工具没有看到它们的方式?......好问题。 - user1818839