Core Integration
The main module is named cv32e40p_core
and can be found in cv32e40p_core.sv
.
Below, the instantiation template is given and the parameters and interfaces are described.
Instantiation Template
cv32e40p_core #(
.FPU ( 0 ),
.NUM_MHPMCOUNTERS ( 1 ),
.PULP_CLUSTER ( 0 ),
.PULP_XPULP ( 0 ),
.PULP_ZFINX ( 0 )
) u_core (
// Clock and reset
.clk_i (),
.rst_ni (),
.scan_cg_en_i (),
// Configuration
.boot_addr_i (),
.mtvec_addr_i (),
.dm_halt_addr_i (),
.dm_exception_addr_i (),
.hart_id_i (),
// Instruction memory interface
.instr_req_o (),
.instr_gnt_i (),
.instr_rvalid_i (),
.instr_addr_o (),
.instr_rdata_i (),
// Data memory interface
.data_req_o (),
.data_gnt_i (),
.data_rvalid_i (),
.data_addr_o (),
.data_be_o (),
.data_wdata_o (),
.data_we_o (),
.data_rdata_i (),
// Auxiliary Processing Unit (APU) interface
.apu_req_o (),
.apu_gnt_i (),
.apu_operands_o (),
.apu_op_o (),
.apu_flags_o (),
.apu_rvalid_i (),
.apu_result_i (),
.apu_flags_i (),
// Interrupt interface
.irq_i (),
.irq_ack_o (),
.irq_id_o (),
// Debug interface
.debug_req_i (),
.debug_havereset_o (),
.debug_running_o (),
.debug_halted_o (),
// Special control signals
.fetch_enable_i (),
.core_sleep_o (),
.pulp_clock_en_i ()
);
Parameters
Note
The non-default (i.e. non-zero) settings of FPU
, PULP_CLUSTER
, PULP_XPULP
and PULP_ZFINX
have not
been verified yet. The default parameter value for PULP_XPULP
will be changed to 1 once it has been verified.
The default configuration reflected below is currently under verification and this verification effort will be
completed first.
Note
The instruction encodings for the PULP instructions is expected to change in a non-backward-compatible manner, see https://github.com/openhwgroup/cv32e40p/issues/452.
Name |
Type/Range |
Default |
Description |
---|---|---|---|
|
bit |
0 |
Enable Floating Point Unit (FPU) support, see Floating Point Unit (FPU) |
|
int (0..29) |
1 |
Number of MHPMCOUNTER performance counters, see Performance Counters |
|
bit |
0 |
Enable PULP Cluster support, see PULP Cluster Extension |
|
bit |
0 |
Enable all of the custom PULP ISA extensions (except cv.elw) (see CORE-V Instruction Set Extensions) and all custom CSRs (see Control and Status Registers). Examples of PULP ISA extensions are post-incrementing load and stores (see Post-Incrementing Load & Store Instructions and Register-Register Load & Store Instructions) and hardware loops (see Hardware Loops). |
|
bit |
0 |
Enable Floating Point instructions to use the General Purpose
register file instead of requiring a dedicated Floating Point
register file, see Floating Point Unit (FPU). Only allowed to be set to 1
if |
Interfaces
Signal(s) |
Width |
Dir |
Description |
---|---|---|---|
|
1 |
in |
Clock signal |
|
1 |
in |
Active-low asynchronous reset |
|
1 |
in |
Scan clock gate enable. Design for test (DfT) related signal. Can be used during scan testing operation to force instantiated clock gate(s) to be enabled. This signal should be 0 during normal / functional operation. |
|
32 |
in |
Boot address. First program counter after
reset = |
|
32 |
in |
|
|
32 |
in |
Address to jump to when entering Debug
Mode, see Debug & Trigger. Must be
word-aligned. Do not change after enabling
core via |
|
32 |
in |
Address to jump to when an exception
occurs when executing code during Debug
Mode, see Debug & Trigger. Must be
word-aligned. Do not change after enabling
core via |
|
32 |
in |
Hart ID, usually static, can be read from Hardware Thread ID (mhartid) and User Hardware Thread ID (uhartid) CSRs |
|
Instruction fetch interface, see Instruction Fetch |
||
|
Load-store unit interface, see Load-Store-Unit (LSU) |
||
|
Auxiliary Processing Unit (APU) interface, see Auxiliary Processing Unit (APU) |
||
|
Interrupt inputs, see Exceptions and Interrupts |
||
|
Debug interface, see Debug & Trigger |
||
|
1 |
in |
Enable the instruction fetch of CV32E40P.
The first instruction fetch after reset
de-assertion will not happen as long as
this signal is 0. |
|
1 |
out |
Core is sleeping, see Sleep Unit. |
|
1 |
in |
PULP clock enable (only used when
|