首页 文章

VHDL结构与行为

提问于
浏览
7

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

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

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

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

谢谢! 〜doddy

1 回答

  • 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关于单流程模型的页面(我希望它们仍然在线)

相关问题