Update DCSR to include more bits

This commit is contained in:
Matthew 2024-06-27 15:40:41 -05:00
parent 44335fdac9
commit 27256ff01d
10 changed files with 70 additions and 32 deletions

View File

@ -114,11 +114,6 @@ module dm import cvw::*; #(parameter cvw_t P) (
logic AcceptAbstrCmdReqs; logic AcceptAbstrCmdReqs;
logic ValAccRegReq; logic ValAccRegReq;
assign AcceptAbstrCmdReqs = ~|CmdErr & ~Busy & DebugStall; // No cmderr, not busy (another abstrcmd isn't running), and core is halted
// Transfer set, AARSIZE (encoded) isn't bigger than XLEN, RegNo is valid, not writing to readonly RegNo
assign ValAccRegReq = (AARSIZE_ENC[2:0] >= ReqData[`AARSIZE]) & ~InvalidRegNo & ~(ReqData[`AARWRITE] & RegReadOnly);
//// DM register fields //// DM register fields
// DMControl // DMControl
logic AckUnavail; logic AckUnavail;
@ -197,6 +192,9 @@ module dm import cvw::*; #(parameter cvw_t P) (
assign dmreset = rst | ~DmActive; assign dmreset = rst | ~DmActive;
assign ActivateReq = (State == INACTIVE) & ReqValid & (ReqAddress == `DMCONTROL) & (ReqOP == `OP_WRITE); assign ActivateReq = (State == INACTIVE) & ReqValid & (ReqAddress == `DMCONTROL) & (ReqOP == `OP_WRITE);
// Transfer set, AARSIZE (encoded) isn't bigger than XLEN, RegNo is valid, not writing to readonly RegNo
assign ValAccRegReq = (AARSIZE_ENC[2:0] >= ReqData[`AARSIZE]) & ~InvalidRegNo & ~(ReqData[`AARWRITE] & RegReadOnly);
assign AcceptAbstrCmdReqs = ~|CmdErr & ~Busy & DebugStall; // No cmderr, not busy (another abstrcmd isn't running), and core is halted
// DMControl // DMControl
// While an abstract command is executing (busy in abstractcs is high), a debugger must not change // While an abstract command is executing (busy in abstractcs is high), a debugger must not change
@ -236,6 +234,7 @@ module dm import cvw::*; #(parameter cvw_t P) (
assign RspValid = (State == ACK); assign RspValid = (State == ACK);
assign ReqReady = (State != ACK); assign ReqReady = (State != ACK);
// BOZO: review DTM/DM interface
always_ff @(posedge clk) begin always_ff @(posedge clk) begin
if (rst) begin if (rst) begin
State <= INACTIVE; State <= INACTIVE;
@ -472,8 +471,8 @@ module dm import cvw::*; #(parameter cvw_t P) (
assign ScanNext[i] = WriteProgBuff ? ReqData[i] : WriteScanReg & ARMask[i] ? PackedDataReg[i] : ScanReg[i+1]; assign ScanNext[i] = WriteProgBuff ? ReqData[i] : WriteScanReg & ARMask[i] ? PackedDataReg[i] : ScanReg[i+1];
else else
assign ScanNext[i] = WriteScanReg & ARMask[i] ? PackedDataReg[i] : ScanReg[i+1]; assign ScanNext[i] = WriteScanReg & ARMask[i] ? PackedDataReg[i] : ScanReg[i+1];
flopenr #(1) scanreg (.clk, .reset(rst), .en(DebugScanEn | ProgBuffScanEn), .d(ScanNext[i]), .q(ScanReg[i]));
end end
flopenr #(P.LLEN) scanreg (.clk, .reset(rst), .en(DebugScanEn | ProgBuffScanEn), .d(ScanNext), .q(ScanReg[P.LLEN-1:0]));
// Message Registers // Message Registers
assign MaskedScanReg = ARMask & ScanReg[P.LLEN:1]; assign MaskedScanReg = ARMask & ScanReg[P.LLEN:1];

