就我而言,如今结构 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 的关于单进程模型的页面(希望它们还在线)