Rename hazard5 -> hazard3
This commit is contained in:
parent
af0af41385
commit
844fa8f97f
|
@ -1,4 +1,4 @@
|
||||||
DOTF=hazard5.f
|
DOTF=hazard3.f
|
||||||
TOP=hazard5_alu
|
TOP=hazard3_alu
|
||||||
|
|
||||||
include $(SCRIPTS)/formal.mk
|
include $(SCRIPTS)/formal.mk
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* *
|
* *
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
module hazard5_alu #(
|
module hazard3_alu #(
|
||||||
parameter W_DATA = 32
|
parameter W_DATA = 32
|
||||||
) (
|
) (
|
||||||
input wire [3:0] aluop,
|
input wire [3:0] aluop,
|
||||||
|
@ -26,7 +26,7 @@ module hazard5_alu #(
|
||||||
output wire cmp
|
output wire cmp
|
||||||
);
|
);
|
||||||
|
|
||||||
`include "hazard5_ops.vh"
|
`include "hazard3_ops.vh"
|
||||||
|
|
||||||
function msb;
|
function msb;
|
||||||
input [W_DATA-1:0] x;
|
input [W_DATA-1:0] x;
|
||||||
|
@ -51,7 +51,7 @@ wire [W_DATA-1:0] shift_dout;
|
||||||
reg shift_right_nleft;
|
reg shift_right_nleft;
|
||||||
reg shift_arith;
|
reg shift_arith;
|
||||||
|
|
||||||
hazard5_shift_barrel #(
|
hazard3_shift_barrel #(
|
||||||
.W_DATA(W_DATA),
|
.W_DATA(W_DATA),
|
||||||
.W_SHAMT(5)
|
.W_SHAMT(5)
|
||||||
) shifter (
|
) shifter (
|
|
@ -15,7 +15,7 @@
|
||||||
* *
|
* *
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
module hazard5_mul_fast #(
|
module hazard3_mul_fast #(
|
||||||
parameter XLEN = 32
|
parameter XLEN = 32
|
||||||
) (
|
) (
|
||||||
input wire clk,
|
input wire clk,
|
|
@ -27,11 +27,11 @@
|
||||||
// The actual multiply/divide hardware is unsigned. We handle signedness at
|
// The actual multiply/divide hardware is unsigned. We handle signedness at
|
||||||
// input/output.
|
// input/output.
|
||||||
|
|
||||||
module hazard5_muldiv_seq #(
|
module hazard3_muldiv_seq #(
|
||||||
parameter XLEN = 32,
|
parameter XLEN = 32,
|
||||||
parameter UNROLL = 1,
|
parameter UNROLL = 1,
|
||||||
parameter W_CTR = $clog2(XLEN + 1), // do not modify
|
parameter W_CTR = $clog2(XLEN + 1), // do not modify
|
||||||
`include "hazard5_width_const.vh"
|
`include "hazard3_width_const.vh"
|
||||||
) (
|
) (
|
||||||
input wire clk,
|
input wire clk,
|
||||||
input wire rst_n,
|
input wire rst_n,
|
||||||
|
@ -47,7 +47,7 @@ module hazard5_muldiv_seq #(
|
||||||
output wire result_vld
|
output wire result_vld
|
||||||
);
|
);
|
||||||
|
|
||||||
`include "hazard5_ops.vh"
|
`include "hazard3_ops.vh"
|
||||||
|
|
||||||
//synthesis translate_off
|
//synthesis translate_off
|
||||||
generate if (UNROLL & (UNROLL - 1) || ~|UNROLL)
|
generate if (UNROLL & (UNROLL - 1) || ~|UNROLL)
|
|
@ -16,9 +16,9 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
// Really something like this should be in a utility library (or the language!),
|
// Really something like this should be in a utility library (or the language!),
|
||||||
// but Hazard5 is supposed to be self-contained
|
// but Hazard3 is supposed to be self-contained
|
||||||
|
|
||||||
module hazard5_priority_encode #(
|
module hazard3_priority_encode #(
|
||||||
parameter W_REQ = 16,
|
parameter W_REQ = 16,
|
||||||
parameter W_GNT = $clog2(W_REQ) // do not modify
|
parameter W_GNT = $clog2(W_REQ) // do not modify
|
||||||
) (
|
) (
|
||||||
|
@ -54,4 +54,4 @@ end
|
||||||
|
|
||||||
assign gnt = gnt_accum;
|
assign gnt = gnt_accum;
|
||||||
|
|
||||||
endmodule
|
endmodule
|
|
@ -19,7 +19,7 @@
|
||||||
// using a single log-type barrel shifter. Around 240 LUTs for 32 bits.
|
// using a single log-type barrel shifter. Around 240 LUTs for 32 bits.
|
||||||
// (7 layers of 32 2-input muxes, some extra LUTs and LUT inputs used for arith)
|
// (7 layers of 32 2-input muxes, some extra LUTs and LUT inputs used for arith)
|
||||||
|
|
||||||
module hazard5_shift_barrel #(
|
module hazard3_shift_barrel #(
|
||||||
parameter W_DATA = 32,
|
parameter W_DATA = 32,
|
||||||
parameter W_SHAMT = 5
|
parameter W_SHAMT = 5
|
||||||
) (
|
) (
|
|
@ -0,0 +1,14 @@
|
||||||
|
file arith/hazard3_alu.v
|
||||||
|
file arith/hazard3_shift_barrel.v
|
||||||
|
file arith/hazard3_priority_encode.v
|
||||||
|
file arith/hazard3_muldiv_seq.v
|
||||||
|
file arith/hazard3_mul_fast.v
|
||||||
|
file hazard3_frontend.v
|
||||||
|
file hazard3_instr_decompress.v
|
||||||
|
file hazard3_decode.v
|
||||||
|
file hazard3_csr.v
|
||||||
|
file hazard3_regfile_1w2r.v
|
||||||
|
file hazard3_core.v
|
||||||
|
file hazard3_cpu_1port.v
|
||||||
|
file hazard3_cpu_2port.v
|
||||||
|
include .
|
|
@ -1,8 +1,8 @@
|
||||||
// Hazard5 CPU configuration parameters
|
// Hazard3 CPU configuration parameters
|
||||||
|
|
||||||
// To configure Hazard5 you can either edit this file, or set parameters on
|
// To configure Hazard3 you can either edit this file, or set parameters on
|
||||||
// your top-level instantiation, it's up to you. These parameters are all
|
// your top-level instantiation, it's up to you. These parameters are all
|
||||||
// plumbed through Hazard5's internal hierarchy to the appropriate places.
|
// plumbed through Hazard3's internal hierarchy to the appropriate places.
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Reset state configuration
|
// Reset state configuration
|
|
@ -1,4 +1,4 @@
|
||||||
// Pass-through of parameters defined in hazard5_config.vh, so that these can
|
// Pass-through of parameters defined in hazard3_config.vh, so that these can
|
||||||
// be set at instantiation rather than editing the config file, and will flow
|
// be set at instantiation rather than editing the config file, and will flow
|
||||||
// correctly down through the hierarchy.
|
// correctly down through the hierarchy.
|
||||||
|
|
|
@ -15,10 +15,10 @@
|
||||||
* *
|
* *
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
module hazard5_core #(
|
module hazard3_core #(
|
||||||
`include "hazard5_config.vh"
|
`include "hazard3_config.vh"
|
||||||
,
|
,
|
||||||
`include "hazard5_width_const.vh"
|
`include "hazard3_width_const.vh"
|
||||||
) (
|
) (
|
||||||
// Global signals
|
// Global signals
|
||||||
input wire clk,
|
input wire clk,
|
||||||
|
@ -55,7 +55,7 @@ module hazard5_core #(
|
||||||
input wire [15:0] irq
|
input wire [15:0] irq
|
||||||
);
|
);
|
||||||
|
|
||||||
`include "hazard5_ops.vh"
|
`include "hazard3_ops.vh"
|
||||||
|
|
||||||
`ifdef FORMAL
|
`ifdef FORMAL
|
||||||
// Only yosys-smtbmc seems to support immediate assertions
|
// Only yosys-smtbmc seems to support immediate assertions
|
||||||
|
@ -108,9 +108,9 @@ assign bus_aph_panic_i = m_jump_req;
|
||||||
wire f_mem_size;
|
wire f_mem_size;
|
||||||
assign bus_hsize_i = f_mem_size ? HSIZE_WORD : HSIZE_HWORD;
|
assign bus_hsize_i = f_mem_size ? HSIZE_WORD : HSIZE_HWORD;
|
||||||
|
|
||||||
hazard5_frontend #(
|
hazard3_frontend #(
|
||||||
.FIFO_DEPTH(2),
|
.FIFO_DEPTH(2),
|
||||||
`include "hazard5_config_inst.vh"
|
`include "hazard3_config_inst.vh"
|
||||||
) frontend (
|
) frontend (
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.rst_n (rst_n),
|
.rst_n (rst_n),
|
||||||
|
@ -183,9 +183,9 @@ wire dx_csr_wen;
|
||||||
wire [1:0] dx_csr_wtype;
|
wire [1:0] dx_csr_wtype;
|
||||||
wire dx_csr_w_imm;
|
wire dx_csr_w_imm;
|
||||||
|
|
||||||
hazard5_decode #(
|
hazard3_decode #(
|
||||||
`include "hazard5_config_inst.vh"
|
`include "hazard3_config_inst.vh"
|
||||||
) inst_hazard5_decode (
|
) inst_hazard3_decode (
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.rst_n (rst_n),
|
.rst_n (rst_n),
|
||||||
|
|
||||||
|
@ -385,10 +385,10 @@ wire [W_DATA-1:0] x_csr_wdata = dx_csr_w_imm ?
|
||||||
|
|
||||||
wire [W_DATA-1:0] x_csr_rdata;
|
wire [W_DATA-1:0] x_csr_rdata;
|
||||||
|
|
||||||
hazard5_csr #(
|
hazard3_csr #(
|
||||||
.XLEN (W_DATA),
|
.XLEN (W_DATA),
|
||||||
`include "hazard5_config_inst.vh"
|
`include "hazard3_config_inst.vh"
|
||||||
) inst_hazard5_csr (
|
) inst_hazard3_csr (
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.rst_n (rst_n),
|
.rst_n (rst_n),
|
||||||
// CSR access port
|
// CSR access port
|
||||||
|
@ -452,7 +452,7 @@ if (EXTENSION_M) begin: has_muldiv
|
||||||
assign x_muldiv_op_vld = (dx_aluop == ALUOP_MULDIV && !x_use_fast_mul)
|
assign x_muldiv_op_vld = (dx_aluop == ALUOP_MULDIV && !x_use_fast_mul)
|
||||||
&& !(x_muldiv_posted || x_stall_raw || x_muldiv_kill);
|
&& !(x_muldiv_posted || x_stall_raw || x_muldiv_kill);
|
||||||
|
|
||||||
hazard5_muldiv_seq #(
|
hazard3_muldiv_seq #(
|
||||||
.XLEN (W_DATA),
|
.XLEN (W_DATA),
|
||||||
.UNROLL (MULDIV_UNROLL)
|
.UNROLL (MULDIV_UNROLL)
|
||||||
) muldiv (
|
) muldiv (
|
||||||
|
@ -484,9 +484,9 @@ if (EXTENSION_M) begin: has_muldiv
|
||||||
|
|
||||||
wire x_issue_fast_mul = x_use_fast_mul && |dx_rd && !(x_stall || flush_d_x);
|
wire x_issue_fast_mul = x_use_fast_mul && |dx_rd && !(x_stall || flush_d_x);
|
||||||
|
|
||||||
hazard5_mul_fast #(
|
hazard3_mul_fast #(
|
||||||
.XLEN(W_DATA)
|
.XLEN(W_DATA)
|
||||||
) inst_hazard5_mul_fast (
|
) inst_hazard3_mul_fast (
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.rst_n (rst_n),
|
.rst_n (rst_n),
|
||||||
|
|
||||||
|
@ -566,7 +566,7 @@ always @ (posedge clk)
|
||||||
xm_jump_target <= x_jump_target;
|
xm_jump_target <= x_jump_target;
|
||||||
end
|
end
|
||||||
|
|
||||||
hazard5_alu alu (
|
hazard3_alu alu (
|
||||||
.aluop (dx_aluop),
|
.aluop (dx_aluop),
|
||||||
.op_a (x_op_a),
|
.op_a (x_op_a),
|
||||||
.op_b (x_op_b),
|
.op_b (x_op_b),
|
||||||
|
@ -672,7 +672,7 @@ always @ (posedge clk) begin
|
||||||
end
|
end
|
||||||
//synthesis translate_on
|
//synthesis translate_on
|
||||||
|
|
||||||
hazard5_regfile_1w2r #(
|
hazard3_regfile_1w2r #(
|
||||||
.FAKE_DUALPORT(0),
|
.FAKE_DUALPORT(0),
|
||||||
`ifdef SIM
|
`ifdef SIM
|
||||||
.RESET_REGS(1),
|
.RESET_REGS(1),
|
||||||
|
@ -699,12 +699,12 @@ hazard5_regfile_1w2r #(
|
||||||
);
|
);
|
||||||
|
|
||||||
`ifdef RISCV_FORMAL
|
`ifdef RISCV_FORMAL
|
||||||
`include "hazard5_rvfi_monitor.vh"
|
`include "hazard3_rvfi_monitor.vh"
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
`ifdef HAZARD5_FORMAL_REGRESSION
|
`ifdef HAZARD3_FORMAL_REGRESSION
|
||||||
// Each formal regression provides its own file with the below name:
|
// Each formal regression provides its own file with the below name:
|
||||||
`include "hazard5_formal_regression.vh"
|
`include "hazard3_formal_regression.vh"
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
endmodule
|
endmodule
|
|
@ -15,12 +15,12 @@
|
||||||
* *
|
* *
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
// Single-ported top level file for Hazard5 CPU. This file instantiates the
|
// Single-ported top level file for Hazard3 CPU. This file instantiates the
|
||||||
// Hazard5 core, and arbitrates its instruction fetch and load/store signals
|
// Hazard3 core, and arbitrates its instruction fetch and load/store signals
|
||||||
// down to a single AHB-Lite master port.
|
// down to a single AHB-Lite master port.
|
||||||
|
|
||||||
module hazard5_cpu_1port #(
|
module hazard3_cpu_1port #(
|
||||||
`include "hazard5_config.vh"
|
`include "hazard3_config.vh"
|
||||||
) (
|
) (
|
||||||
// Global signals
|
// Global signals
|
||||||
input wire clk,
|
input wire clk,
|
||||||
|
@ -75,8 +75,8 @@ wire [W_DATA-1:0] core_wdata_d;
|
||||||
wire [W_DATA-1:0] core_rdata_d;
|
wire [W_DATA-1:0] core_rdata_d;
|
||||||
|
|
||||||
|
|
||||||
hazard5_core #(
|
hazard3_core #(
|
||||||
`include "hazard5_config_inst.vh"
|
`include "hazard3_config_inst.vh"
|
||||||
) core (
|
) core (
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.rst_n (rst_n),
|
.rst_n (rst_n),
|
|
@ -15,12 +15,12 @@
|
||||||
* *
|
* *
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
// Dual-ported top level file for Hazard5 CPU. This file instantiates the
|
// Dual-ported top level file for Hazard3 CPU. This file instantiates the
|
||||||
// Hazard5 core, and interfaces its instruction fetch and load/store signals
|
// Hazard3 core, and interfaces its instruction fetch and load/store signals
|
||||||
// to a pair of AHB-Lite master ports.
|
// to a pair of AHB-Lite master ports.
|
||||||
|
|
||||||
module hazard5_cpu_2port #(
|
module hazard3_cpu_2port #(
|
||||||
`include "hazard5_config.vh"
|
`include "hazard3_config.vh"
|
||||||
) (
|
) (
|
||||||
// Global signals
|
// Global signals
|
||||||
input wire clk,
|
input wire clk,
|
||||||
|
@ -88,8 +88,8 @@ wire [W_DATA-1:0] core_wdata_d;
|
||||||
wire [W_DATA-1:0] core_rdata_d;
|
wire [W_DATA-1:0] core_rdata_d;
|
||||||
|
|
||||||
|
|
||||||
hazard5_core #(
|
hazard3_core #(
|
||||||
`include "hazard5_config_inst.vh"
|
`include "hazard3_config_inst.vh"
|
||||||
) core (
|
) core (
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.rst_n (rst_n),
|
.rst_n (rst_n),
|
|
@ -19,12 +19,12 @@
|
||||||
// Also includes CSR-related logic like interrupt enable/masking,
|
// Also includes CSR-related logic like interrupt enable/masking,
|
||||||
// trap vector calculation.
|
// trap vector calculation.
|
||||||
|
|
||||||
module hazard5_csr #(
|
module hazard3_csr #(
|
||||||
parameter XLEN = 32, // Must be 32
|
parameter XLEN = 32, // Must be 32
|
||||||
parameter W_COUNTER = 64, // This *should* be 64, but can be reduced to save gates.
|
parameter W_COUNTER = 64, // This *should* be 64, but can be reduced to save gates.
|
||||||
// The full 64 bits is writeable, so high-word increment can
|
// The full 64 bits is writeable, so high-word increment can
|
||||||
// be implemented in software, and a narrower hw counter used
|
// be implemented in software, and a narrower hw counter used
|
||||||
`include "hazard5_config.vh"
|
`include "hazard3_config.vh"
|
||||||
) (
|
) (
|
||||||
input wire clk,
|
input wire clk,
|
||||||
input wire rst_n,
|
input wire rst_n,
|
||||||
|
@ -88,7 +88,7 @@ module hazard5_csr #(
|
||||||
|
|
||||||
// TODO block CSR access when entering trap?
|
// TODO block CSR access when entering trap?
|
||||||
|
|
||||||
`include "hazard5_ops.vh"
|
`include "hazard3_ops.vh"
|
||||||
|
|
||||||
localparam X0 = {XLEN{1'b0}};
|
localparam X0 = {XLEN{1'b0}};
|
||||||
|
|
||||||
|
@ -694,7 +694,7 @@ wire [15:0] exception_req = {
|
||||||
wire exception_req_any = |exception_req && !in_trap;
|
wire exception_req_any = |exception_req && !in_trap;
|
||||||
wire [3:0] exception_req_num;
|
wire [3:0] exception_req_num;
|
||||||
|
|
||||||
hazard5_priority_encode #(
|
hazard3_priority_encode #(
|
||||||
.W_REQ(16)
|
.W_REQ(16)
|
||||||
) except_priority (
|
) except_priority (
|
||||||
.req (exception_req),
|
.req (exception_req),
|
||||||
|
@ -727,7 +727,7 @@ wire [31:0] mip_no_global = mip & 32'hffff_f7ff;
|
||||||
wire irq_any = |(mip_no_global & {{16{mie_meie}}, {16{1'b1}}}) && mstatus_mie;
|
wire irq_any = |(mip_no_global & {{16{mie_meie}}, {16{1'b1}}}) && mstatus_mie;
|
||||||
wire [4:0] irq_num;
|
wire [4:0] irq_num;
|
||||||
|
|
||||||
hazard5_priority_encode #(
|
hazard3_priority_encode #(
|
||||||
.W_REQ(32)
|
.W_REQ(32)
|
||||||
) irq_priority (
|
) irq_priority (
|
||||||
.req (mip_no_global),
|
.req (mip_no_global),
|
|
@ -15,10 +15,10 @@
|
||||||
* *
|
* *
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
module hazard5_decode #(
|
module hazard3_decode #(
|
||||||
`include "hazard5_config.vh"
|
`include "hazard3_config.vh"
|
||||||
,
|
,
|
||||||
`include "hazard5_width_const.vh"
|
`include "hazard3_width_const.vh"
|
||||||
) (
|
) (
|
||||||
input wire clk,
|
input wire clk,
|
||||||
input wire rst_n,
|
input wire rst_n,
|
||||||
|
@ -64,7 +64,7 @@ module hazard5_decode #(
|
||||||
);
|
);
|
||||||
|
|
||||||
`include "rv_opcodes.vh"
|
`include "rv_opcodes.vh"
|
||||||
`include "hazard5_ops.vh"
|
`include "hazard3_ops.vh"
|
||||||
|
|
||||||
localparam HAVE_CSR = CSR_M_MANDATORY || CSR_M_TRAP || CSR_COUNTER;
|
localparam HAVE_CSR = CSR_M_MANDATORY || CSR_M_TRAP || CSR_COUNTER;
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ wire d_invalid_16bit;
|
||||||
reg d_invalid_32bit;
|
reg d_invalid_32bit;
|
||||||
wire d_invalid = d_invalid_16bit || d_invalid_32bit;
|
wire d_invalid = d_invalid_16bit || d_invalid_32bit;
|
||||||
|
|
||||||
hazard5_instr_decompress #(
|
hazard3_instr_decompress #(
|
||||||
.PASSTHROUGH(!EXTENSION_C)
|
.PASSTHROUGH(!EXTENSION_C)
|
||||||
) decomp (
|
) decomp (
|
||||||
.instr_in (fd_cir),
|
.instr_in (fd_cir),
|
|
@ -1,6 +1,6 @@
|
||||||
module hazard5_frontend #(
|
module hazard3_frontend #(
|
||||||
parameter FIFO_DEPTH = 2, // power of 2, >= 1
|
parameter FIFO_DEPTH = 2, // power of 2, >= 1
|
||||||
`include "hazard5_config.vh"
|
`include "hazard3_config.vh"
|
||||||
) (
|
) (
|
||||||
input wire clk,
|
input wire clk,
|
||||||
input wire rst_n,
|
input wire rst_n,
|
||||||
|
@ -44,8 +44,8 @@ module hazard5_frontend #(
|
||||||
);
|
);
|
||||||
|
|
||||||
`undef ASSERT
|
`undef ASSERT
|
||||||
`ifdef HAZARD5_FRONTEND_ASSERTIONS
|
`ifdef HAZARD3_FRONTEND_ASSERTIONS
|
||||||
`define ASSERT(x) assert(x)
|
`define ASSERT(x) assert(x);
|
||||||
`else
|
`else
|
||||||
`define ASSERT(x)
|
`define ASSERT(x)
|
||||||
`endif
|
`endif
|
||||||
|
@ -126,10 +126,10 @@ always @ (posedge clk or negedge rst_n) begin
|
||||||
pending_fetches <= 2'h0;
|
pending_fetches <= 2'h0;
|
||||||
ctr_flush_pending <= 2'h0;
|
ctr_flush_pending <= 2'h0;
|
||||||
end else begin
|
end else begin
|
||||||
`ASSERT(ctr_flush_pending <= pending_fetches);
|
`ASSERT(ctr_flush_pending <= pending_fetches)
|
||||||
`ASSERT(pending_fetches < 2'd3);
|
`ASSERT(pending_fetches < 2'd3)
|
||||||
`ASSERT(!(mem_data_vld && !pending_fetches));
|
`ASSERT(!(mem_data_vld && !pending_fetches))
|
||||||
// `ASSERT(!($past(mem_addr_hold) && $past(mem_addr_vld) && !$stable(mem_addr)));
|
// `ASSERT(!($past(mem_addr_hold) && $past(mem_addr_vld) && !$stable(mem_addr)))
|
||||||
mem_addr_hold <= mem_addr_vld && !mem_addr_rdy;
|
mem_addr_hold <= mem_addr_vld && !mem_addr_rdy;
|
||||||
pending_fetches <= pending_fetches_next;
|
pending_fetches <= pending_fetches_next;
|
||||||
if (jump_now) begin
|
if (jump_now) begin
|
||||||
|
@ -177,9 +177,9 @@ always @ (posedge clk or negedge rst_n) begin
|
||||||
unaligned_jump_aph <= 1'b0;
|
unaligned_jump_aph <= 1'b0;
|
||||||
unaligned_jump_dph <= 1'b0;
|
unaligned_jump_dph <= 1'b0;
|
||||||
end else if (EXTENSION_C) begin
|
end else if (EXTENSION_C) begin
|
||||||
`ASSERT(!(unaligned_jump_aph && !unaligned_jump_dph));
|
`ASSERT(!(unaligned_jump_aph && !unaligned_jump_dph))
|
||||||
`ASSERT(!($past(jump_now && !jump_target[1]) && unaligned_jump_aph));
|
`ASSERT(!($past(jump_now && !jump_target[1]) && unaligned_jump_aph))
|
||||||
`ASSERT(!($past(jump_now && !jump_target[1]) && unaligned_jump_dph));
|
`ASSERT(!($past(jump_now && !jump_target[1]) && unaligned_jump_dph))
|
||||||
if (mem_addr_rdy || (jump_now && !unaligned_jump_now)) begin
|
if (mem_addr_rdy || (jump_now && !unaligned_jump_now)) begin
|
||||||
unaligned_jump_aph <= 1'b0;
|
unaligned_jump_aph <= 1'b0;
|
||||||
end
|
end
|
||||||
|
@ -281,10 +281,10 @@ always @ (posedge clk or negedge rst_n) begin
|
||||||
hwbuf_vld <= 1'b0;
|
hwbuf_vld <= 1'b0;
|
||||||
cir_vld <= 2'h0;
|
cir_vld <= 2'h0;
|
||||||
end else begin
|
end else begin
|
||||||
`ASSERT(cir_vld <= 2);
|
`ASSERT(cir_vld <= 2)
|
||||||
`ASSERT(cir_use <= 2);
|
`ASSERT(cir_use <= 2)
|
||||||
`ASSERT(cir_use <= cir_vld);
|
`ASSERT(cir_use <= cir_vld)
|
||||||
`ASSERT(cir_vld <= buf_level || $past(cir_lock));
|
`ASSERT(cir_vld <= buf_level || $past(cir_lock))
|
||||||
// Update CIR flags
|
// Update CIR flags
|
||||||
buf_level <= buf_level_next;
|
buf_level <= buf_level_next;
|
||||||
hwbuf_vld <= &buf_level_next;
|
hwbuf_vld <= &buf_level_next;
|
|
@ -1,4 +1,4 @@
|
||||||
module hazard5_instr_decompress #(
|
module hazard3_instr_decompress #(
|
||||||
parameter PASSTHROUGH = 0
|
parameter PASSTHROUGH = 0
|
||||||
) (
|
) (
|
||||||
input wire [31:0] instr_in,
|
input wire [31:0] instr_in,
|
||||||
|
@ -111,4 +111,4 @@ end else begin
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
endmodule
|
endmodule
|
|
@ -23,7 +23,7 @@
|
||||||
// This allows BRAM inference on FPGAs with single-read-port BRAMs.
|
// This allows BRAM inference on FPGAs with single-read-port BRAMs.
|
||||||
// (Looking at you iCE40)
|
// (Looking at you iCE40)
|
||||||
|
|
||||||
module hazard5_regfile_1w2r #(
|
module hazard3_regfile_1w2r #(
|
||||||
parameter FAKE_DUALPORT = 0,
|
parameter FAKE_DUALPORT = 0,
|
||||||
parameter RESET_REGS = 0, // Unsupported for FAKE_DUALPORT
|
parameter RESET_REGS = 0, // Unsupported for FAKE_DUALPORT
|
||||||
parameter N_REGS = 16,
|
parameter N_REGS = 16,
|
||||||
|
@ -92,4 +92,4 @@ end else begin: real_dualport_noreset
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
endmodule
|
endmodule
|
|
@ -1,7 +1,7 @@
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// RVFI Instrumentation
|
// RVFI Instrumentation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// To be included into hazard5_cpu.v for use with riscv-formal.
|
// To be included into hazard3_cpu.v for use with riscv-formal.
|
||||||
// Contains some state modelling to diagnose exactly what the core is doing,
|
// Contains some state modelling to diagnose exactly what the core is doing,
|
||||||
// and report this in a way RVFI understands.
|
// and report this in a way RVFI understands.
|
||||||
// We consider instructions to "retire" as they cross the M/W pipe register.
|
// We consider instructions to "retire" as they cross the M/W pipe register.
|
||||||
|
@ -77,7 +77,7 @@ always @ (posedge clk or negedge rst_n) begin
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// Hazard5 is an in-order core:
|
// Hazard3 is an in-order core:
|
||||||
reg [63:0] rvfm_retire_ctr;
|
reg [63:0] rvfm_retire_ctr;
|
||||||
assign rvfi_order = rvfm_retire_ctr;
|
assign rvfi_order = rvfm_retire_ctr;
|
||||||
always @ (posedge clk or negedge rst_n)
|
always @ (posedge clk or negedge rst_n)
|
|
@ -50,7 +50,7 @@ end
|
||||||
// Device Under Test
|
// Device Under Test
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
hazard5_cpu #(
|
hazard3_cpu #(
|
||||||
.RESET_VECTOR (0),
|
.RESET_VECTOR (0),
|
||||||
.EXTENSION_C (1),
|
.EXTENSION_C (1),
|
||||||
.EXTENSION_M (1)
|
.EXTENSION_M (1)
|
|
@ -1,14 +0,0 @@
|
||||||
file arith/hazard5_alu.v
|
|
||||||
file arith/hazard5_shift_barrel.v
|
|
||||||
file arith/hazard5_priority_encode.v
|
|
||||||
file arith/hazard5_muldiv_seq.v
|
|
||||||
file arith/hazard5_mul_fast.v
|
|
||||||
file hazard5_frontend.v
|
|
||||||
file hazard5_instr_decompress.v
|
|
||||||
file hazard5_decode.v
|
|
||||||
file hazard5_csr.v
|
|
||||||
file hazard5_regfile_1w2r.v
|
|
||||||
file hazard5_core.v
|
|
||||||
file hazard5_cpu_1port.v
|
|
||||||
file hazard5_cpu_2port.v
|
|
||||||
include .
|
|
|
@ -1,4 +1,4 @@
|
||||||
TOP := hazard5_cpu_2port
|
TOP := hazard3_cpu_2port
|
||||||
CDEFINES := DUAL_PORT
|
CDEFINES := DUAL_PORT
|
||||||
|
|
||||||
CPU_RESET_VECTOR := 32'hc0
|
CPU_RESET_VECTOR := 32'hc0
|
||||||
|
@ -12,7 +12,7 @@ REDUCED_BYPASS := 0
|
||||||
|
|
||||||
all: tb
|
all: tb
|
||||||
|
|
||||||
SYNTH_CMD += read_verilog -I ../../hdl $(shell listfiles ../../hdl/hazard5.f);
|
SYNTH_CMD += read_verilog -I ../../hdl $(shell listfiles ../../hdl/hazard3.f);
|
||||||
SYNTH_CMD += chparam -set EXTENSION_C $(EXTENSION_C) $(TOP);
|
SYNTH_CMD += chparam -set EXTENSION_C $(EXTENSION_C) $(TOP);
|
||||||
SYNTH_CMD += chparam -set EXTENSION_M $(EXTENSION_M) $(TOP);
|
SYNTH_CMD += chparam -set EXTENSION_M $(EXTENSION_M) $(TOP);
|
||||||
SYNTH_CMD += chparam -set CSR_COUNTER 1 $(TOP);
|
SYNTH_CMD += chparam -set CSR_COUNTER 1 $(TOP);
|
||||||
|
|
|
@ -73,9 +73,9 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DUAL_PORT
|
#ifdef DUAL_PORT
|
||||||
cxxrtl_design::p_hazard5__cpu__2port top;
|
cxxrtl_design::p_hazard3__cpu__2port top;
|
||||||
#else
|
#else
|
||||||
cxxrtl_design::p_hazard5__cpu__1port top;
|
cxxrtl_design::p_hazard3__cpu__1port top;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::fill(std::begin(mem), std::end(mem), 0);
|
std::fill(std::begin(mem), std::end(mem), 0);
|
||||||
|
@ -140,7 +140,7 @@ int main(int argc, char **argv) {
|
||||||
#endif
|
#endif
|
||||||
if (bus_addr <= MEM_SIZE) {
|
if (bus_addr <= MEM_SIZE) {
|
||||||
unsigned int n_bytes = 1u << bus_size;
|
unsigned int n_bytes = 1u << bus_size;
|
||||||
// Note we are relying on hazard5's byte lane replication
|
// Note we are relying on hazard3's byte lane replication
|
||||||
for (unsigned int i = 0; i < n_bytes; ++i) {
|
for (unsigned int i = 0; i < n_bytes; ++i) {
|
||||||
mem[bus_addr + i] = wdata >> (8 * i) & 0xffu;
|
mem[bus_addr + i] = wdata >> (8 * i) & 0xffu;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue