vhdl和返回未知值的门

vhdl和返回未知值的门,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

我正在实现一个多路复用器,但和门返回“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 : 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多路复用器之间共享。谢谢,它起作用了谢谢,它起作用了