6

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

所以我很好奇,如果我有一个使用 8 位移位寄存器 (SISO) 进程的体系结构,并且我想创建这些(4x8 位移位寄存器)的 4 个实例,我会创建一个组件和 4过程的实例?

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

此外,只是一个一般性问题,以就人们在那里使用的良好实践达成共识,您更喜欢哪个:结构性与行为性?什么时候是选择一个而不是另一个的好时机?我猜他们可能会通过使用允许内部并发与进程中顺序执行的组件“更快”执行来带来一些好处。虽然在我看来确实可以通过行为设计减少设计时间。

谢谢!〜狡猾的

4

1 回答 1

11

就我而言,如今结构 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;

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

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;

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

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

担心进程中信号分配调度和变量分配调度之间的区别(了解什么是增量周期和延迟分配 - 这是与软件的关键区别之一,并且因为软件只有变量,而不是 VHDL 的信号而出现)。这将解释为什么我在这里颠倒了管道(输出优先) - 因为我使用了一个变量。

担心当 1 进程 SM 更简单、更安全时,为什么还有这么多人教愚蠢的 2 进程状态机。

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

于 2012-11-16T20:26:41.383 回答