VHDL多路复用器测试台错误
我是vhdl新手,尝试用5条选择行制作多路复用器测试台,但它给了我错误(代码很长,所以我只是复制了包含错误的部分) 守则: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
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
);