mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Manual attempt to merge with upstream changes
This commit is contained in:
parent
cc47bd8bea
commit
ba3bfdf68b
@ -1,6 +1,5 @@
|
|||||||
--override cpu/show_c_prefix=T
|
--override cpu/show_c_prefix=T
|
||||||
--override cpu/unaligned=F
|
--override cpu/unaligned=F
|
||||||
--override cpu/mstatus_FS=1
|
|
||||||
--override cpu/ignore_non_leaf_DAU=1
|
--override cpu/ignore_non_leaf_DAU=1
|
||||||
|
|
||||||
# Enable the Imperas instruction coverage
|
# Enable the Imperas instruction coverage
|
||||||
|
@ -35,6 +35,7 @@ vlog +incdir+../config/$1 \
|
|||||||
$env(IMPERAS_HOME)/ImpProprietary/source/host/rvvi/imperasDV-api-pkg.sv \
|
$env(IMPERAS_HOME)/ImpProprietary/source/host/rvvi/imperasDV-api-pkg.sv \
|
||||||
$env(IMPERAS_HOME)/ImpProprietary/source/host/rvvi/trace2api.sv \
|
$env(IMPERAS_HOME)/ImpProprietary/source/host/rvvi/trace2api.sv \
|
||||||
$env(IMPERAS_HOME)/ImpProprietary/source/host/rvvi/trace2log.sv \
|
$env(IMPERAS_HOME)/ImpProprietary/source/host/rvvi/trace2log.sv \
|
||||||
|
$env(IMPERAS_HOME)/ImpProprietary/source/host/rvvi/trace2cov.sv \
|
||||||
../testbench/testbench_imperas.sv \
|
../testbench/testbench_imperas.sv \
|
||||||
../testbench/common/*.sv \
|
../testbench/common/*.sv \
|
||||||
../src/*/*.sv \
|
../src/*/*.sv \
|
||||||
|
@ -33,6 +33,6 @@ module lzc #(parameter WIDTH = 1) (
|
|||||||
always_comb begin
|
always_comb begin
|
||||||
i = 0;
|
i = 0;
|
||||||
while (~num[WIDTH-1-i] & (i < WIDTH)) i = i+1; // search for leading one
|
while (~num[WIDTH-1-i] & (i < WIDTH)) i = i+1; // search for leading one
|
||||||
ZeroCnt = i[$clog2(WIDTH)-1:0];
|
ZeroCnt = i[$clog2(WIDTH+1)-1:0];
|
||||||
end
|
end
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -55,7 +55,7 @@ module ram1p1rwbe #(parameter DEPTH=64, WIDTH=44) (
|
|||||||
logic [WIDTH-1:0] BitWriteMask;
|
logic [WIDTH-1:0] BitWriteMask;
|
||||||
for (index=0; index < WIDTH; index++)
|
for (index=0; index < WIDTH; index++)
|
||||||
assign BitWriteMask[index] = bwe[index/8];
|
assign BitWriteMask[index] = bwe[index/8];
|
||||||
TS1N28HPCPSVTB64X128M4SW sram1A (.CLK(clk), .CEB(~ce), .WEB(~we),
|
ram1p1rwbe_64x128 sram1A (.CLK(clk), .CEB(~ce), .WEB(~we),
|
||||||
.A(addr), .D(din),
|
.A(addr), .D(din),
|
||||||
.BWEB(~BitWriteMask), .Q(dout));
|
.BWEB(~BitWriteMask), .Q(dout));
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ module ram1p1rwbe #(parameter DEPTH=64, WIDTH=44) (
|
|||||||
logic [WIDTH-1:0] BitWriteMask;
|
logic [WIDTH-1:0] BitWriteMask;
|
||||||
for (index=0; index < WIDTH; index++)
|
for (index=0; index < WIDTH; index++)
|
||||||
assign BitWriteMask[index] = bwe[index/8];
|
assign BitWriteMask[index] = bwe[index/8];
|
||||||
ram1p1rwbe_64x44 sram1B (.CLK(clk), .CEB(~ce), .WEB(~we),
|
ram1p1rwbe_64x22 sram1B (.CLK(clk), .CEB(~ce), .WEB(~we),
|
||||||
.A(addr), .D(din),
|
.A(addr), .D(din),
|
||||||
.BWEB(~BitWriteMask), .Q(dout));
|
.BWEB(~BitWriteMask), .Q(dout));
|
||||||
|
|
||||||
|
@ -66,6 +66,8 @@ module controller(
|
|||||||
output logic RegWriteM, // Instruction writes a register (needed for Hazard unit)
|
output logic RegWriteM, // Instruction writes a register (needed for Hazard unit)
|
||||||
output logic InvalidateICacheM, FlushDCacheM, // Invalidate I$, flush D$
|
output logic InvalidateICacheM, FlushDCacheM, // Invalidate I$, flush D$
|
||||||
output logic InstrValidD, InstrValidE, InstrValidM, // Instruction is valid
|
output logic InstrValidD, InstrValidE, InstrValidM, // Instruction is valid
|
||||||
|
output logic BranchD, BranchE,
|
||||||
|
output logic JumpD,
|
||||||
|
|
||||||
output logic FWriteIntM, // FPU controller writes integer register file
|
output logic FWriteIntM, // FPU controller writes integer register file
|
||||||
// Writeback stage control signals
|
// Writeback stage control signals
|
||||||
@ -88,8 +90,6 @@ module controller(
|
|||||||
logic RegWriteD, RegWriteE; // RegWrite (register will be written)
|
logic RegWriteD, RegWriteE; // RegWrite (register will be written)
|
||||||
logic [2:0] ResultSrcD, ResultSrcE, ResultSrcM; // Select which result to write back to register file
|
logic [2:0] ResultSrcD, ResultSrcE, ResultSrcM; // Select which result to write back to register file
|
||||||
logic [1:0] MemRWD, MemRWE; // Store (write to memory)
|
logic [1:0] MemRWD, MemRWE; // Store (write to memory)
|
||||||
logic JumpD; // Jump instruction
|
|
||||||
logic BranchD, BranchE; // Branch instruction
|
|
||||||
logic ALUOpD; // 0 for address generation, 1 for all other operations (must use Funct3)
|
logic ALUOpD; // 0 for address generation, 1 for all other operations (must use Funct3)
|
||||||
logic [2:0] ALUControlD; // Determines ALU operation
|
logic [2:0] ALUControlD; // Determines ALU operation
|
||||||
logic [2:0] ALUSelectD; // ALU mux select signal
|
logic [2:0] ALUSelectD; // ALU mux select signal
|
||||||
|
@ -1,3 +1,32 @@
|
|||||||
|
///////////////////////////////////////////
|
||||||
|
// datapath.sv
|
||||||
|
//
|
||||||
|
// Written: David_Harris@hmc.edu, Sarah.Harris@unlv.edu
|
||||||
|
// Created: 9 January 2021
|
||||||
|
// Modified:
|
||||||
|
//
|
||||||
|
// Purpose: Wally Integer Datapath
|
||||||
|
//
|
||||||
|
// Documentation: RISC-V System on Chip Design Chapter 4 (Figure 4.12)
|
||||||
|
//
|
||||||
|
// A component of the CORE-V-WALLY configurable RISC-V project.
|
||||||
|
//
|
||||||
|
// Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
|
||||||
|
//
|
||||||
|
// Licensed under the Solderpad Hardware License v 2.1 (the “License”); you may not use this file
|
||||||
|
// except in compliance with the License, or, at your option, the Apache License version 2.0. You
|
||||||
|
// may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// https://solderpad.org/licenses/SHL-2.1/
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, any work distributed under the
|
||||||
|
// License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||||
|
// either express or implied. See the License for the specific language governing permissions
|
||||||
|
// and limitations under the License.
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
`include "wally-config.vh"
|
`include "wally-config.vh"
|
||||||
|
|
||||||
module datapath (
|
module datapath (
|
||||||
|
@ -55,6 +55,8 @@ module ieu (
|
|||||||
input logic [`XLEN-1:0] FIntResM, // Integer result from FPU (fmv, fclass, fcmp)
|
input logic [`XLEN-1:0] FIntResM, // Integer result from FPU (fmv, fclass, fcmp)
|
||||||
output logic InvalidateICacheM, FlushDCacheM, // Invalidate I$, flush D$
|
output logic InvalidateICacheM, FlushDCacheM, // Invalidate I$, flush D$
|
||||||
output logic InstrValidD, InstrValidE, InstrValidM,// Instruction is valid
|
output logic InstrValidD, InstrValidE, InstrValidM,// Instruction is valid
|
||||||
|
output logic BranchD, BranchE,
|
||||||
|
output logic JumpD, JumpE,
|
||||||
// Writeback stage signals
|
// Writeback stage signals
|
||||||
input logic [`XLEN-1:0] FIntDivResultW, // Integer divide result from FPU fdivsqrt)
|
input logic [`XLEN-1:0] FIntDivResultW, // Integer divide result from FPU fdivsqrt)
|
||||||
input logic [`XLEN-1:0] CSRReadValW, // CSR read value,
|
input logic [`XLEN-1:0] CSRReadValW, // CSR read value,
|
||||||
@ -90,15 +92,14 @@ module ieu (
|
|||||||
logic [1:0] ForwardAE, ForwardBE; // Select signals for forwarding multiplexers
|
logic [1:0] ForwardAE, ForwardBE; // Select signals for forwarding multiplexers
|
||||||
logic RegWriteM, RegWriteW; // Register will be written in Memory, Writeback stages
|
logic RegWriteM, RegWriteW; // Register will be written in Memory, Writeback stages
|
||||||
logic MemReadE, CSRReadE; // Load, CSRRead instruction
|
logic MemReadE, CSRReadE; // Load, CSRRead instruction
|
||||||
logic JumpE; // Jump instruction
|
|
||||||
logic BranchSignedE; // Branch does signed comparison on operands
|
logic BranchSignedE; // Branch does signed comparison on operands
|
||||||
logic MDUE; // Multiply/divide instruction
|
logic MDUE; // Multiply/divide instruction
|
||||||
|
|
||||||
controller c(
|
controller c(
|
||||||
.clk, .reset, .StallD, .FlushD, .InstrD, .ImmSrcD,
|
.clk, .reset, .StallD, .FlushD, .InstrD, .ImmSrcD,
|
||||||
.IllegalIEUFPUInstrD, .IllegalBaseInstrD, .StallE, .FlushE, .FlagsE, .FWriteIntE,
|
.IllegalIEUFPUInstrD, .IllegalBaseInstrD, .StallE, .FlushE, .FlagsE, .FWriteIntE,
|
||||||
.PCSrcE, .ALUControlE, .ALUSrcAE, .ALUSrcBE, .ALUResultSrcE, .MemReadE, .CSRReadE,
|
.PCSrcE, .ALUControlE, .ALUSrcAE, .ALUSrcBE, .ALUResultSrcE, .ALUSelectE, .MemReadE, .CSRReadE,
|
||||||
.Funct3E, .IntDivE, .MDUE, .W64E, .BranchD, .BranchE, .JumpD, .JumpE, .SCE, .BranchSignedE, .StallM, .FlushM, .MemRWM,
|
.Funct3E, .IntDivE, .MDUE, .W64E, .BranchD, .BranchE, .JumpD, .JumpE, .SCE, .BranchSignedE, .BSelectE, .ZBBSelectE, .StallM, .FlushM, .MemRWM,
|
||||||
.CSRReadM, .CSRWriteM, .PrivilegedM, .AtomicM, .Funct3M,
|
.CSRReadM, .CSRWriteM, .PrivilegedM, .AtomicM, .Funct3M,
|
||||||
.RegWriteM, .InvalidateICacheM, .FlushDCacheM, .InstrValidM, .InstrValidE, .InstrValidD, .FWriteIntM,
|
.RegWriteM, .InvalidateICacheM, .FlushDCacheM, .InstrValidM, .InstrValidE, .InstrValidD, .FWriteIntM,
|
||||||
.StallW, .FlushW, .RegWriteW, .IntDivW, .ResultSrcW, .CSRWriteFenceM, .StoreStallD);
|
.StallW, .FlushW, .RegWriteW, .IntDivW, .ResultSrcW, .CSRWriteFenceM, .StoreStallD);
|
||||||
|
@ -34,7 +34,9 @@ module RASPredictor #(parameter int StackSize = 16 )(
|
|||||||
input logic reset,
|
input logic reset,
|
||||||
input logic StallF, StallD, StallE, StallM, FlushD, FlushE, FlushM,
|
input logic StallF, StallD, StallE, StallM, FlushD, FlushE, FlushM,
|
||||||
input logic [3:0] WrongPredInstrClassD, // Prediction class is wrong
|
input logic [3:0] WrongPredInstrClassD, // Prediction class is wrong
|
||||||
input logic [3:0] InstrClassD, InstrClassE, PredInstrClassF, // Instr class
|
input logic [3:0] InstrClassD,
|
||||||
|
input logic [3:0] InstrClassE, // Instr class
|
||||||
|
input logic [3:0] PredInstrClassF,
|
||||||
input logic [`XLEN-1:0] PCLinkE, // PC of instruction after a jal
|
input logic [`XLEN-1:0] PCLinkE, // PC of instruction after a jal
|
||||||
output logic [`XLEN-1:0] RASPCF // Top of the stack
|
output logic [`XLEN-1:0] RASPCF // Top of the stack
|
||||||
);
|
);
|
||||||
@ -93,6 +95,3 @@ module RASPredictor #(parameter int StackSize = 16 )(
|
|||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,6 +52,8 @@ module bpred (
|
|||||||
|
|
||||||
// Branch and jump outcome
|
// Branch and jump outcome
|
||||||
input logic InstrValidD, InstrValidE,
|
input logic InstrValidD, InstrValidE,
|
||||||
|
input logic BranchD, BranchE,
|
||||||
|
input logic JumpD, JumpE,
|
||||||
input logic PCSrcE, // Executation stage branch is taken
|
input logic PCSrcE, // Executation stage branch is taken
|
||||||
input logic [`XLEN-1:0] IEUAdrE, // The branch/jump target address
|
input logic [`XLEN-1:0] IEUAdrE, // The branch/jump target address
|
||||||
input logic [`XLEN-1:0] IEUAdrM, // The branch/jump target address
|
input logic [`XLEN-1:0] IEUAdrM, // The branch/jump target address
|
||||||
@ -74,7 +76,8 @@ module bpred (
|
|||||||
logic [`XLEN-1:0] PredPCF, RASPCF;
|
logic [`XLEN-1:0] PredPCF, RASPCF;
|
||||||
logic PredictionPCWrongE;
|
logic PredictionPCWrongE;
|
||||||
logic AnyWrongPredInstrClassD, AnyWrongPredInstrClassE;
|
logic AnyWrongPredInstrClassD, AnyWrongPredInstrClassE;
|
||||||
logic [3:0] InstrClassF, InstrClassD, InstrClassE, InstrClassW;
|
logic [3:0] InstrClassD;
|
||||||
|
logic [3:0] InstrClassE;
|
||||||
logic DirPredictionWrongE, BTBPredPCWrongE, RASPredPCWrongE;
|
logic DirPredictionWrongE, BTBPredPCWrongE, RASPredPCWrongE;
|
||||||
|
|
||||||
logic SelBPPredF;
|
logic SelBPPredF;
|
||||||
@ -83,9 +86,9 @@ module bpred (
|
|||||||
logic [`XLEN-1:0] PCCorrectE;
|
logic [`XLEN-1:0] PCCorrectE;
|
||||||
logic [3:0] WrongPredInstrClassD;
|
logic [3:0] WrongPredInstrClassD;
|
||||||
|
|
||||||
logic BTBTargetWrongE;
|
logic BTBTargetWrongE;
|
||||||
logic RASTargetWrongE;
|
logic RASTargetWrongE;
|
||||||
logic JumpOrTakenBranchE;
|
logic JumpOrTakenBranchE;
|
||||||
|
|
||||||
logic [`XLEN-1:0] PredPCD, PredPCE, RASPCD, RASPCE;
|
logic [`XLEN-1:0] PredPCD, PredPCE, RASPCD, RASPCE;
|
||||||
|
|
||||||
@ -113,29 +116,11 @@ module bpred (
|
|||||||
.PCNextF, .PCM, .DirPredictionF, .DirPredictionWrongE,
|
.PCNextF, .PCM, .DirPredictionF, .DirPredictionWrongE,
|
||||||
.BranchInstrE(InstrClassE[0]), .BranchInstrM(InstrClassM[0]), .PCSrcE);
|
.BranchInstrE(InstrClassE[0]), .BranchInstrM(InstrClassM[0]), .PCSrcE);
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
end else if (`BPRED_TYPE == "BPSPECULATIVEGLOBAL") begin:Predictor
|
|
||||||
speculativeglobalhistory #(`BPRED_SIZE) DirPredictor(.clk, .reset, .StallF, .StallD, .StallE, .StallM, .StallW, .FlushD, .FlushE, .FlushM, .FlushW,
|
|
||||||
.DirPredictionF, .DirPredictionWrongE,
|
|
||||||
.PredInstrClassF, .InstrClassD, .InstrClassE, .WrongPredInstrClassD, .PCSrcE);
|
|
||||||
|
|
||||||
end else if (`BPRED_TYPE == "BPGSHARE") begin:Predictor
|
|
||||||
gshare #(`BPRED_SIZE) DirPredictor(.clk, .reset, .StallF, .StallD, .StallE, .StallM, .FlushD, .FlushE, .FlushM,
|
|
||||||
.PCNextF, .PCE, .DirPredictionF, .DirPredictionWrongE,
|
|
||||||
.BranchInstrE(InstrClassE[0]), .BranchInstrM(InstrClassM[0]), .PCSrcE);
|
|
||||||
|
|
||||||
end else if (`BPRED_TYPE == "BPSPECULATIVEGSHARE") begin:Predictor
|
|
||||||
speculativegshare #(`BPRED_SIZE) DirPredictor(.clk, .reset, .StallF, .StallD, .StallE, .StallM, .StallW, .FlushD, .FlushE, .FlushM, .FlushW,
|
|
||||||
.PCNextF, .PCF, .PCD, .PCE, .DirPredictionF, .DirPredictionWrongE,
|
|
||||||
.PredInstrClassF, .InstrClassD, .InstrClassE, .WrongPredInstrClassD, .PCSrcE);
|
|
||||||
|
|
||||||
=======
|
|
||||||
end else if (`BPRED_TYPE == "BP_GLOBAL_BASIC") begin:Predictor
|
end else if (`BPRED_TYPE == "BP_GLOBAL_BASIC") begin:Predictor
|
||||||
gsharebasic #(`BPRED_SIZE, 0) DirPredictor(.clk, .reset, .StallF, .StallD, .StallE, .StallM, .StallW, .FlushD, .FlushE, .FlushM, .FlushW,
|
gsharebasic #(`BPRED_SIZE, 0) DirPredictor(.clk, .reset, .StallF, .StallD, .StallE, .StallM, .StallW, .FlushD, .FlushE, .FlushM, .FlushW,
|
||||||
.PCNextF, .PCM, .DirPredictionF, .DirPredictionWrongE,
|
.PCNextF, .PCM, .DirPredictionF, .DirPredictionWrongE,
|
||||||
.BranchInstrE(InstrClassE[0]), .BranchInstrM(InstrClassM[0]), .PCSrcE);
|
.BranchInstrE(InstrClassE[0]), .BranchInstrM(InstrClassM[0]), .PCSrcE);
|
||||||
|
|
||||||
>>>>>>> upstream/main
|
|
||||||
end else if (`BPRED_TYPE == "BPLOCALPAg") begin:Predictor
|
end else if (`BPRED_TYPE == "BPLOCALPAg") begin:Predictor
|
||||||
// *** Fix me
|
// *** Fix me
|
||||||
/* -----\/----- EXCLUDED -----\/-----
|
/* -----\/----- EXCLUDED -----\/-----
|
||||||
@ -167,7 +152,8 @@ module bpred (
|
|||||||
if (`INSTR_CLASS_PRED == 0) begin : DirectClassDecode
|
if (`INSTR_CLASS_PRED == 0) begin : DirectClassDecode
|
||||||
logic [4:0] CompressedOpcF;
|
logic [4:0] CompressedOpcF;
|
||||||
logic [3:0] InstrClassF;
|
logic [3:0] InstrClassF;
|
||||||
logic cjal, cj, cjr, cjalr;
|
logic cjal, cj, cjr, cjalr, CJumpF, CBranchF;
|
||||||
|
logic JumpF, BranchF;
|
||||||
|
|
||||||
assign CompressedOpcF = {PostSpillInstrRawF[1:0], PostSpillInstrRawF[15:13]};
|
assign CompressedOpcF = {PostSpillInstrRawF[1:0], PostSpillInstrRawF[15:13]};
|
||||||
|
|
||||||
@ -175,24 +161,23 @@ module bpred (
|
|||||||
assign cj = CompressedOpcF == 5'h0d;
|
assign cj = CompressedOpcF == 5'h0d;
|
||||||
assign cjr = CompressedOpcF == 5'h14 & ~PostSpillInstrRawF[12] & PostSpillInstrRawF[6:2] == 5'b0 & PostSpillInstrRawF[11:7] != 5'b0;
|
assign cjr = CompressedOpcF == 5'h14 & ~PostSpillInstrRawF[12] & PostSpillInstrRawF[6:2] == 5'b0 & PostSpillInstrRawF[11:7] != 5'b0;
|
||||||
assign cjalr = CompressedOpcF == 5'h14 & PostSpillInstrRawF[12] & PostSpillInstrRawF[6:2] == 5'b0 & PostSpillInstrRawF[11:7] != 5'b0;
|
assign cjalr = CompressedOpcF == 5'h14 & PostSpillInstrRawF[12] & PostSpillInstrRawF[6:2] == 5'b0 & PostSpillInstrRawF[11:7] != 5'b0;
|
||||||
|
assign CJumpF = cjal | cj | cjr | cjalr;
|
||||||
|
assign CBranchF = CompressedOpcF[4:1] == 4'h7;
|
||||||
|
|
||||||
assign InstrClassF[0] = PostSpillInstrRawF[6:0] == 7'h63 |
|
assign JumpF = PostSpillInstrRawF[6:0] == 7'h67 | PostSpillInstrRawF[6:0] == 7'h6F;
|
||||||
(`C_SUPPORTED & CompressedOpcF[4:1] == 4'h7);
|
assign BranchF = PostSpillInstrRawF[6:0] == 7'h63;
|
||||||
|
|
||||||
assign InstrClassF[1] = (PostSpillInstrRawF[6:0] == 7'h67 & (PostSpillInstrRawF[19:15] & 5'h1B) != 5'h01 & (PostSpillInstrRawF[11:7] & 5'h1B) != 5'h01) | // jump register, but not return
|
assign InstrClassF[0] = BranchF | (`C_SUPPORTED & CBranchF);
|
||||||
(PostSpillInstrRawF[6:0] == 7'h6F & (PostSpillInstrRawF[11:7] & 5'h1B) != 5'h01) | // jump, RD != x1 or x5
|
assign InstrClassF[1] = JumpF | (`C_SUPPORTED & (cjal | cj | cj | cjalr));
|
||||||
(`C_SUPPORTED & (cj | (cjr & ((PostSpillInstrRawF[11:7] & 5'h1B) != 5'h01)) ));
|
assign InstrClassF[2] = (JumpF & (PostSpillInstrRawF[19:15] & 5'h1B) == 5'h01) | // return must return to ra or r5
|
||||||
|
|
||||||
assign InstrClassF[2] = PostSpillInstrRawF[6:0] == 7'h67 & (PostSpillInstrRawF[19:15] & 5'h1B) == 5'h01 | // return must return to ra or r5
|
|
||||||
(`C_SUPPORTED & (cjalr | cjr) & ((PostSpillInstrRawF[11:7] & 5'h1B) == 5'h01));
|
(`C_SUPPORTED & (cjalr | cjr) & ((PostSpillInstrRawF[11:7] & 5'h1B) == 5'h01));
|
||||||
|
|
||||||
assign InstrClassF[3] = ((PostSpillInstrRawF[6:0] & 7'h77) == 7'h67 & (PostSpillInstrRawF[11:07] & 5'h1B) == 5'h01) | // jal(r) must link to ra or x5
|
assign InstrClassF[3] = (JumpF & (PostSpillInstrRawF[11:07] & 5'h1B) == 5'h01) | // jal(r) must link to ra or x5
|
||||||
(`C_SUPPORTED & (cjal | (cjalr & (PostSpillInstrRawF[11:7] & 5'h1b) == 5'h01)));
|
(`C_SUPPORTED & (cjal | (cjalr & (PostSpillInstrRawF[11:7] & 5'h1b) == 5'h01)));
|
||||||
|
|
||||||
assign PredInstrClassF = InstrClassF;
|
assign PredInstrClassF = InstrClassF;
|
||||||
assign SelBPPredF = (PredInstrClassF[0] & DirPredictionF[1]) |
|
assign SelBPPredF = (PredInstrClassF[0] & DirPredictionF[1]) |
|
||||||
PredInstrClassF[2] |
|
PredInstrClassF[1];
|
||||||
PredInstrClassF[1] |
|
|
||||||
PredInstrClassF[3];
|
|
||||||
end else begin
|
end else begin
|
||||||
assign PredInstrClassF = BTBPredInstrClassF;
|
assign PredInstrClassF = BTBPredInstrClassF;
|
||||||
assign SelBPPredF = (PredInstrClassF[0] & DirPredictionF[1]) |
|
assign SelBPPredF = (PredInstrClassF[0] & DirPredictionF[1]) |
|
||||||
@ -206,15 +191,13 @@ module bpred (
|
|||||||
|
|
||||||
assign BPPredPCF = PredInstrClassF[2] ? RASPCF : PredPCF;
|
assign BPPredPCF = PredInstrClassF[2] ? RASPCF : PredPCF;
|
||||||
|
|
||||||
assign InstrClassD[3] = (InstrD[6:0] & 7'h77) == 7'h67 & (InstrD[11:07] & 5'h1B) == 5'h01; // jal(r) must link to ra or x5
|
assign InstrClassD[0] = BranchD;
|
||||||
assign InstrClassD[2] = InstrD[6:0] == 7'h67 & (InstrD[19:15] & 5'h1B) == 5'h01; // return must return to ra or r5
|
assign InstrClassD[1] = JumpD ;
|
||||||
assign InstrClassD[1] = (InstrD[6:0] == 7'h67 & (InstrD[19:15] & 5'h1B) != 5'h01 & (InstrD[11:7] & 5'h1B) != 5'h01) | // jump register, but not return
|
assign InstrClassD[2] = JumpD & (InstrD[19:15] & 5'h1B) == 5'h01; // return must return to ra or x5
|
||||||
(InstrD[6:0] == 7'h6F & (InstrD[11:7] & 5'h1B) != 5'h01); // jump, RD != x1 or x5
|
assign InstrClassD[3] = JumpD & (InstrD[11:7] & 5'h1B) == 5'h01; // jal(r) must link to ra or x5
|
||||||
assign InstrClassD[0] = InstrD[6:0] == 7'h63; // branch
|
|
||||||
|
|
||||||
flopenrc #(4) InstrClassRegE(clk, reset, FlushE, ~StallE, InstrClassD, InstrClassE);
|
flopenrc #(4) InstrClassRegE(clk, reset, FlushE, ~StallE, InstrClassD, InstrClassE);
|
||||||
flopenrc #(4) InstrClassRegM(clk, reset, FlushM, ~StallM, InstrClassE, InstrClassM);
|
flopenrc #(4) InstrClassRegM(clk, reset, FlushM, ~StallM, InstrClassE, InstrClassM);
|
||||||
flopenrc #(4) InstrClassRegW(clk, reset, FlushW, ~StallW, InstrClassM, InstrClassW);
|
|
||||||
flopenrc #(1) BPPredWrongMReg(clk, reset, FlushM, ~StallM, BPPredWrongE, BPPredWrongM);
|
flopenrc #(1) BPPredWrongMReg(clk, reset, FlushM, ~StallM, BPPredWrongE, BPPredWrongM);
|
||||||
|
|
||||||
// branch predictor
|
// branch predictor
|
||||||
@ -235,13 +218,10 @@ module bpred (
|
|||||||
assign PredictionPCWrongE = PCCorrectE != PCD;
|
assign PredictionPCWrongE = PCCorrectE != PCD;
|
||||||
|
|
||||||
// branch class prediction wrong.
|
// branch class prediction wrong.
|
||||||
assign WrongPredInstrClassD = PredInstrClassD ^ InstrClassD;
|
assign WrongPredInstrClassD = PredInstrClassD ^ InstrClassD[3:0];
|
||||||
assign AnyWrongPredInstrClassD = |WrongPredInstrClassD;
|
assign AnyWrongPredInstrClassD = |WrongPredInstrClassD;
|
||||||
|
|
||||||
// branch is wrong only if the PC does not match and both the Decode and Fetch stages have valid instructions.
|
// branch is wrong only if the PC does not match and both the Decode and Fetch stages have valid instructions.
|
||||||
<<<<<<< HEAD
|
|
||||||
assign BPPredWrongE = PredictionPCWrongE & InstrValidE & InstrValidD;
|
|
||||||
=======
|
|
||||||
//assign BPPredWrongE = (PredictionPCWrongE & |InstrClassE | (AnyWrongPredInstrClassE & ~|InstrClassE));
|
//assign BPPredWrongE = (PredictionPCWrongE & |InstrClassE | (AnyWrongPredInstrClassE & ~|InstrClassE));
|
||||||
assign BPPredWrongE = PredictionPCWrongE & InstrValidE & InstrValidD;
|
assign BPPredWrongE = PredictionPCWrongE & InstrValidE & InstrValidD;
|
||||||
|
|
||||||
@ -249,7 +229,6 @@ module bpred (
|
|||||||
logic NotMatch;
|
logic NotMatch;
|
||||||
assign BPPredWrongEAlt = PredictionPCWrongE & InstrValidE & InstrValidD; // this does not work for cubic benchmark
|
assign BPPredWrongEAlt = PredictionPCWrongE & InstrValidE & InstrValidD; // this does not work for cubic benchmark
|
||||||
assign NotMatch = BPPredWrongE != BPPredWrongEAlt;
|
assign NotMatch = BPPredWrongE != BPPredWrongEAlt;
|
||||||
>>>>>>> upstream/main
|
|
||||||
|
|
||||||
// Output the predicted PC or corrected PC on miss-predict.
|
// Output the predicted PC or corrected PC on miss-predict.
|
||||||
// Selects the BP or PC+2/4.
|
// Selects the BP or PC+2/4.
|
||||||
@ -274,10 +253,10 @@ module bpred (
|
|||||||
// could be wrong or the fall through address selected for branch predict not taken.
|
// could be wrong or the fall through address selected for branch predict not taken.
|
||||||
// By pipeline the BTB's PC and RAS address through the pipeline we can measure the accuracy of
|
// By pipeline the BTB's PC and RAS address through the pipeline we can measure the accuracy of
|
||||||
// both without the above inaccuracies.
|
// both without the above inaccuracies.
|
||||||
assign BTBPredPCWrongE = (PredPCE != IEUAdrE) & (InstrClassE[0] | InstrClassE[1] | InstrClassE[3]) & PCSrcE;
|
assign BTBPredPCWrongE = (PredPCE != IEUAdrE) & (InstrClassE[0] | InstrClassE[1] & ~InstrClassE[2]) & PCSrcE;
|
||||||
assign RASPredPCWrongE = (RASPCE != IEUAdrE) & InstrClassE[2] & PCSrcE;
|
assign RASPredPCWrongE = (RASPCE != IEUAdrE) & InstrClassE[2] & PCSrcE;
|
||||||
|
|
||||||
assign JumpOrTakenBranchE = (InstrClassE[0] & PCSrcE) | InstrClassE[1] | InstrClassE[3];
|
assign JumpOrTakenBranchE = (InstrClassE[0] & PCSrcE) | InstrClassE[1];
|
||||||
|
|
||||||
flopenrc #(1) JumpOrTakenBranchMReg(clk, reset, FlushM, ~StallM, JumpOrTakenBranchE, JumpOrTakenBranchM);
|
flopenrc #(1) JumpOrTakenBranchMReg(clk, reset, FlushM, ~StallM, JumpOrTakenBranchE, JumpOrTakenBranchM);
|
||||||
|
|
||||||
|
@ -52,7 +52,6 @@ module btb #(parameter Depth = 10 ) (
|
|||||||
logic [`XLEN+3:0] ForwardBTBPrediction, ForwardBTBPredictionF;
|
logic [`XLEN+3:0] ForwardBTBPrediction, ForwardBTBPredictionF;
|
||||||
logic [`XLEN+3:0] TableBTBPredictionF;
|
logic [`XLEN+3:0] TableBTBPredictionF;
|
||||||
logic [`XLEN-1:0] PredPCD;
|
logic [`XLEN-1:0] PredPCD;
|
||||||
logic [3:0] PredInstrClassD; // *** copy of reg outside module
|
|
||||||
logic UpdateEn;
|
logic UpdateEn;
|
||||||
|
|
||||||
// hashing function for indexing the PC
|
// hashing function for indexing the PC
|
||||||
|
@ -33,8 +33,8 @@ module gshare #(parameter k = 10,
|
|||||||
parameter integer TYPE = 1) (
|
parameter integer TYPE = 1) (
|
||||||
input logic clk,
|
input logic clk,
|
||||||
input logic reset,
|
input logic reset,
|
||||||
input logic StallF, StallD, StallE, StallM,
|
input logic StallF, StallD, StallE, StallM, StallW,
|
||||||
input logic FlushD, FlushE, FlushM,
|
input logic FlushD, FlushE, FlushM, FlushW,
|
||||||
output logic [1:0] DirPredictionF,
|
output logic [1:0] DirPredictionF,
|
||||||
output logic DirPredictionWrongE,
|
output logic DirPredictionWrongE,
|
||||||
// update
|
// update
|
||||||
|
@ -36,6 +36,8 @@ module ifu (
|
|||||||
input logic InvalidateICacheM, // Clears all instruction cache valid bits
|
input logic InvalidateICacheM, // Clears all instruction cache valid bits
|
||||||
input logic CSRWriteFenceM, // CSR write or fence instruction, PCNextF = the next valid PC (typically PCE)
|
input logic CSRWriteFenceM, // CSR write or fence instruction, PCNextF = the next valid PC (typically PCE)
|
||||||
input logic InstrValidD, InstrValidE, InstrValidM,
|
input logic InstrValidD, InstrValidE, InstrValidM,
|
||||||
|
input logic BranchD, BranchE,
|
||||||
|
input logic JumpD, JumpE,
|
||||||
// Bus interface
|
// Bus interface
|
||||||
output logic [`PA_BITS-1:0] IFUHADDR, // Bus address from IFU to EBU
|
output logic [`PA_BITS-1:0] IFUHADDR, // Bus address from IFU to EBU
|
||||||
input logic [`XLEN-1:0] HRDATA, // Bus read data from IFU to EBU
|
input logic [`XLEN-1:0] HRDATA, // Bus read data from IFU to EBU
|
||||||
|
@ -161,11 +161,13 @@ module wallypipelinedcore (
|
|||||||
logic FCvtIntE;
|
logic FCvtIntE;
|
||||||
logic CommittedF;
|
logic CommittedF;
|
||||||
logic JumpOrTakenBranchM;
|
logic JumpOrTakenBranchM;
|
||||||
|
logic BranchD, BranchE, JumpD, JumpE;
|
||||||
|
|
||||||
// instruction fetch unit: PC, branch prediction, instruction cache
|
// instruction fetch unit: PC, branch prediction, instruction cache
|
||||||
ifu ifu(.clk, .reset,
|
ifu ifu(.clk, .reset,
|
||||||
.StallF, .StallD, .StallE, .StallM, .StallW, .FlushD, .FlushE, .FlushM, .FlushW,
|
.StallF, .StallD, .StallE, .StallM, .StallW, .FlushD, .FlushE, .FlushM, .FlushW,
|
||||||
.InstrValidM, .InstrValidE, .InstrValidD,
|
.InstrValidM, .InstrValidE, .InstrValidD,
|
||||||
|
.BranchD, .BranchE, .JumpD, .JumpE,
|
||||||
// Fetch
|
// Fetch
|
||||||
.HRDATA, .PCFSpill, .IFUHADDR, .PCNext2F,
|
.HRDATA, .PCFSpill, .IFUHADDR, .PCNext2F,
|
||||||
.IFUStallF, .IFUHBURST, .IFUHTRANS, .IFUHSIZE, .IFUHREADY, .IFUHWRITE,
|
.IFUStallF, .IFUHBURST, .IFUHTRANS, .IFUHSIZE, .IFUHREADY, .IFUHWRITE,
|
||||||
@ -199,6 +201,7 @@ module wallypipelinedcore (
|
|||||||
.Funct3M, // size and signedness to LSU
|
.Funct3M, // size and signedness to LSU
|
||||||
.SrcAM, // to privilege and fpu
|
.SrcAM, // to privilege and fpu
|
||||||
.RdE, .RdM, .FIntResM, .InvalidateICacheM, .FlushDCacheM,
|
.RdE, .RdM, .FIntResM, .InvalidateICacheM, .FlushDCacheM,
|
||||||
|
.BranchD, .BranchE, .JumpD, .JumpE,
|
||||||
// Writeback stage
|
// Writeback stage
|
||||||
.CSRReadValW, .MDUResultW, .FIntDivResultW, .RdW, .ReadDataW(ReadDataW[`XLEN-1:0]),
|
.CSRReadValW, .MDUResultW, .FIntDivResultW, .RdW, .ReadDataW(ReadDataW[`XLEN-1:0]),
|
||||||
.InstrValidM, .InstrValidE, .InstrValidD, .FCvtIntResW, .FCvtIntW,
|
.InstrValidM, .InstrValidE, .InstrValidD, .FCvtIntResW, .FCvtIntW,
|
||||||
|
@ -52,6 +52,10 @@ if {$tech == "sky130"} {
|
|||||||
lappend target_library $s9lib/scc9gena_tt_1.2v_25C.db
|
lappend target_library $s9lib/scc9gena_tt_1.2v_25C.db
|
||||||
} elseif {$tech == "tsmc28"} {
|
} elseif {$tech == "tsmc28"} {
|
||||||
lappend target_library $s10lib/tcbn28hpcplusbwp30p140tt0p9v25c.db
|
lappend target_library $s10lib/tcbn28hpcplusbwp30p140tt0p9v25c.db
|
||||||
|
} elseif {$tech == "tsmc28psyn"} {
|
||||||
|
set mw_reference_library [list ]
|
||||||
|
lappend target_library $s10lib/tcbn28hpcplusbwp30p140tt0p9v25c.db
|
||||||
|
lappend mw_reference_library $MW_REFERENCE_LIBRARY/tcbn28hpcplusbwp30p140
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set up DesignWare cache read and write directories to speed up compile.
|
# Set up DesignWare cache read and write directories to speed up compile.
|
||||||
|
@ -30,8 +30,6 @@ export SAIFPOWER ?= 0
|
|||||||
OLDCONFIGDIR ?= ${WALLY}/config
|
OLDCONFIGDIR ?= ${WALLY}/config
|
||||||
export CONFIGDIR ?= $(OUTPUTDIR)/config
|
export CONFIGDIR ?= $(OUTPUTDIR)/config
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@echo " Basic synthesis procedure for Wally:"
|
@echo " Basic synthesis procedure for Wally:"
|
||||||
@echo " Invoke with make synth"
|
@echo " Invoke with make synth"
|
||||||
@ -130,7 +128,6 @@ mkdirecs:
|
|||||||
@mkdir -p $(OUTPUTDIR)/mapped
|
@mkdir -p $(OUTPUTDIR)/mapped
|
||||||
@mkdir -p $(OUTPUTDIR)/unmapped
|
@mkdir -p $(OUTPUTDIR)/unmapped
|
||||||
|
|
||||||
|
|
||||||
synth: mkdirecs configs rundc clean
|
synth: mkdirecs configs rundc clean
|
||||||
|
|
||||||
rundc:
|
rundc:
|
||||||
|
@ -16,7 +16,7 @@ def mask(command):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
techs = ['sky90', 'tsmc28']
|
techs = ['sky90', 'tsmc28', 'tsmc28psyn']
|
||||||
allConfigs = ['rv32gc', 'rv32imc', 'rv64gc', 'rv64imc', 'rv32e', 'rv32i', 'rv64i']
|
allConfigs = ['rv32gc', 'rv32imc', 'rv64gc', 'rv64imc', 'rv32e', 'rv32i', 'rv64i']
|
||||||
freqVaryPct = [-20, -12, -8, -6, -4, -2, 0, 2, 4, 6, 8, 12, 20]
|
freqVaryPct = [-20, -12, -8, -6, -4, -2, 0, 2, 4, 6, 8, 12, 20]
|
||||||
# freqVaryPct = [-20, -10, 0, 10, 20]
|
# freqVaryPct = [-20, -10, 0, 10, 20]
|
||||||
|
@ -126,6 +126,7 @@ module testbench;
|
|||||||
|
|
||||||
`ifdef USE_IMPERAS_DV
|
`ifdef USE_IMPERAS_DV
|
||||||
trace2log idv_trace2log(rvvi);
|
trace2log idv_trace2log(rvvi);
|
||||||
|
trace2cov idv_trace2cov(rvvi);
|
||||||
|
|
||||||
// enabling of comparison types
|
// enabling of comparison types
|
||||||
trace2api #(.CMP_PC (1),
|
trace2api #(.CMP_PC (1),
|
||||||
|
@ -54,7 +54,6 @@ string tvpaths[] = '{
|
|||||||
"bd_speedopt_speed/src/cubic/cubic", // cubic is likely going to removed when embench 2.0 launches
|
"bd_speedopt_speed/src/cubic/cubic", // cubic is likely going to removed when embench 2.0 launches
|
||||||
"bd_speedopt_speed/src/aha-mont64/aha-mont64",
|
"bd_speedopt_speed/src/aha-mont64/aha-mont64",
|
||||||
"bd_speedopt_speed/src/crc32/crc32",
|
"bd_speedopt_speed/src/crc32/crc32",
|
||||||
"bd_speedopt_speed/src/cubic/cubic", // cubic is likely going to removed when embench 2.0 launches
|
|
||||||
"bd_speedopt_speed/src/edn/edn",
|
"bd_speedopt_speed/src/edn/edn",
|
||||||
"bd_speedopt_speed/src/huffbench/huffbench",
|
"bd_speedopt_speed/src/huffbench/huffbench",
|
||||||
"bd_speedopt_speed/src/matmult-int/matmult-int",
|
"bd_speedopt_speed/src/matmult-int/matmult-int",
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
#Kip Macsai-Goren and Kevin Kim
|
|
||||||
#Purpose is to manually make the B extension tests
|
|
||||||
import os
|
|
||||||
|
|
||||||
f = open("genBScript.sh", "w")
|
|
||||||
WALLY = os.getenv("WALLY")
|
|
||||||
os.chdir(f"{WALLY}/tests/riscof/riscof_work/rv64i_m/B/src")
|
|
||||||
|
|
||||||
lines = ""
|
|
||||||
|
|
||||||
#BUILDS B TESTS
|
|
||||||
for testname in os.listdir():
|
|
||||||
lines = lines + f"""cd {WALLY}/tests/riscof/riscof_work/rv64i_m/B/src/{testname}/ref;riscv64-unknown-elf-gcc -march=rv64izba_zbb_zbc_zbs -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles -T {WALLY}/tests/riscof/sail_cSim/env/link.ld -I {WALLY}/tests/riscof/sail_cSim/env/ -I {WALLY}/addins/riscv-arch-test/riscv-test-suite/env -mabi=lp64 {WALLY}/addins/riscv-arch-test/riscv-test-suite/rv64i_m/B/src/{testname} -o ref.elf -DTEST_CASE_1=True -DXLEN=64;riscv64-unknown-elf-objdump -D ref.elf > ref.elf.objdump;riscv_sim_RV64 -z268435455 -i --test-signature={WALLY}/tests/riscof/riscof_work/rv64i_m/B/src/{testname}/ref/Reference-sail_c_simulator.signature ref.elf > add.uw-01.log 2>&1;
|
|
||||||
rsync -a {WALLY}/tests/riscof/riscof_work/rv64i_m/ {WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/ || echo "error suppressed";
|
|
||||||
riscv64-unknown-elf-elf2hex --bit-width 64 --input {WALLY}/tests/riscof/riscof_work/rv64i_m/B/src/{testname}/ref/ref.elf --output {WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/B/src/{testname}/ref/ref.elf.memfile;
|
|
||||||
extractFunctionRadix.sh {WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/B/src/{testname}/ref/ref.elf.objdump;
|
|
||||||
"""
|
|
||||||
|
|
||||||
os.chdir(f"{WALLY}/tests/riscof/riscof_work/rv64i_m/I/src")
|
|
||||||
|
|
||||||
#BUILDS I TESTS
|
|
||||||
for testname in os.listdir():
|
|
||||||
lines = lines + f"""cd {WALLY}/tests/riscof/riscof_work/rv64i_m/I/src/{testname}/ref;riscv64-unknown-elf-gcc -march=rv64izba_zbb_zbc_zbs -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles -T {WALLY}/tests/riscof/sail_cSim/env/link.ld -I {WALLY}/tests/riscof/sail_cSim/env/ -I {WALLY}/addins/riscv-arch-test/riscv-test-suite/env -mabi=lp64 {WALLY}/addins/riscv-arch-test/riscv-test-suite/rv64i_m/I/src/{testname} -o ref.elf -DTEST_CASE_1=True -DXLEN=64;riscv64-unknown-elf-objdump -D ref.elf > ref.elf.objdump;riscv_sim_RV64 -z268435455 -i --test-signature={WALLY}/tests/riscof/riscof_work/rv64i_m/I/src/{testname}/ref/Reference-sail_c_simulator.signature ref.elf > add.uw-01.log 2>&1;
|
|
||||||
rsync -a {WALLY}/tests/riscof/riscof_work/rv64i_m/ {WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/ || echo "error suppressed";
|
|
||||||
riscv64-unknown-elf-elf2hex --bit-width 64 --input {WALLY}/tests/riscof/riscof_work/rv64i_m/I/src/{testname}/ref/ref.elf --output {WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I/src/{testname}/ref/ref.elf.memfile;
|
|
||||||
extractFunctionRadix.sh {WALLY}/tests/riscof/work/riscv-arch-test/rv64i_m/I/src/{testname}/ref/ref.elf.objdump;
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
f.write(lines)
|
|
||||||
f.close()
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
|||||||
hart_ids: [0]
|
hart_ids: [0]
|
||||||
hart0:
|
hart0:
|
||||||
#ISA: RV32IMAFDCZicsr_Zifencei
|
#ISA: RV32IMAFDCZicsr_Zifencei
|
||||||
ISA: RV32IMACZicsr_Zifencei_Zba_Zbb_Zbc_Zbs
|
ISA: RV32IMAFDCZicsr_Zifencei_Zba_Zbb_Zbc_Zbs
|
||||||
physical_addr_sz: 32
|
physical_addr_sz: 32
|
||||||
User_Spec_Version: '2.3'
|
User_Spec_Version: '2.3'
|
||||||
supported_xlen: [32]
|
supported_xlen: [32]
|
||||||
misa:
|
misa:
|
||||||
reset-val: 0x40001105
|
reset-val: 0x4000112D
|
||||||
rv32:
|
rv32:
|
||||||
accessible: true
|
accessible: true
|
||||||
mxl:
|
mxl:
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
hart_ids: [0]
|
hart_ids: [0]
|
||||||
hart0:
|
hart0:
|
||||||
# ISA: RV64IMAFDCSUZicsr_Zifencei
|
# ISA: RV64IMAFDCSUZicsr_Zifencei
|
||||||
ISA: RV64IMACSUZicsr_Zifencei_Zba_Zbb_Zbc_Zbs
|
ISA: RV64IMAFDCSUZicsr_Zifencei_Zba_Zbb_Zbc_Zbs
|
||||||
physical_addr_sz: 56
|
physical_addr_sz: 56
|
||||||
User_Spec_Version: '2.3'
|
User_Spec_Version: '2.3'
|
||||||
supported_xlen: [64]
|
supported_xlen: [64]
|
||||||
misa:
|
misa:
|
||||||
reset-val: 0x8000000000141105
|
reset-val: 0x800000000014112D
|
||||||
rv32:
|
rv32:
|
||||||
accessible: false
|
accessible: false
|
||||||
rv64:
|
rv64:
|
||||||
|
Loading…
Reference in New Issue
Block a user