VHDL信号分配

时间:2017-03-15 11:33:42

标签: vhdl

假设有这个代码和附加的图表..

entity t_trigger is
     port (Test, Reset, clk, en : in std_logic;
     Q_out: out std_logic);
end t_trigger;

architecture beh_t_trigger of t_trigger is
signal temp: std_logic ;

begin
 process (Reset, clk)
 begin
 if (clk'event and clk='1') then
  if Reset='1' then
   temp <= '0';
  elsif en = '1' then
   temp <= Test xor temp;
  end if;
 end if;
end process;
Q_out <= temp;
end beh_t_trigger;

enter image description here

序列结束时Q_out的状态是什么?如果第一个条件为真,那么我们跳过第二个条件? temp的初始值是多少? 我无法理解我们分配给它的东西,因为起初没有&#34; if&#34;条件是真的..

2 个答案:

答案 0 :(得分:2)

我创建了以下图片,看起来很糟糕,但希望能够解释答案的整个过程;

您的逻辑有5个时钟上升沿,除了第一个,您有Q_out0,因此首先得到temp xor Test signal值{{1对于Q_out,rest总是temp的结果,我在那里绘制的线表示这些值之间的xor运算,无论多么丑陋,我希望这很有用:)

U的初始值为0,正如here所解释的那样,直到你的时钟上升为止,你不应该担心它的价值,你的实体的初始输出信号可能是U,如果它在硬件上,但在模拟时你可以假设它只是<% name=request(name) address=request(address) result=name&" "&address %> ,如果你担心时钟事件之前的输出信号,你可以为它分配一些初始值,但显然会在第一个时钟沿之后被覆盖。

enter image description here

答案 1 :(得分:2)

关于波形进展时Q_out的“状态”,我将测试平台(使用粗略时序)一起攻击以指示输出。

rough testbench

注意“未初始化”的临时状态。

关于为什么当Reset被断言时的逻辑,我们忽略逻辑的二级分支(即,如果en为高)。 if / elsif类型语句倾向于推断优先级逻辑。下面通过代码生成的RTL演示了这一点。

priority logic

您可以从逻辑中看出,如果Reset信号被置位,D翻牌上的temp输入将始终为'0'