mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
fixed GPR/FPR scan regression
This commit is contained in:
parent
c8e5a33ae7
commit
31f437b429
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user