vhdl和返回未知值的门
我正在实现一个多路复用器,但和门返回“x”没有任何原因,请帮助。 正如你们在截图中看到的,结果从“1”变成了“x”。 我为and-gate做了一个测试台,它自己工作得很好。 它应该是一个3位4:1多路复用器。 这是源代码,我使用的是ghdlvhdl和返回未知值的门,vhdl,ghdl,gtkwave,Vhdl,Ghdl,Gtkwave,我正在实现一个多路复用器,但和门返回“x”没有任何原因,请帮助。 正如你们在截图中看到的,结果从“1”变成了“x”。 我为and-gate做了一个测试台,它自己工作得很好。 它应该是一个3位4:1多路复用器。 这是源代码,我使用的是ghdl LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; ENTITY mux41 IS PORT ( i1 : IN std_logic_vector(2 DOWNTO 0); i2
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY mux41 IS
PORT (
i1 : IN std_logic_vector(2 DOWNTO 0);
i2 : IN std_logic_vector(2 DOWNTO 0);
i3 : IN std_logic_vector(2 DOWNTO 0);
i4 : IN std_logic_vector(2 DOWNTO 0);
sel : IN std_logic_vector(1 DOWNTO 0);
y : OUT std_logic_vector(2 DOWNTO 0)
);
END mux41;
ARCHITECTURE rtl OF mux41 IS
COMPONENT andgate
PORT (
input1 : IN std_logic;
input2 : IN std_logic;
input3 : IN std_logic;
and_output : OUT std_logic
);
END COMPONENT;
COMPONENT orgate
PORT (
input1 : IN std_logic;
input2 : IN std_logic;
input3 : IN std_logic;
input4 : IN std_logic;
or_output : OUT std_logic
);
END COMPONENT;
signal not_sel : std_logic_vector(1 DOWNTO 0);
signal and_result : std_logic_vector(3 DOWNTO 0);
signal or_result : std_logic_vector(2 DOWNTO 0);
BEGIN
not_sel <= not sel;
and_gate_assignment : for i in 0 to 2 generate
and_output1: andgate port map(input1=>i1(i), input2=>not_sel(1), input3=>not_sel(0), and_output=>and_result(0));
and_output2: andgate port map(input1=>i2(i), input2=>not_sel(1), input3=>sel(0), and_output=>and_result(1));
and_output3: andgate port map(input1=>i3(i), input2=>sel(1), input3=>not_sel(0), and_output=>and_result(2));
and_output4: andgate port map(input1=>i4(i), input2=>sel(1), input3=>sel(0), and_output=>and_result(3));
or_output: orgate port map(input1=>and_result(0), input2=>and_result(1), input3=>and_result(2), input4=>and_result(3), or_output=>or_result(i));
end generate and_gate_assignment;
y <= or_result;
END rtl;
IEEE库;
使用IEEE.std_logic_1164.ALL;
实体mux41是
港口(
i1:标准逻辑向量(2到0);
i2:标准逻辑向量(2到0);
i3:标准逻辑向量(2到0);
i4:标准逻辑向量(2到0);
sel:标准逻辑向量(1到0);
y:输出标准逻辑向量(2到0)
);
末端mux41;
mux41的rtl体系结构是
组件和门
港口(
输入1:在标准逻辑中;
输入2:标准逻辑中;
输入3:标准逻辑中;
and_输出:输出标准_逻辑
);
端部元件;
成分组织
港口(
输入1:在标准逻辑中;
输入2:标准逻辑中;
输入3:标准逻辑中;
输入4:标准逻辑中;
or_输出:输出标准_逻辑
);
端部元件;
信号非选择:标准逻辑向量(1到0);
信号和结果:标准逻辑向量(3到0);
信号或结果:标准逻辑向量(2到0);
开始
not_sel i1(i)、input2=>not_sel(1)、input3=>not_sel(0)和_output=>and_result(0));
和_output2:andgate端口映射(input1=>i2(i),input2=>not_sel(1),input3=>sel(0),以及_output=>and_result(1));
和_output3:andgate端口映射(input1=>i3(i),input2=>sel(1),input3=>not_sel(0),以及_output=>and_result(2));
和_output4:andgate端口映射(input1=>i4(i)、input2=>sel(1)、input3=>sel(0)和_output=>and_结果(3));
或_输出:组织端口映射(输入1=>和_结果(0),输入2=>和_结果(1),输入3=>和_结果(2),输入4=>和_结果(3),或_输出=>或_结果(i));
结束生成和门分配;
y添加orgate的实体和架构
use ieee.std_logic_1164.all;
entity orgate is
port (
input1: in std_logic;
input2: in std_logic;
input3: in std_logic;
input4: in std_logic;
or_output: out std_logic
);
end entity;
architecture foo of orgate is
begin
or_output <= input1 or input2 or input3 or input4;
end architecture;
使用ieee.std_logic_1164.all;
实体组织是
港口(
输入1:在标准逻辑中;
输入2:标准逻辑中;
输入3:标准逻辑中;
输入4:标准逻辑中;
or_输出:输出标准_逻辑
);
终端实体;
orgate的架构是
开始
或_输出i1,
i2=>i2,
i3=>i3,
i4=>i4,
sel=>sel,
y=>y
);
刺激:
过程
开始
对于0到7循环中的i
i1添加orgate的实体和架构
use ieee.std_logic_1164.all;
entity orgate is
port (
input1: in std_logic;
input2: in std_logic;
input3: in std_logic;
input4: in std_logic;
or_output: out std_logic
);
end entity;
architecture foo of orgate is
begin
or_output <= input1 or input2 or input3 or input4;
end architecture;
使用ieee.std_logic_1164.all;
实体组织是
港口(
输入1:在标准逻辑中;
输入2:标准逻辑中;
输入3:标准逻辑中;
输入4:标准逻辑中;
or_输出:输出标准_逻辑
);
终端实体;
orgate的架构是
开始
或_输出i1,
i2=>i2,
i3=>i3,
i4=>i4,
sel=>sel,
y=>y
);
刺激:
过程
开始
对于0到7循环中的i
i1这可能是一个时间问题吗?不。请提供一个答案,如果没有orgate和测试台,您的读者无法复制您的问题。generate语句表示一个或多个块语句。您已经将这些块的一些输出绑定在一起。和_result
的声明应该从架构块声明项移到和_gate_赋值生成语句块声明区域(在该区域中,您需要以下开始
将声明与生成语句部分分开)。原因可能隐藏在您尚未显示的测试台中。不,问题出现在MUX41中,其中三个生成块中的各种与门通过使用和_result
的公共声明将其输出绑定在一起。修复方法是将声明移动到每个生成的块的块声明区域中,以便在三个1位4:1多路复用器之间不共享andgates和orgate之间的连接。这可能是一个计时问题吗?不。请提供一个答案,如果没有orgate和测试台,您的读者无法复制您的问题。generate语句表示一个或多个块语句。您已经将这些块的一些输出绑定在一起。和_result
的声明应该从架构块声明项移到和_gate_赋值生成语句块声明区域(在该区域中,您需要以下开始
将声明与生成语句部分分开)。原因可能隐藏在您尚未显示的测试台中。不,问题出现在MUX41中,其中三个生成块中的各种与门通过使用和_result
的公共声明将其输出绑定在一起。修复方法是将声明移动到每个生成的块的块声明区域中,这样andgates和orgate之间的连接就不会在三个1位4:1多路复用器之间共享。谢谢,它起作用了谢谢,它起作用了