简单VHDL组件中的端口方向不匹配

时间:2018-04-11 14:25:36

标签: vhdl quartus

我使用Quartus II在VHDL中实现MIPS处理器,我的一个组件导致了一个让我感到困惑的错误。

我有以下组件:

SomeClass x = (SomeClass) Assert.that(x, isNotNull)

我遇到了library ieee; use ieee.std_logic_1164.all; entity HazardDetectionUnit is port( --Datapath inputs IFIDrt : in std_logic_vector(4 downto 0); IDEXrt : in std_logic_vector(4 downto 0); IFIDrs : in std_logic_vector(4 downto 0); --Controlpath inputs IDEXMemRead : in std_logic; PCWrite : out std_logic; IFIDWrite : out std_logic; IDEXFlush : out std_logic); end HazardDetectionUnit; architecture structural of HazardDetectionUnit is signal same1 : std_logic; signal same2 : std_logic; signal NZ1 : std_logic; signal stall : std_logic; component comp5 port( a : in std_logic_vector(4 downto 0); b : in std_logic_vector(4 downto 0); comp_output : out std_logic); end component; component zerocomp5 port ( a : in std_logic_vector(4 downto 0); zero : out std_logic); end component; begin --Port Map comparator1 : comp5 port map(IFIDrt, IDEXrt, same1); comparator2 : comp5 port map(IDEXrt, IFIDrs, same2); nonzero1 : zerocomp5 port map(IDEXrt, NZ1); --Concurrent Signal Assignment stall <= NZ1 and IDEXMemRead and (same1 or same2); --Output Driver PCWrite <= not(stall); IFIDWrite <= not(stall); IDEXFlush <= stall; end structural; 组件的问题。我得到的错误是comp5

子组件Error (12012): Port direction mismatch for entity "MIPS_PROCESSOR:inst|HazardDetectionUnit:inst22|comp5:comparator1" at port "comp_output". Upper entity is expecting "Input" pin while lower entity is using "Output" pin. 是一个5位相等比较器,如下所示:

comp5

这怎么可能? library ieee; use ieee.std_logic_1164.all; entity comp5 is port( a : in std_logic_vector(4 downto 0); b : in std_logic_vector(4 downto 0); comp_output : out std_logic ); end comp5; architecture structural of comp5 is signal xor_out : std_logic_vector(4 downto 0); component nxor2_5bit port( a : in std_logic_vector(4 downto 0); b : in std_logic_vector(4 downto 0); o : out std_logic_vector(4 downto 0)); end component; begin --Port Map xor_gate : nxor2_5bit port map(a, b, xor_out); --Output Driver comp_output <= xor_out(4) and xor_out(3) and xor_out(2) and xor_out(1) and xor_out(0); end structural; 组件明确定义为具有两个5位输入comp5a,以及一个一位输出b。那么为什么编译器坚持认为comp_output实际上是一个输入?

我试图通过实现comp_output作为框图来调试问题,但是我得到了同样的错误。

我不明白。 HazardDetectionUnit只是一个简单的双输入,单输出逻辑单元。我以前从来没有这样的错误,我找不到任何关于类似错误的帖子。有人能提供建议吗?

编辑:为了完整性,这里是comp5组件:

nxor2_5bit

0 个答案:

没有答案