View File

@ -119,7 +119,7 @@ module dmc (
DebugCause <= `CAUSE_STEP; DebugCause <= `CAUSE_STEP;
State <= HALTED; State <= HALTED;
end else end else
Counter <= Counter - 1; Counter <= Counter - 1; // TODO: sync unstall bit in pipe instead of counting cycles
end end
default: ; // empty defualt case to make the linter happy default: ; // empty defualt case to make the linter happy
endcase endcase

View File

@ -96,8 +96,10 @@ module csr import cvw::*; #(parameter cvw_t P) (
// Debug Mode output // Debug Mode output
input logic DebugMode, input logic DebugMode,
input logic [2:0] DebugCause, input logic [2:0] DebugCause,
input logic ebreakM,
output logic ebreakEn, output logic ebreakEn,
output logic Step, output logic Step,
output logic DebugStopTime_REGW,
output logic [P.XLEN-1:0] DPC, output logic [P.XLEN-1:0] DPC,
input logic DCall, input logic DCall,
input logic DRet, input logic DRet,
@ -147,6 +149,7 @@ module csr import cvw::*; #(parameter cvw_t P) (
logic [P.XLEN-1:0] SENVCFG_REGW; logic [P.XLEN-1:0] SENVCFG_REGW;
logic ENVCFG_STCE; // supervisor timer counter enable logic ENVCFG_STCE; // supervisor timer counter enable
logic ENVCFG_FIOM; // fence implies io (presently not used) logic ENVCFG_FIOM; // fence implies io (presently not used)
logic DebugStopCount_REGW;
// only valid unflushed instructions can access CSRs // only valid unflushed instructions can access CSRs
assign InstrValidNotFlushedM = InstrValidM & ~StallW & ~FlushW; assign InstrValidNotFlushedM = InstrValidM & ~StallW & ~FlushW;
@ -309,7 +312,7 @@ module csr import cvw::*; #(parameter cvw_t P) (
.InterruptM, .ExceptionM, .InvalidateICacheM, .ICacheStallF, .DCacheStallM, .DivBusyE, .FDivBusyE, .InterruptM, .ExceptionM, .InvalidateICacheM, .ICacheStallF, .DCacheStallM, .DivBusyE, .FDivBusyE,
.CSRAdrM(CSRAdrDM), .PrivilegeModeW, .CSRWriteValM(CSRWriteValDM), .CSRAdrM(CSRAdrDM), .PrivilegeModeW, .CSRWriteValM(CSRWriteValDM),
.MCOUNTINHIBIT_REGW, .MCOUNTEREN_REGW, .SCOUNTEREN_REGW, .MCOUNTINHIBIT_REGW, .MCOUNTEREN_REGW, .SCOUNTEREN_REGW,
.MTIME_CLINT, .CSRCReadValM, .IllegalCSRCAccessM); .MTIME_CLINT, .DebugStopCount_REGW, .CSRCReadValM, .IllegalCSRCAccessM);
end else begin end else begin
assign CSRCReadValM = '0; assign CSRCReadValM = '0;
assign IllegalCSRCAccessM = 1'b1; // counters aren't enabled assign IllegalCSRCAccessM = 1'b1; // counters aren't enabled
@ -318,8 +321,10 @@ module csr import cvw::*; #(parameter cvw_t P) (
if (P.DEBUG_SUPPORTED) begin:csrd if (P.DEBUG_SUPPORTED) begin:csrd
csrd #(P) csrd(.clk, .reset, .DebugMode, .PrivilegeModeW, csrd #(P) csrd(.clk, .reset, .DebugMode, .PrivilegeModeW,
.CSRWriteDM, .CSRAdrM(CSRAdrDM), .CSRWriteValM(CSRWriteValDM), .CSRDReadValM, .IllegalCSRDAccessM, .CSRWriteDM, .CSRAdrM(CSRAdrDM), .CSRWriteValM(CSRWriteValDM), .CSRDReadValM, .IllegalCSRDAccessM,
.DebugCause, .ebreakEn, .Step, .DPC, .PCM, .DCall); .DebugCause, .ebreakM, .ebreakEn, .Step, .DebugStopTime_REGW, .DebugStopCount_REGW, .DPC, .PCM, .DCall);
end else begin end else begin
assign DebugStopCount_REGW = '0;
assign DebugStopTime_REGW = '0;
assign Step = '0; assign Step = '0;
assign DPC = '0; assign DPC = '0;
assign DebugScanOut = '0; assign DebugScanOut = '0;

