[Modified] Fix bugs & 29 Functional Test Point PASS

This commit is contained in:
2023-06-26 15:11:31 +08:00
parent 75644e4920
commit 78fe1f6cf5
12 changed files with 91 additions and 86 deletions

View File

@@ -44,9 +44,6 @@ module alu(
wire [31:0] sll_result;
wire [63:0] sr64_result;
wire [31:0] sr_result;
wire [63:0] mul64_result;
wire [63:0] mulu64_result;
wire [31:0] mul_result;
// 32-bit adder
wire [31:0] adder_a;
@@ -77,7 +74,7 @@ module alu(
assign or_result = alu_src1 | alu_src2;
assign nor_result = ~or_result;
assign xor_result = alu_src1 ^ alu_src2;
assign lui_result = {alu_src2[19:0], 12'b0};
assign lui_result = alu_src2;
// SLL result
assign sll_result = alu_src1 << alu_src2[4:0];

View File

@@ -1,7 +1,7 @@
module exe_stage
#(
parameter BR_BUS_WD = 33,
parameter DS_TO_ES_BUS_WD = 206,
parameter DS_TO_ES_BUS_WD = 237,
parameter ES_TO_MS_BUS_WD = 175,
parameter MS_TO_ES_BUS_WD = 38,
parameter WS_TO_ES_BUS_WD = 38
@@ -22,7 +22,7 @@ module exe_stage
output [BR_BUS_WD -1:0] br_bus,
output data_sram_en,
output [ 7:0] data_sram_we,
output [ 3:0] data_sram_we,
output [31:0] data_sram_addr,
output [31:0] data_sram_wdata
);
@@ -71,32 +71,32 @@ module exe_stage
wire data_sram_en_temp;
wire stallreq_for_mul_div;
wire [31:0] mul_div_result;
wire [31:0] mul_div_result; // TODO!!!
wire [31:0] es_result;
wire [31:0] csr_wdata;
wire [63:0] csr_bus;
assign {csr_op ,//205:199
csr_wdata_sel ,//198:198
csr_addr ,//197:184
csr_we ,//183:183
alu_op ,//182:171
mul_div_op ,//170:167
mul_div_sign ,//166:166
branch_op ,//165:157
store_op ,//156:154
load_op ,//153:148
reg_we ,//147:147
src1_is_pc ,//146:146
src2_is_imm ,//145:145
src2_is_4 ,//144:144
rj ,//143:139
rkd ,//138:134
rj_value ,//133:102
rkd_value ,//101:70
dest ,//69 :65
assign {csr_op ,//236:230
csr_wdata_sel ,//229:229
csr_addr ,//228:215
csr_we ,//214:214
alu_op ,//213:202
mul_div_op ,//198:189
mul_div_sign ,//197:197
branch_op ,//196:188
store_op ,//187:185
load_op ,//184:179
reg_we ,//178:178
src1_is_pc ,//177:177
src2_is_imm ,//176:176
src2_is_4 ,//175:175
rj ,//174:170
rkd ,//169:165
rj_value ,//164:133
rkd_value ,//132:101
dest ,//100:96
imm ,//95 :64
es_pc ,//63 :32
inst //31 :0
@@ -176,8 +176,8 @@ module exe_stage
wire csr_cancel;
wire csr_cancel_reg;
assign csr_cancel = 1'b1;
assign csr_cancel_reg = 1'b1; //TODO!
assign csr_cancel = 1'b0;
assign csr_cancel_reg = 1'b0; //TODO!
assign br_bus = {br_taken & ~(csr_cancel|csr_cancel_reg),
br_target
@@ -186,8 +186,8 @@ module exe_stage
lsu u_lsu(
.load_op (load_op ),
.store_op (store_op ),
.rj_value (rj_value ),
.rkd_value (rkd_value ),
.rj_value (src1 ),
.rkd_value (src2 ),
.imm (imm ),
.data_sram_en (data_sram_en_temp),

View File

@@ -1,7 +1,7 @@
module id_stage
#(
parameter FS_TO_DS_BUS_WD = 32,
parameter DS_TO_ES_BUS_WD = 206,
parameter DS_TO_ES_BUS_WD = 237,
parameter WS_TO_RF_BUS_WD = 38
)
(
@@ -12,7 +12,7 @@ module id_stage
input [ 5:0] stall,
input br_taken,
output stallreq_id,
output stallreq_ds,
input pc_valid,
input [31:0] inst_sram_rdata,
@@ -62,12 +62,12 @@ module id_stage
wire [31:0] inst;
wire [31:0] next_inst;
wire rf_raddr1;
wire [ 4:0] rf_raddr1;
wire [31:0] rf_rdata1;
wire rf_raddr2;
wire [ 4:0] rf_raddr2;
wire [31:0] rf_rdata2;
wire rf_we;
wire rf_waddr;
wire [ 4:0] rf_waddr;
wire [31:0] rf_wdata;
wire [31:0] rj_value;
@@ -91,25 +91,25 @@ module id_stage
assign csr_vec_l = 0; //TODO!
assign csr_vec = {csr_vec_h_r, csr_vec_l};
assign ds_to_es_bus = {csr_op ,//205:199
csr_wdata_sel ,//198:198
csr_addr ,//197:184
csr_we ,//183:183
alu_op ,//182:171
mul_div_op & {4{pc_valid_r}} ,//170:167
mul_div_sign & pc_valid_r ,//166:166
branch_op & {9{pc_valid_r}} ,//165:157
store_op & {3{pc_valid_r}} ,//156:154
load_op & {6{pc_valid_r}} ,//153:148
reg_we & pc_valid_r ,//147:147
src1_is_pc ,//146:146
src2_is_imm ,//145:145
src2_is_4 ,//144:144
rj ,//143:139
rkd ,//138:134
rj_value ,//133:102
rkd_value ,//101:70
dest ,//69 :65
assign ds_to_es_bus = {csr_op ,//236:230
csr_wdata_sel ,//229:229
csr_addr ,//228:215
csr_we ,//214:214
alu_op ,//213:202
mul_div_op & {4{pc_valid_r}} ,//198:189
mul_div_sign & pc_valid_r ,//197:197
branch_op & {9{pc_valid_r}} ,//196:188
store_op & {3{pc_valid_r}} ,//187:185
load_op & {6{pc_valid_r}} ,//184:179
reg_we & pc_valid_r ,//178:178
src1_is_pc ,//177:177
src2_is_imm ,//176:176
src2_is_4 ,//175:175
rj ,//174:170
rkd ,//169:165
rj_value ,//164:133
rkd_value ,//132:101
dest ,//100:96
imm ,//95 :64
ds_pc ,//63 :32
inst & {32{pc_valid_r}} //31 :0
@@ -195,7 +195,6 @@ module id_stage
.csr_op (csr_op ),
.csr_addr (csr_addr ),
.csr_wdata_sel (csr_wdata_sel ),
.sel_rf_res (sel_rf_res ),
.reg_we (reg_we )
);
@@ -246,7 +245,7 @@ module id_stage
//ex段为load指令且发生数据相关时id段需要被暂停
assign stallreq_load = ex_is_load & ex_rf_we & ((ex_rf_waddr==rj_value & rj_value!=0)|(ex_rf_waddr==rkd_value & rkd_value!=0));
assign stallreq_csr = ex_is_csr & ex_rf_we & ((ex_rf_waddr==rj_value & rj_value!=0)|(ex_rf_waddr==rkd_value & rkd_value!=0));
assign stallreq_id = stallreq_load | stallreq_csr;
assign stallreq_ds = stallreq_load | stallreq_csr;
endmodule

View File

@@ -1,4 +1,3 @@
`include "tools.v"
module inst_decoder(
input [31:0] inst,
@@ -31,7 +30,7 @@ module inst_decoder(
output csr_wdata_sel,
//output [31:0] csr_vec_l,
output [ 3:0] sel_rf_res,
//output [ 3:0] sel_rf_res,
output reg_we
);
@@ -428,7 +427,7 @@ module inst_decoder(
assign csr_op = {inst_csrrd,
inst_csrwr,
inst_csrxchg,
inst_rdcntid_w,
inst_rdcntid_w,
inst_rdcntvh_w,
inst_rdcntvl_w,
inst_sc_w
@@ -439,8 +438,8 @@ module inst_decoder(
// rf_res from
assign sel_rf_res[0] = inst_jirl | inst_bl;
assign sel_rf_res[1] = |load_op;
assign sel_rf_res[2] = |csr_op;
assign sel_rf_res[3] = |mul_div_op;
// assign sel_rf_res[0] = inst_jirl | inst_bl;
// assign sel_rf_res[1] = |load_op;
// assign sel_rf_res[2] = |csr_op;
// assign sel_rf_res[3] = |mul_div_op;
endmodule

View File

@@ -6,9 +6,9 @@ module lsu(
input [31:0] imm,
output data_sram_en,
output data_sram_we,
output data_sram_addr,
output data_sram_wdata
output [ 3:0] data_sram_we,
output [31:0] data_sram_addr,
output [31:0] data_sram_wdata
);
wire inst_ll_w;
wire inst_ld_b;

View File

@@ -68,7 +68,7 @@ module mem_stage
assign ms_to_es_bus = {reg_we,
dest,
es_result
(|load_op) ? ms_result : es_result
};
assign ms_to_ws_bus = {reg_we ,//101:101

View File

@@ -1,14 +1,14 @@
module mycpu
module mycpu_top
#(
parameter FS_TO_DS_BUS_WD = 32,
parameter DS_TO_ES_BUS_WD = 206,
parameter DS_TO_ES_BUS_WD = 237,
parameter ES_TO_MS_BUS_WD = 175,
parameter MS_TO_WS_BUS_WD = 102,
parameter WS_TO_RF_BUS_WD = 38,
parameter MS_TO_ES_BUS_WD = 32,
parameter WS_TO_ES_BUS_WD = 32,
parameter BR_BUS_WD = 33
parameter MS_TO_ES_BUS_WD = 38,
parameter WS_TO_ES_BUS_WD = 38,
parameter BR_BUS_WD = 33
)
(
@@ -44,11 +44,14 @@ module mycpu
wire [MS_TO_WS_BUS_WD -1:0] ms_to_ws_bus;
wire [WS_TO_RF_BUS_WD -1:0] ws_to_rf_bus;
wire [MS_TO_ES_BUS_WD -1:0] ms_to_es_bus;
wire [WS_TO_ES_BUS_WD -1:0] ws_to_es_bus;
wire [BR_BUS_WD -1:0] br_bus;
wire flush;
wire stallreq_es;
wire stallreq_id;
wire stallreq_ds;
wire [ 5:0] stall;
wire except_en;
wire [31:0] new_pc;
@@ -76,7 +79,7 @@ module mycpu
.flush (flush ),
.stall (stall ),
.br_taken (br_bus[32] ),
.stallreq_id (stallreq_id ),
.stallreq_ds (stallreq_ds ),
.fs_to_ds_bus (fs_to_ds_bus ),
.pc_valid (inst_sram_en ),
.inst_sram_rdata (inst_sram_rdata ),

View File

@@ -56,13 +56,13 @@ module regfile(
end
//READ OUT 1
assign rdata1 = (raddr1==5'b0 ) ? 32'b0 :
(raddr1==waddr) ? wdata :
rf[raddr1];
assign rdata1 = (raddr1==5'b0 ) ? 32'b0 :
(raddr1==waddr) & we ? wdata :
rf[raddr1];
//READ OUT 2
assign rdata2 = (raddr2==5'b0 ) ? 32'b0 :
(raddr2==waddr) ? wdata :
rf[raddr2];
assign rdata2 = (raddr2==5'b0 ) ? 32'b0 :
(raddr2==waddr) & we ? wdata :
rf[raddr2];
endmodule

View File

@@ -1,3 +1,4 @@
`default_nettype wire
module decoder_2_4(
input [ 1:0] in,
output [ 3:0] out

View File

@@ -62,7 +62,7 @@ module wb_stage
assign debug_wb_pc = ws_pc;
assign debug_wb_rf_we = {4{reg_we}};
assign debug_wb_rf_wnum = ms_final_result;
assign debug_wb_rf_wnum = dest;
assign debug_wb_rf_wdata = ms_final_result;
endmodule

View File

@@ -35,7 +35,7 @@ module soc_lite_top
wire [31:0] cpu_data_rdata;
//cpu
mycpu mycpu(
mycpu_top mycpu_top(
.clk (cpu_clk ),
.resetn (cpu_resetn), //low active