mirror of
https://github.com/olofk/serv.git
synced 2025-06-28 09:13:54 -04:00
Introduce width parameter
Expose the width (or W internally) parameter to set the SERV datapath width. Note: Only width=1 is function at this time.
This commit is contained in:
parent
1c5d44e5c4
commit
376dcd701d
9 changed files with 79 additions and 51 deletions
|
@ -8,6 +8,7 @@ module servant_sim
|
||||||
|
|
||||||
parameter memfile = "";
|
parameter memfile = "";
|
||||||
parameter memsize = 8192;
|
parameter memsize = 8192;
|
||||||
|
parameter width = 1;
|
||||||
parameter with_csr = 1;
|
parameter with_csr = 1;
|
||||||
parameter compressed = 0;
|
parameter compressed = 0;
|
||||||
parameter align = compressed;
|
parameter align = compressed;
|
||||||
|
@ -22,6 +23,7 @@ module servant_sim
|
||||||
servant
|
servant
|
||||||
#(.memfile (memfile),
|
#(.memfile (memfile),
|
||||||
.memsize (memsize),
|
.memsize (memsize),
|
||||||
|
.width (width),
|
||||||
.sim (1),
|
.sim (1),
|
||||||
.with_csr (with_csr),
|
.with_csr (with_csr),
|
||||||
.compress (compressed[0:0]),
|
.compress (compressed[0:0]),
|
||||||
|
|
|
@ -3,8 +3,13 @@ module servant_tb;
|
||||||
|
|
||||||
parameter memfile = "hello_uart.hex";
|
parameter memfile = "hello_uart.hex";
|
||||||
parameter memsize = 8192;
|
parameter memsize = 8192;
|
||||||
|
parameter width = 1;
|
||||||
parameter with_csr = 1;
|
parameter with_csr = 1;
|
||||||
|
|
||||||
|
localparam baud_rate =
|
||||||
|
(width == 4) ? 57600*3 :
|
||||||
|
57600;
|
||||||
|
|
||||||
reg wb_clk = 1'b0;
|
reg wb_clk = 1'b0;
|
||||||
reg wb_rst = 1'b1;
|
reg wb_rst = 1'b1;
|
||||||
|
|
||||||
|
@ -15,11 +20,12 @@ module servant_tb;
|
||||||
|
|
||||||
vlog_tb_utils vtu();
|
vlog_tb_utils vtu();
|
||||||
|
|
||||||
uart_decoder #(57600) uart_decoder (q);
|
uart_decoder #(baud_rate) uart_decoder (q);
|
||||||
|
|
||||||
servant_sim
|
servant_sim
|
||||||
#(.memfile (memfile),
|
#(.memfile (memfile),
|
||||||
.memsize (memsize),
|
.memsize (memsize),
|
||||||
|
.width (width),
|
||||||
.with_csr (with_csr))
|
.with_csr (with_csr))
|
||||||
dut
|
dut
|
||||||
(.wb_clk (wb_clk),
|
(.wb_clk (wb_clk),
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
`verilator_config
|
`verilator_config
|
||||||
// Bits [1:0] in i_wb_rdt are not used at all
|
// Bits [1:0] in i_wb_rdt are not used at all
|
||||||
lint_off -rule UNUSED -file "*/serv_top.v" -lines 179
|
lint_off -rule UNUSED -file "*/serv_top.v" -lines 181
|
||||||
|
|
||||||
//Some bits in the instruction word are not used in serv_decode but it's easier
|
//Some bits in the instruction word are not used in serv_decode but it's easier
|
||||||
//to just send in the whole word than picking out bits
|
//to just send in the whole word than picking out bits
|
||||||
lint_off -rule UNUSED -file "*/serv_decode.v" -lines 8
|
lint_off -rule UNUSED -file "*/serv_decode.v" -lines 8
|
||||||
|
|
||||||
lint_off -rule UNUSED -file "*/serv_top.v" -lines 177
|
|
||||||
|
|
||||||
//Some variables are only used when we connect an Extension with serv_decode
|
//Some variables are only used when we connect an Extension with serv_decode
|
||||||
lint_off -rule UNUSED -file "*/serv_top.v" -lines 67
|
lint_off -rule UNUSED -file "*/serv_top.v" -lines 69
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,8 @@ module serv_rf_top
|
||||||
*/
|
*/
|
||||||
parameter RESET_STRATEGY = "MINI",
|
parameter RESET_STRATEGY = "MINI",
|
||||||
parameter WITH_CSR = 1,
|
parameter WITH_CSR = 1,
|
||||||
parameter RF_WIDTH = 2,
|
parameter W = 1,
|
||||||
|
parameter RF_WIDTH = W * 2,
|
||||||
parameter RF_L2D = $clog2((32+(WITH_CSR*4))*32/RF_WIDTH))
|
parameter RF_L2D = $clog2((32+(WITH_CSR*4))*32/RF_WIDTH))
|
||||||
(
|
(
|
||||||
input wire clk,
|
input wire clk,
|
||||||
|
@ -86,13 +87,13 @@ module serv_rf_top
|
||||||
wire [4+WITH_CSR:0] wreg1;
|
wire [4+WITH_CSR:0] wreg1;
|
||||||
wire wen0;
|
wire wen0;
|
||||||
wire wen1;
|
wire wen1;
|
||||||
wire wdata0;
|
wire [W-1:0] wdata0;
|
||||||
wire wdata1;
|
wire [W-1:0] wdata1;
|
||||||
wire [4+WITH_CSR:0] rreg0;
|
wire [4+WITH_CSR:0] rreg0;
|
||||||
wire [4+WITH_CSR:0] rreg1;
|
wire [4+WITH_CSR:0] rreg1;
|
||||||
wire rf_ready;
|
wire rf_ready;
|
||||||
wire rdata0;
|
wire [W-1:0] rdata0;
|
||||||
wire rdata1;
|
wire [W-1:0] rdata1;
|
||||||
|
|
||||||
wire [RF_L2D-1:0] waddr;
|
wire [RF_L2D-1:0] waddr;
|
||||||
wire [RF_WIDTH-1:0] wdata;
|
wire [RF_WIDTH-1:0] wdata;
|
||||||
|
@ -104,7 +105,8 @@ module serv_rf_top
|
||||||
serv_rf_ram_if
|
serv_rf_ram_if
|
||||||
#(.width (RF_WIDTH),
|
#(.width (RF_WIDTH),
|
||||||
.reset_strategy (RESET_STRATEGY),
|
.reset_strategy (RESET_STRATEGY),
|
||||||
.csr_regs (CSR_REGS))
|
.csr_regs (CSR_REGS),
|
||||||
|
.W(W))
|
||||||
rf_ram_if
|
rf_ram_if
|
||||||
(.i_clk (clk),
|
(.i_clk (clk),
|
||||||
.i_rst (i_rst),
|
.i_rst (i_rst),
|
||||||
|
@ -147,7 +149,8 @@ module serv_rf_top
|
||||||
.WITH_CSR (WITH_CSR),
|
.WITH_CSR (WITH_CSR),
|
||||||
.MDU(MDU),
|
.MDU(MDU),
|
||||||
.COMPRESSED(COMPRESSED),
|
.COMPRESSED(COMPRESSED),
|
||||||
.ALIGN(ALIGN))
|
.ALIGN(ALIGN),
|
||||||
|
.W(W))
|
||||||
cpu
|
cpu
|
||||||
(
|
(
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
module serv_top
|
module serv_top
|
||||||
#(parameter WITH_CSR = 1,
|
#(parameter WITH_CSR = 1,
|
||||||
|
parameter W = 1,
|
||||||
|
parameter B = W-1,
|
||||||
parameter PRE_REGISTER = 1,
|
parameter PRE_REGISTER = 1,
|
||||||
parameter RESET_STRATEGY = "MINI",
|
parameter RESET_STRATEGY = "MINI",
|
||||||
parameter RESET_PC = 32'd0,
|
parameter RESET_PC = 32'd0,
|
||||||
|
@ -43,12 +45,12 @@ module serv_top
|
||||||
output wire [4+WITH_CSR:0] o_wreg1,
|
output wire [4+WITH_CSR:0] o_wreg1,
|
||||||
output wire o_wen0,
|
output wire o_wen0,
|
||||||
output wire o_wen1,
|
output wire o_wen1,
|
||||||
output wire o_wdata0,
|
output wire [B:0] o_wdata0,
|
||||||
output wire o_wdata1,
|
output wire [B:0] o_wdata1,
|
||||||
output wire [4+WITH_CSR:0] o_rreg0,
|
output wire [4+WITH_CSR:0] o_rreg0,
|
||||||
output wire [4+WITH_CSR:0] o_rreg1,
|
output wire [4+WITH_CSR:0] o_rreg1,
|
||||||
input wire i_rdata0,
|
input wire [B:0] i_rdata0,
|
||||||
input wire i_rdata1,
|
input wire [B:0] i_rdata1,
|
||||||
|
|
||||||
output wire [31:0] o_ibus_adr,
|
output wire [31:0] o_ibus_adr,
|
||||||
output wire o_ibus_cyc,
|
output wire o_ibus_cyc,
|
||||||
|
@ -92,10 +94,10 @@ module serv_top
|
||||||
wire rd_alu_en;
|
wire rd_alu_en;
|
||||||
wire rd_csr_en;
|
wire rd_csr_en;
|
||||||
wire rd_mem_en;
|
wire rd_mem_en;
|
||||||
wire ctrl_rd;
|
wire [B:0] ctrl_rd;
|
||||||
wire alu_rd;
|
wire [B:0] alu_rd;
|
||||||
wire mem_rd;
|
wire [B:0] mem_rd;
|
||||||
wire csr_rd;
|
wire [B:0] csr_rd;
|
||||||
wire mtval_pc;
|
wire mtval_pc;
|
||||||
|
|
||||||
wire ctrl_pc_en;
|
wire ctrl_pc_en;
|
||||||
|
@ -103,7 +105,7 @@ module serv_top
|
||||||
wire jal_or_jalr;
|
wire jal_or_jalr;
|
||||||
wire utype;
|
wire utype;
|
||||||
wire mret;
|
wire mret;
|
||||||
wire imm;
|
wire [B:0] imm;
|
||||||
wire trap;
|
wire trap;
|
||||||
wire pc_rel;
|
wire pc_rel;
|
||||||
wire iscomp;
|
wire iscomp;
|
||||||
|
@ -127,8 +129,8 @@ module serv_top
|
||||||
wire bufreg_rs1_en;
|
wire bufreg_rs1_en;
|
||||||
wire bufreg_imm_en;
|
wire bufreg_imm_en;
|
||||||
wire bufreg_clr_lsb;
|
wire bufreg_clr_lsb;
|
||||||
wire bufreg_q;
|
wire [B:0] bufreg_q;
|
||||||
wire bufreg2_q;
|
wire [B:0] bufreg2_q;
|
||||||
wire [31:0] dbus_rdt;
|
wire [31:0] dbus_rdt;
|
||||||
wire dbus_ack;
|
wire dbus_ack;
|
||||||
|
|
||||||
|
@ -139,11 +141,11 @@ module serv_top
|
||||||
wire alu_cmp;
|
wire alu_cmp;
|
||||||
wire [2:0] alu_rd_sel;
|
wire [2:0] alu_rd_sel;
|
||||||
|
|
||||||
wire rs1;
|
wire [B:0] rs1;
|
||||||
wire rs2;
|
wire [B:0] rs2;
|
||||||
wire rd_en;
|
wire rd_en;
|
||||||
|
|
||||||
wire op_b;
|
wire [B:0] op_b;
|
||||||
wire op_b_sel;
|
wire op_b_sel;
|
||||||
|
|
||||||
wire mem_signed;
|
wire mem_signed;
|
||||||
|
@ -156,20 +158,20 @@ module serv_top
|
||||||
|
|
||||||
wire mem_misalign;
|
wire mem_misalign;
|
||||||
|
|
||||||
wire bad_pc;
|
wire [B:0] bad_pc;
|
||||||
|
|
||||||
wire csr_mstatus_en;
|
wire csr_mstatus_en;
|
||||||
wire csr_mie_en;
|
wire csr_mie_en;
|
||||||
wire csr_mcause_en;
|
wire csr_mcause_en;
|
||||||
wire [1:0] csr_source;
|
wire [1:0] csr_source;
|
||||||
wire csr_imm;
|
wire [B:0] csr_imm;
|
||||||
wire csr_d_sel;
|
wire csr_d_sel;
|
||||||
wire csr_en;
|
wire csr_en;
|
||||||
wire [1:0] csr_addr;
|
wire [1:0] csr_addr;
|
||||||
wire csr_pc;
|
wire [B:0] csr_pc;
|
||||||
wire csr_imm_en;
|
wire csr_imm_en;
|
||||||
wire csr_in;
|
wire [B:0] csr_in;
|
||||||
wire rf_csr_out;
|
wire [B:0] rf_csr_out;
|
||||||
wire dbus_en;
|
wire dbus_en;
|
||||||
|
|
||||||
wire new_irq;
|
wire new_irq;
|
||||||
|
@ -226,7 +228,8 @@ module serv_top
|
||||||
#(.RESET_STRATEGY (RESET_STRATEGY),
|
#(.RESET_STRATEGY (RESET_STRATEGY),
|
||||||
.WITH_CSR (WITH_CSR[0:0]),
|
.WITH_CSR (WITH_CSR[0:0]),
|
||||||
.MDU(MDU),
|
.MDU(MDU),
|
||||||
.ALIGN(ALIGN))
|
.ALIGN(ALIGN),
|
||||||
|
.W(W))
|
||||||
state
|
state
|
||||||
(
|
(
|
||||||
.i_clk (clk),
|
.i_clk (clk),
|
||||||
|
@ -420,7 +423,8 @@ module serv_top
|
||||||
serv_ctrl
|
serv_ctrl
|
||||||
#(.RESET_PC (RESET_PC),
|
#(.RESET_PC (RESET_PC),
|
||||||
.RESET_STRATEGY (RESET_STRATEGY),
|
.RESET_STRATEGY (RESET_STRATEGY),
|
||||||
.WITH_CSR (WITH_CSR))
|
.WITH_CSR (WITH_CSR),
|
||||||
|
.W (W))
|
||||||
ctrl
|
ctrl
|
||||||
(
|
(
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
|
@ -447,7 +451,7 @@ module serv_top
|
||||||
//External
|
//External
|
||||||
.o_ibus_adr (wb_ibus_adr));
|
.o_ibus_adr (wb_ibus_adr));
|
||||||
|
|
||||||
serv_alu alu
|
serv_alu #(.W (W)) alu
|
||||||
(
|
(
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
//State
|
//State
|
||||||
|
@ -467,7 +471,7 @@ module serv_top
|
||||||
.o_rd (alu_rd));
|
.o_rd (alu_rd));
|
||||||
|
|
||||||
serv_rf_if
|
serv_rf_if
|
||||||
#(.WITH_CSR (WITH_CSR))
|
#(.WITH_CSR (WITH_CSR), .W(W))
|
||||||
rf_if
|
rf_if
|
||||||
(//RF interface
|
(//RF interface
|
||||||
.i_cnt_en (cnt_en),
|
.i_cnt_en (cnt_en),
|
||||||
|
@ -485,7 +489,7 @@ module serv_top
|
||||||
//Trap interface
|
//Trap interface
|
||||||
.i_trap (trap),
|
.i_trap (trap),
|
||||||
.i_mret (mret),
|
.i_mret (mret),
|
||||||
.i_mepc (wb_ibus_adr[0]),
|
.i_mepc (wb_ibus_adr[B:0]),
|
||||||
.i_mtval_pc (mtval_pc),
|
.i_mtval_pc (mtval_pc),
|
||||||
.i_bufreg_q (bufreg_q),
|
.i_bufreg_q (bufreg_q),
|
||||||
.i_bad_pc (bad_pc),
|
.i_bad_pc (bad_pc),
|
||||||
|
@ -516,7 +520,8 @@ module serv_top
|
||||||
.o_csr (rf_csr_out));
|
.o_csr (rf_csr_out));
|
||||||
|
|
||||||
serv_mem_if
|
serv_mem_if
|
||||||
#(.WITH_CSR (WITH_CSR[0:0]))
|
#(.WITH_CSR (WITH_CSR[0:0]),
|
||||||
|
.W (W))
|
||||||
mem_if
|
mem_if
|
||||||
(
|
(
|
||||||
.i_clk (clk),
|
.i_clk (clk),
|
||||||
|
@ -539,7 +544,8 @@ module serv_top
|
||||||
generate
|
generate
|
||||||
if (|WITH_CSR) begin : gen_csr
|
if (|WITH_CSR) begin : gen_csr
|
||||||
serv_csr
|
serv_csr
|
||||||
#(.RESET_STRATEGY (RESET_STRATEGY))
|
#(.RESET_STRATEGY (RESET_STRATEGY),
|
||||||
|
.W(W))
|
||||||
csr
|
csr
|
||||||
(
|
(
|
||||||
.i_clk (clk),
|
.i_clk (clk),
|
||||||
|
@ -574,8 +580,8 @@ module serv_top
|
||||||
.i_rs1 (rs1),
|
.i_rs1 (rs1),
|
||||||
.o_q (csr_rd));
|
.o_q (csr_rd));
|
||||||
end else begin : gen_no_csr
|
end else begin : gen_no_csr
|
||||||
assign csr_in = 1'b0;
|
assign csr_in = {W{1'b0}};
|
||||||
assign csr_rd = 1'b0;
|
assign csr_rd = {W{1'b0}};
|
||||||
assign new_irq = 1'b0;
|
assign new_irq = 1'b0;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
@ -597,7 +603,7 @@ module serv_top
|
||||||
|
|
||||||
/* Store data written to rd */
|
/* Store data written to rd */
|
||||||
if (o_wen0)
|
if (o_wen0)
|
||||||
rvfi_rd_wdata <= {o_wdata0,rvfi_rd_wdata[31:1]};
|
rvfi_rd_wdata <= {o_wdata0,rvfi_rd_wdata[31:W]};
|
||||||
|
|
||||||
if (cnt_done & ctrl_pc_en) begin
|
if (cnt_done & ctrl_pc_en) begin
|
||||||
rvfi_pc_rdata <= pc;
|
rvfi_pc_rdata <= pc;
|
||||||
|
@ -626,8 +632,8 @@ module serv_top
|
||||||
rvfi_rd_addr <= rd_addr;
|
rvfi_rd_addr <= rd_addr;
|
||||||
end
|
end
|
||||||
if (rs_en) begin
|
if (rs_en) begin
|
||||||
rvfi_rs1_rdata <= {!immdec_en[1] & rs1,rvfi_rs1_rdata[31:1]};
|
rvfi_rs1_rdata <= {(!immdec_en[1] ? rs1 : {W{1'b0}}),rvfi_rs1_rdata[31:W]};
|
||||||
rvfi_rs2_rdata <= {!immdec_en[2] & rs2,rvfi_rs2_rdata[31:1]};
|
rvfi_rs2_rdata <= {(!immdec_en[2] ? rs2 : {W{1'b0}}),rvfi_rs2_rdata[31:W]};
|
||||||
end
|
end
|
||||||
|
|
||||||
if (i_dbus_ack) begin
|
if (i_dbus_ack) begin
|
||||||
|
|
|
@ -580,6 +580,7 @@ targets:
|
||||||
filesets : [soc, servant_tb]
|
filesets : [soc, servant_tb]
|
||||||
parameters :
|
parameters :
|
||||||
- RISCV_FORMAL
|
- RISCV_FORMAL
|
||||||
|
- width
|
||||||
- "mdu? (MDU=1)"
|
- "mdu? (MDU=1)"
|
||||||
- SERV_CLEAR_RAM=true
|
- SERV_CLEAR_RAM=true
|
||||||
- firmware
|
- firmware
|
||||||
|
@ -649,6 +650,7 @@ targets:
|
||||||
- uart_baudrate
|
- uart_baudrate
|
||||||
- vcd
|
- vcd
|
||||||
- vcd_start
|
- vcd_start
|
||||||
|
- width
|
||||||
- compressed
|
- compressed
|
||||||
- align
|
- align
|
||||||
- with_csr=1
|
- with_csr=1
|
||||||
|
@ -744,6 +746,11 @@ parameters:
|
||||||
description : Delay start of VCD dumping until the specified time
|
description : Delay start of VCD dumping until the specified time
|
||||||
paramtype : plusarg
|
paramtype : plusarg
|
||||||
|
|
||||||
|
width:
|
||||||
|
datatype : int
|
||||||
|
description : Interal datapath width (1=SERV, 4=QERV)
|
||||||
|
paramtype : vlogparam
|
||||||
|
|
||||||
with_csr:
|
with_csr:
|
||||||
datatype : int
|
datatype : int
|
||||||
description : Enable/Disable CSR support
|
description : Enable/Disable CSR support
|
||||||
|
|
|
@ -8,6 +8,7 @@ module servant
|
||||||
parameter memfile = "zephyr_hello.hex";
|
parameter memfile = "zephyr_hello.hex";
|
||||||
parameter memsize = 8192;
|
parameter memsize = 8192;
|
||||||
parameter reset_strategy = "MINI";
|
parameter reset_strategy = "MINI";
|
||||||
|
parameter width = 1;
|
||||||
parameter sim = 0;
|
parameter sim = 0;
|
||||||
parameter with_csr = 1;
|
parameter with_csr = 1;
|
||||||
parameter [0:0] compress = 0;
|
parameter [0:0] compress = 0;
|
||||||
|
@ -23,7 +24,7 @@ module servant
|
||||||
localparam aw = $clog2(memsize);
|
localparam aw = $clog2(memsize);
|
||||||
localparam csr_regs = with_csr*4;
|
localparam csr_regs = with_csr*4;
|
||||||
|
|
||||||
localparam rf_width = 2;
|
localparam rf_width = width * 2;
|
||||||
localparam rf_l2d = $clog2((32+csr_regs)*32/rf_width);
|
localparam rf_l2d = $clog2((32+csr_regs)*32/rf_width);
|
||||||
|
|
||||||
wire timer_irq;
|
wire timer_irq;
|
||||||
|
@ -133,7 +134,7 @@ module servant
|
||||||
.o_rdata (rf_rdata));
|
.o_rdata (rf_rdata));
|
||||||
|
|
||||||
servile
|
servile
|
||||||
#(.rf_width (rf_width),
|
#(.width (width),
|
||||||
.sim (sim[0]),
|
.sim (sim[0]),
|
||||||
.with_c (compress[0]),
|
.with_c (compress[0]),
|
||||||
.with_csr (with_csr[0]),
|
.with_csr (with_csr[0]),
|
||||||
|
@ -159,7 +160,7 @@ module servant
|
||||||
.o_wb_ext_stb (wb_ext_stb),
|
.o_wb_ext_stb (wb_ext_stb),
|
||||||
.i_wb_ext_rdt (wb_ext_rdt),
|
.i_wb_ext_rdt (wb_ext_rdt),
|
||||||
.i_wb_ext_ack (wb_ext_ack),
|
.i_wb_ext_ack (wb_ext_ack),
|
||||||
|
|
||||||
.o_rf_waddr (rf_waddr),
|
.o_rf_waddr (rf_waddr),
|
||||||
.o_rf_wdata (rf_wdata),
|
.o_rf_wdata (rf_wdata),
|
||||||
.o_rf_wen (rf_wen),
|
.o_rf_wen (rf_wen),
|
||||||
|
|
|
@ -8,14 +8,16 @@
|
||||||
`default_nettype none
|
`default_nettype none
|
||||||
module servile
|
module servile
|
||||||
#(
|
#(
|
||||||
|
parameter width = 1,
|
||||||
parameter reset_pc = 32'h00000000,
|
parameter reset_pc = 32'h00000000,
|
||||||
parameter reset_strategy = "MINI",
|
parameter reset_strategy = "MINI",
|
||||||
parameter rf_width = 8,
|
parameter rf_width = 2*width,
|
||||||
parameter [0:0] sim = 1'b0,
|
parameter [0:0] sim = 1'b0,
|
||||||
parameter [0:0] with_c = 1'b0,
|
parameter [0:0] with_c = 1'b0,
|
||||||
parameter [0:0] with_csr = 1'b0,
|
parameter [0:0] with_csr = 1'b0,
|
||||||
parameter [0:0] with_mdu = 1'b0,
|
parameter [0:0] with_mdu = 1'b0,
|
||||||
//Internally calculated. Do not touch
|
//Internally calculated. Do not touch
|
||||||
|
parameter B = width-1,
|
||||||
parameter regs = 32+with_csr*4,
|
parameter regs = 32+with_csr*4,
|
||||||
parameter rf_l2d = $clog2(regs*32/rf_width))
|
parameter rf_l2d = $clog2(regs*32/rf_width))
|
||||||
(
|
(
|
||||||
|
@ -78,13 +80,13 @@ module servile
|
||||||
wire [$clog2(regs)-1:0] wreg1;
|
wire [$clog2(regs)-1:0] wreg1;
|
||||||
wire wen0;
|
wire wen0;
|
||||||
wire wen1;
|
wire wen1;
|
||||||
wire wdata0;
|
wire [B:0] wdata0;
|
||||||
wire wdata1;
|
wire [B:0] wdata1;
|
||||||
wire [$clog2(regs)-1:0] rreg0;
|
wire [$clog2(regs)-1:0] rreg0;
|
||||||
wire [$clog2(regs)-1:0] rreg1;
|
wire [$clog2(regs)-1:0] rreg1;
|
||||||
wire rf_ready;
|
wire rf_ready;
|
||||||
wire rdata0;
|
wire [B:0] rdata0;
|
||||||
wire rdata1;
|
wire [B:0] rdata1;
|
||||||
|
|
||||||
wire [31:0] mdu_rs1;
|
wire [31:0] mdu_rs1;
|
||||||
wire [31:0] mdu_rs2;
|
wire [31:0] mdu_rs2;
|
||||||
|
@ -149,6 +151,7 @@ module servile
|
||||||
|
|
||||||
serv_rf_ram_if
|
serv_rf_ram_if
|
||||||
#(.width (rf_width),
|
#(.width (rf_width),
|
||||||
|
.W (width),
|
||||||
.reset_strategy (reset_strategy),
|
.reset_strategy (reset_strategy),
|
||||||
.csr_regs (with_csr*4))
|
.csr_regs (with_csr*4))
|
||||||
rf_ram_if
|
rf_ram_if
|
||||||
|
@ -196,6 +199,7 @@ module servile
|
||||||
serv_top
|
serv_top
|
||||||
#(
|
#(
|
||||||
.WITH_CSR (with_csr?1:0),
|
.WITH_CSR (with_csr?1:0),
|
||||||
|
.W (width),
|
||||||
.PRE_REGISTER (1'b1),
|
.PRE_REGISTER (1'b1),
|
||||||
.RESET_STRATEGY (reset_strategy),
|
.RESET_STRATEGY (reset_strategy),
|
||||||
.RESET_PC (reset_pc),
|
.RESET_PC (reset_pc),
|
||||||
|
|
|
@ -109,6 +109,7 @@ module serving
|
||||||
servile
|
servile
|
||||||
#(.reset_pc (32'h0000_0000),
|
#(.reset_pc (32'h0000_0000),
|
||||||
.reset_strategy (RESET_STRATEGY),
|
.reset_strategy (RESET_STRATEGY),
|
||||||
|
.rf_width (rf_width),
|
||||||
.sim (sim),
|
.sim (sim),
|
||||||
.with_csr (WITH_CSR))
|
.with_csr (WITH_CSR))
|
||||||
servile
|
servile
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue