本实验要求设计一个具有8种运算功能的32位ALU,并能够产生运算结果的表示:结果为零标志ZF(Zero Flag)、进借位标志位CF()溢出标志OF(Overflow Flag)、符号位标志SF(Sign Flag)和奇偶标志PF(Parity Flag),标志位值解释见代码。ALU通过4根控制线ALU_OP[2:0]来选择其8种功能,功能见表所示,多余的8位用于后继运算的拓展备用。
图中ALU_OP应该是三位,忽略最左侧的0
程序代码
module ALU(
input [31:0]A,
input [31:0]B,
output reg [31:0]F,
output reg ZF,
output reg OF,
output reg SF,//符号标志
output reg PF,//奇偶标志
output reg CF,//进位/借位标志
input [2:0]ALU_OP
);
always @(*)
begin
OF=0;
CF=0;
case(ALU_OP)
3'b000://按位与
begin
F=A&B;
end
3'b001:F=A|B;//按位或
3'b010:F=A^B;//按位异或
3'b011://按位或非
begin
F=A|B;
F=~F;
end
3'b100://算术加
begin
{CF,F}=A+B;
OF=F[31]^CF;