Make the FPGA optimization code work with the latest version of Verilator. Move JTAG TAP to swerv_wrapper module.

This commit is contained in:
Joseph Rahmeh 2019-09-04 13:29:39 -07:00
parent 2108e722c8
commit b35d7e9e1b
7 changed files with 57 additions and 63 deletions

View File

@ -1,6 +1,6 @@
# SweRV RISC-V Core<sup>TM</sup> 1.2 from Western Digital # SweRV RISC-V Core<sup>TM</sup> 1.3 from Western Digital
This repository contains the SweRV Core<sup>TM</sup> 1.2 design RTL. The previous version can be found in [branch 1.1.](https://github.com/chipsalliance/Cores-SweRV/tree/branch1.1) 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)
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

View File

@ -143,30 +143,23 @@ module rvdffe #( parameter WIDTH=1 )
logic l1clk; logic l1clk;
`ifdef RV_FPGA_OPTIMIZE
`ifndef PHYSICAL
begin: genblock
`endif
rvdffs #(WIDTH) dff ( .* );
`ifndef PHYSICAL
end
`endif
`else
`ifndef PHYSICAL `ifndef PHYSICAL
if (WIDTH >= 8) begin: genblock if (WIDTH >= 8) begin: genblock
`endif `endif
`ifdef RV_FPGA_OPTIMIZE
rvdffs #(WIDTH) dff ( .* );
`else
rvclkhdr clkhdr ( .* ); rvclkhdr clkhdr ( .* );
rvdff #(WIDTH) dff (.*, .clk(l1clk)); rvdff #(WIDTH) dff (.*, .clk(l1clk));
`endif
`ifndef PHYSICAL `ifndef PHYSICAL
end end
else else
$error("%m: rvdffe width must be >= 8"); $error("%m: rvdffe width must be >= 8");
`endif `endif
`endif
endmodule // rvdffe endmodule // rvdffe

View File

@ -28,7 +28,6 @@ module swerv
input logic [31:1] rst_vec, input logic [31:1] rst_vec,
input logic nmi_int, input logic nmi_int,
input logic [31:1] nmi_vec, input logic [31:1] nmi_vec,
input logic [31:1] jtag_id,
output logic core_rst_l, // This is "rst_l | dbg_rst_l" output logic core_rst_l, // This is "rst_l | dbg_rst_l"
output logic [63:0] trace_rv_i_insn_ip, output logic [63:0] trace_rv_i_insn_ip,
@ -370,14 +369,14 @@ module swerv
input logic dbg_bus_clk_en, input logic dbg_bus_clk_en,
input logic dma_bus_clk_en, input logic dma_bus_clk_en,
// JTAG ports //Debug module
input logic jtag_tck, // JTAG clk input logic dmi_reg_en,
input logic jtag_tms, // JTAG TMS input logic [6:0] dmi_reg_addr,
input logic jtag_tdi, // JTAG tdi input logic dmi_reg_wr_en,
input logic jtag_trst_n, // JTAG Reset input logic [31:0] dmi_reg_wdata,
output logic jtag_tdo, // JTAG TDO output logic [31:0] dmi_reg_rdata,
input logic dmi_hard_reset,
input logic [`RV_PIC_TOTAL_INT:1] extintsrc_req, input logic [`RV_PIC_TOTAL_INT:1] extintsrc_req,
input logic timer_int, input logic timer_int,
input logic scan_mode input logic scan_mode
@ -971,41 +970,7 @@ module swerv
.clk_override(dec_tlu_misc_clk_override), .clk_override(dec_tlu_misc_clk_override),
.* .*
); );
// inputs from the JTAG - these will become input ports to the echx
logic dmi_reg_en; // read or write
logic [6:0] dmi_reg_addr; // address of DM register
logic dmi_reg_wr_en; // write instruction
logic [31:0] dmi_reg_wdata; // write data
// outputs from the dbg back to jtag
logic [31:0] dmi_reg_rdata;
logic dmi_hard_reset;
logic jtag_tdoEn;
// Instantiat the JTAG/DMI
dmi_wrapper dmi_wrapper (
.scan_mode(scan_mode), // scan mode
// JTAG signals
.trst_n(jtag_trst_n), // JTAG reset
.tck (jtag_tck), // JTAG clock
.tms (jtag_tms), // Test mode select
.tdi (jtag_tdi), // Test Data Input
.tdo (jtag_tdo), // Test Data Output
.tdoEnable (jtag_tdoEn), // Test Data Output enable
// Processor Signals
.core_rst_n (rst_l), // Core reset, active low
.core_clk (clk), // Core clock
.jtag_id (jtag_id), // 32 bit JTAG ID
.rd_data (dmi_reg_rdata), // 32 bit Read data from Processor
.reg_wr_data (dmi_reg_wdata), // 32 bit Write data to Processor
.reg_wr_addr (dmi_reg_addr), // 32 bit Write address to Processor
.reg_en (dmi_reg_en), // 1 bit Write interface bit to Processor
.reg_wr_en (dmi_reg_wr_en), // 1 bit Write enable to Processor
.dmi_hard_reset (dmi_hard_reset) //a hard reset of the DTM, causing the DTM to forget about any outstanding DMI transactions
);
// ----------------- DEBUG END ----------------------------- // ----------------- DEBUG END -----------------------------
@ -1348,4 +1313,3 @@ module swerv
endmodule // swerv endmodule // swerv

