VHDL结构与行为

dod*_*ddy 6 vhdl

对于那些对VHDL有很好理解的人来说,这是一个问题.我是新手,但到目前为止,我一直使用行为描述生成VHDL.对我而言,它更容易思考,因为它类似于编写软件.我知道可能的垮台是行为'顺序执行'而结构在设计组件/过程中同时执行.

所以我只是很好奇,如果我有一个架构使用一个过程来说一个8位移位寄存器(SISO),我想创建4个实例(4x8位移位寄存器)我会创建一个组件和4这个过程的实例?

或者我会生成4个进程(彼此并行执行)并只是用不同的名称调用每个进程?

另外,只是一个普遍的问题,就人们在那里使用的优秀做法达成共识,你更喜欢哪种:结构与行为?何时是选择其中一个的好时机?我猜他们使用允许内部并发和流程中的顺序执行的组件的"更快"执行可以带来一些好处.虽然可以确保人们可以通过行为设计缩短设计时间.

谢谢!〜doddy

Bri*_*ond 10

对于我的钱,现在结构HDL的作用仅限于互连测试的工作行为块(或将未经测试的行为块连接到他们的测试平台!) - 我同意你关于行为VHDL在设计创建和测试时间方面的优越性.

我也同意写一个行为过程在某些方面类似于编写软件(在一些人的尖叫声中,它不是)

然而

不要陷入将行为等同于顺序或缓慢的陷阱!

比如你的移位寄存器

type reg_type is array(7 downto 0) of bit;
signal s_in, s_out : bit;

process(clk) is
variable reg : reg_type;
begin
   if rising_edge(clk) then
      s_out <= reg(7);
      reg   := reg(6 downto 0) & s_in;
   end if;
end;
Run Code Online (Sandbox Code Playgroud)

我可以简单地将其并行化如下:

signal p_in, p_out : array(1 to 4) of bit;

process(clk) is
variable reg : array(1 to 4) of reg_type;
begin
   if rising_edge(clk) then
      for i in reg'range loop
         p_out(i) <= reg(i)(7);
         reg(i)   := reg(i)(6 downto 0) & p_in(i);
      end loop;
   end if;
end;
Run Code Online (Sandbox Code Playgroud)

(是的,有更简单的方法可以写这个!)重要的是要注意循环不再需要运行:它只生成更多硬件(在软件方面,它完全展开).每次迭代完全独立于其他迭代; 如果他们不是,事情会更复杂.

不要担心结构和行为之间的学术差异.

担心过程中信号分配调度和变量分配调度之间的差异(了解增量循环和推迟分配是什么 - 这是软件的关键差异之一,并且因为软件只有变量而不是VHDL的信号而产生).这将解释为什么我在这里颠倒实现管道(输出优先) - 因为我使用了一个变量.

担心当1-process SM更简单,更安全时,为什么这么多人教这种愚蠢的双过程状态机.

查找并了解Mike Treseler关于单流程模型的页面(我希望它们仍然在线)