For循环等效RTL描述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了For循环等效RTL描述相关的知识,希望对你有一定的参考价值。

出于软件背景,我仍然很难想到硬件。RTL语言(VHDL或Verilog)中的for循环相当于什么?我想我需要一个寄存器来建立一个计数器,以及一个用于分支的多路复用器,对吗?

答案

VHDL process或Verilog always block一些模拟硬件的软件。流程具有敏感度列表:这是输入列表。如果这些更改中的任何一个发生更改,则将执行进程(即软件的小部分),并分配进程的输出(由该进程驱动的任何signal)。

对于组合逻辑,任何输入总是导致相同的输出,因此您可以编写真值表。您的一点点软件正在描述真值表。您可以使用case statement来执行此操作,但是对于大量输入而言,这是不切实际的。相反,我们使用其他一些软件样式的构造,例如if语句循环算术运算符等。 逻辑综合器的目的是设计一个硬件的小部分,其行为与软件的小部分完全相同。通过这样做,逻辑合成器可以评估您的软件的一点点以确定它的真值表,然后可以基于此表设计其硬件的一点点。但是,真正的逻辑合成器将使用多种技术来实现相同的目的。

因此,如果在流程中放入for循环,如果软件的一点点包含循环,那么您将仅获得块组合逻辑。 for循环将确定该块的行为。由于for循环的本质(并且由于逻辑合成器可能会设计其硬件的小部分),该组合逻辑可能会包含重复的结构。当您考虑如何实现该模块(尤其是在FPGA上)时,这一点可能很重要。关于通过块的延迟可能很重要。但是,最重要的是它将是组合逻辑块。

另一答案

首先要意识到的是,HDL语言具有两种不同的外观。

  • 您在模拟中看到的那个。
  • 合成后您这样的人。

在仿真中,for循环与大多数语言相同:for循环中的指令执行了很多次。

要将循环转换成逻辑(从而进行综合),首要要求是在编译时必须知道循环的大小。因此,您可以从0 to a_const循环播放。但是您不能从0 to variable_whos_value_can_change循环播放。

从那里开始for循环变得简单:重复在for循环内实现的任何逻辑。

因此for (i=0; i<4; i=i+1) A[i] = B[i] + C[i]产生4个加法器。所有这些都是并行运行的。

always @( * ) 
begin
   max = c[0];
   for (n=1; n<10; n++)
     if (c[n]>max) max = c[n];
end

这构成了一个组合逻辑块,其中输入c的10个值,并且在输出的最大值处等于最大c。请注意,不涉及任何寄存器或时钟。

以上是关于For循环等效RTL描述的主要内容,如果未能解决你的问题,请参考以下文章

您如何在方案中运行等效的嵌套 for 循环

Itertools 等效于嵌套循环“for x in xs: for y in ys...”

R中的for循环,增量

Perl 相当于 Python for 循环?

Scala/Chisel 中的函数式 for 循环

程序似乎在 for 循环后静默终止 - C++