fixed GPR/FPR scan regression

This commit is contained in:
Matthew 2024-06-12 10:10:32 -05:00
parent c8e5a33ae7
commit 31f437b429
4 changed files with 21 additions and 6 deletions

View File

@ -25,6 +25,20 @@
// and limitations under the License. // and limitations under the License.
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// TODO List:
// fix CSR scanning
// determine config/permissions of all CSRs
// DCSR and DPC should exist even when not privileged_supported
// test all combinations of XLEN/FLEN
// improve halting / implement "debug mode"
//// Debug Mode = M-mode with stalled pipe
// Flush pipe with NOPs during halt?
// implement better steps
// Alias DPC to PCF/PCNextF?
// (stretch) add system bus access?
module dm import cvw::*; #(parameter cvw_t P) ( module dm import cvw::*; #(parameter cvw_t P) (
input logic clk, input logic clk,
input logic rst, input logic rst,

View File

@ -27,6 +27,9 @@
// and limitations under the License. // and limitations under the License.
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// Note: This module controls all of the per-hart debug state.
// In a multihart system, this module should be instantiated under wallypipelinedcore
module hartcontrol( module hartcontrol(
input logic clk, rst, input logic clk, rst,
input logic NdmReset, // Triggers HaltOnReset behavior input logic NdmReset, // Triggers HaltOnReset behavior

View File

@ -41,7 +41,6 @@ module rad import cvw::*; #(parameter cvw_t P) (
); );
`include "debug.vh" `include "debug.vh"
localparam MISALEN = P.ZICSR_SUPPORTED ? P.XLEN : 0;
localparam TRAPMLEN = P.ZICSR_SUPPORTED ? 1 : 0; localparam TRAPMLEN = P.ZICSR_SUPPORTED ? 1 : 0;
localparam PCMLEN = (P.ZICSR_SUPPORTED | P.BPRED_SUPPORTED) ? P.XLEN : 0; localparam PCMLEN = (P.ZICSR_SUPPORTED | P.BPRED_SUPPORTED) ? P.XLEN : 0;
localparam INSTRMLEN = (P.ZICSR_SUPPORTED | P.A_SUPPORTED) ? 32 : 0; localparam INSTRMLEN = (P.ZICSR_SUPPORTED | P.A_SUPPORTED) ? 32 : 0;
@ -50,13 +49,12 @@ module rad import cvw::*; #(parameter cvw_t P) (
localparam WRITEDATAMLEN = P.XLEN; localparam WRITEDATAMLEN = P.XLEN;
localparam IEUADRMLEN = P.XLEN; localparam IEUADRMLEN = P.XLEN;
localparam READDATAMLEN = P.LLEN; localparam READDATAMLEN = P.LLEN;
localparam SCANCHAINLEN = P.XLEN - 1 localparam SCANCHAINLEN = P.LLEN - 1
+ MISALEN + TRAPMLEN + PCMLEN + INSTRMLEN + TRAPMLEN + PCMLEN + INSTRMLEN
+ MEMRWMLEN + INSTRVALIDMLEN + WRITEDATAMLEN + MEMRWMLEN + INSTRVALIDMLEN + WRITEDATAMLEN
+ IEUADRMLEN + READDATAMLEN; + IEUADRMLEN + READDATAMLEN;
localparam MISA_IDX = MISALEN; localparam TRAPM_IDX = TRAPMLEN;
localparam TRAPM_IDX = MISA_IDX + TRAPMLEN;
localparam PCM_IDX = TRAPM_IDX + PCMLEN; localparam PCM_IDX = TRAPM_IDX + PCMLEN;
localparam INSTRM_IDX = PCM_IDX + INSTRMLEN; localparam INSTRM_IDX = PCM_IDX + INSTRMLEN;
localparam MEMRWM_IDX = INSTRM_IDX + MEMRWMLEN; localparam MEMRWM_IDX = INSTRM_IDX + MEMRWMLEN;
@ -74,6 +72,7 @@ module rad import cvw::*; #(parameter cvw_t P) (
always_comb begin always_comb begin
InvalidRegNo = 0; InvalidRegNo = 0;
RegReadOnly = 0; RegReadOnly = 0;
CSRegNo = 0;
GPRegNo = 0; GPRegNo = 0;
FPRegNo = 0; FPRegNo = 0;
case (Regno) inside case (Regno) inside

View File

@ -111,7 +111,6 @@ module datapath import cvw::*; #(parameter cvw_t P) (
logic [P.XLEN-1:0] IFCvtResultW; // Result from IEU, signle-cycle FPU op, or 2-cycle FCVT float to int logic [P.XLEN-1:0] IFCvtResultW; // Result from IEU, signle-cycle FPU op, or 2-cycle FCVT float to int
logic [P.XLEN-1:0] MulDivResultW; // Multiply always comes from MDU. Divide could come from MDU or FPU (when using fdivsqrt for integer division) logic [P.XLEN-1:0] MulDivResultW; // Multiply always comes from MDU. Divide could come from MDU or FPU (when using fdivsqrt for integer division)
// Debug signals // Debug signals
logic DSCR;
logic [P.XLEN-1:0] DebugGPRWriteD; logic [P.XLEN-1:0] DebugGPRWriteD;
// Decode stage // Decode stage