VHDL中的多路复用器8x1

时间:2019-06-14 13:03:16

标签: vhdl

我尝试在EDA运动场平台中为8x1多路复用器编写的代码出现了问题。向我显示一个错误,我搜索了它,发现它来自Verilog语言,但我不明白为什么?我一次又一次检查我的代码,我没有发现任何错误。请从下面的链接中查看代码以运行它,并帮助我解决问题,而且我了解为什么我会看到该错误

https://www.edaplayground.com/x/2T3x

2 个答案:

答案 0 :(得分:0)

您需要将测试台重命名为与模块不同的名称。

将其命名为“ multiplexer_test”。

即以下几行

testbench.vhd

ENTITY multiplexer IS
END multiplexer;

ARCHITECTURE behavior OF multiplexer IS

ENTITY multiplexer_test IS
END multiplexer_test;

ARCHITECTURE behavior OF multiplexer_test IS

而且您还需要将顶部实体更改为multiplexer_test而不是testbench

top module

或者,如果您只是将测试平台模块从multiplexer重命名为testbench,则无需执行第二步

答案 1 :(得分:-1)

感谢您的帮助。我的代码现在可以运行

-- Code your design here
library IEEE;
use IEEE.std_logic_1164.all;

--declaration for 8x1
entity mux8x1 is   
    port( I : in std_logic_vector(7 downto 0); -- input that need 8x1
           s: in std_logic_vector(2 downto 0); --is the enable
           Y: out std_logic -- output of 8x1 is the output
    );
end mux8x1;

architecture behavioral of mux8x1 is
    signal f0,f1,f2,f3 : std_logic;
begin
    process(I,S)
    begin
        if s(0)='0' then 
            f0<=I(7);
            f1<=I(5);
            f2<=I(3);
            f3<=I(1);
        else 
            f0<=I(6);
            f1<=I(4);
            f2<=I(2);
            f3<=I(0);
        end if;

        if (s(1)='0' and s(0)='0')then
            Y<=f0;
            if (s(1)='0' and s(0)='1')then
                Y<=f1;
                if (s(1)='1' and s(0)='0')then
                    Y<=f2;
                    if (s(1)='1' and s(0)='1')then
                        Y<=f3;
                    end if;
                end if;
            end if;
        end if;
    end process;
end behavioral;