【问题标题】:Signals and synthesis of registers/flip flops in VHDLVHDL中的寄存器/触发器的信号和综合
【发布时间】:2014-05-05 18:39:00
【问题描述】:

Waveform link included 我对 VHDL 中对信号的赋值感到困惑。

令人困惑的是,我已经读到信号的值是在进程结束时分配的。

  1. 是否在进程完成或下次触发进程时正确分配值?

  2. 如果它是在过程结束时分配的,那么考虑这种情况(3 个触发器串联,即一个触发器的输出被输入到另一个),那么如果 D1 在时间 0 为 1,则不会输出 Q3同时为 1?

【问题讨论】:

  • 您的 2. 示例是使用一串透明闩锁发生的情况。触发器仅在边缘更新,并且将看到驱动其 Q 输入的任何东西的旧值,而不是时钟后更新到的新值。在实际系统中,您可以在时钟之间引入足够的偏差以导致这种下降,但通常不会在同步设计中完成。 VHDL 仿真内核确保这不会发生,除非您明确地这样做。
  • 感谢您的快速回复。我的教授说,在 VHDL 中,在为信号分配信号时的上升沿 clk 事件中形成了一个寄存器。处理(clk) if(clk='1' and clk'event)then output

标签: vhdl


【解决方案1】:

(1) 就在进程完成时。更准确地说,就在此之后,与此进程一起运行的所有进程都已完成,并且在随后启动任何进程之前。因此,当发生任何信号分配时,no 进程正在运行。

(2) Q3 将提前三个时钟周期变为 D1 上的值。我无法从您的问题中判断该值是否为“1”!

【讨论】:

  • 我已将波形链接添加到问题中。我的教授说,在 VHDL 中,在为信号分配信号时的上升沿 clk 事件中形成了一个寄存器。进程(clk) if(clk='1' and clk'event)then output
  • 你希望得到什么样的输出?
  • 我认为由于会形成一个寄存器,因此会导致输出延迟,因此答案应该是我在图像链接中(输出 1)中显示的那个。
  • 不,单个寄存器将在 D 之后的下一个上升沿(clk)加载,其输出将立即可用:波形 2。您需要第二个寄存器,其 D 连接到第一个Q,两者都从clk获取波形1。在模拟器中尝试这些。
  • 图书馆 ieee;使用 ieee.std_logic_1164.all;实体 reg 是通用的(宽度:正:= 8);端口(clk:在std_logic中;rst:在std_logic中;输入:在std_logic_vector中(width-1 downto 0);输出:out std_logic_vector(width-1 downto 0));结束注册; reg 的体系结构 SYNC_RST is begin if (clk'event and clk='1') then if (rst = '1') then output '0');否则输出link
【解决方案2】:

信号分配仅在过程结束时完成。在信号分配之后,可能存在信号更新,并且由于信号更新,进程本身或可能对某些更新信号敏感的其他进程将被触发。这就是增量循环的概念。它发生在零模拟时间内。 信号更新->触发流程->在流程结束时,信号被更新 ------------------------------------ ---------------- -------------------- 这是第二个增量周期的第一个增量周期

当没有信号更新时,过程结束,仿真时间增加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多