Vector 在VHDL测试台中将STD_逻辑连接到STD_逻辑向量
这是我的4到1多路复用器的简单示意图。我很难将逻辑连接到逻辑向量 这是我的测试台代码。我只想展示所有可能输入的MUX性能。它编译得很好,但并不像我预期的那样工作。 我猜新声明的向量“X”和“I”与原理图的实际输入没有联系Vector 在VHDL测试台中将STD_逻辑连接到STD_逻辑向量,vector,logic,vhdl,Vector,Logic,Vhdl,这是我的4到1多路复用器的简单示意图。我很难将逻辑连接到逻辑向量 这是我的测试台代码。我只想展示所有可能输入的MUX性能。它编译得很好,但并不像我预期的那样工作。 我猜新声明的向量“X”和“I”与原理图的实际输入没有联系 LIBRARY ieee; USE ieee.std_logic_1164.ALL; use ieee.std_logic_unsigned.all; USE ieee.numeric_std.ALL; LIBRARY UNISIM; USE UNISIM.Vcomponent
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
use ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY MUX_SCHE_MUX_SCHE_sch_tb IS
END MUX_SCHE_MUX_SCHE_sch_tb;
ARCHITECTURE behavioral OF MUX_SCHE_MUX_SCHE_sch_tb IS
COMPONENT MUX_SCHE
PORT( X3 : IN STD_LOGIC;
X2 : IN STD_LOGIC;
X1 : IN STD_LOGIC;
X0 : IN STD_LOGIC;
I0 : IN STD_LOGIC;
I1 : IN STD_LOGIC;
Y : OUT STD_LOGIC);
END COMPONENT;
SIGNAL X3 : STD_LOGIC := '0';
SIGNAL X2 : STD_LOGIC := '0';
SIGNAL X1 : STD_LOGIC := '0';
SIGNAL X0 : STD_LOGIC := '0';
SIGNAL I0 : STD_LOGIC := '0';
SIGNAL I1 : STD_LOGIC := '0';
SIGNAL Y : STD_LOGIC;
---------- New Variable ----------
SIGNAL X : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL I : STD_LOGIC_VECTOR(1 downto 0);
SIGNAL j : integer := 0;
SIGNAL k : integer := 0;
BEGIN
X <= X3 & X2 & X1 & X0;
I <= I1 & I0;
UUT: MUX_SCHE PORT MAP(
X3 => X3,
X2 => X2,
X1 => X1,
X0 => X0,
I0 => I0,
I1 => I1,
Y => Y
);
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
X <= "0000";
I <= "00";
while(j<4) loop
while(k<8) loop
X <= X + '1'; WAIT FOR 10 NS;
end loop;
I <= I + '1'; WAIT FOR 10 NS;
end loop;
END PROCESS;
-- *** End Test Bench - User Defined Section ***
END;
ieee库;
使用ieee.std_logic_1164.ALL;
使用ieee.std_logic_unsigned.all;
使用ieee.numeric_std.ALL;
UNISIM图书馆;
使用UNISIM.Vcomponents.ALL;
实体MUX_SCHE_MUX_SCHE_sch_tb是
结束MUX_SCHE_MUX_SCHE_sch_tb;
MUX_SCHE_MUX_SCHE_sch_tb的架构行为是
组件多路复用器
端口(X3:标准_逻辑中;
X2:标准逻辑中;
X1:标准逻辑中;
X0:在标准逻辑中;
I0:标准逻辑中;
I1:标准逻辑中;
Y:输出标准(U逻辑);
端部元件;
信号X3:STD_逻辑:='0';
信号X2:STD_逻辑:='0';
信号X1:STD_逻辑:='0';
信号X0:STD_逻辑:='0';
信号I0:STD_逻辑:='0';
信号I1:STD_逻辑:='0';
信号Y:STD_逻辑;
----------新变量----------
信号X:STD_逻辑_向量(3到0);
信号I:标准逻辑向量(1到0);
信号j:整数:=0;
信号k:整数:=0;
开始
X X2,
X1=>X1,
X0=>X0,
I0=>I0,
I1=>I1,
Y=>Y
);
--***试验台-用户定义部分***
tb:过程
开始
在你的代码中有两个问题:第一,X,因为Brian指出给X(和I)的赋值是不正确的
还有一种情况是,X始终都是“X”,有两个驱动程序。对X的并发信号分配和未标记进程中的分配。此外,未标记的进程将无法成功初始化X,因为在第一次分配到“0000”和内部while循环中的第一次分配之间没有进程的中断
您还可以注意到,没有为j和k赋值,这意味着您永远无法完成内部while循环,并提供不同的I值
克服当前测试台中的问题还包括简化:
library ieee;
use ieee.std_logic_1164.all;
entity mux_sche_tb is
end entity mux_sche_tb;
architecture foo of mux_sche_tb is
use ieee.numeric_std.all;
component mux_sche
port (
x3: in std_logic;
x2: in std_logic;
x1: in std_logic;
x0: in std_logic;
i0: in std_logic;
i1: in std_logic;
y: out std_logic
);
end component;
-- signal x3: std_logic := '0';
-- signal x2: std_logic := '0';
-- signal x1: std_logic := '0';
-- signal x0: std_logic := '0';
-- signal i0: std_logic := '0';
-- signal i1: std_logic := '0';
signal y: std_logic;
-- ---------- new variable ----------
signal x: unsigned(3 downto 0);
signal i: unsigned(1 downto 0);
-- signal j: integer := 0;
-- signal k: integer := 0;
begin
-- x <= x3 & x2 & x1 & x0;
-- i <= i1 & i0;
uut:
mux_sche
port map (
x3 => x(3),
x2 => x(2),
x1 => x(1),
x0 => x(0),
i0 => i(0),
i1 => i(1),
y => y
);
tb:
process
begin
-- x <= "0000";
-- i <= "00";
wait for 10 ns; -- show initial state
for j in 0 to 3 loop
I <= to_unsigned(j, 2);
for k in 0 to 15 loop
X <= to_unsigned(k, 4);
wait for 10 ns;
end loop;
end loop;
wait;
-- while(j < 4) loop
-- while(k < 8) loop
-- x <= x + '1';
-- wait for 10 ns;
-- end loop;
-- i <= i + '1';
-- wait for 10 ns;
-- end loop;
end process;
end architecture;
ieee库;
使用ieee.std_logic_1164.all;
实体mux_sche_tb是
终端实体mux_sche_tb;
mux_sche_tb的体系结构foo是
使用ieee.numeric_std.all;
组件多路复用器
港口(
x3:标准逻辑中;
x2:标准逻辑中;
x1:标准逻辑中;
x0:在标准逻辑中;
i0:标准逻辑中;
i1:标准逻辑中;
y:输出标准逻辑
);
端部元件;
--信号x3:std_逻辑:='0';
--信号x2:std_逻辑:='0';
--信号x1:std_逻辑:='0';
--信号x0:std_逻辑:='0';
--信号i0:std_逻辑:='0';
--信号i1:std_逻辑:='0';
信号y:std_逻辑;
---------新变量----------
信号x:无符号(3到0);
信号i:无符号(1到0);
--信号j:整数:=0;
--信号k:整数:=0;
开始
--x(2),,
x1=>x(1),
x0=>x(0),
i0=>i(0),
i1=>i(1),
y=>y
);
结核病:
过程
开始
--x您对x和I的分配似乎是错误的,使DUT端口没有值。只需删除信号X3等,并将端口映射为X=>X(3),
etc。
library ieee;
use ieee.std_logic_1164.all;
entity mux_sche is
port (
X3: in std_logic;
X2: in std_logic;
X1: in std_logic;
X0: in std_logic;
I0: in std_logic;
I1: in std_logic;
Y: out std_logic
);
end entity;
architecture foo of mux_sche is
begin
process (X3, X2, X1, X0, I0, I1)
variable I: std_logic_vector (1 downto 0);
begin
I := TO_X01(I1 & I0);
case I is
when "00" =>
Y <= TO_X01(X0);
when "01" =>
Y <= TO_X01(X1);
when "10" =>
Y <= TO_X01(X2);
when "11" =>
Y <= TO_X01(X3);
when others =>
Y <= 'X';
end case;
end process;
end architecture;