Components 端口映射时如何使用条件赋值

Components 端口映射时如何使用条件赋值,components,vhdl,Components,Vhdl,我试图创建一个非常简单的计算器,使用加法器和减法器作为组件。我希望结果显示在七段显示器上。问题是我不知道如何使用add_sub选择加法或减法 LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY CONVERTOR IS PORT ( A,B :IN BIT; CIN,ADD_SUB :IN BIT; cout,carryborrow

我试图创建一个非常简单的计算器,使用加法器和减法器作为组件。我希望结果显示在七段显示器上。问题是我不知道如何使用add_sub选择加法或减法

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY CONVERTOR IS 
PORT (  
            A,B             :IN BIT;
            CIN,ADD_SUB     :IN BIT;
            cout,carryborrow    :OUT BIT
        );  

END CONVERTOR;

ARCHITECTURE CONVERTOR_ARCH OF CONVERTOR IS

COMPONENT SUBTRACTOR_ASSIGNMENT IS 
PORT (  
            A1,B1   :IN STD_LOGIC;
            CIN1    :IN STD_LOGIC;
            diff1,borrow1   :OUT STD_LOGIC
                    );  
END COMPONENT;

COMPONENT ADDER_ASSIGNMENT IS 
PORT (  
            A2,B2           :IN STD_LOGIC;
            CIN2            :IN STD_LOGIC;
            sum_2,cout2     :OUT STD_LOGIC

      );
END COMPONENT;

SIGNAL E,F,G,H,P,Q,R,S: STD_LOGIC;

BEGIN 
        E <= A   WHEN add_sub = '1' ELSE '0';
        F <= B   WHEN add_sub = '1' ELSE '0';
        G <= CIN WHEN add_sub = '1' ELSE '0'; 


        H <= A   WHEN add_sub = '0' ELSE '0'; 
        I <= B   WHEN add_sub = '0' ELSE '0';
        J <= CIN WHEN add_sub = '0' ELSE '0'; 

        AD1: SUBTRACTOR_ASSIGNMENT PORT MAP(E,F,G,cout,carryborrow);
        AD2: SUBTRACTOR_ASSIGNMENT PORT MAP(E,F,G,cout,carryborrow);
        AD3: SUBTRACTOR_ASSIGNMENT PORT MAP(E,F,G,cout,carryborrow);
        AD4: SUBTRACTOR_ASSIGNMENT PORT MAP(E,F,G,cout,carryborrow);




        SB1: ADDER_ASSIGNMENT PORT MAP(H,I,J,cout,carryborrow);
        SB1: ADDER_ASSIGNMENT PORT MAP(H,I,J,cout,carryborrow);
        SB1: ADDER_ASSIGNMENT PORT MAP(H,I,J,cout,carryborrow);
        SB1: ADDER_ASSIGNMENT PORT MAP(H,I,J,cout,carryborrow);




END CONVERTOR_ARCH;
ieee库;
使用ieee.std_logic_1164.all;
实体转换器是
港口(
A、 B:比特;
CIN,在位中添加_SUB:;
库特,卡利波罗:出了一点
);  
端部转换器;
转换器的架构是
分量减法器_赋值为
港口(
A1,B1:标准逻辑中;
CIN1:标准逻辑中;
diff1,借用1:输出标准逻辑
);  
端部元件;
元件加法器_赋值为
港口(
A2,B2:标准逻辑中;
CIN2:标准逻辑中;
求和2,cout2:输出标准逻辑
);
端部元件;
信号E、F、G、H、P、Q、R、S:STD_逻辑;
开始

你画了硬件的图片吗?加法器和减法器的输出需要多路复用器,但可以将A、B、CIN连接到加法器和减法器


一定要注意你的类型。如果您使用的是std_ulogic,则在任何地方都使用它,而不是键入bit。

您能告诉我们您收到的错误消息或输出吗?根据您所说的,看起来您正在尝试在端口中使用“ADD_SUB”在加法和减法之间切换

同样值得一提的是:你希望你的设计被计时吗?现在,看起来你的端口没有时钟。如果要同步更新显示,则需要使用以下方法添加时钟:

if (rising_edge(my_clock)) then
     -- make the magic happen
end if;