OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [docs/] [datasheet/] [soc.adoc] - Diff between revs 70 and 72

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 70 Rev 72
Line 39... Line 39...
 
 
The following table shows signals of the processor top entity (`rtl/core/neorv32_top.vhd`).
The following table shows signals of the processor top entity (`rtl/core/neorv32_top.vhd`).
The type of all signals is `std_ulogic` or `std_ulogic_vector`, respectively.
The type of all signals is `std_ulogic` or `std_ulogic_vector`, respectively.
 
 
.Default Values of Ports
.Default Values of Ports
[IMPORTANT]
[NOTE]
All _input signals_ provide default values in case they are not explicitly assigned during instantiation.
All _input signals_ provide default values in case they are not explicitly assigned during instantiation.
For control signals the value `L` (weak pull-down) is used. For serial and parallel data signals
For control signals the value `L` (weak pull-down) is used. For serial and parallel data signals
the value `U` (unknown) is used. Pulled-down signals will not cause "accidental" system crashes
the value `U` (unknown) is used. Pulled-down signals will not cause "accidental" system crashes
since all control signals have defined level.
since all control signals have defined level.
 
 
.Configurable Amount of Channels
.Configurable Amount of Channels
[IMPORTANT]
[NOTE]
Some peripherals allow to configure the number of channels to-be-implemented by a generic (for example the number
Some peripherals allow to configure the number of channels to-be-implemented by a generic (for example the number
of PWM or SLINK channels). The according input/output signals have a fixed sized regardless of the actually configured
of PWM or SLINK channels). The according input/output signals have a fixed sized regardless of the actually configured
amount of channels. If less than the maximum number of channels is configured, only the LSB-aligned channels are used:
amount of channels. If less than the maximum number of channels is configured, only the LSB-aligned channels are used:
in case of an _input port_ the remaining bits/channels are left unconnected; in case of an _output port_ the remaining
in case of an _input port_ the remaining bits/channels are left unconnected; in case of an _output port_ the remaining
bits/channels are hardwired to zero.
bits/channels are hardwired to zero.
Line 146... Line 146...
 
 
[TIP]
[TIP]
The NEORV32 generics allow to configure the system according to your needs. The generics are
The NEORV32 generics allow to configure the system according to your needs. The generics are
used to control implementation of certain CPU extensions and peripheral modules and even allow to
used to control implementation of certain CPU extensions and peripheral modules and even allow to
optimize the system for certain design goals like minimal area or maximum performance. +
optimize the system for certain design goals like minimal area or maximum performance. +
**More information can be found in the user guides' section
 +
https://stnolting.github.io/neorv32/ug/#_application_specific_processor_configuration[Application-Specific Processor Configuration]**.
More information can be found in the user guides' section
 
