Move declarations to top of Verilog file to fix fpga compile issues.
This commit is contained in:
parent
5fce5b0a26
commit
3820e84e20
|
@ -1,6 +1,6 @@
|
||||||
# SweRV RISC-V Core<sup>TM</sup> 1.3 from Western Digital
|
# SweRV RISC-V Core<sup>TM</sup> 1.4 from Western Digital
|
||||||
|
|
||||||
This repository contains the SweRV Core<sup>TM</sup> 1.3 design RTL. The previous version can be found in [branch 1.2.](https://github.com/chipsalliance/Cores-SweRV/tree/branch1.2)
|
This repository contains the SweRV Core<sup>TM</sup> 1.3 design RTL. The previous version can be found in [branch 1.3.](https://github.com/chipsalliance/Cores-SweRV/tree/branch1.3)
|
||||||
The SweRV 1 series provides a 32-bit, machine-mode only, implementation of the RISC-V ISA including options I (base integer), M (multiply/divide) and C (compressed instructions from I and M).
|
The SweRV 1 series provides a 32-bit, machine-mode only, implementation of the RISC-V ISA including options I (base integer), M (multiply/divide) and C (compressed instructions from I and M).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
||||||
// This is an automatically generated file by joseph.rahmeh on Wed Sep 4 13:31:40 PDT 2019
|
// This is an automatically generated file by joseph.rahmeh on Tue Oct 15 13:13:16 PDT 2019
|
||||||
//
|
//
|
||||||
// cmd: swerv -snapshot=default -ahb_lite
|
// cmd: swerv -snapshot=default -ahb_lite
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
||||||
// This is an automatically generated file by joseph.rahmeh on Wed Sep 4 13:31:40 PDT 2019
|
// This is an automatically generated file by joseph.rahmeh on Tue Oct 15 13:13:16 PDT 2019
|
||||||
//
|
//
|
||||||
// cmd: swerv -snapshot=default -ahb_lite
|
// cmd: swerv -snapshot=default -ahb_lite
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
||||||
// This is an automatically generated file by joseph.rahmeh on Wed Sep 4 13:31:40 PDT 2019
|
// This is an automatically generated file by joseph.rahmeh on Tue Oct 15 13:13:16 PDT 2019
|
||||||
//
|
//
|
||||||
// cmd: swerv -snapshot=default -ahb_lite
|
// cmd: swerv -snapshot=default -ahb_lite
|
||||||
//
|
//
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
# NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
|
||||||
# This is an automatically generated file by joseph.rahmeh on Wed Sep 4 13:31:40 PDT 2019
|
# This is an automatically generated file by joseph.rahmeh on Tue Oct 15 13:13:16 PDT 2019
|
||||||
#
|
#
|
||||||
# cmd: swerv -snapshot=default -ahb_lite
|
# cmd: swerv -snapshot=default -ahb_lite
|
||||||
#
|
#
|
||||||
|
|
|
@ -509,6 +509,78 @@ module dec_decode_ctl
|
||||||
|
|
||||||
logic tlu_wr_pause_wb1, tlu_wr_pause_wb2;
|
logic tlu_wr_pause_wb1, tlu_wr_pause_wb2;
|
||||||
|
|
||||||
|
localparam NBLOAD_SIZE = `RV_LSU_NUM_NBLOAD;
|
||||||
|
localparam NBLOAD_SIZE_MSB = `RV_LSU_NUM_NBLOAD-1;
|
||||||
|
localparam NBLOAD_TAG_MSB = `RV_LSU_NUM_NBLOAD_WIDTH-1;
|
||||||
|
|
||||||
|
// non block load cam logic
|
||||||
|
|
||||||
|
logic cam_write, cam_inv_reset, cam_data_reset;
|
||||||
|
logic [NBLOAD_TAG_MSB:0] cam_write_tag, cam_inv_reset_tag, cam_data_reset_tag;
|
||||||
|
logic [NBLOAD_SIZE_MSB:0] cam_wen;
|
||||||
|
|
||||||
|
logic [NBLOAD_TAG_MSB:0] load_data_tag;
|
||||||
|
logic [NBLOAD_SIZE_MSB:0] nonblock_load_write;
|
||||||
|
|
||||||
|
load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam;
|
||||||
|
load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_in;
|
||||||
|
|
||||||
|
logic [4:0] nonblock_load_rd;
|
||||||
|
logic i1_nonblock_load_stall, i0_nonblock_load_stall;
|
||||||
|
logic i1_nonblock_boundary_stall, i0_nonblock_boundary_stall;
|
||||||
|
logic i0_depend_load_e1_d, i0_depend_load_e2_d;
|
||||||
|
logic i1_depend_load_e1_d, i1_depend_load_e2_d;
|
||||||
|
logic depend_load_e1_d, depend_load_e2_d, depend_load_same_cycle_d;
|
||||||
|
logic depend_load_e2_e1, depend_load_same_cycle_e1;
|
||||||
|
logic depend_load_same_cycle_e2;
|
||||||
|
|
||||||
|
logic nonblock_load_valid_dc4, nonblock_load_valid_wb;
|
||||||
|
logic i0_load_kill_wen, i1_load_kill_wen;
|
||||||
|
|
||||||
|
logic found;
|
||||||
|
|
||||||
|
logic cam_reset_same_dest_wb;
|
||||||
|
logic [NBLOAD_SIZE_MSB:0] cam_inv_reset_val, cam_data_reset_val;
|
||||||
|
logic i1_wen_wb, i0_wen_wb;
|
||||||
|
|
||||||
|
inst_t i0_itype, i1_itype;
|
||||||
|
|
||||||
|
logic csr_read, csr_write;
|
||||||
|
logic i0_br_unpred, i1_br_unpred;
|
||||||
|
|
||||||
|
logic debug_fence_raw;
|
||||||
|
|
||||||
|
logic freeze_before;
|
||||||
|
logic freeze_e3, freeze_e4;
|
||||||
|
logic [3:0] e4t_i0trigger;
|
||||||
|
logic [3:0] e4t_i1trigger;
|
||||||
|
logic e4d_i0load;
|
||||||
|
|
||||||
|
logic [4:0] div_waddr_wb;
|
||||||
|
logic [12:1] last_br_immed_e1, last_br_immed_e2;
|
||||||
|
logic [31:0] i0_inst_d, i1_inst_d;
|
||||||
|
logic [31:0] i0_inst_e1, i1_inst_e1;
|
||||||
|
logic [31:0] i0_inst_e2, i1_inst_e2;
|
||||||
|
logic [31:0] i0_inst_e3, i1_inst_e3;
|
||||||
|
logic [31:0] i0_inst_e4, i1_inst_e4;
|
||||||
|
logic [31:0] i0_inst_wb, i1_inst_wb;
|
||||||
|
logic [31:0] i0_inst_wb1,i1_inst_wb1;
|
||||||
|
|
||||||
|
logic [31:0] div_inst;
|
||||||
|
logic [31:1] i0_pc_wb, i0_pc_wb1;
|
||||||
|
logic [31:1] i1_pc_wb1;
|
||||||
|
logic [31:1] last_pc_e2;
|
||||||
|
|
||||||
|
reg_pkt_t i0r, i1r;
|
||||||
|
|
||||||
|
trap_pkt_t dt, e1t_in, e1t, e2t_in, e2t, e3t_in, e3t, e4t;
|
||||||
|
|
||||||
|
class_pkt_t i0_e4c_in, i1_e4c_in;
|
||||||
|
|
||||||
|
dest_pkt_t dd, e1d, e2d, e3d, e4d, wbd;
|
||||||
|
dest_pkt_t e1d_in, e2d_in, e3d_in, e4d_in;
|
||||||
|
|
||||||
|
|
||||||
assign freeze = lsu_freeze_dc3;
|
assign freeze = lsu_freeze_dc3;
|
||||||
|
|
||||||
`ifdef RV_NO_SECONDARY_ALU
|
`ifdef RV_NO_SECONDARY_ALU
|
||||||
|
@ -694,35 +766,6 @@ module dec_decode_ctl
|
||||||
assign i1_ap.predict_nt = i1_predict_nt;
|
assign i1_ap.predict_nt = i1_predict_nt;
|
||||||
assign i1_ap.predict_t = i1_predict_t;
|
assign i1_ap.predict_t = i1_predict_t;
|
||||||
|
|
||||||
localparam NBLOAD_SIZE = `RV_LSU_NUM_NBLOAD;
|
|
||||||
localparam NBLOAD_SIZE_MSB = `RV_LSU_NUM_NBLOAD-1;
|
|
||||||
localparam NBLOAD_TAG_MSB = `RV_LSU_NUM_NBLOAD_WIDTH-1;
|
|
||||||
|
|
||||||
// non block load cam logic
|
|
||||||
|
|
||||||
logic cam_write, cam_inv_reset, cam_data_reset;
|
|
||||||
logic [NBLOAD_TAG_MSB:0] cam_write_tag, cam_inv_reset_tag, cam_data_reset_tag;
|
|
||||||
logic [NBLOAD_SIZE_MSB:0] cam_wen;
|
|
||||||
|
|
||||||
logic [NBLOAD_TAG_MSB:0] load_data_tag;
|
|
||||||
logic [NBLOAD_SIZE_MSB:0] nonblock_load_write;
|
|
||||||
|
|
||||||
load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam;
|
|
||||||
load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_in;
|
|
||||||
|
|
||||||
logic [4:0] nonblock_load_rd;
|
|
||||||
logic i1_nonblock_load_stall, i0_nonblock_load_stall;
|
|
||||||
logic i1_nonblock_boundary_stall, i0_nonblock_boundary_stall;
|
|
||||||
logic i0_depend_load_e1_d, i0_depend_load_e2_d;
|
|
||||||
logic i1_depend_load_e1_d, i1_depend_load_e2_d;
|
|
||||||
logic depend_load_e1_d, depend_load_e2_d, depend_load_same_cycle_d;
|
|
||||||
logic depend_load_e2_e1, depend_load_same_cycle_e1;
|
|
||||||
logic depend_load_same_cycle_e2;
|
|
||||||
|
|
||||||
logic nonblock_load_valid_dc4, nonblock_load_valid_wb;
|
|
||||||
logic i0_load_kill_wen, i1_load_kill_wen;
|
|
||||||
|
|
||||||
logic found;
|
|
||||||
always_comb begin
|
always_comb begin
|
||||||
found = 0;
|
found = 0;
|
||||||
cam_wen[NBLOAD_SIZE_MSB:0] = '0;
|
cam_wen[NBLOAD_SIZE_MSB:0] = '0;
|
||||||
|
@ -736,8 +779,6 @@ module dec_decode_ctl
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
logic cam_reset_same_dest_wb;
|
|
||||||
|
|
||||||
assign cam_reset_same_dest_wb = wbd.i0v & wbd.i1v & (wbd.i0rd[4:0] == wbd.i1rd[4:0]) &
|
assign cam_reset_same_dest_wb = wbd.i0v & wbd.i1v & (wbd.i0rd[4:0] == wbd.i1rd[4:0]) &
|
||||||
wbd.i0load & nonblock_load_valid_wb & ~dec_tlu_i0_kill_writeb_wb & ~dec_tlu_i1_kill_writeb_wb;
|
wbd.i0load & nonblock_load_valid_wb & ~dec_tlu_i0_kill_writeb_wb & ~dec_tlu_i1_kill_writeb_wb;
|
||||||
|
|
||||||
|
@ -753,9 +794,6 @@ module dec_decode_ctl
|
||||||
|
|
||||||
assign nonblock_load_rd[4:0] = (e3d.i0load) ? e3d.i0rd[4:0] : e3d.i1rd[4:0]; // rd data
|
assign nonblock_load_rd[4:0] = (e3d.i0load) ? e3d.i0rd[4:0] : e3d.i1rd[4:0]; // rd data
|
||||||
|
|
||||||
logic [NBLOAD_SIZE_MSB:0] cam_inv_reset_val, cam_data_reset_val;
|
|
||||||
logic i1_wen_wb, i0_wen_wb;
|
|
||||||
|
|
||||||
// checks
|
// checks
|
||||||
|
|
||||||
`ifdef ASSERT_ON
|
`ifdef ASSERT_ON
|
||||||
|
@ -898,11 +936,6 @@ end : cam_array
|
||||||
|
|
||||||
// pmu start
|
// pmu start
|
||||||
|
|
||||||
inst_t i0_itype, i1_itype;
|
|
||||||
|
|
||||||
logic csr_read, csr_write;
|
|
||||||
logic i0_br_unpred, i1_br_unpred;
|
|
||||||
|
|
||||||
|
|
||||||
assign csr_read = dec_csr_ren_d;
|
assign csr_read = dec_csr_ren_d;
|
||||||
assign csr_write = dec_csr_wen_unq_d;
|
assign csr_write = dec_csr_wen_unq_d;
|
||||||
|
@ -1077,7 +1110,6 @@ end : cam_array
|
||||||
|
|
||||||
// defined register packet
|
// defined register packet
|
||||||
|
|
||||||
reg_pkt_t i0r, i1r;
|
|
||||||
|
|
||||||
|
|
||||||
assign i0r.rs1[4:0] = i0[19:15];
|
assign i0r.rs1[4:0] = i0[19:15];
|
||||||
|
@ -1257,7 +1289,6 @@ end : cam_array
|
||||||
|
|
||||||
assign i1_load2_block_d = i1_dp.lsu & i0_dp.lsu;
|
assign i1_load2_block_d = i1_dp.lsu & i0_dp.lsu;
|
||||||
|
|
||||||
logic debug_fence_raw;
|
|
||||||
|
|
||||||
// some CSR reads need to be presync'd
|
// some CSR reads need to be presync'd
|
||||||
assign i0_presync = i0_dp.presync | dec_tlu_presync_d | debug_fence_i | debug_fence_raw | dec_tlu_pipelining_disable; // both fence's presync
|
assign i0_presync = i0_dp.presync | dec_tlu_presync_d | debug_fence_i | debug_fence_raw | dec_tlu_pipelining_disable; // both fence's presync
|
||||||
|
@ -1903,8 +1934,6 @@ end : cam_array
|
||||||
assign dec_tlu_i1_valid_e4 = e4d.i1valid & ~flush_lower_wb;
|
assign dec_tlu_i1_valid_e4 = e4d.i1valid & ~flush_lower_wb;
|
||||||
|
|
||||||
|
|
||||||
trap_pkt_t dt, e1t_in, e1t, e2t_in, e2t, e3t_in, e3t, e4t;
|
|
||||||
|
|
||||||
assign dt.legal = i0_legal_decode_d ;
|
assign dt.legal = i0_legal_decode_d ;
|
||||||
assign dt.icaf = i0_icaf_d & i0_legal_decode_d; // dbecc is icaf exception
|
assign dt.icaf = i0_icaf_d & i0_legal_decode_d; // dbecc is icaf exception
|
||||||
assign dt.icaf_f1 = dec_i0_icaf_f1_d & i0_legal_decode_d; // this includes icaf and dbecc
|
assign dt.icaf_f1 = dec_i0_icaf_f1_d & i0_legal_decode_d; // this includes icaf and dbecc
|
||||||
|
@ -1959,12 +1988,6 @@ end : cam_array
|
||||||
rvdffe #( $bits(trap_pkt_t) ) trap_e4ff (.*, .en(i0_e4_ctl_en), .din(e3t_in), .dout(e4t));
|
rvdffe #( $bits(trap_pkt_t) ) trap_e4ff (.*, .en(i0_e4_ctl_en), .din(e3t_in), .dout(e4t));
|
||||||
|
|
||||||
|
|
||||||
logic freeze_before;
|
|
||||||
logic freeze_e3, freeze_e4;
|
|
||||||
logic [3:0] e4t_i0trigger;
|
|
||||||
logic [3:0] e4t_i1trigger;
|
|
||||||
logic e4d_i0load;
|
|
||||||
|
|
||||||
assign freeze_e3 = freeze & ~freeze_before;
|
assign freeze_e3 = freeze & ~freeze_before;
|
||||||
|
|
||||||
rvdff #(1) freeze_before_ff (.*, .clk(active_clk), .din(freeze), .dout(freeze_before));
|
rvdff #(1) freeze_before_ff (.*, .clk(active_clk), .din(freeze), .dout(freeze_before));
|
||||||
|
@ -2002,9 +2025,6 @@ end : cam_array
|
||||||
|
|
||||||
// end tlu stuff
|
// end tlu stuff
|
||||||
|
|
||||||
class_pkt_t i0_e4c_in, i1_e4c_in;
|
|
||||||
|
|
||||||
|
|
||||||
assign i0_dc.mul = i0_dp.mul & i0_legal_decode_d;
|
assign i0_dc.mul = i0_dp.mul & i0_legal_decode_d;
|
||||||
assign i0_dc.load = i0_dp.load & i0_legal_decode_d;
|
assign i0_dc.load = i0_dp.load & i0_legal_decode_d;
|
||||||
assign i0_dc.sec = i0_dp.alu & i0_secondary_d & i0_legal_decode_d;
|
assign i0_dc.sec = i0_dp.alu & i0_secondary_d & i0_legal_decode_d;
|
||||||
|
@ -2036,9 +2056,6 @@ end : cam_array
|
||||||
|
|
||||||
rvdffs #( $bits(class_pkt_t) ) i1_wbc_ff (.*, .en(i0_wb_ctl_en), .clk(active_clk), .din(i1_e4c), .dout(i1_wbc));
|
rvdffs #( $bits(class_pkt_t) ) i1_wbc_ff (.*, .en(i0_wb_ctl_en), .clk(active_clk), .din(i1_e4c), .dout(i1_wbc));
|
||||||
|
|
||||||
dest_pkt_t dd, e1d, e2d, e3d, e4d, wbd;
|
|
||||||
|
|
||||||
dest_pkt_t e1d_in, e2d_in, e3d_in, e4d_in;
|
|
||||||
|
|
||||||
assign dd.i0rd[4:0] = i0r.rd[4:0];
|
assign dd.i0rd[4:0] = i0r.rd[4:0];
|
||||||
assign dd.i0v = i0_rd_en_d & i0_legal_decode_d;
|
assign dd.i0v = i0_rd_en_d & i0_legal_decode_d;
|
||||||
|
@ -2162,8 +2179,6 @@ end : cam_array
|
||||||
assign dec_i1_sec_decode_e3 = e3d.i1secondary & ~i0_flush_final_e3 & ~flush_lower_wb & ~freeze;
|
assign dec_i1_sec_decode_e3 = e3d.i1secondary & ~i0_flush_final_e3 & ~flush_lower_wb & ~freeze;
|
||||||
|
|
||||||
|
|
||||||
logic [4:0] div_waddr_wb;
|
|
||||||
|
|
||||||
rvdffe #( $bits(dest_pkt_t) ) e4ff (.*, .en(i0_e4_ctl_en), .din(e3d_in), .dout(e4d));
|
rvdffe #( $bits(dest_pkt_t) ) e4ff (.*, .en(i0_e4_ctl_en), .din(e3d_in), .dout(e4d));
|
||||||
|
|
||||||
always_comb begin
|
always_comb begin
|
||||||
|
@ -2261,22 +2276,11 @@ end : cam_array
|
||||||
|
|
||||||
assign i1_result_wb[31:0] = i1_result_wb_raw[31:0];
|
assign i1_result_wb[31:0] = i1_result_wb_raw[31:0];
|
||||||
|
|
||||||
logic [12:1] last_br_immed_e1, last_br_immed_e2;
|
|
||||||
|
|
||||||
rvdffe #(12) e1brpcff (.*, .en(i0_e1_data_en), .din(last_br_immed_d[12:1] ), .dout(last_br_immed_e1[12:1]));
|
rvdffe #(12) e1brpcff (.*, .en(i0_e1_data_en), .din(last_br_immed_d[12:1] ), .dout(last_br_immed_e1[12:1]));
|
||||||
rvdffe #(12) e2brpcff (.*, .en(i0_e2_data_en), .din(last_br_immed_e1[12:1]), .dout(last_br_immed_e2[12:1]));
|
rvdffe #(12) e2brpcff (.*, .en(i0_e2_data_en), .din(last_br_immed_e1[12:1]), .dout(last_br_immed_e2[12:1]));
|
||||||
|
|
||||||
|
|
||||||
logic [31:0] i0_inst_d, i1_inst_d;
|
|
||||||
logic [31:0] i0_inst_e1, i1_inst_e1;
|
|
||||||
logic [31:0] i0_inst_e2, i1_inst_e2;
|
|
||||||
logic [31:0] i0_inst_e3, i1_inst_e3;
|
|
||||||
logic [31:0] i0_inst_e4, i1_inst_e4;
|
|
||||||
logic [31:0] i0_inst_wb, i1_inst_wb;
|
|
||||||
logic [31:0] i0_inst_wb1,i1_inst_wb1;
|
|
||||||
|
|
||||||
logic [31:0] div_inst;
|
|
||||||
|
|
||||||
// trace stuff
|
// trace stuff
|
||||||
|
|
||||||
rvdffe #(32) divinstff (.*, .en(i0_div_decode_d), .din(i0_inst_d[31:0]), .dout(div_inst[31:0]));
|
rvdffe #(32) divinstff (.*, .en(i0_div_decode_d), .din(i0_inst_d[31:0]), .dout(div_inst[31:0]));
|
||||||
|
@ -2302,8 +2306,6 @@ end : cam_array
|
||||||
assign dec_i0_inst_wb1[31:0] = i0_inst_wb1[31:0];
|
assign dec_i0_inst_wb1[31:0] = i0_inst_wb1[31:0];
|
||||||
assign dec_i1_inst_wb1[31:0] = i1_inst_wb1[31:0];
|
assign dec_i1_inst_wb1[31:0] = i1_inst_wb1[31:0];
|
||||||
|
|
||||||
logic [31:1] i0_pc_wb, i0_pc_wb1;
|
|
||||||
logic [31:1] i1_pc_wb1;
|
|
||||||
|
|
||||||
rvdffe #(31) i0wbpcff (.*, .en(i0_wb_data_en | exu_div_finish), .din(dec_tlu_i0_pc_e4[31:1]), .dout(i0_pc_wb[31:1]));
|
rvdffe #(31) i0wbpcff (.*, .en(i0_wb_data_en | exu_div_finish), .din(dec_tlu_i0_pc_e4[31:1]), .dout(i0_pc_wb[31:1]));
|
||||||
rvdffe #(31) i0wb1pcff (.*, .en(i0_wb1_data_en | div_wen_wb), .din(i0_pc_wb[31:1]), .dout(i0_pc_wb1[31:1]));
|
rvdffe #(31) i0wb1pcff (.*, .en(i0_wb1_data_en | div_wen_wb), .din(i0_pc_wb[31:1]), .dout(i0_pc_wb1[31:1]));
|
||||||
|
@ -2332,8 +2334,6 @@ end : cam_array
|
||||||
assign dec_tlu_i0_pc_e4[31:1] = (exu_div_finish) ? div_pc[31:1] : i0_pc_e4[31:1];
|
assign dec_tlu_i0_pc_e4[31:1] = (exu_div_finish) ? div_pc[31:1] : i0_pc_e4[31:1];
|
||||||
assign dec_tlu_i1_pc_e4[31:1] = i1_pc_e4[31:1];
|
assign dec_tlu_i1_pc_e4[31:1] = i1_pc_e4[31:1];
|
||||||
|
|
||||||
logic [31:1] last_pc_e2;
|
|
||||||
|
|
||||||
// generate the correct npc for correct br predictions
|
// generate the correct npc for correct br predictions
|
||||||
assign last_pc_e2[31:1] = (e2d.i1valid) ? i1_pc_e2[31:1] : i0_pc_e2[31:1];
|
assign last_pc_e2[31:1] = (e2d.i1valid) ? i1_pc_e2[31:1] : i0_pc_e2[31:1];
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
# SweRV RISC-V Core<sup>TM</sup> 1.4 from Western Digital
|
||||||
|
## Release Notes
|
||||||
|
Move declarations to top of Verilog file to fix fpga compile issues.
|
||||||
|
|
||||||
|
|
||||||
# SweRV RISC-V Core<sup>TM</sup> 1.3 from Western Digital
|
# SweRV RISC-V Core<sup>TM</sup> 1.3 from Western Digital
|
||||||
## Release Notes
|
## Release Notes
|
||||||
1. Make the FPGA optimization code work with the latest version of Verilator.[Pull request #13](https://github.com/chipsalliance/Cores-SweRV/pull/12)
|
1. Make the FPGA optimization code work with the latest version of Verilator.[Pull request #13](https://github.com/chipsalliance/Cores-SweRV/pull/12)
|
||||||
|
|
|
@ -66,6 +66,6 @@ _finish:
|
||||||
.data
|
.data
|
||||||
hw_data:
|
hw_data:
|
||||||
.ascii "------------------------------------\n"
|
.ascii "------------------------------------\n"
|
||||||
.ascii "Hello World from SweRV EH1.3 @WDC !!\n"
|
.ascii "Hello World from SweRV EH1.4 @WDC !!\n"
|
||||||
.ascii "------------------------------------"
|
.ascii "------------------------------------"
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
Loading…
Reference in New Issue