Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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新手,尝试用5条选择行制作多路复用器测试台,但它给了我错误(代码很长,所以我只是复制了包含错误的部分) 守则: library ieee; use ieee.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use ieee.numeric_std.all; entity Mux_4_to_1_tb is end Mux_4_to_1_tb; architecture t

我是vhdl新手,尝试用5条选择行制作多路复用器测试台,但它给了我错误(代码很长,所以我只是复制了包含错误的部分)

守则:

    library ieee;
    use ieee.std_logic_1164.all;
    use IEEE.std_logic_unsigned.all;
    use ieee.numeric_std.all;
    entity Mux_4_to_1_tb is
    end Mux_4_to_1_tb;

    architecture tb of Mux_4_to_1_tb is

    component Mux_4_to_1 is
      port( clock : in std_logic;
        D0, D1, D2, D3 : in std_logic; -- the data lines D0=A0 D1=A1 D2=B0 D3=B1
            S0, S1, S2, S3, S4  : in std_logic; -- the selector switches
            F : out std_logic_vector(2 downto 0)
        );-- the output
    end component;
    constant clockperiod : time := 20 ns;
    signal D0, D1, D2, D3, S0, S1 , S2, S3, S4  , F : std_logic;
    signal selectors : std_logic_vector(4 downto 0);

    begin
    mapping: Mux_4_to_1 port map(D0, D1, D2, D3, S0, S1, S2, S3, S4, F );

    --Concurrent processes
    process
    begin   

      S0 <= '0'; S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '1';wait for clockperiod;
      S0 <= '0'; S1 <= '0'; S2 <= '0'; S3 <= '1'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '0'; S2 <= '0'; S3 <= '1'; S4 <= '1';wait for clockperiod;
      S0 <= '0'; S1 <= '0'; S2 <= '1'; S3 <= '0'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '0'; S2 <= '1'; S3 <= '0'; S4 <= '1';wait for clockperiod;
      S0 <= '0'; S1 <= '0'; S2 <= '1'; S3 <= '1'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '0'; S2 <= '1'; S3 <= '1'; S4 <= '1';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '0'; S3 <= '0'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '0'; S3 <= '0'; S4 <= '1';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '0'; S3 <= '1'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '0'; S3 <= '1'; S4 <= '1';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '1'; S3 <= '0'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '1'; S3 <= '0'; S4 <= '1';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '1'; S3 <= '1'; S4 <= '0';wait for clockperiod;
      S0 <= '0'; S1 <= '1'; S2 <= '1'; S3 <= '1'; S4 <= '1';wait for clockperiod;
      S0 <= '1'; S1 <= '0'; S2 <= '0'; S3 <= '0'; S4 <= '0';wait for clockperiod;
      end process;

      process(S4, S3, S2, S1, S0)
      begin
       selectors <= S0&S1&S2&S3&S4;
        end process;

       process
       begin

      --The "assert" keyword allows you to test certain 
      --conditions. In other words, the point of assertion is
      --to allow you to inspect what you expect.

      --Two test cases are presented here. Feel free 
      --to add your own cases.

       --TEST 1
         D0 <= '0';
        D1 <= '1';
        D2 <= '0';
        D3 <= '1';
        wait for clockperiod;
        case selectors is
         when "00000" =>
           assert(F => "000") report "Error 1: 00000" severity error;
错误:

**错误:E:\OneDrive\Engineering\Digital Circuit Design\TestBench.vhd(229):VHDL编译器正在退出


错误将我引向这里的最后一行。

如果不显示
Mux_4_至_1
的内容,您将无法深入了解此测试台应该如何运行

断言语句条件有两个错误:

assert(F => "000")
F
被声明为类型std_逻辑,该逻辑不是数组类型,不能与字符串值(其数组类型可由上下文确定)进行比较。此外,关系运算符应该是
=
,而不是
=>
,读作“大于或等于”
=>
是关联中使用的分隔符

更改关系运算符并更改
F
的声明:

signal D0, D1, D2, D3, S0, S1 , S2, S3, S4 :  std_logic; --  , F : std_logic;
signal F:   std_logic_vector (2 downto 0);
生成一个错误,告诉我们
F
不能与
S4
关联,告诉我们您有一个参数列表错误。您没有足够的参数。不为输出提供关联不是错误,这就是为什么以前没有注意到的原因,尽管读者可能会认为您更改了
F
的声明以预先消除该错误

为时钟添加信号声明:

constant clockperiod : time := 20 ns;
signal clock:   std_logic;
以及加入一个协会:

begin
-- mapping: Mux_4_to_1 port map(D0, D1, D2, D3, S0, S1, S2, S3, S4, F );
mapping: 
    Mux_4_to_1 
        port map (
            clock => clock,
            D0 => D0,
            D1 => D1,
            D2 => D2,
            D3 => D3, 
            S0 => S0,
            S1 => S1,
            S2 => S2,
            S3 => S3,
            S4 => S4, 
            F => F
        );
允许您的代码进行分析(通过将找到的代码与其他选择的代码连接到VHDL代码的末尾,您不需要提供分析代码)

注:

  • 时钟
    未显示在更改描述中,如果测试需要,则应由测试台驱动
  • 正式关联显示在端口映射中,用于实例化
    Mux_4_到_1
    ,它允许您查看丢失或错误的正式到实际端口关联
  • 围绕条件的多余括号可能会掩盖错误。只有当它们所包含的表达在没有它们的情况下是合法的,它们才是合法的。它可以更改您看到的错误消息。缺少适当的关系运算符会导致语法错误

  • 为什么您要
    断言true
    ?它是无用的,它永远不会出现。可能是编译器出错的原因吧?
    assert(F=>“000”)
    是一个错误,F是一个标准逻辑对象,没有
    =>
    运算符将其与字符串
    “000”
    作为兼容数组类型的值进行比较。删除多余的括号,您可能会得到更有意义的错误消息。修复程序似乎是针对“0”的关系测试(相等),注意到mux的
    F
    输出端口std_逻辑_向量与其std_逻辑输入端口不一致。那它真的是多路复用器吗?你没有提供一个有效的解决方案。信号
    F
    的声明可能有错误。存在涉及
    F
    的语义错误。它被声明为std_逻辑对象,不能与“000”进行比较。如果看不到
    Mux\u 4\u到\u 1的代码,读者就无法知道
    F
    应该是什么,在它的组件端口声明中,它是一个std\u逻辑向量。将信号
    F
    声明更改为
    信号F:std_逻辑_向量(2降为0)显示了
    映射的参数中存在问题,它缺少
    时钟
    正式关联,缺少输出(
    F
    )不是错误。使用命名关联。添加时钟关联。修复断言条件(例如,
    =
    而不是
    =>
    )。
    begin
    -- mapping: Mux_4_to_1 port map(D0, D1, D2, D3, S0, S1, S2, S3, S4, F );
    mapping: 
        Mux_4_to_1 
            port map (
                clock => clock,
                D0 => D0,
                D1 => D1,
                D2 => D2,
                D3 => D3, 
                S0 => S0,
                S1 => S1,
                S2 => S2,
                S3 => S3,
                S4 => S4, 
                F => F
            );