https://stnolting.github.io/neorv32/ug/#_application_specific_processor_configuration[Application-Specific Processor Configuration].
 
 
[TIP]
[TIP]
Privileged software can determine the actual CPU and processor configuration via the `misa` and the
Privileged software can determine the actual CPU and processor configuration via the <<_misa>> and <<_mxisa>> CSRs (CPU)
<<_system_configuration_information_memory_sysinfo, SYSINFO>> registers.
and the <<_system_configuration_information_memory_sysinfo, SYSINFO>> (processor) memory-mapped registers.
 
 
[TIP]
[TIP]
Run a quick simulation using the provided simulation/GHDL scripts (https://stnolting.github.io/neorv32/ug/#_hello_world)
Run a quick simulation using the provided simulation/GHDL scripts (https://stnolting.github.io/neorv32/ug/#_hello_world)
to verify the configuration of the processor generics is valid.
to verify the configuration of the processor generics is valid.
 
 
Line 217... Line 218...
 
 
[cols="4,4,2"]
[cols="4,4,2"]
[frame="all",grid="none"]
[frame="all",grid="none"]
|======
|======
| **HW_THREAD_ID** | _natural_ | 0
| **HW_THREAD_ID** | _natural_ | 0
3+| The hart ID of the CPU. Software can retrieve this value from the `mhartid` CSR.
3+| The hart ID of the CPU. Software can retrieve this value from the <<_mhartid>> CSR.
Note that hart IDs must be unique within a system.
Note that hart IDs must be unique within a system.
|======
|======
 
 
 
 
:sectnums!:
:sectnums!:
Line 238... Line 239...
 
 
// ####################################################################################################################
// ####################################################################################################################
:sectnums:
:sectnums:
==== RISC-V CPU Extensions
==== RISC-V CPU Extensions
 
 
 
.Discovering ISA Extensions
[TIP]
[TIP]
See section <<_instruction_sets_and_extensions>> for more information. The configuration of the RISC-V _main_ ISA extensions
See section <<_instruction_sets_and_extensions>> for more information. The configuration of the RISC-V _main_ ISA extensions
(like `M`) can be determined via the <<_misa>> CSR. The configuration of ISA _sub-extensions_ (like `Zicsr`) and _extension options_
(like `M`) can be determined via the <<_misa>> CSR. The configuration of ISA _sub-extensions_ (like `Zicsr`) and _tuning options_
can be determined via memory-mapped registers of the <<_system_configuration_information_memory_sysinfo>> module.
can be determined via the NEORV32-specific <<_mxisa>> CSR.
 
 
 
 
:sectnums!:
:sectnums!:
===== _CPU_EXTENSION_RISCV_A_
===== _CPU_EXTENSION_RISCV_A_
 
 
Line 353... Line 355...
 
 
[cols="4,4,2"]
[cols="4,4,2"]
[frame="all",grid="none"]
[frame="all",grid="none"]
|======
|======
| **CPU_EXTENSION_RISCV_Zicntr** | _boolean_ | true
| **CPU_EXTENSION_RISCV_Zicntr** | _boolean_ | true
3+| Implement the basic CPU counter CSRs (`time[h]`, `[m]cycle[h]`, `[m]instret[h]`) when true.
3+| Implement the basic CPU <<_machine_counter_and_timer_csrs>> (`time[h]`, `[m]cycle[h]`, `[m]instret[h]`) when true.
Enabling this extension will set the  _SYSINFO_CPU_ZICNTR_ flag in the `CPU` <<_system_configuration_information_memory_sysinfo, SYSINFO>> register.
 
See section <<_zicntr_cpu_base_counters>> for more information.
See section <<_zicntr_cpu_base_counters>> for more information.
|======
|======
 
 
 
 
:sectnums!:
:sectnums!:
Line 367... Line 368...
[cols="4,4,2"]
[cols="4,4,2"]
[frame="all",grid="none"]
[frame="all",grid="none"]
|======
|======
| **CPU_EXTENSION_RISCV_Zihpm** | _boolean_ | false
| **CPU_EXTENSION_RISCV_Zihpm** | _boolean_ | false
3+| Implement hardware performance monitor CSRs when true.
3+| Implement hardware performance monitor CSRs when true.
Enabling this extension will set the  _SYSINFO_CPU_ZIHPM_ flag in the `CPU` <<_system_configuration_information_memory_sysinfo, SYSINFO>> register.
 
See section <<_zihpm_hardware_performance_monitors>> for more information.
See section <<_zihpm_hardware_performance_monitors>> for more information.
|======
|======
 
 
 
 
:sectnums!:
:sectnums!:
Line 397... Line 397...
3+| Implement integer multiplication-only instructions when _true_. This is a sub-extension of the `M` extension, which
3+| Implement integer multiplication-only instructions when _true_. This is a sub-extension of the `M` extension, which
cannot be used together with the `M` extension. See section <<_zmmul_integer_multiplication>> for more information.
cannot be used together with the `M` extension. See section <<_zmmul_integer_multiplication>> for more information.
|======
|======
 
 
 
 
 
:sectnums!:
 
===== _CPU_EXTENSION_RISCV_Zxcfu_
 
 
 
[cols="4,4,2"]
 
[frame="all",grid="none"]
 
|======
 
| **CPU_EXTENSION_RISCV_Zxcfu** | _boolean_ | false
 
3+| NEORV32-specific "custom RISC-V" ISA extensions: Implement the <<_custom_functions_unit_cfu>> for user-defined
 
custom instruction when _true_. See section <<_zxcfu_custom_instructions_extension_cfu>> for more information.
 
|======
 
 
 
 
// ####################################################################################################################
// ####################################################################################################################
:sectnums:
:sectnums:
==== Extension Options
==== Tuning Options
 
 
 
These are generics to fine-tune certain ISA extensions and CPU features.
See section <<_instruction_sets_and_extensions>> for more information.
See section <<_instruction_sets_and_extensions>> for more information.
 
 
 
 
:sectnums!:
:sectnums!:
===== _FAST_MUL_EN_
===== _FAST_MUL_EN_
Line 476... Line 489...
[cols="4,4,2"]
[cols="4,4,2"]
[frame="all",grid="none"]
[frame="all",grid="none"]
|======
|======
| **PMP_NUM_REGIONS** | _natural_ | 0
| **PMP_NUM_REGIONS** | _natural_ | 0
3+| Total number of implemented protections regions (0..64). If this generics is zero no physical memory
3+| Total number of implemented protections regions (0..64). If this generics is zero no physical memory
protection logic will be implemented at all. Setting <<_pmp_num_regions>>_ > 0 will set the _SYSINFO_CPU_PMP_ flag
protection logic will be implemented at all.
in the `CPU` <<_system_configuration_information_memory_sysinfo, SYSINFO>> register.
 
|======
|======
 
 
 
 
:sectnums!:
:sectnums!:
===== _PMP_MIN_GRANULARITY_
===== _PMP_MIN_GRANULARITY_
Line 1087... Line 1099...
|=======================
|=======================
 
 
.Trigger type
.Trigger type
[IMPORTANT]
[IMPORTANT]
The fast interrupt request channels become pending after being triggering by **a rising edge**. A pending FIRQ has to
The fast interrupt request channels become pending after being triggering by **a rising edge**. A pending FIRQ has to
be explicitly cleared by setting the according `mip` CSR bit.
be explicitly cleared by setting the according <<_mip>> CSR bit.
 
 
 
 
:sectnums:
:sectnums:
==== Platform External Interrupts
==== Platform External Interrupts
 
 
Line 1146... Line 1158...
|=======================
|=======================
 
 
.Trigger type
.Trigger type
[IMPORTANT]
[IMPORTANT]
The fast interrupt request channels become pending after being triggering by **a rising edge**. A pending FIRQ has to
The fast interrupt request channels become pending after being triggering by **a rising edge**. A pending FIRQ has to
be explicitly cleared by setting the according `mip` CSR bit.
be explicitly cleared by setting the according <<_mip>> CSR bit.
 
 
 
 
 
 
 
 
// ####################################################################################################################
// ####################################################################################################################
Line 1170... Line 1182...
5. **IO/peripheral address space**. Also a _fixed_ section used for the processor-internal memory-mapped IO/peripheral devices (e.g., UART).
5. **IO/peripheral address space**. Also a _fixed_ section used for the processor-internal memory-mapped IO/peripheral devices (e.g., UART).
 
 
.NEORV32 processor - address space (default configuration)
.NEORV32 processor - address space (default configuration)
image::address_space.png[900]
image::address_space.png[900]
 
 
 
.RAM Layout - Usage of the Data Address Space
 
[TIP]
 
The actual usage of the data address space by the software/executables (stack, heap, ...) is
 
illustrated in section <<_ram_layout>>.
 
 
 
 
:sectnums:
:sectnums:
==== CPU Data and Instruction Access
==== CPU Data and Instruction Access
 
 
The CPU can access all of the 4GB address space from the instruction fetch interface (**I**) and also from the
The CPU can access all of the 4GB address space from the instruction fetch interface (**I**) and also from the

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.