1
0
mirror of https://github.com/olofk/serv.git synced 2026-01-17 00:22:26 +00:00

Simplify alu_cmp_eq control logic

This commit is contained in:
Olof Kindgren 2019-07-13 21:13:52 +02:00
parent af3b82f9ac
commit 31852f175d
4 changed files with 9 additions and 27 deletions

View File

@ -11,7 +11,7 @@ module serv_alu
input wire i_cnt_done,
input wire i_sub,
input wire [1:0] i_bool_op,
input wire i_cmp_sel,
input wire i_cmp_eq,
input wire i_cmp_uns,
output wire o_cmp,
input wire i_shamt_en,
@ -98,7 +98,7 @@ module serv_alu
.o_q (result_lt));
assign plus_1 = i_en & !en_r;
assign o_cmp = (i_cmp_sel == ALU_CMP_EQ) ? result_eq : result_lt;
assign o_cmp = i_cmp_eq ? result_eq : result_lt;
localparam [15:0] BOOL_LUT = 16'h8E96;//And, Or, =, xor
wire result_bool = BOOL_LUT[{i_bool_op, i_rs1, i_op_b}];

View File

@ -33,7 +33,7 @@ module serv_decode
output wire o_alu_init,
output wire o_alu_sub,
output wire [1:0] o_alu_bool_op,
output reg o_alu_cmp_sel,
output wire o_alu_cmp_eq,
output reg o_alu_cmp_uns,
input wire i_alu_cmp,
output wire o_alu_shamt_en,
@ -161,14 +161,10 @@ module serv_decode
assign o_csr_mcause_en = csr_en & op21 & !op20;
always @(o_funct3, o_rf_rs1_addr, o_ctrl_trap, o_ctrl_mret) begin
casez (o_funct3)
3'b00? : o_alu_cmp_sel = ALU_CMP_EQ;
3'b01? : o_alu_cmp_sel = ALU_CMP_LT;
3'b1?? : o_alu_cmp_sel = ALU_CMP_LT;
default : o_alu_cmp_sel = 1'bx;
endcase
assign o_alu_cmp_eq = o_funct3[2:1] == 2'b00;
always @(o_funct3, o_rf_rs1_addr, o_ctrl_trap, o_ctrl_mret) begin
casez (o_funct3)
3'b00? : o_alu_cmp_uns = 1'b0;
3'b010 : o_alu_cmp_uns = 1'b0;

View File

@ -8,20 +8,6 @@ localparam[1:0]
ALU_RESULT_LT = 2'd2,
ALU_RESULT_BOOL = 2'd3;
localparam [0:0]
ALU_CMP_LT = 1'b0,
ALU_CMP_EQ = 1'b1;
/*
source
ADD, SUB
SL,SR
SLT
XOR,
OR
AND
*/
localparam [1:0]
CSR_SOURCE_CSR = 2'b00,
CSR_SOURCE_EXT = 2'b01,

View File

@ -85,7 +85,7 @@ module serv_top
wire alu_init;
wire alu_sub;
wire [1:0] alu_bool_op;
wire alu_cmp_sel;
wire alu_cmp_eq;
wire alu_cmp_uns;
wire alu_cmp;
wire alu_shamt_en;
@ -161,7 +161,7 @@ module serv_top
.o_alu_init (alu_init),
.o_alu_sub (alu_sub),
.o_alu_bool_op (alu_bool_op),
.o_alu_cmp_sel (alu_cmp_sel),
.o_alu_cmp_eq (alu_cmp_eq),
.o_alu_cmp_uns (alu_cmp_uns),
.i_alu_cmp (alu_cmp),
.o_alu_shamt_en (alu_shamt_en),
@ -260,7 +260,7 @@ module serv_top
.i_cnt_done (cnt_done),
.i_sub (alu_sub),
.i_bool_op (alu_bool_op),
.i_cmp_sel (alu_cmp_sel),
.i_cmp_eq (alu_cmp_eq),
.i_cmp_uns (alu_cmp_uns),
.o_cmp (alu_cmp),
.i_shamt_en (alu_shamt_en),