View File

@ -57,7 +57,8 @@ module csrc import cvw::*; #(parameter cvw_t P) (
input logic [1:0] PrivilegeModeW, input logic [1:0] PrivilegeModeW,
input logic [P.XLEN-1:0] CSRWriteValM, input logic [P.XLEN-1:0] CSRWriteValM,
input logic [31:0] MCOUNTINHIBIT_REGW, MCOUNTEREN_REGW, SCOUNTEREN_REGW, input logic [31:0] MCOUNTINHIBIT_REGW, MCOUNTEREN_REGW, SCOUNTEREN_REGW,
input logic [63:0] MTIME_CLINT, input logic [63:0] MTIME_CLINT,
input logic DebugStopCount_REGW,
output logic [P.XLEN-1:0] CSRCReadValM, output logic [P.XLEN-1:0] CSRCReadValM,
output logic IllegalCSRCAccessM output logic IllegalCSRCAccessM
); );
@ -138,7 +139,7 @@ module csrc import cvw::*; #(parameter cvw_t P) (
if (P.XLEN==32) begin // write high and low separately if (P.XLEN==32) begin // write high and low separately
logic [P.COUNTERS-1:0] WriteHPMCOUNTERHM; logic [P.COUNTERS-1:0] WriteHPMCOUNTERHM;
logic [P.XLEN-1:0] NextHPMCOUNTERHM[P.COUNTERS-1:0]; logic [P.XLEN-1:0] NextHPMCOUNTERHM[P.COUNTERS-1:0];
assign HPMCOUNTERPlusM[i] = {HPMCOUNTERH_REGW[i], HPMCOUNTER_REGW[i]} + {63'b0, CounterEvent[i] & ~MCOUNTINHIBIT_REGW[i]}; assign HPMCOUNTERPlusM[i] = {HPMCOUNTERH_REGW[i], HPMCOUNTER_REGW[i]} + {63'b0, CounterEvent[i] & ~(MCOUNTINHIBIT_REGW[i] | DebugStopCount_REGW)};
assign WriteHPMCOUNTERHM[i] = CSRMWriteM & (CSRAdrM == MHPMCOUNTERHBASE + i); assign WriteHPMCOUNTERHM[i] = CSRMWriteM & (CSRAdrM == MHPMCOUNTERHBASE + i);
assign NextHPMCOUNTERHM[i] = WriteHPMCOUNTERHM[i] ? CSRWriteValM : HPMCOUNTERPlusM[i][63:32]; assign NextHPMCOUNTERHM[i] = WriteHPMCOUNTERHM[i] ? CSRWriteValM : HPMCOUNTERPlusM[i][63:32];
always_ff @(posedge clk) //, posedge reset) // ModelSim doesn't like syntax of passing array element to flop always_ff @(posedge clk) //, posedge reset) // ModelSim doesn't like syntax of passing array element to flop

View File

