Module ibex_top
Block Diagram of ibex_top
Name |
Default |
Description |
---|---|---|
PMPEnable |
1'b0 |
|
PMPGranularity |
0 |
|
PMPNumRegions |
4 |
|
MHPMCounterNum |
0 |
|
MHPMCounterWidth |
40 |
|
PMPRstCfg |
ibex_pkg::PmpCfgRst |
|
PMPRstAddr |
ibex_pkg::PmpAddrRst |
|
PMPRstMsecCfg |
ibex_pkg::PmpMseccfgRst |
|
RV32E |
1'b0 |
|
RV32M |
RV32MFast |
|
RV32B |
RV32BNone |
|
RegFile |
RegFileFF |
|
BranchTargetALU |
1'b0 |
|
WritebackStage |
1'b0 |
|
ICache |
1'b0 |
|
ICacheECC |
1'b0 |
|
BranchPredictor |
1'b0 |
|
DbgTriggerEn |
1'b0 |
|
DbgHwBreakNum |
1 |
|
SecureIbex |
1'b0 |
|
ICacheScramble |
1'b0 |
|
ICacheScrNumPrinceRoundsHalf |
2 |
|
RndCnstLfsrSeed |
RndCnstLfsrSeedDefault |
|
RndCnstLfsrPerm |
RndCnstLfsrPermDefault |
|
DmBaseAddr |
32'h1A110000 |
|
DmAddrMask |
32'h00000FFF |
|
DmHaltAddr |
32'h1A110800 |
|
DmExceptionAddr |
32'h1A110808 |
|
RndCnstIbexKey |
RndCnstIbexKeyDefault |
Default seed and nonce for scrambling |
RndCnstIbexNonce |
RndCnstIbexNonceDefault |
Name |
Type |
Direction |
Description |
---|---|---|---|
clk_i |
wire logic |
input |
Clock and Reset |
rst_ni |
wire logic |
input |
|
test_en_i |
wire logic |
input |
enable all clock gates for testing |
ram_cfg_i |
input |
||
hart_id_i |
wire logic [31 : 0] |
input |
|
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 [31 : 0] |
input |
|
instr_rdata_intg_i |
wire logic [6 : 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 [31 : 0] |
output |
|
data_wdata_intg_o |
var logic [6 : 0] |
output |
|
data_rdata_i |
wire logic [31 : 0] |
input |
|
data_rdata_intg_i |
wire logic [6 : 0] |
input |
|
data_err_i |
wire logic |
input |
|
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 |
scramble_key_valid_i |
wire logic |
input |
Scrambling Interface |
scramble_key_i |
wire logic [SCRAMBLE_KEY_W - 1 : 0] |
input |
|
scramble_nonce_i |
wire logic [SCRAMBLE_NONCE_W - 1 : 0] |
input |
|
scramble_req_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 |
|
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 |
alert_minor_o |
var logic |
output |
|
alert_major_internal_o |
var logic |
output |
|
alert_major_bus_o |
var logic |
output |
|
core_sleep_o |
var logic |
output |
|
scan_rst_ni |
wire logic |
input |
DFT bypass controls |
Name |
Kind |
Description |
---|---|---|
ibex_top.ScrambleKeyAppliedAtTagBank_A |
concurent assert |
disable iff((!rst_ni)!=='0)(scramble_key_valid_i |-> (## [0 : 10] (tag_bank.key_valid_i && (tag_bank.key_i == sampled_scramble_key))))
|
ibex_top.ScrambleKeyAppliedAtDataBank_A |
concurent assert |
disable iff((!rst_ni)!=='0)(scramble_key_valid_i |-> (## [0 : 10] (data_bank.key_valid_i && (data_bank.key_i == sampled_scramble_key))))
|
ibex_top.DmHaltAddrInRange_A |
immediate assert |
((DmHaltAddr & ~ DmAddrMask) == DmBaseAddr)
|
ibex_top.DmExceptionAddrInRange_A |
immediate assert |
((DmExceptionAddr & ~ DmAddrMask) == DmBaseAddr)
|
ibex_top.IbexInstrReqX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(instr_req_o)
|
ibex_top.IbexInstrReqPayloadXKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(instr_req_o)
|
ibex_top.IbexInstrReqPayloadX |
concurent assert |
disable iff((!rst_ni)!=='0)(instr_req_o |-> ! $isunknown(instr_addr_o))
|
ibex_top.IbexDataReqX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(data_req_o)
|
ibex_top.IbexDataReqPayloadXKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(data_req_o)
|
ibex_top.IbexDataReqPayloadX |
concurent assert |
disable iff((!rst_ni)!=='0)(data_req_o |-> ! $isunknown({data_we_o, data_be_o, data_addr_o, data_wdata_o, data_wdata_intg_o}))
|
ibex_top.IbexScrambleReqX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(scramble_req_o)
|
ibex_top.IbexDoubleFaultSeenX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(double_fault_seen_o)
|
ibex_top.IbexAlertMinorX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(alert_minor_o)
|
ibex_top.IbexAlertMajorInternalX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(alert_major_internal_o)
|
ibex_top.IbexAlertMajorBusX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(alert_major_bus_o)
|
ibex_top.IbexCoreSleepX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(core_sleep_o)
|
ibex_top.IbexTestEnX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(test_en_i)
|
ibex_top.IbexRamCfgX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(ram_cfg_i)
|
ibex_top.IbexHartIdX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(hart_id_i)
|
ibex_top.IbexBootAddrX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(boot_addr_i)
|
ibex_top.IbexInstrGntX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(instr_gnt_i)
|
ibex_top.IbexInstrRValidX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(instr_rvalid_i)
|
ibex_top.IbexInstrRPayloadXKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(instr_rvalid_i)
|
ibex_top.IbexInstrRPayloadX |
concurent assert |
disable iff((!rst_ni)!=='0)(instr_rvalid_i |-> ! $isunknown({instr_rdata_i, instr_rdata_intg_i, instr_err_i}))
|
ibex_top.IbexDataGntX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(data_gnt_i)
|
ibex_top.IbexDataRValidX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(data_rvalid_i)
|
ibex_top.MaxOutstandingDSideAccessesCorrect |
concurent assert |
disable iff((!rst_ni)!=='0)(data_req_o |-> (~ pending_dside_accesses_q[MaxOutstandingDSideAccesses - 1].valid | data_rvalid_i))
|
ibex_top.PendingAccessTrackingCorrect |
concurent assert |
disable iff((!rst_ni)!=='0)(data_rvalid_i |-> pending_dside_accesses_q[0])
|
ibex_top.IbexDataRPayloadXKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(data_rvalid_i)
|
ibex_top.IbexDataRPayloadX |
concurent assert |
disable iff((!rst_ni)!=='0)(data_rvalid_i |-> ! $isunknown({data_rdata_i, data_rdata_intg_i}))
|
ibex_top.IbexDataRPayloadXKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown((data_rvalid_i & pending_dside_accesses_q[0].is_read))
|
ibex_top.IbexDataRPayloadX |
concurent assert |
disable iff((!rst_ni)!=='0)((data_rvalid_i & pending_dside_accesses_q[0].is_read) |-> ! $isunknown({data_rdata_i, data_rdata_intg_i}))
|
ibex_top.IbexDataRErrPayloadXKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(data_rvalid_i)
|
ibex_top.IbexDataRErrPayloadX |
concurent assert |
disable iff((!rst_ni)!=='0)(data_rvalid_i |-> ! $isunknown(data_err_i))
|
ibex_top.DoubleFaultSinglePulse |
concurent assert |
disable iff((!rst_ni)!=='0)$onehot0(double_fault_seen_delay_buffer)
|
ibex_top.DoubleFaultPulseSeenOnDoubleFault |
concurent assert |
disable iff((!rst_ni)!=='0)(double_fault_seen_predicted |-> | double_fault_seen_delay_buffer)
|
ibex_top.DoubleFaultPulseOnlyOnDoubleFault |
concurent assert |
disable iff((!rst_ni)!=='0)(double_fault_seen_o |-> (## [0 : DoubleFaultSeenLatency] double_fault_seen_predicted))
|
ibex_top.IbexIrqX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown({irq_software_i, irq_timer_i, irq_external_i, irq_fast_i, irq_nm_i})
|
ibex_top.IbexScrambleKeyValidX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(scramble_key_valid_i)
|
ibex_top.IbexScramblePayloadXKnownEnable |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(scramble_key_valid_i)
|
ibex_top.IbexScramblePayloadX |
concurent assert |
disable iff((!rst_ni)!=='0)(scramble_key_valid_i |-> ! $isunknown({scramble_key_i, scramble_nonce_i}))
|
ibex_top.IbexDebugReqX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(debug_req_i)
|
ibex_top.IbexFetchEnableX |
concurent assert |
disable iff((!rst_ni)!=='0)! $isunknown(fetch_enable_i)
|
ibex_top.WaddrAZeroForDummyInstr |
concurent assert |
disable iff((!rst_ni)!=='0)((dummy_instr_wb && rf_we_wb) |-> (rf_waddr_wb == '0))
|
ibex_top.CrashDumpCurrentPCConn |
concurent assert |
disable iff((!rst_ni)!=='0)(crash_dump_o.current_pc === u_ibex_core.pc_id)
|
ibex_top.CrashDumpNextPCConn |
concurent assert |
disable iff((!rst_ni)!=='0)(crash_dump_o.next_pc === u_ibex_core.pc_if)
|
ibex_top.CrashDumpLastDataAddrConn |
concurent assert |
disable iff((!rst_ni)!=='0)(crash_dump_o.last_data_addr === u_ibex_core.load_store_unit_i.addr_last_q)
|
ibex_top.CrashDumpExceptionPCConn |
concurent assert |
disable iff((!rst_ni)!=='0)(crash_dump_o.exception_pc === u_ibex_core.cs_registers_i.mepc_q)
|
ibex_top.CrashDumpExceptionAddrConn |
concurent assert |
disable iff((!rst_ni)!=='0)(crash_dump_o.exception_addr === u_ibex_core.cs_registers_i.mtval_q)
|
ibex_top.MajorAlertOnDMemIntegrityErr |
concurent assert |
disable iff((!rst_ni)!=='0)((data_rvalid_i && | data_ecc_err) |-> (## [0 : 5] alert_major_bus_o))
|
ibex_top.MajorAlertOnIMemIntegrityErr |
concurent assert |
disable iff((!rst_ni)!=='0)((instr_rvalid_i && | instr_ecc_err) |-> (## [0 : 5] alert_major_bus_o))
|
Structs
- typedef struct pending_access_t
Functions
- insn_write_sync_exc_seen(logic[31:0] insn_bits)
Returns 1'b1 if the provided instruction decodes to one that would write the sync_exc_bit of the CPUCTRLSTS CSR
- Parameters:
insn_bits (logic[31:0])
- new_sync_exc_bit(logic[31:0] insn_bits, logic[31:0] rs1, logic cur_bit)
Given an instruction that writes the sync_exc_bit of the CPUCTRLSTS CSR along with the value of the rs1 register read for that instruction and the current predicted sync_exc_bit bit return the new value of the sync_exc_bit after the instruction is executed.
- Parameters:
insn_bits (logic[31:0])
rs1 (logic[31:0])
cur_bit (logic)
Submodules
- ibex_top
core_clock_gate_i : prim_clock_gating
g_clock_en_non_secure : [if !(SecureIbex)]
g_dside_tracker : [for (genvar i=0;i<MaxOutstandingDSideAccesses;i++)]
g_no_secure_ibex_mem_assert : [if !(SecureIbex)]
gen_no_lockstep : [if !(Lockstep)]
gen_no_mem_ecc : [if !(MemECC)]
gen_non_mem_rdata_ecc : [if !(MemECC)]
gen_norams : [if !(ICache)]
gen_noscramble : [if !(ICacheScramble)]
- gen_regfile_ff : []
register_file_i : ibex_register_file_ff
u_fetch_enable_buf : prim_buf
u_ibex_core : ibex_core
u_rf_rdata_a_ecc_buf : prim_buf
u_rf_rdata_b_ecc_buf : prim_buf
Flow Diagram of ibex_top
Sub-Instances Diagram of ibex_top
Schematic Diagram of ibex_top
Top level module of the ibex RISC-V core