Vhdl 1位ALU,其操作取决于进位
我必须为一个任务设计一个1位ALU,然后再利用它来制作4个单元和一个4位ALU 1位ALU有2条选择线和输入A、B和进位 我的问题是选择行和进位标志选择要选择的操作。我只是不知道如何同时使用select lines和CARRE标志来选择操作 例如,选择行“00”,Cin“0”是一个加法运算,而Cin“1”是一个减法运算 我能做我在下面所做的吗?谢谢你的帮助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
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 => ...