对于那些对VHDL有很好理解的人来说,这是一个问题。我是新手,但到目前为止,我一直使用行为描述生成VHDL。对我而言,它更容易思考,因为它类似于编写软件。我知道可能的垮台是行为'顺序执行'而结构在设计组件/过程中同时执行..
所以我只是好奇,如果我有一个架构使用一个进程来说一个8位移位寄存器(SISO)并且我想创建4个实例(4x8位移位寄存器)我会创建一个组件和过程的4个实例?
或者我会生成4个进程(彼此并行执行)并使用不同的名称调用每个进程?
此外,只是一个普遍的问题,就人们在那里使用的优秀做法达成共识,你更喜欢哪种:结构与行为?何时是选择其中一个的好时机?我猜他们使用允许内部并发和流程中的顺序执行的组件的“更快”执行可能会带来一些好处。虽然可以确保使用行为设计可以减少设计时间,但我确实这样做。
谢谢! 〜doddy
答案 0 :(得分: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;
我可以按如下方式平行化:
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-process SM更简单,更安全时,为什么这么多人教这种愚蠢的双过程状态机。
查找并了解Mike Treseler关于单流程模型的页面(我希望它们仍然在线)