gpt4 book ai didi

for-loop - 实现 FOR-LOOP 和 FOR-GENERATE 之间的实际区别是什么?什么时候使用其中一种比另一种更好?

转载 作者:行者123 更新时间:2023-12-02 19:10:05 24 4
gpt4 key购买 nike

假设我必须在 std_logic_vector 上测试不同的位。实现一个单独的进程(对每一位进行 for 循环)还是使用 for-generate 实例化“n”个进程(每个进程测试一位)会更好吗?

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 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 总是更好,但需要额外的面积和较低的复杂性,还是我必须验证每一个实现可能性的情况之一?

最佳答案

假设重置和测试函数中的逻辑相对简单(例如,相邻位之间没有交互),我预计两者都会生成相同的逻辑。

了解,由于整个 for 循环在单个时钟周期内执行,综合将展开它并为每个输入位生成一个单独的 test_array_bit 实例。因此,综合工具很有可能为两个版本生成相同的逻辑 - 至少在这个简单的示例中是这样。

在此基础上,我(稍微)更喜欢 for ...loop 版本,因为它本地化了程序逻辑,而“generate”版本则将其全局化,将其放置在 之外>处理样板。如果您发现loop版本更容易阅读,那么您在某种程度上会同意。

然而,对风格教条是没有好处的,你的实验说明了这一点:循环合成了劣质硬件。综合工具是复杂且不完美的软件,就像高度优化的编译器一样,并且存在许多相同的问题。有时他们会错过“明显”的优化,有时他们会进行复杂的优化(例如在软件中),因为其大小增加破坏了缓存,因此运行速度较慢。

因此,最好尽可能以最简洁的风格进行编写,但要具有一定的灵 active ,可以解决工具限制和偶尔出现的实际工具缺陷。

不同版本的工具可以消除(有时会引入)此类缺陷。您可能会发现 ISE 的“使用新解析器”选项(对于 Spartan-6 之前的部件)或 Vivado 或 Synplicity 可以实现这一点,而 ISE 的旧解析器则无法做到这一点。 (例如,从程序中传递信号,较旧的 ISE 版本存在严重错误)。

修改示例并查看综合是否可以在最简单的情况下“正确实现”(生成相同的硬件),并重新引入复杂性,直到找到哪个构造失败,这可能会很有启发性。

如果您通过这种方式发现了一些具体的东西,值得在这里报告(通过回答您自己的问题)。 Xilinx 过去鼓励通过其 Webcase 系统报告此类缺陷;最终它们甚至被修复了!然而,在过去的一两年里,他们似乎已经停止了这种做法。

关于for-loop - 实现 FOR-LOOP 和 FOR-GENERATE 之间的实际区别是什么?什么时候使用其中一种比另一种更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31393653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com