Hazard3/hdl/hazard3_rvfi_wrapper.v

75 lines
1.9 KiB
Verilog

module rvfi_wrapper (
input wire clock,
input wire reset,
`RVFI_OUTPUTS
);
// ----------------------------------------------------------------------------
// Memory Interface
// ----------------------------------------------------------------------------
(* keep *) wire [31:0] haddr;
(* keep *) wire hwrite;
(* keep *) wire [1:0] htrans;
(* keep *) wire [2:0] hsize;
(* keep *) wire [2:0] hburst;
(* keep *) wire [3:0] hprot;
(* keep *) wire hmastlock;
(* keep *) `rvformal_rand_reg hready;
(* keep *) wire hresp;
(* keep *) wire [31:0] hwdata;
(* keep *) `rvformal_rand_reg [31:0] hrdata;
// AHB-lite requires: data phase of IDLE has no wait states
always @ (posedge clock)
if ($past(htrans) == 2'b00 && $past(hready))
assume(hready);
// Handling of bus faults is not tested
// always assume(!hresp);
`ifdef RISCV_FORMAL_FAIRNESS
reg [7:0] bus_fairness_ctr;
localparam MAX_STALL_LENGTH = 8;
always @ (posedge clock) begin
if (reset)
bus_fairness_ctr <= 8'h0;
else if (hready)
bus_fairness_ctr <= 8'h0;
else
bus_fairness_ctr <= bus_fairness_ctr + ~&bus_fairness_ctr;
assume(bus_fairness_ctr <= MAX_STALL_LENGTH);
end
`endif
// ----------------------------------------------------------------------------
// Device Under Test
// ----------------------------------------------------------------------------
hazard3_cpu #(
.RESET_VECTOR (0),
.EXTENSION_C (1),
.EXTENSION_M (1)
) dut (
.clk (clock),
.rst_n (!reset),
.ahblm_haddr (haddr),
.ahblm_hwrite (hwrite),
.ahblm_htrans (htrans),
.ahblm_hsize (hsize),
.ahblm_hburst (hburst),
.ahblm_hprot (hprot),
.ahblm_hmastlock (hmastlock),
.ahblm_hready (hready),
.ahblm_hresp (hresp),
.ahblm_hwdata (hwdata),
.ahblm_hrdata (hrdata),
`RVFI_CONN
);
endmodule