Vhdl 1位ALU,其操作取决于进位

Vhdl 1位ALU,其操作取决于进位,vhdl,alu,Vhdl,Alu,我必须为一个任务设计一个1位ALU,然后再利用它来制作4个单元和一个4位ALU 1位ALU有2条选择线和输入A、B和进位 我的问题是选择行和进位标志选择要选择的操作。我只是不知道如何同时使用select lines和CARRE标志来选择操作 例如,选择行“00”,Cin“0”是一个加法运算,而Cin“1”是一个减法运算 我能做我在下面所做的吗?谢谢你的帮助 entity ALU1Bit is port( A: IN std_logic_vector; B: IN std_lo

我必须为一个任务设计一个1位ALU,然后再利用它来制作4个单元和一个4位ALU

1位ALU有2条选择线和输入A、B和进位

我的问题是选择行和进位标志选择要选择的操作。我只是不知道如何同时使用select lines和CARRE标志来选择操作

例如,选择行“00”,Cin“0”是一个加法运算,而Cin“1”是一个减法运算

我能做我在下面所做的吗?谢谢你的帮助

entity ALU1Bit is
port(
    A:  IN std_logic_vector;
    B:  IN std_logic; 
    carryIn:      IN std_logic;                                  
    operation: IN std_logic_vector(1 downto 0); 

    F:   OUT std_logic;
    carryOut: OUT std_logic
    );
end ALU1Bit;

architecture Behavioral of ALU1Bit is

component Adder1Bit
port(
    carryIn:  IN std_logic;
    A: IN std_logic;
    B: IN std_logic;

    output:  OUT std_logic;
    F: OUT std_logic
    );
end component;

begin
carryIn <= '0';
    case operation is
        when...
carryIn <= '1';
    case operation is
        when...

end Behavioral;
实体ALU1Bit是
港口(
A:标准逻辑向量;
B:标准逻辑;
carryIn:标准逻辑;
操作:标准逻辑向量(1到0);
F:输出标准逻辑;
执行:输出标准逻辑
);
结束1比特;
ALU1Bit的架构行为是
元件加法器1位
港口(
carryIn:标准逻辑;
答:标准逻辑;
B:标准逻辑;
输出:输出标准逻辑;
F:输出标准逻辑
);
端部元件;
开始

carryIn看起来您缺少的是可以有嵌套的case语句。您的代码:

carryIn <= '0';
    case operation is
        when...
carryIn <= '1';
    case operation is
        when...
看起来您可能有重叠的案例,也就是说,在这个结构中有两个或多个案例实际上做相同的事情。这是不好的,因为每次您需要更改在这些情况下发生的事情时,您必须更改它们两次,这很容易出错

在这种情况下,您可以有一个与上面类似的case语句,它使用枚举类型简单地分配操作模式,例如:

type ALU_OP_type is (ADD, SUBTRACT, ...);
signal aluOp : ALU_OP_type;
然后在您的过程中:

    case carryIn is
        when '0' =>
            case operation is
                when "00" => aluOp <= ADD;
                when "01" => aluOp <= SUBTRACT;

然后,您的代码被很好地分为“确定我们要做什么”和“做点什么”。如果没有重复的进位/操作组合,那么这可能不值得努力。

否。首先,分配到输入端口是一个错误。
    case carryIn is
        when '0' =>
            case operation is
                when "00" => aluOp <= ADD;
                when "01" => aluOp <= SUBTRACT;
    case aluOp is
        when ADD => ...
        when SUBTRACT => ...