View File

@ -393,6 +393,13 @@ module swerv_wrapper
logic icm_clk_override; logic icm_clk_override;
logic dec_tlu_core_ecc_disable; logic dec_tlu_core_ecc_disable;
logic dmi_reg_en;
logic [6:0] dmi_reg_addr;
logic dmi_reg_wr_en;
logic [31:0] dmi_reg_wdata;
logic [31:0] dmi_reg_rdata;
logic dmi_hard_reset;
// Instantiate the swerv core // Instantiate the swerv core
swerv swerv ( swerv swerv (
.* .*
@ -403,7 +410,30 @@ module swerv_wrapper
.rst_l(core_rst_l), .rst_l(core_rst_l),
.* .*
); );
// Instantiate the JTAG/DMI
dmi_wrapper dmi_wrapper (
.scan_mode(scan_mode), // scan mode
// JTAG signals
.trst_n(jtag_trst_n), // JTAG reset
.tck (jtag_tck), // JTAG clock
.tms (jtag_tms), // Test mode select
.tdi (jtag_tdi), // Test Data Input
.tdo (jtag_tdo), // Test Data Output
.tdoEnable (), // Test Data Output enable
// Processor Signals
.core_rst_n (core_rst_l), // Core reset, active low
.core_clk (clk), // Core clock
.jtag_id (jtag_id), // 32 bit JTAG ID
.rd_data (dmi_reg_rdata), // 32 bit Read data from Processor
.reg_wr_data (dmi_reg_wdata), // 32 bit Write data to Processor
.reg_wr_addr (dmi_reg_addr), // 32 bit Write address to Processor
.reg_en (dmi_reg_en), // 1 bit Write interface bit to Processor
.reg_wr_en (dmi_reg_wr_en), // 1 bit Write enable to Processor
.dmi_hard_reset (dmi_hard_reset) //a hard reset of the DTM, causing the DTM to forget about any outstanding DMI transactions
);
endmodule endmodule

View File

@ -1,3 +1,8 @@
# SweRV RISC-V Core<sup>TM</sup> 1.3 from Western Digital
## Release Notes
1. Make the FPGA optimization code work with the latest version of Verilator.
1. Move JTAG TAP to swerv_wrapper module.
# SweRV RISC-V Core<sup>TM</sup> 1.2 from Western Digital # SweRV RISC-V Core<sup>TM</sup> 1.2 from Western Digital
## Release Notes ## Release Notes
1. SWERV core RISCV compatibility improvements 1. SWERV core RISCV compatibility improvements

View File

@ -66,6 +66,6 @@ _finish:
.data .data
hw_data: hw_data:
.ascii "------------------------------------\n" .ascii "------------------------------------\n"
.ascii "Hello World from SweRV EH1.2 @WDC !!\n" .ascii "Hello World from SweRV EH1.3 @WDC !!\n"
.ascii "------------------------------------" .ascii "------------------------------------"
.byte 0 .byte 0

View File

@ -100,7 +100,9 @@ module tb_top ( input logic core_clk, input logic reset_l, output finished);
logic [31:0] cycleCnt ; logic [31:0] cycleCnt ;
logic mailbox_data_val; logic mailbox_data_val;
`ifndef VERILATOR
logic finished; logic finished;
`endif
wire dma_hready_out; wire dma_hready_out;