我一直在为一些简单的VHDL门建模,但我似乎没有时间延迟,我有以下代码:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY AND_4 IS
GENERIC (delay : delay_length := 0 ns);
PORT (a, b, c, d : IN std_logic;
x : OUT STD_logic);
END ENTITY AND_4;
ARCHITECTURE dflow OF AND_4 IS
BEGIN
x <= ( a and b and c and d) AFTER delay;
END ARCHITECTURE dflow;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY TEST_AND_4 IS
END ENTITY TEST_AND_4;
ARCHITECTURE IO OF TEST_AND_4 IS
COMPONENT AND_4 IS
GENERIC (delay : delay_length := 0 ns);
PORT (a, b, c, d : IN std_logic;
x : OUT STD_logic);
END COMPONENT AND_4;
SIGNAL a,b,c,d,x : std_logic := '0';
BEGIN
G1 : AND_4 GENERIC MAP (delay => 5ns) PORT MAP (a,b,c,d,x);
PROCESS
VARIABLE error_count : integer:= 0;
BEGIN
WAIT FOR 1 NS;
a <= '1';
b <= '0';
c <= '0';
d <= '0';
ASSERT (x = '1') REPORT "output error" SEVERITY error;
IF (x /= '1') THEN
error_count := error_count + 1;
END IF;
--Repeated test vector -- omitted
END PROCESS;
END ARCHITECTURE IO;
CONFIGURATION TESTER1 OF TEST_AND_4 IS
FOR IO
FOR G1 : AND_4
USE ENTITY work.AND_4(dflow)
GENERIC MAP (delay);
END FOR;
END FOR;
END CONFIGURATION TESTER1;
当我模拟模型时,我只得到我添加到每个测试向量的1 ns延迟。我猜测问题是我如何将延迟传递给测试平台中的组件声明。我已经尝试了一些事情并重读了我所拥有的书中的主题,但仍然没有快乐。有帮助吗? 非常感谢 d
答案 0 :(得分:3)
修改测试平台中未标记的刺激过程:
process
variable error_count : integer:= 0;
begin
wait for 1 ns;
a <= '1';
-- b <= '0';
-- c <= '0';
-- d <= '0';
-- assert (x = '1') report "output error" severity error;
-- if (x /= '1') then
-- error_count := error_count + 1;
-- end if;
--repeated test vector -- omitted
b <= '1';
c <= '1';
d <= '1';
wait for 5 ns;
wait for 5 ns;
wait;
end process;
简单地证明了延迟表明通用延迟正被传递给实例化组件:
如果您得到不同的内容,或许您可以通过确保示例实际重现问题并将结果告知我来将您的问题转换为Minimal, Complete, and Verifiable example:
您在测试平台中留下的一点点刺激似乎没有正确测试and_4。
如果有更多的刺激并且您没有等待信号分配延迟机制暗示的脉冲抑制限制,那么除了那些烦人的断言之外什么都没有。
参见IEEE Std 1076-2008 10.5。简单的信号分配声明,5.2.1概述,第5和第6段:
简单波形分配的右侧可以选择指定延迟机制。由保留字传输组成的延迟机制指定与第一波形元素相关联的延迟将被解释为传输延迟。传输延迟是硬件设备(如传输线)的特征,它表现出几乎无限的频率响应:任何脉冲都会被传输,无论其持续时间有多短。如果不存在延迟机制,或者如果存在包括保留字惯性的延迟机制,则延迟被解释为惯性延迟。惯性延迟是开关电路的特征:持续时间短于电路开关时间的脉冲不会被传输,或者在指定脉冲抑制限制的情况下,持续时间短于该限制的脉冲将不会传输。
每个惯性延迟信号分配都有脉冲抑制限值。如果延迟机制指定惯性延迟,并且如果存在保留字后跟时间表达式,则时间表达式指定脉冲拒绝限制。在所有其他情况下,脉冲抑制限制由与第一波形元素相关联的时间表达式指定。
(注意你可以转到10.5.2.2执行一个简单的赋值语句,看 时间_ 表达式是波形元素的一部分,而不是延迟机制。)< / p>
答案 1 :(得分:1)
不确定
ENTITY TEST_AND_4 IS
END ENTITY TEST_AND_4;
ARCHITECTURE IO OF TEST_AND_4 IS
COMPONENT AND_4 IS
GENERIC (delay : delay_length := 0 ns);
PORT (a, b, c, d : IN std_logic;
x : OUT STD_logic);
END COMPONENT AND_4;
SIGNAL a,b,c,d,x : std_logic := '0';
BEGIN
G1 : AND_4 GENERIC MAP (delay => 5 NS) PORT MAP (a,b,c,d,x);
PROCESS
VARIABLE error_count : integer:= 0;
BEGIN
WAIT FOR 1 NS; -- Changed to 6 ns so that the wait is longer then the
-- generic gate propagation delay
a <= '1';
b <= '1';
c <= '1';
d <= '1';
ASSERT (x = '1') REPORT "output error" SEVERITY error;
IF (x /= '1') THEN
error_count := error_count + 1;
END IF;
我已经注意到我对上面的测试台模型所做的改变,现在看起来有点明显,但是昨天让我把头发拉了出来。 干杯 d
&#39;修复&#39;是将顺序测试台模型中的WAIT值从1 ns更改为6 ns。这为门提供了改变状态的时间,因为它具有5 ns的惯性延迟。
WAIT FOR 6 NS; -- Changed to 6 ns so that the wait is longer then the
-- generic gate propagation delay
答案 2 :(得分:0)