Module ibex_core
Block Diagram of ibex_core
Name |
Default |
Description |
---|---|---|
PMPEnable |
1'b0 |
|
PMPGranularity |
0 |
|
PMPNumRegions |
4 |
|
PMPRstCfg |
ibex_pkg::PmpCfgRst |
|
PMPRstAddr |
ibex_pkg::PmpAddrRst |
|
PMPRstMsecCfg |
ibex_pkg::PmpMseccfgRst |
|
MHPMCounterNum |
0 |
|
MHPMCounterWidth |
40 |
|
RV32E |
1'b0 |
|
RV32M |
RV32MFast |
|
RV32B |
RV32BNone |
|
BranchTargetALU |
1'b0 |
|
WritebackStage |
1'b0 |
|
ICache |
1'b0 |
|
ICacheECC |
1'b0 |
|
BusSizeECC |
BUS_SIZE |
|
TagSizeECC |
IC_TAG_SIZE |
|
LineSizeECC |
IC_LINE_SIZE |
|
BranchPredictor |
1'b0 |
|
DbgTriggerEn |
1'b0 |
|
DbgHwBreakNum |
1 |
|
ResetAll |
1'b0 |
|
RndCnstLfsrSeed |
RndCnstLfsrSeedDefault |
|
RndCnstLfsrPerm |
RndCnstLfsrPermDefault |
|
SecureIbex |
1'b0 |
|
DummyInstructions |
1'b0 |
|
RegFileECC |
1'b0 |
|
RegFileDataWidth |
32 |
|
MemECC |
1'b0 |
|
MemDataWidth |
MemECC?32+7:32 |
|
DmBaseAddr |
32'h1A110000 |
|
DmAddrMask |
32'h00000FFF |
|
DmHaltAddr |
32'h1A110800 |
|
DmExceptionAddr |
32'h1A110808 |
Name |
Type |
Direction |
Description |
---|---|---|---|
clk_i |
wire logic |
input |
Clock and Reset |
rst_ni |
wire logic |
input |
verilator lint_off IMPERFECTSCH |
hart_id_i |
wire logic [31 : 0] |
input |
verilator lint_on IMPERFECTSCH |
boot_addr_i |
wire logic [31 : 0] |
input |
|
instr_req_o |
var logic |
output |
Instruction memory interface |
instr_gnt_i |
wire logic |
input |
|
instr_rvalid_i |
wire logic |
input |
|
instr_addr_o |
var logic [31 : 0] |
output |
|
instr_rdata_i |
wire logic [MemDataWidth - 1 : 0] |
input |
|
instr_err_i |
wire logic |
input |
|
data_req_o |
var logic |
output |
Data memory interface |
data_gnt_i |
wire logic |
input |
|
data_rvalid_i |
wire logic |
input |
|
data_we_o |
var logic |
output |
|
data_be_o |
var logic [3 : 0] |
output |
|
data_addr_o |
var logic [31 : 0] |
output |
|
data_wdata_o |
var logic [MemDataWidth - 1 : 0] |
output |
|
data_rdata_i |
wire logic [MemDataWidth - 1 : 0] |
input |
|
data_err_i |
wire logic |
input |
|
dummy_instr_id_o |
var logic |
output |
Register file interface |
dummy_instr_wb_o |
var logic |
output |
|
rf_raddr_a_o |
var logic [4 : 0] |
output |
|
rf_raddr_b_o |
var logic [4 : 0] |
output |
|
rf_waddr_wb_o |
var logic [4 : 0] |
output |
|
rf_we_wb_o |
var logic |
output |
|
rf_wdata_wb_ecc_o |
var logic [RegFileDataWidth - 1 : 0] |
output |
|
rf_rdata_a_ecc_i |
wire logic [RegFileDataWidth - 1 : 0] |
input |
|
rf_rdata_b_ecc_i |
wire logic [RegFileDataWidth - 1 : 0] |
input |
|
ic_tag_req_o |
var logic [IC_NUM_WAYS - 1 : 0] |
output |
RAMs interface |
ic_tag_write_o |
var logic |
output |
|
ic_tag_addr_o |
var logic [IC_INDEX_W - 1 : 0] |
output |
|
ic_tag_wdata_o |
var logic [TagSizeECC - 1 : 0] |
output |
|
ic_tag_rdata_i |
wire logic [TagSizeECC - 1 : 0] |
input |
|
ic_data_req_o |
var logic [IC_NUM_WAYS - 1 : 0] |
output |
|
ic_data_write_o |
var logic |
output |
|
ic_data_addr_o |
var logic [IC_INDEX_W - 1 : 0] |
output |
|
ic_data_wdata_o |
var logic [LineSizeECC - 1 : 0] |
output |
|
ic_data_rdata_i |
wire logic [LineSizeECC - 1 : 0] |
input |
|
ic_scr_key_valid_i |
wire logic |
input |
|
ic_scr_key_req_o |
var logic |
output |
|
irq_software_i |
wire logic |
input |
Interrupt inputs |
irq_timer_i |
wire logic |
input |
|
irq_external_i |
wire logic |
input |
|
irq_fast_i |
wire logic [14 : 0] |
input |
|
irq_nm_i |
wire logic |
input |
non-maskeable interrupt |
irq_pending_o |
var logic |
output |
|
debug_req_i |
wire logic |
input |
Debug Interface |
crash_dump_o |
var crash_dump_t |
output |
|
double_fault_seen_o |
var logic |
output |
SEC_CM EXCEPTION.CTRL_FLOW.LOCAL_ESC SEC_CM: EXCEPTION.CTRL_FLOW.GLOBAL_ESC |
rvfi_valid |
var logic |
output |
|
rvfi_order |
var logic [63 : 0] |
output |
|
rvfi_insn |
var logic [31 : 0] |
output |
|
rvfi_trap |
var logic |
output |
|
rvfi_halt |
var logic |
output |
|
rvfi_intr |
var logic |
output |
|
rvfi_mode |
var logic [1 : 0] |
output |
|
rvfi_ixl |
var logic [1 : 0] |
output |
|
rvfi_rs1_addr |
var logic [4 : 0] |
output |
|
rvfi_rs2_addr |
var logic [4 : 0] |
output |
|
rvfi_rs3_addr |
var logic [4 : 0] |
output |
|
rvfi_rs1_rdata |
var logic [31 : 0] |
output |
|
rvfi_rs2_rdata |
var logic [31 : 0] |
output |
|
rvfi_rs3_rdata |
var logic [31 : 0] |
output |
|
rvfi_rd_addr |
var logic [4 : 0] |
output |
|
rvfi_rd_wdata |
var logic [31 : 0] |
output |
|
rvfi_pc_rdata |
var logic [31 : 0] |
output |
|
rvfi_pc_wdata |
var logic [31 : 0] |
output |
|
rvfi_mem_addr |
var logic [31 : 0] |
output |
|
rvfi_mem_rmask |
var logic [3 : 0] |
output |
|
rvfi_mem_wmask |
var logic [3 : 0] |
output |
|
rvfi_mem_rdata |
var logic [31 : 0] |
output |
|
rvfi_mem_wdata |
var logic [31 : 0] |
output |
|
rvfi_ext_pre_mip |
var logic [31 : 0] |
output |
|
rvfi_ext_post_mip |
var logic [31 : 0] |
output |
|
rvfi_ext_nmi |
var logic |
output |
|
rvfi_ext_nmi_int |
var logic |
output |
|
rvfi_ext_debug_req |
var logic |
output |
|
rvfi_ext_debug_mode |
var logic |
output |
|
rvfi_ext_rf_wr_suppress |
var logic |
output |
|
rvfi_ext_mcycle |
var logic [63 : 0] |
output |
|
rvfi_ext_mhpmcounters |
var logic [31 : 0] |
output |
|
rvfi_ext_mhpmcountersh |
var logic [31 : 0] |
output |
|
rvfi_ext_ic_scr_key_valid |
var logic |
output |
|
rvfi_ext_irq_valid |
var logic |
output |
|
fetch_enable_i |
wire ibex_mubi_t |
input |
CPU Control Signals SEC_CM: FETCH.CTRL.LC_GATED |
alert_minor_o |
var logic |
output |
|
alert_major_internal_o |
var logic |
output |
|
alert_major_bus_o |
var logic |
output |
|
core_busy_o |
var ibex_mubi_t |
output |
Name |
Kind |
Description |
---|---|---|
ibex_core.IbexMuBiSecureOnBottomBitSet |
immediate assert |
(IbexMuBiOn[0] == 1'b1)
|
ibex_core.IbexMuBiSecureOffBottomBitClear |
immediate assert |
(IbexMuBiOff[0] == 1'b0)
|
ibex_core.NoMemRFWriteWithoutPendingLoad |
concurent assert |
disable iff((!rst_ni)!=='0)(rf_we_lsu |-> outstanding_load_wb)
|
ibex_core.NoMemRFWriteWithoutPendingLoad |
concurent assert |
disable iff((!rst_ni)!=='0)(rf_we_lsu |-> outstanding_load_id)
|
ibex_core.NoMemResponseWithoutPendingAccess |
concurent assert |
disable iff((!rst_ni)!=='0)(data_rvalid_i |-> (outstanding_load_resp | outstanding_store_resp))
|
ibex_core.NoExecWhenFetchEnableNotOn |
concurent assert |
disable iff((!rst_ni)!=='0)(! fetch_enable_raw |=> ((~ instr_valid_id || (pc_id == pc_at_fetch_disable)) && ~ $rose(instr_valid_id)))
|
ibex_core.IbexCsrOpValid |
concurent assert |
disable iff((!rst_ni)!=='0)(instr_valid_id |-> (csr_op inside {CSR_OP_READ, CSR_OP_WRITE, CSR_OP_SET, CSR_OP_CLEAR}))
|
ibex_core.IbexCsrWdataIntKnownKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(csr_op_en)
|
ibex_core.IbexCsrWdataIntKnown |
concurent assert |
disable iff((!rst_ni)!=='0)(csr_op_en |-> ! $isunknown(cs_registers_i.csr_wdata_int))
|
ibex_core.IllegalParamSecure |
immediate assert |
! (SecureIbex && (RV32M == RV32MNone))
|
ibex_core.MultDivFSMIdleOnIdReady |
concurent assert |
disable iff((!rst_ni)!=='0)(id_in_ready |=> ex_block_i.sva_multdiv_fsm_idle)
|
Always Blocks
- always_ff @(posedge clk_i or negedge rst_ni)
Pass the captured irq/debug_req/nmi state to the rvfi_ext interface tracking pipeline.
To correctly capture we need to factor in various enable terms, should there be a fault in this logic we won't tell the DV environment about a trap that should have been taken. So if there's no valid capture we grab the raw values of the irq/debug_req/nmi inputs whatever they are and the DV environment will see if a trap should have been taken but wasn't.
- always_comb @()
Memory address/write data available first cycle of ld/st instruction from register read
- always_comb @()
Capture read data from LSU when it becomes valid
- always_comb @()
Byte enable based on data type
- always_comb @()
Source registers 1 and 2 are read in the first instruction cycle Source register 3 is read in the second instruction cycle.
- always_ff @(posedge clk_i or negedge rst_ni)
RD write register is refreshed only once per cycle and then it is kept stable for the cycle.
Instances
Submodules
- ibex_core
cs_registers_i : ibex_cs_registers
ex_block_i : ibex_ex_block
g_core_busy_non_secure : [if !(SecureIbex)]
g_instr_req_gated_non_secure : [if !(SecureIbex)]
g_no_check_mem_response : [if !(SecureIbex)]
g_no_fcov_rf_ecc_err_a_id : [if !(RegFileECC)]
g_no_fcov_rf_ecc_err_b_id : [if !(RegFileECC)]
g_no_pmp : [if !(PMPEnable)]
g_rvfi_irq_valid : [for (genvar i=0;i<RVFI_STAGES+1;i=i+1)]
g_rvfi_no_rf_wr_suppress_wb : [if !(WritebackStage)]
g_rvfi_stages : [for (genvar i=0;i<RVFI_STAGES;i=i+1)]
gen_no_regfile_ecc : [if !(RegFileECC)]
gen_no_wb_stage : [if !(WritebackStage)]
gen_rvfi_no_wb_stage : [if !(WritebackStage)]
id_stage_i : ibex_id_stage
if_stage_i : ibex_if_stage
load_store_unit_i : ibex_load_store_unit
wb_stage_i : ibex_wb_stage
Flow Diagram of ibex_core
Sub-Instances Diagram of ibex_core
Schematic Diagram of ibex_core
Top level module of the ibex RISC-V core