@@ -64,7 +64,7 @@ module alu (clk, rsa, rsb, imm, alu_op, alu_result, stat, stat_en);
6464 reg [31 :0 ] imm_ext;
6565 reg [31 :0 ] alu_result;
6666 wire [3 :0 ] funct;
67- wire stat_en;
67+ wire stat_en, fsb ;
6868 reg t;
6969 integer i;
7070
@@ -99,7 +99,7 @@ module alu (clk, rsa, rsb, imm, alu_op, alu_result, stat, stat_en);
9999 always @ (rsa, rsb, funct)
100100 case (funct[1 :0 ])
101101 2'b00 : log_out <= ~ rsa;
102- 2'b01 : log_out <= rsa | rsb;
102+ 2'b01 : log_out <= rsa | rsb;
103103 2'b10 : log_out <= rsa & rsb;
104104 2'b11 : log_out <= rsa ^ rsb;
105105 endcase
@@ -155,10 +155,13 @@ module alu (clk, rsa, rsb, imm, alu_op, alu_result, stat, stat_en);
155155 // status code generation
156156 // 3 = Carry; 2 = oVerflow; 1 = Negative; 0 = Zero
157157 // Assume signed operands
158- assign stat[3 ] = (add_out[32 ] == 1'b1 ) ? 1'b1 : 1'b0 ;
159- assign stat[2 ] = (! (rsa[31 ] ^ rsb[31 ] ^ sub) && (rsb[31 ] ^ add_out[31 ]));
160- assign stat[1 ] = ((! (rsa[31 ] ^ rsb[31 ] ^ sub) && (rsb[31 ] ^ add_out[31 ])) ^ (add_out[31 ] == 1'b1 )) ? 1'b1 : 1'b0 ;
161- assign stat[0 ] = (add_out[31 :0 ] == 32'H00000000 ) ? 1'b1 : 1'b0 ;
158+
159+ assign fsb = (funct == sub) ? 1'b1 : 1'b0 ;
160+
161+ assign stat[3 ] = add_out[32 ];
162+ assign stat[2 ] = (~ (fsb ^ rsa[31 ] ^ rsb[31 ])) & (fsb ^ rsb[31 ] ^ add_out[31 ]);
163+ assign stat[1 ] = alu_out[31 ];
164+ assign stat[0 ] = ~| alu_out[31 :0 ];
162165
163166 // status register enable
164167 assign stat_en = ((funct == add) || (funct == sub)) && (alu_op[1 ] == 1'b0 ) ? 1'b1 : 1'b0 ;
0 commit comments