【问题标题】:VHDL Structural vs BehavioralVHDL 结构与行为
【发布时间】:2012-11-16 19:18:44
【问题描述】:

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

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

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

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

谢谢! 〜狡猾的

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    在我看来,如今结构 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 的信号) .这将解释为什么我在这里颠倒了管道(输出优先) - 因为我使用了一个变量。

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

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

    【讨论】:

    • 嘿,谢谢!我必须更仔细地看一下您的第二个示例才能完全理解,但一眼就能看出您对 4x8 位移位寄存器的并行实现的意思。我也会听从你的建议,看看 VHDL 和状态机的其他问题。我也很高兴听到至少一个人说进程似乎是描述硬件的一种更清晰的方式。我开始阅读一些在线教程,但我不知道他们为什么不从进程开始并提到结构更多是事后的想法。无论如何,再次感谢!
    • +1 表示单个进程。并且不用担心学术差异。并了解变量与信号。好帖子:)
    • 谢谢马丁!重读它,我觉得有必要捍卫结构化 VHDL:它确实有它的用途——在顶层互连模块上——对于像多路复用器这样的非时钟事物,我将使用组合分配和结构互连来将复杂性移出过程。但是这个过程(或几个过程)完成了大部分工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    相关资源
    最近更新 更多