mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
cleanup of cvw top
This commit is contained in:
parent
9b8aa188f8
commit
c565ae3a51
252
src/cvw.sv
252
src/cvw.sv
@ -37,12 +37,12 @@ package cvw;
|
||||
`include "BranchPredictorType.vh"
|
||||
|
||||
typedef struct packed {
|
||||
int XLEN; // Machine width (32 or 64)
|
||||
logic IEEE754; // IEEE754 NaN handling (0 = use RISC-V NaN propagation instead)
|
||||
int MISA; // Machine Instruction Set Architecture
|
||||
int AHBW; // AHB bus width (usually = XLEN)
|
||||
int RAM_LATENCY; // Latency to stress AHB
|
||||
logic BURST_EN; // Support AHB Burst Mode
|
||||
int XLEN; // Machine width (32 or 64)
|
||||
logic IEEE754; // IEEE754 NaN handling (0 = use RISC-V NaN propagation instead)
|
||||
int MISA; // Machine Instruction Set Architecture
|
||||
int AHBW; // AHB bus width (usually = XLEN)
|
||||
int RAM_LATENCY; // Latency to stress AHB
|
||||
logic BURST_EN; // Support AHB Burst Mode
|
||||
|
||||
// RISC-V Features
|
||||
logic ZICSR_SUPPORTED;
|
||||
@ -74,12 +74,12 @@ typedef struct packed {
|
||||
logic DCACHE_SUPPORTED;
|
||||
logic ICACHE_SUPPORTED;
|
||||
|
||||
// TLB configuration. Entries should be a power of 2
|
||||
// TLB configuration. Entries should be a power of 2
|
||||
int ITLB_ENTRIES;
|
||||
int DTLB_ENTRIES;
|
||||
|
||||
// Cache configuration. Sizes should be a power of two
|
||||
// typical configuration 4 ways, 4096 ints per way, 256 bit or more lines
|
||||
// Cache configuration. Sizes should be a power of two
|
||||
// typical configuration 4 ways, 4096 ints per way, 256 bit or more lines
|
||||
int DCACHE_NUMWAYS;
|
||||
int DCACHE_WAYSIZEINBYTES;
|
||||
int DCACHE_LINELENINBITS;
|
||||
@ -88,23 +88,23 @@ typedef struct packed {
|
||||
int ICACHE_LINELENINBITS;
|
||||
int CACHE_SRAMLEN;
|
||||
|
||||
// Integer Divider Configuration
|
||||
// IDIV_BITSPERCYCLE must be 1, 2, or 4
|
||||
// Integer Divider Configuration
|
||||
// IDIV_BITSPERCYCLE must be 1, 2, or 4
|
||||
int IDIV_BITSPERCYCLE;
|
||||
logic IDIV_ON_FPU;
|
||||
|
||||
// Legal number of PMP entries are 0, 16, or 64
|
||||
// Legal number of PMP entries are 0, 16, or 64
|
||||
int PMP_ENTRIES;
|
||||
|
||||
// Address space
|
||||
// Address space
|
||||
logic [63:0] RESET_VECTOR;
|
||||
|
||||
// WFI Timeout Wait
|
||||
// WFI Timeout Wait
|
||||
int WFI_TIMEOUT_BIT;
|
||||
|
||||
// Peripheral Addresses
|
||||
// Peripheral memory space extends from BASE to BASE+RANGE
|
||||
// Range should be a thermometer code with 0's in the upper bits and 1s in the lower bits
|
||||
// Peripheral Addresses
|
||||
// Peripheral memory space extends from BASE to BASE+RANGE
|
||||
// Range should be a thermometer code with 0's in the upper bits and 1s in the lower bits
|
||||
logic DTIM_SUPPORTED;
|
||||
logic [63:0] DTIM_BASE;
|
||||
logic [63:0] DTIM_RANGE;
|
||||
@ -141,16 +141,16 @@ typedef struct packed {
|
||||
logic [63:0] SPI_BASE;
|
||||
logic [63:0] SPI_RANGE;
|
||||
|
||||
// Test modes
|
||||
// Test modes
|
||||
|
||||
// Tie GPIO outputs back to inputs
|
||||
// Tie GPIO outputs back to inputs
|
||||
logic GPIO_LOOPBACK_TEST;
|
||||
logic SPI_LOOPBACK_TEST;
|
||||
|
||||
// Hardware configuration
|
||||
|
||||
// Hardware configuration
|
||||
int UART_PRESCALE ;
|
||||
|
||||
// Interrupt configuration
|
||||
// Interrupt configuration
|
||||
int PLIC_NUM_SRC;
|
||||
logic PLIC_NUM_SRC_LT_32;
|
||||
int PLIC_GPIO_ID;
|
||||
@ -158,31 +158,31 @@ typedef struct packed {
|
||||
int PLIC_SPI_ID;
|
||||
int PLIC_SDC_ID;
|
||||
|
||||
logic BPRED_SUPPORTED;
|
||||
logic [31:0] BPRED_TYPE;
|
||||
int BPRED_NUM_LHR;
|
||||
int BPRED_SIZE;
|
||||
int BTB_SIZE;
|
||||
int RAS_SIZE;
|
||||
logic INSTR_CLASS_PRED; // is class predictor enabled
|
||||
logic BPRED_SUPPORTED;
|
||||
logic [31:0] BPRED_TYPE;
|
||||
int BPRED_NUM_LHR;
|
||||
int BPRED_SIZE;
|
||||
int BTB_SIZE;
|
||||
int RAS_SIZE;
|
||||
logic INSTR_CLASS_PRED; // is class predictor enabled
|
||||
|
||||
// FPU division architecture
|
||||
// FPU division architecture
|
||||
int RADIX;
|
||||
int DIVCOPIES;
|
||||
|
||||
// bit manipulation
|
||||
// bit manipulation
|
||||
logic ZBA_SUPPORTED;
|
||||
logic ZBB_SUPPORTED;
|
||||
logic ZBC_SUPPORTED;
|
||||
logic ZBS_SUPPORTED;
|
||||
|
||||
// compressed
|
||||
// compressed
|
||||
logic ZCA_SUPPORTED;
|
||||
logic ZCB_SUPPORTED;
|
||||
logic ZCD_SUPPORTED;
|
||||
logic ZCF_SUPPORTED;
|
||||
|
||||
// Cryptography
|
||||
// Cryptography
|
||||
logic ZBKB_SUPPORTED;
|
||||
logic ZBKC_SUPPORTED;
|
||||
logic ZBKX_SUPPORTED;
|
||||
@ -191,112 +191,112 @@ typedef struct packed {
|
||||
logic ZKNH_SUPPORTED;
|
||||
logic ZKN_SUPPORTED;
|
||||
|
||||
// Memory synthesis configuration
|
||||
// Memory synthesis configuration
|
||||
logic USE_SRAM;
|
||||
|
||||
// constants defining different privilege modes
|
||||
// defined in Table 1.1 of the privileged spec
|
||||
logic [1:0] M_MODE ;
|
||||
logic [1:0] S_MODE ;
|
||||
logic [1:0] U_MODE ;
|
||||
// constants defining different privilege modes
|
||||
// defined in Table 1.1 of the privileged spec
|
||||
logic [1:0] M_MODE ;
|
||||
logic [1:0] S_MODE ;
|
||||
logic [1:0] U_MODE ;
|
||||
|
||||
// Virtual Memory Constants
|
||||
int VPN_SEGMENT_BITS;
|
||||
int VPN_BITS;
|
||||
int PPN_BITS;
|
||||
int PA_BITS;
|
||||
int SVMODE_BITS;
|
||||
int ASID_BASE;
|
||||
int ASID_BITS;
|
||||
// Virtual Memory Constants
|
||||
int VPN_SEGMENT_BITS;
|
||||
int VPN_BITS;
|
||||
int PPN_BITS;
|
||||
int PA_BITS;
|
||||
int SVMODE_BITS;
|
||||
int ASID_BASE;
|
||||
int ASID_BITS;
|
||||
|
||||
// constants to check SATP_MODE against
|
||||
// defined in Table 4.3 of the privileged spec
|
||||
logic [3:0] NO_TRANSLATE;
|
||||
logic [3:0] SV32;
|
||||
logic [3:0] SV39;
|
||||
logic [3:0] SV48;
|
||||
// constants to check SATP_MODE against
|
||||
// defined in Table 4.3 of the privileged spec
|
||||
logic [3:0] NO_TRANSLATE;
|
||||
logic [3:0] SV32;
|
||||
logic [3:0] SV39;
|
||||
logic [3:0] SV48;
|
||||
|
||||
// macros to define supported modes
|
||||
logic A_SUPPORTED;
|
||||
logic B_SUPPORTED;
|
||||
logic C_SUPPORTED;
|
||||
logic D_SUPPORTED;
|
||||
logic E_SUPPORTED;
|
||||
logic F_SUPPORTED;
|
||||
logic I_SUPPORTED;
|
||||
logic M_SUPPORTED;
|
||||
logic Q_SUPPORTED;
|
||||
logic S_SUPPORTED;
|
||||
logic U_SUPPORTED;
|
||||
// macros to define supported modes
|
||||
logic A_SUPPORTED;
|
||||
logic B_SUPPORTED;
|
||||
logic C_SUPPORTED;
|
||||
logic D_SUPPORTED;
|
||||
logic E_SUPPORTED;
|
||||
logic F_SUPPORTED;
|
||||
logic I_SUPPORTED;
|
||||
logic M_SUPPORTED;
|
||||
logic Q_SUPPORTED;
|
||||
logic S_SUPPORTED;
|
||||
logic U_SUPPORTED;
|
||||
|
||||
// logarithm of XLEN, used for number of index bits to select
|
||||
int LOG_XLEN;
|
||||
// logarithm of XLEN, used for number of index bits to select
|
||||
int LOG_XLEN;
|
||||
|
||||
// Number of 64 bit PMP Configuration Register entries (or pairs of 32 bit entries)
|
||||
int PMPCFG_ENTRIES;
|
||||
// Number of 64 bit PMP Configuration Register entries (or pairs of 32 bit entries)
|
||||
int PMPCFG_ENTRIES;
|
||||
|
||||
// Floating point constants for Quad, Double, Single, and Half precisions
|
||||
int Q_LEN;
|
||||
int Q_NE;
|
||||
int Q_NF;
|
||||
int Q_BIAS;
|
||||
logic [1:0] Q_FMT;
|
||||
int D_LEN;
|
||||
int D_NE;
|
||||
int D_NF;
|
||||
int D_BIAS;
|
||||
logic [1:0] D_FMT;
|
||||
int S_LEN;
|
||||
int S_NE;
|
||||
int S_NF;
|
||||
int S_BIAS;
|
||||
logic [1:0] S_FMT;
|
||||
int H_LEN;
|
||||
int H_NE;
|
||||
int H_NF;
|
||||
int H_BIAS;
|
||||
logic [1:0] H_FMT;
|
||||
// Floating point constants for Quad, Double, Single, and Half precisions
|
||||
int Q_LEN;
|
||||
int Q_NE;
|
||||
int Q_NF;
|
||||
int Q_BIAS;
|
||||
logic [1:0] Q_FMT;
|
||||
int D_LEN;
|
||||
int D_NE;
|
||||
int D_NF;
|
||||
int D_BIAS;
|
||||
logic [1:0] D_FMT;
|
||||
int S_LEN;
|
||||
int S_NE;
|
||||
int S_NF;
|
||||
int S_BIAS;
|
||||
logic [1:0] S_FMT;
|
||||
int H_LEN;
|
||||
int H_NE;
|
||||
int H_NF;
|
||||
int H_BIAS;
|
||||
logic [1:0] H_FMT;
|
||||
|
||||
// Floating point length FLEN and number of exponent (NE) and fraction (NF) bits
|
||||
int FLEN;
|
||||
int LOGFLEN;
|
||||
int NE ;
|
||||
int NF ;
|
||||
logic [1:0] FMT ;
|
||||
int BIAS;
|
||||
// Floating point length FLEN and number of exponent (NE) and fraction (NF) bits
|
||||
int FLEN;
|
||||
int LOGFLEN;
|
||||
int NE;
|
||||
int NF;
|
||||
logic [1:0] FMT;
|
||||
int BIAS;
|
||||
|
||||
// Floating point constants needed for FPU paramerterization
|
||||
int FPSIZES;
|
||||
int FMTBITS;
|
||||
int LEN1 ;
|
||||
int NE1 ;
|
||||
int NF1 ;
|
||||
logic [1:0] FMT1 ;
|
||||
int BIAS1;
|
||||
int LEN2 ;
|
||||
int NE2 ;
|
||||
int NF2 ;
|
||||
logic [1:0] FMT2 ;
|
||||
int BIAS2;
|
||||
// Floating point constants needed for FPU paramerterization
|
||||
int FPSIZES;
|
||||
int FMTBITS;
|
||||
int LEN1;
|
||||
int NE1;
|
||||
int NF1;
|
||||
logic [1:0] FMT1;
|
||||
int BIAS1;
|
||||
int LEN2;
|
||||
int NE2;
|
||||
int NF2;
|
||||
logic [1:0] FMT2;
|
||||
int BIAS2;
|
||||
|
||||
// largest length in IEU/FPU
|
||||
int CVTLEN;
|
||||
int LLEN;
|
||||
int LOGCVTLEN;
|
||||
int NORMSHIFTSZ;
|
||||
int LOGNORMSHIFTSZ;
|
||||
int FMALEN;
|
||||
// largest length in IEU/FPU
|
||||
int CVTLEN;
|
||||
int LLEN;
|
||||
int LOGCVTLEN;
|
||||
int NORMSHIFTSZ;
|
||||
int LOGNORMSHIFTSZ;
|
||||
int FMALEN;
|
||||
|
||||
// division constants
|
||||
int LOGR ;
|
||||
int RK ;
|
||||
int FPDUR ;
|
||||
int DURLEN ;
|
||||
int DIVb ;
|
||||
int DIVBLEN ;
|
||||
// division constants
|
||||
int LOGR;
|
||||
int RK;
|
||||
int FPDUR;
|
||||
int DURLEN;
|
||||
int DIVb;
|
||||
int DIVBLEN;
|
||||
|
||||
// Debug Module
|
||||
logic DEBUG_SUPPORTED;
|
||||
// Debug Module
|
||||
logic DEBUG_SUPPORTED;
|
||||
} cvw_t;
|
||||
|
||||
endpackage
|
||||
|
Loading…
Reference in New Issue
Block a user