Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VHDL通用延迟-测试台和配置_Vhdl - Fatal编程技术网

VHDL通用延迟-测试台和配置

VHDL通用延迟-测试台和配置,vhdl,Vhdl,我已经对一些简单的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;

我已经对一些简单的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;
IEEE库;
使用IEEE.std_logic_1164.ALL;
实体和_4是
通用(延迟:延迟长度=0 ns);
端口(a、b、c、d:std_逻辑中;
x:输出标准(U逻辑);
终端实体和_4;
和_4的体系结构数据流是
开始
x5ns)端口图(a、b、c、d、x);
过程
变量错误计数:整数:=0;
开始
等待1ns;

a在您的试验台上修改未标记的刺激过程:

    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;
过程
变量错误计数:整数:=0;
开始
等待1ns;

a在您的试验台上修改未标记的刺激过程:

    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;
过程
变量错误计数:整数:=0;
开始
等待1ns;

a谢谢你的帮助,但是今天早上我在阅读了USER115520的帖子后发现了这个问题。我设置的延迟为“惯性”,一般设置为5 ns。在我的测试台过程中,我只在输入信号变化之间设置了1ns等待语句。因此,当正确的刺激和刺激被引入时,门不会执行转换

我在a=1b=1c=1d=1之后插入了一个6ns的延迟,并从闸门得到了正确的响应


谢谢您的帮助,但今天早上我在阅读了USER115520的帖子后发现了这个问题。我设置的延迟为“惯性”,一般设置为5 ns。在我的测试台过程中,我只在输入信号变化之间设置了1ns等待语句。因此,当正确的刺激和刺激被引入时,门不会执行转换

我在a=1b=1c=1d=1之后插入了一个6ns的延迟,并从闸门得到了正确的响应

当然可以

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;
当然


您使用的是哪种模拟工具?您使用的是哪种模拟工具?感谢用户1155120的帮助,我将在以后提问时更加精确。时间很晚了,我花了很长时间盯着屏幕。早上,答案显而易见。但在我发布的测试模型中并不是那么明显。抱歉并感谢您感谢用户1155120的帮助我以后提问时会更加准确。时间很晚了,我花了很长时间盯着屏幕。早上,答案显而易见。但在我发布的测试模型中并不是那么明显。抱歉并感谢您为了使您的答案对其他读者有用,您应该发布一些代码(但不是整个测试台)来说明在哪里添加额外的6ns延迟。为了让你的答案对其他读者有用,你应该发布一些代码(但不是整个测试台)来说明在哪里添加额外的6ns延迟。那么,我认为更糟糕的是,你为什么发布一个新答案而不是编辑你的第一个?请在你的另一个答案中包含代码,以便做出一个好答案。应用第一个信号集后,更改后的代码应显示6 ns的延迟。我发布了一个新的简化答案,因为第一个帖子没有包括需要修改的测试台部分。人们通常会修改问题帖子吗?修改问题帖子只是为了包含进一步的澄清和/或其他细节,以解决您的问题问题,如其他人在评论中要求的问题。如果你自己找到了解决方案,那么就把它作为一个答案发布(就像你已经做的那样)。在这种情况下,不要编辑问题。另外,编辑您的答案以包含更多详细信息或修复错误。因此,与其在此处发布第二个答案,不如编辑另一个答案,例如添加:我必须将此行(旧代码)更改为此行(新代码)。为什么您发布新答案而不是编辑第一个答案?请在你的另一个答案中包含代码,以便做出一个好答案。应用第一个信号集后,更改后的代码应显示6 ns的延迟。我发布了一个新的简化答案,因为第一个帖子没有包括需要修改的测试台部分。人们通常会修改问题帖子吗?修改问题帖子只是为了包含进一步的澄清和/或其他细节,以解决您的问题问题,如其他人在评论中要求的问题。如果你自己找到了解决方案,那么就把它作为一个答案发布(就像你已经做的那样)。在这种情况下,不要编辑问题。另外,编辑您的答案以包含更多详细信息或修复错误。因此,与其在此处发布第二个答案,不如编辑另一个答案,例如添加:我必须将此行(旧代码)更改为此行(新代码)。