简单VHDL电路的意外行为

简单VHDL电路的意外行为,vhdl,delay,behavior,Vhdl,Delay,Behavior,模拟器中Q_VLD1和Q_VLD2信号延迟不同的原因是什么? 它是否是模拟器的预期行为 我使用Xilinx Isim。 这里有它的代码和测试平台: entity assign_test is port(CLK : in STD_LOGIC; D_VLD : in STD_LOGIC; Q_VLD1 : out STD_LOGIC; Q_VLD2 : out STD_LOGIC ); end assign_test;

模拟器中Q_VLD1和Q_VLD2信号延迟不同的原因是什么? 它是否是模拟器的预期行为

我使用Xilinx Isim。 这里有它的代码和测试平台:

entity assign_test is
    port(CLK   : in  STD_LOGIC;
         D_VLD : in  STD_LOGIC;
         Q_VLD1 : out STD_LOGIC;
         Q_VLD2 : out STD_LOGIC
    );
end assign_test;

architecture Behavioral of assign_test is
    signal D_VLD_i : std_logic;
    signal d_vld_dly1 : std_logic;
    signal d_vld_dly2 : std_logic;
begin
    D_VLD_i <= D_VLD;

    process (clk) is
    begin
        if rising_edge(clk) then
            d_vld_dly1 <= D_VLD;
            d_vld_dly2 <= D_VLD_i;
        end if;
    end process ;

    Q_VLD1 <= d_vld_dly1;
    Q_VLD2 <= d_vld_dly2;
end Behavioral;


ENTITY tb_assign_test IS
END tb_assign_test;
ARCHITECTURE behavior OF tb_assign_test IS 

    COMPONENT assign_test
    PORT(
         CLK : IN  std_logic;
         D_VLD : IN  std_logic;
         Q_VLD1 : OUT  std_logic;
         Q_VLD2 : OUT  std_logic
        );
    END COMPONENT;

   --Inputs
   signal CLK : std_logic := '0';
   signal D_VLD : std_logic := '0';
    --Outputs
   signal Q_VLD1 : std_logic;
   signal Q_VLD2 : std_logic;
   constant CLK_period : time := 10 ns;

BEGIN 
   uut: assign_test PORT MAP (
          CLK => CLK,
          D_VLD => D_VLD,
          Q_VLD1 => Q_VLD1,
          Q_VLD2 => Q_VLD2
        );

   CLK_process :process
   begin
        CLK <= '0';
        wait for CLK_period/2;
        CLK <= '1';
        wait for CLK_period/2;
   end process;

   stim_proc: process
   begin        
      wait for 100 ns;  
      wait for 5 ns;    
      wait for CLK_period*10;
      D_VLD <= '1';
      wait for CLK_period*3;
      D_VLD <= '0';
      wait;
   end process;
END;
实体分配\u测试是
端口(时钟:在标准逻辑中;
D_VLD:标准逻辑中;
Q_VLD1:输出标准逻辑;
Q_VLD2:输出标准逻辑
);
结束测试;
assign_测试的架构是
信号D_VLD_i:标准逻辑;
信号d_vld_dly1:标准逻辑;
信号d_vld_dly2:标准逻辑;
开始

因此,如果您查看
assign\u test
模块中的内部信号,仅基于模拟时间,它可能如下图所示(
D\u VLD\u dly*
在分配给
Q\u VLD*
之前)

但这一数字具有误导性,因为这一数字没有显示实际情况。如果波形展开以显示增量延迟(在本例中使用ModelSim),则如下所示


因此,这表明,
D_VLD_i亲爱的downvoter,如果您留下一条评论,并说明进行downvote投票的理由,那么这个问题将得到改进。
wait for CLK_period*10;
for i in 1 to 10 loop
  wait until rising_edge(CLK);
end loop;