@ -38,8 +38,11 @@ module csrd import cvw::*; #(parameter cvw_t P) (
input logic [P.XLEN-1:0] PCM, input logic [P.XLEN-1:0] PCM,
input logic DCall, input logic DCall,
input logic [2:0] DebugCause, input logic [2:0] DebugCause,
input logic ebreakM,
output logic ebreakEn, output logic ebreakEn,
output logic Step, output logic Step,
output logic DebugStopTime_REGW,
output logic DebugStopCount_REGW,
output logic [P.XLEN-1:0] DPC output logic [P.XLEN-1:0] DPC
); );
`include "debug.vh" `include "debug.vh"
@ -54,19 +57,17 @@ module csrd import cvw::*; #(parameter cvw_t P) (
logic WriteDPCM; logic WriteDPCM;
// DCSR fields // DCSR fields
const logic [3:0] DebugVer = 4; const logic [3:0] DebugVer = 4'h4;
const logic ebreakVS = 0; const logic ebreakVS = '0;
const logic ebreakVU = 0; const logic ebreakVU = '0;
logic ebreakM; logic MEbreak;
const logic ebreakS = 0; logic SEbreak;
const logic ebreakU = 0; logic UEbreak;
const logic StepIE = 0; const logic StepIE = '0;
const logic StopCount = 0;
const logic StopTime = 0;
logic [2:0] Cause; logic [2:0] Cause;
const logic V = 0; const logic V = '0;
const logic MPrvEn = 0; const logic MPrvEn = '0;
const logic NMIP = 0; // pending non-maskable interrupt TODO: update const logic NMIP = '0; // pending non-maskable interrupt TODO: update
logic [1:0] Prv; logic [1:0] Prv;
@ -84,13 +85,38 @@ module csrd import cvw::*; #(parameter cvw_t P) (
end else if (DCall) begin end else if (DCall) begin
Prv <= PrivilegeModeW; Prv <= PrivilegeModeW;
Cause <= DebugCause; Cause <= DebugCause;
end else if (WriteDCSRM) begin
Prv <= CSRWriteValM[`PRV];
end end
end end
flopenr #(2) DCSRreg (clk, reset, WriteDCSRM, {CSRWriteValM[`EBREAKM], CSRWriteValM[`STEP]}, {ebreakM, Step}); always_ff @(posedge clk) begin
MEbreak <= '0;
SEbreak <= '0;
UEbreak <= '0;
if (reset) begin
MEbreak <= '0;
SEbreak <= '0;
UEbreak <= '0;
end else begin
if (ebreakM) begin
if (PrivilegeModeW == P.M_MODE) MEbreak <= 1'b1;
if (PrivilegeModeW == P.S_MODE) SEbreak <= 1'b1;
if (PrivilegeModeW == P.U_MODE) UEbreak <= 1'b1;
end else if (WriteDCSRM) begin
MEbreak <= CSRWriteValM[`EBREAKM];
SEbreak <= CSRWriteValM[`EBREAKS];
UEbreak <= CSRWriteValM[`EBREAKU];
end
end
end
assign DCSR = {DebugVer, 10'b0, ebreakVS, ebreakVU, ebreakM, 1'b0, ebreakS, ebreakU, StepIE, flopenr #(3) DCSRreg (clk, reset, WriteDCSRM,
StopCount, StopTime, Cause, V, MPrvEn, NMIP, Step, Prv}; {CSRWriteValM[`STEP], CSRWriteValM[`STOPTIME], CSRWriteValM[`STOPCOUNT]},
{Step, DebugStopTime_REGW, DebugStopCount_REGW});
assign DCSR = {DebugVer, 10'b0, ebreakVS, ebreakVU, MEbreak, 1'b0, SEbreak, UEbreak, StepIE,
DebugStopCount_REGW, DebugStopTime_REGW, Cause, V, MPrvEn, NMIP, Step, Prv};
assign DPCWriteVal = DCall ? PCM : CSRWriteValM; assign DPCWriteVal = DCall ? PCM : CSRWriteValM;
flopenr #(P.XLEN) DPCreg (clk, reset, WriteDPCM | DCall, DPCWriteVal, DPC); flopenr #(P.XLEN) DPCreg (clk, reset, WriteDPCM | DCall, DPCWriteVal, DPC);

View File

@ -104,6 +104,7 @@ module privileged import cvw::*; #(parameter cvw_t P) (
input logic DebugMode, input logic DebugMode,
input logic [2:0] DebugCause, input logic [2:0] DebugCause,
output logic Step, output logic Step,
output logic DebugStopTime_REGW,
output logic [P.XLEN-1:0] DPC, output logic [P.XLEN-1:0] DPC,
input logic DCall, input logic DCall,
input logic DRet, input logic DRet,
@ -167,7 +168,7 @@ module privileged import cvw::*; #(parameter cvw_t P) (
.SetFflagsM, .FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, .ENVCFG_ADUE, .SetFflagsM, .FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, .ENVCFG_ADUE,
.EPCM, .TrapVectorM, .EPCM, .TrapVectorM,
.CSRReadValW, .IllegalCSRAccessM, .BigEndianM, .CSRReadValW, .IllegalCSRAccessM, .BigEndianM,
.DebugMode, .DebugCause, .ebreakEn, .Step, .DPC, .DCall, .DRet, .ExecProgBuf, .DebugMode, .DebugCause, .ebreakM, .ebreakEn, .Step, .DebugStopTime_REGW, .DPC, .DCall, .DRet, .ExecProgBuf,
.DebugSel, .DebugRegAddr, .DebugCapture, .DebugRegUpdate, .DebugScanEn, .DebugScanIn, .DebugScanOut); .DebugSel, .DebugRegAddr, .DebugCapture, .DebugRegUpdate, .DebugScanEn, .DebugScanIn, .DebugScanOut);
// pipeline early-arriving trap sources // pipeline early-arriving trap sources

View File

@ -36,6 +36,7 @@ module clint_apb import cvw::*; #(parameter cvw_t P) (
input logic [P.XLEN/8-1:0] PSTRB, input logic [P.XLEN/8-1:0] PSTRB,
input logic PWRITE, input logic PWRITE,
input logic PENABLE, input logic PENABLE,
input logic DebugStopTime_REGW,
output logic [P.XLEN-1:0] PRDATA, output logic [P.XLEN-1:0] PRDATA,
output logic PREADY, output logic PREADY,
output logic [63:0] MTIME, output logic [63:0] MTIME,
@ -144,7 +145,7 @@ module clint_apb import cvw::*; #(parameter cvw_t P) (
for(i=0;i<P.XLEN/8;i++) for(i=0;i<P.XLEN/8;i++)
if(PSTRB[i]) if(PSTRB[i])
MTIME[32 + i*8 +: 8]<= PWDATA[i*8 +: 8]; MTIME[32 + i*8 +: 8]<= PWDATA[i*8 +: 8];
end else MTIME <= MTIME + 1; end else if (~DebugStopTime_REGW) MTIME <= MTIME + 1;
end end
// Software interrupt when MSIP is set // Software interrupt when MSIP is set

View File

@ -57,6 +57,7 @@ module uncore import cvw::*; #(parameter cvw_t P)(
output logic UARTSout, // UART serial output output logic UARTSout, // UART serial output
input logic SDCIntr, input logic SDCIntr,
input logic SPIIn, input logic SPIIn,
input logic DebugStopTime_REGW,
output logic SPIOut, output logic SPIOut,
output logic [3:0] SPICS output logic [3:0] SPICS
); );
@ -120,7 +121,7 @@ module uncore import cvw::*; #(parameter cvw_t P)(
// memory-mapped I/O peripherals // memory-mapped I/O peripherals
if (P.CLINT_SUPPORTED == 1) begin : clint if (P.CLINT_SUPPORTED == 1) begin : clint
clint_apb #(P) clint(.PCLK, .PRESETn, .PSEL(PSEL[1]), .PADDR(PADDR[15:0]), .PWDATA, .PSTRB, .PWRITE, .PENABLE, clint_apb #(P) clint(.PCLK, .PRESETn, .PSEL(PSEL[1]), .PADDR(PADDR[15:0]), .PWDATA, .PSTRB, .PWRITE, .PENABLE,
.PRDATA(PRDATA[1]), .PREADY(PREADY[1]), .MTIME(MTIME_CLINT), .MTimerInt, .MSwInt); .PRDATA(PRDATA[1]), .PREADY(PREADY[1]), .MTIME(MTIME_CLINT), .MTimerInt, .MSwInt, .DebugStopTime_REGW);
end else begin : clint end else begin : clint
assign MTIME_CLINT = '0; assign MTIME_CLINT = '0;
assign MTimerInt = 1'b0; assign MSwInt = 1'b0; assign MTimerInt = 1'b0; assign MSwInt = 1'b0;

View File

@ -55,6 +55,7 @@ module wallypipelinedcore import cvw::*; #(parameter cvw_t P) (
output logic DebugStall, output logic DebugStall,
input logic ExecProgBuf, input logic ExecProgBuf,
// Debug scan chain // Debug scan chain
output logic DebugStopTime_REGW,
input logic DebugScanEn, // puts scannable flops into scan mode input logic DebugScanEn, // puts scannable flops into scan mode
output logic DebugScanOut, // (misc) scan chain data out output logic DebugScanOut, // (misc) scan chain data out
output logic GPRScanOut, // (GPR) scan chain data out output logic GPRScanOut, // (GPR) scan chain data out
@ -355,13 +356,14 @@ module wallypipelinedcore import cvw::*; #(parameter cvw_t P) (
.STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .STATUS_FS, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .STATUS_FS,
.PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW, .PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW,
.FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, .ENVCFG_ADUE, .wfiM, .IntPendingM, .BigEndianM, .ebreakM, .FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, .ENVCFG_ADUE, .wfiM, .IntPendingM, .BigEndianM, .ebreakM,
.ebreakEn, .ForceBreakPoint, .DebugMode, .DebugCause, .Step, .DPC, .DCall, .ebreakEn, .ForceBreakPoint, .DebugMode, .DebugCause, .Step, .DebugStopTime_REGW, .DPC, .DCall,
.DRet, .ExecProgBuf, .DebugSel(CSRSel), .DebugRegAddr, .DebugCapture, .DRet, .ExecProgBuf, .DebugSel(CSRSel), .DebugRegAddr, .DebugCapture,
.DebugRegUpdate, .DebugScanEn(DebugScanEn & CSRSel), .DebugScanIn, .DebugScanOut(CSRScanOut)); .DebugRegUpdate, .DebugScanEn(DebugScanEn & CSRSel), .DebugScanIn, .DebugScanOut(CSRScanOut));
if (P.DEBUG_SUPPORTED) begin if (P.DEBUG_SUPPORTED) begin
flopenrs #(1) scantrapm (.clk, .reset, .en(DebugCapture), .d(TrapM), .q(), flopenrs #(1) scantrapm (.clk, .reset, .en(DebugCapture), .d(TrapM), .q(),
.scan(DebugScanEn), .scanin(DebugScanIn), .scanout(DebugScanReg[0])); .scan(DebugScanEn), .scanin(DebugScanIn), .scanout(DebugScanReg[0]));
end else begin end else begin
assign DebugStopTime_REGW = '0;
assign DebugScanReg[0] = DebugScanIn; assign DebugScanReg[0] = DebugScanIn;
end end
end else begin end else begin
@ -372,6 +374,7 @@ module wallypipelinedcore import cvw::*; #(parameter cvw_t P) (
EPCM, TrapVectorM, RetM, TrapM, EPCM, TrapVectorM, RetM, TrapM,
sfencevmaM, BigEndianM, wfiM, IntPendingM, CSRScanOut} = '0; sfencevmaM, BigEndianM, wfiM, IntPendingM, CSRScanOut} = '0;
assign DebugScanReg[0] = DebugScanIn; assign DebugScanReg[0] = DebugScanIn;
assign DebugStopTime_REGW = '0;
end end
// multiply/divide unit // multiply/divide unit

View File

@ -100,6 +100,7 @@ module wallypipelinedsoc import cvw::*; #(parameter cvw_t P) (
logic DebugRegUpdate; logic DebugRegUpdate;
logic [P.XLEN-1:0] ProgBufAddr; logic [P.XLEN-1:0] ProgBufAddr;
logic ProgBuffScanEn; logic ProgBuffScanEn;
logic DebugStopTime_REGW;
// synchronize reset to SOC clock domain // synchronize reset to SOC clock domain
synchronizer resetsync(.clk, .d(reset_ext), .q(reset)); synchronizer resetsync(.clk, .d(reset_ext), .q(reset));
@ -112,7 +113,7 @@ module wallypipelinedsoc import cvw::*; #(parameter cvw_t P) (
.HaveReset, .DebugStall, .ExecProgBuf, .DebugScanEn, .DebugScanOut(DebugScanIn), .HaveReset, .DebugStall, .ExecProgBuf, .DebugScanEn, .DebugScanOut(DebugScanIn),
.GPRScanOut(GPRScanIn), .FPRScanOut(FPRScanIn), .CSRScanOut(CSRScanIn), .GPRScanOut(GPRScanIn), .FPRScanOut(FPRScanIn), .CSRScanOut(CSRScanIn),
.DebugScanIn(DebugScanOut), .MiscSel, .GPRSel, .FPRSel, .CSRSel, .DebugRegAddr, .DebugCapture, .DebugScanIn(DebugScanOut), .MiscSel, .GPRSel, .FPRSel, .CSRSel, .DebugRegAddr, .DebugCapture,
.DebugRegUpdate, .ProgBufAddr, .ProgBuffScanEn .DebugRegUpdate, .ProgBufAddr, .ProgBuffScanEn, .DebugStopTime_REGW
); );
// instantiate uncore if a bus interface exists // instantiate uncore if a bus interface exists
@ -121,7 +122,7 @@ module wallypipelinedsoc import cvw::*; #(parameter cvw_t P) (
.HCLK, .HRESETn, .TIMECLK, .HADDR, .HWDATA, .HWSTRB, .HWRITE, .HSIZE, .HBURST, .HPROT, .HCLK, .HRESETn, .TIMECLK, .HADDR, .HWDATA, .HWSTRB, .HWRITE, .HSIZE, .HBURST, .HPROT,
.HTRANS, .HMASTLOCK, .HRDATAEXT, .HREADYEXT, .HRESPEXT, .HRDATA, .HREADY, .HRESP, .HSELEXT, .HTRANS, .HMASTLOCK, .HRDATAEXT, .HREADYEXT, .HRESPEXT, .HRDATA, .HREADY, .HRESP, .HSELEXT,
.HSELEXTSDC, .MTimerInt, .MSwInt, .MExtInt, .SExtInt, .GPIOIN, .GPIOOUT, .GPIOEN, .UARTSin, .HSELEXTSDC, .MTimerInt, .MSwInt, .MExtInt, .SExtInt, .GPIOIN, .GPIOOUT, .GPIOEN, .UARTSin,
.UARTSout, .MTIME_CLINT, .SDCIntr, .SPIIn, .SPIOut, .SPICS .UARTSout, .MTIME_CLINT, .SDCIntr, .SPIIn, .DebugStopTime_REGW, .SPIOut, .SPICS
); );
end else begin end else begin
assign {HRDATA, HREADY, HRESP, HSELEXT, HSELEXTSDC, MTimerInt, MSwInt, MExtInt, SExtInt, assign {HRDATA, HREADY, HRESP, HSELEXT, HSELEXTSDC, MTimerInt, MSwInt, MExtInt, SExtInt,