如何在portmapping时使用条件赋值

时间:2014-03-14 16:34:51

标签: 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    :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;

2 个答案:

答案 0 :(得分:1)

您能告诉我们您收到的错误消息或输出吗?根据你所说的,看起来你正试图使用​​&#34; ADD_SUB&#34;在你的端口切换加法和减法。

另外值得注意的是:你想要你的设计是时钟吗?现在,看起来你的时钟没有进入你的端口。如果您想同步更新显示器,则需要使用以下内容添加时钟:

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

答案 1 :(得分:0)

您是否画了硬件图片?您需要在加法器和减法器的输出上使用多路复用器,但可以将A,B,CIN连接到加法器和减法器。

请务必注意您的类型。如果你正在使用std_ulogic,那么到处使用它而不是输入bit。