diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/img/SPI_timing_diagram2.wikimedia.png b/img/SPI_timing_diagram2.wikimedia.png new file mode 100644 index 0000000000..0e441147e5 Binary files /dev/null and b/img/SPI_timing_diagram2.wikimedia.png differ diff --git a/img/address_space.png b/img/address_space.png new file mode 100644 index 0000000000..10744c5b24 Binary files /dev/null and b/img/address_space.png differ diff --git a/img/bus_interface.png b/img/bus_interface.png new file mode 100644 index 0000000000..2f9248122b Binary files /dev/null and b/img/bus_interface.png differ diff --git a/img/bus_interface_atomic.png b/img/bus_interface_atomic.png new file mode 100644 index 0000000000..370be223af Binary files /dev/null and b/img/bus_interface_atomic.png differ diff --git a/img/cfu_r3type_instruction.png b/img/cfu_r3type_instruction.png new file mode 100644 index 0000000000..8d0cd9d964 Binary files /dev/null and b/img/cfu_r3type_instruction.png differ diff --git a/img/cfu_r4type_instruction.png b/img/cfu_r4type_instruction.png new file mode 100644 index 0000000000..a20fcf5109 Binary files /dev/null and b/img/cfu_r4type_instruction.png differ diff --git a/img/cfu_r5type_instruction_a.png b/img/cfu_r5type_instruction_a.png new file mode 100644 index 0000000000..d741aa1183 Binary files /dev/null and b/img/cfu_r5type_instruction_a.png differ diff --git a/img/cfu_r5type_instruction_b.png b/img/cfu_r5type_instruction_b.png new file mode 100644 index 0000000000..464df16520 Binary files /dev/null and b/img/cfu_r5type_instruction_b.png differ diff --git a/img/eclipse.png b/img/eclipse.png new file mode 100644 index 0000000000..ded06dff15 Binary files /dev/null and b/img/eclipse.png differ diff --git a/img/icon.png b/img/icon.png new file mode 100644 index 0000000000..b9a45dd89f Binary files /dev/null and b/img/icon.png differ diff --git a/img/license.md b/img/license.md new file mode 100644 index 0000000000..6879d9dbe1 --- /dev/null +++ b/img/license.md @@ -0,0 +1,20 @@ +## :copyright: Image License and Copyright Notifications + +Figures are own work if not otherwise stated; see the [project's license](https://github.com/stnolting/neorv32/blob/main/LICENSE). +No copyright infringement intended. + +- `SPI_timing_diagram2.wikimedia.png` + - source: https://en.wikipedia.org/wiki/File:SPI_timing_diagram2.svg + - license: Creative Commons: https://en.wikipedia.org/wiki/Creative_Commons, Attribution-Share Alike 3.0 Unported: https://creativecommons.org/licenses/by-sa/3.0/deed.en + +- `riscv_logo.png` and `riscv_logo_small.png` + - source: https://riscv.org/risc-v-logo/ + - license: https://riscv.org/about/risc-v-branding-guidelines/ + +- `oshw_logo.png` + - source: https://www.oshwa.org/open-source-hardware-logo/ + - license: Creative Commons Attribution-ShareAlike 4.0 International License + +- `neorv32_logo_smcard.jpg` + - source: background image by https://pixabay.com + - license: Pixabay license diff --git a/img/neopixel_timing.png b/img/neopixel_timing.png new file mode 100644 index 0000000000..f7c62b9166 Binary files /dev/null and b/img/neopixel_timing.png differ diff --git a/img/neorv32_boot_configurations.png b/img/neorv32_boot_configurations.png new file mode 100644 index 0000000000..abb6180ada Binary files /dev/null and b/img/neorv32_boot_configurations.png differ diff --git a/img/neorv32_bus.png b/img/neorv32_bus.png new file mode 100644 index 0000000000..0e2c252527 Binary files /dev/null and b/img/neorv32_bus.png differ diff --git a/img/neorv32_cpu.png b/img/neorv32_cpu.png new file mode 100644 index 0000000000..458ebfd898 Binary files /dev/null and b/img/neorv32_cpu.png differ diff --git a/img/neorv32_logo.png b/img/neorv32_logo.png new file mode 100644 index 0000000000..e90abe6afd Binary files /dev/null and b/img/neorv32_logo.png differ diff --git a/img/neorv32_logo_riscv.png b/img/neorv32_logo_riscv.png new file mode 100644 index 0000000000..bb79756958 Binary files /dev/null and b/img/neorv32_logo_riscv.png differ diff --git a/img/neorv32_logo_riscv_small.png b/img/neorv32_logo_riscv_small.png new file mode 100644 index 0000000000..51533725bd Binary files /dev/null and b/img/neorv32_logo_riscv_small.png differ diff --git a/img/neorv32_logo_small.png b/img/neorv32_logo_small.png new file mode 100644 index 0000000000..457f55e5a7 Binary files /dev/null and b/img/neorv32_logo_small.png differ diff --git a/img/neorv32_logo_smcard.jpg b/img/neorv32_logo_smcard.jpg new file mode 100644 index 0000000000..30872195b5 Binary files /dev/null and b/img/neorv32_logo_smcard.jpg differ diff --git a/img/neorv32_ocd_complex.png b/img/neorv32_ocd_complex.png new file mode 100644 index 0000000000..2d8a08ffe7 Binary files /dev/null and b/img/neorv32_ocd_complex.png differ diff --git a/img/neorv32_processor.png b/img/neorv32_processor.png new file mode 100644 index 0000000000..cb34b5f3b3 Binary files /dev/null and b/img/neorv32_processor.png differ diff --git a/img/neorv32_test_setup.png b/img/neorv32_test_setup.png new file mode 100644 index 0000000000..1ce72dc7f1 Binary files /dev/null and b/img/neorv32_test_setup.png differ diff --git a/img/onewire_data.png b/img/onewire_data.png new file mode 100644 index 0000000000..64646b18f7 Binary files /dev/null and b/img/onewire_data.png differ diff --git a/img/onewire_reset.png b/img/onewire_reset.png new file mode 100644 index 0000000000..bb7ac5ad5e Binary files /dev/null and b/img/onewire_reset.png differ diff --git a/img/oshw_logo.png b/img/oshw_logo.png new file mode 100644 index 0000000000..da7028f0dd Binary files /dev/null and b/img/oshw_logo.png differ diff --git a/img/ram_layout.png b/img/ram_layout.png new file mode 100644 index 0000000000..bac9c63d45 Binary files /dev/null and b/img/ram_layout.png differ diff --git a/img/riscv_logo.png b/img/riscv_logo.png new file mode 100644 index 0000000000..27d8a41f05 Binary files /dev/null and b/img/riscv_logo.png differ diff --git a/img/riscv_logo_small.png b/img/riscv_logo_small.png new file mode 100644 index 0000000000..aec54fc11c Binary files /dev/null and b/img/riscv_logo_small.png differ diff --git a/img/stream_link_interface.png b/img/stream_link_interface.png new file mode 100644 index 0000000000..0206f93ab1 Binary files /dev/null and b/img/stream_link_interface.png differ diff --git a/img/vivado_ip_gui.png b/img/vivado_ip_gui.png new file mode 100644 index 0000000000..09af8060f4 Binary files /dev/null and b/img/vivado_ip_gui.png differ diff --git a/img/vivado_ip_soc.png b/img/vivado_ip_soc.png new file mode 100644 index 0000000000..0d12507dee Binary files /dev/null and b/img/vivado_ip_soc.png differ diff --git a/img/xbus_read.png b/img/xbus_read.png new file mode 100644 index 0000000000..7018fe3e93 Binary files /dev/null and b/img/xbus_read.png differ diff --git a/img/xbus_write.png b/img/xbus_write.png new file mode 100644 index 0000000000..9d67458faa Binary files /dev/null and b/img/xbus_write.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000000..bc4aff7c93 --- /dev/null +++ b/index.html @@ -0,0 +1,20959 @@ + + + + + + + + + + +[Datasheet] The NEORV32 RISC-V Processor + + + + + + +
+
+
+
+
+neorv32 logo +
+
+
+
+riscv logo +
+
+
+

GitHub stnolting%2Fneorv32 ffbd00?style=flat square&logo=github& +neorv32?longCache=true&style=flat square +data%20sheet PDF ffbd00?longCache=true&style=flat square&logo=asciidoctor +user%20guide PDF ffbd00?longCache=true&style=flat square&logo=asciidoctor + HTML ffbd00?longCache=true&style=flat square +doxygen HTML ffbd00?longCache=true&style=flat square&logo=Doxygen
+neorv32?longCache=true&style=flat square&logo=GitHub +latest?longCache=true&style=flat square&logo=GitHub

+
+
+
+
+
+

1. Overview

+
+
+

The NEORV32 RISC-V Processor is an open-source RISC-V compatible processor system that is intended as +ready-to-go auxiliary processor within a larger SoC designs or as stand-alone custom / customizable +microcontroller.

+
+
+

The system is highly configurable and provides optional common peripherals like embedded memories, +timers, serial interfaces, general purpose IO ports and an external bus interface to connect custom IP like +memories, NoCs and other peripherals. On-line and in-system debugging is supported by an OpenOCD/gdb +compatible on-chip debugger accessible via JTAG.

+
+
+

Special focus is paid on execution safety to provide defined and predictable behavior at any time. +Therefore, the CPU ensures that all memory access are acknowledged and no invalid/malformed instructions +are executed. Whenever an unexpected situation occurs, the application code is informed via hardware exceptions.

+
+
+

The software framework of the processor comes with application makefiles, software libraries for all CPU +and processor features, a bootloader, a runtime environment and several example programs - including a port +of the CoreMark MCU benchmark and the official RISC-V architecture test suite. RISC-V GCC is used as +default toolchain (prebuilt toolchains are also provided).

+
+
+

Check out the processor’s online User Guide +that provides hands-on tutorials to get you started.

+
+
+

Structure

+
+ +
+

Annotations

+
+
+ + + + + +
+ + +Warning +
+
+
+ + + + + +
+ + +Important +
+
+
+ + + + + +
+ + +Note +
+
+
+ + + + + +
+ + +Tip +
+
+
+
+

1.1. Rationale

+

Why did you make this?

+
+

Processor and CPU architecture designs are fascinating things: they are the magic frontier where software meets hardware. +This project started as something like a journey into this magic realm to understand how things actually work +down on this very low level and evolved over time to a capable system on chip.

+
+
+

But there is more: when I started to dive into the emerging RISC-V ecosystem I felt overwhelmed by the complexity. +As a beginner it is hard to get an overview - especially when you want to setup a minimal platform to tinker with…​ +Which core to use? How to get the right toolchain? What features do I need? How does booting work? How do I +create an actual executable? How to get that into the hardware? How to customize things? Where to start???

+
+
+

This project aims to provide a simple to understand and easy to use yet powerful and flexible platform +that targets FPGA and RISC-V beginners as well as advanced users.

+
+

Why a soft-core processor?

+
+

As a matter of fact soft-core processors cannot compete with discrete (like FPGA hard-macro) processors in terms +of performance, energy efficiency and size. But they do fill a niche in FPGA design space: for example, soft-core +processors allow to implement the control flow part of certain applications (e.g. communication protocol handling) +using software like plain C. This provides high flexibility as software can be easily changed, re-compiled and +re-uploaded again.

+
+
+

Furthermore, the concept of flexibility applies to all aspects of a soft-core processor. The user can add +exactly the features that are required by the application: additional memories, custom interfaces, specialized +co-processors and even user-defined instructions.

+
+

Why RISC-V?

+
+
+riscv logo +
+
+
+
+
+

RISC-V is a free and open ISA enabling a new era of processor innovation through open standard collaboration.

+
+
+
+— RISC-V International
+https://riscv.org/about/ +
+
+
+

Open-source is a great thing! +While open-source has already become quite popular in software, hardware-focused projects still need to catch up. +Admittedly, there has been quite a development, but mainly in terms of platforms and applications (so +schematics, PCBs, etc.). Although processors and CPUs are the heart of almost every digital system, having a true +open-source silicon is still a rarity. RISC-V aims to change that - and even it is just one approach, it helps paving +the road for future development.

+
+
+

Furthermore, I highly appreciate the community aspect of RISC-V. The ISA and everything beyond is developed in direct +contact with the community: this includes businesses and professionals but also hobbyist, amateurs and people +that are just curious. Everyone can join discussions and contribute to RISC-V in their very own way.

+
+
+

Finally, I really like the RISC-V ISA itself. It aims to be a clean, orthogonal and "intuitive" ISA that +resembles with the basic concepts of RISC: simple yet effective.

+
+

Yet another RISC-V core? What makes it special?

+
+

The NEORV32 is not based on another RISC-V core. It was build entirely from ground up (just following the official +ISA specs). The project does not intend to replace certain RISC-V cores or +just beat existing ones like VexRISC in terms of performance or +SERV in terms of size. It was build having a different design goal in mind.

+
+
+

The project aims to provide another option in the RISC-V / soft-core design space with a different performance +vs. size trade-off and a different focus: embrace concepts like documentation, platform-independence / portability, +RISC-V compatibility, extensibility & customization and ease of use (see the Project Key Features below).

+
+
+

Furthermore, the NEORV32 pays special focus on execution safety using Full Virtualization. The CPU aims to +provide fall-backs for everything that could go wrong. This includes malformed instruction words, privilege escalations +and even memory accesses that are checked for address space holes and deterministic response times of memory-mapped +devices. Precise exceptions allow a defined and fully-synchronized state of the CPU at every time an in every situation.

+
+

A multi-cycle architecture?!?!

+
+

Most mainstream CPUs out there are pipelined architectures to increase throughput. In contrast, most CPUs used for +teaching are single-cycle designs since they are probably the most easiest to understand. But what about the +multi-cycle architectures?

+
+
+

In terms of energy, throughput, area and maximal clock frequency multi-cycle architectures are somewhere in between +single-cycle and fully-pipelined designs: they provide higher throughput and clock speed when compared to their +single-cycle counterparts while having less hardware complexity (= area) then a fully-pipelined designs. I decided to +use the multi-cycle approach because of the following reasons:

+
+
+
    +
  • +

    Multi-cycle architecture are quite small! There is no need for pipeline hazard detection and resolution logic +(e.g. forwarding). Furthermore, you can "re-use" parts of the core to do several tasks (e.g. the ALU is used for the +actual data processing, but also for address generation, branch condition check and branch target computation).

    +
  • +
  • +

    Single-cycle architectures require memories that can be read asynchronously - a thing that is not feasible to implement +in real world applications (i.e. FPGA block RAM is entirely synchronous). Furthermore, such design usually have a very +long critical path tremendously reducing maximal operating frequency.

    +
  • +
  • +

    Pipelined designs increase performance by having several instruction "in fly" at the same time. But this also means +there is some kind of "out-of-order" behavior: if an instruction at the end of the pipeline causes an exception +all the instructions in earlier stages have to be invalidated. Potential architecture state changes have to be made undone +requiring additional (exception-handling) logic. In a multi-cycle architecture this situation cannot occur because only a +single instruction is "in fly" at a time.

    +
  • +
  • +

    Having only a single instruction in fly does not only reduce hardware costs, it also simplifies +simulation/verification/debugging, state preservation/restoring during exceptions and extensibility (no need to care +about pipeline hazards) - but of course at the cost of reduced throughput.

    +
  • +
+
+
+

To counteract the loss of performance implied by a pure multi-cycle architecture, the NEORV32 CPU uses a mixed +approach: instruction fetch (front-end) and instruction execution (back-end) are de-coupled to operate independently +of each other. Data is interchanged via a queue building a simple 2-stage pipeline. Each "pipeline" stage in terms is +implemented as multi-cycle architecture to simplify the hardware and to provide precise state control (e.g. during +exceptions).

+
+
+
+

1.2. Project Key Features

+
+

Project

+
+
+
    +
  • +

    all-in-one package: CPU + SoC + Software Framework & Tooling

    +
  • +
  • +

    completely described in behavioral, platform-independent VHDL - no vendor- or technology-specific primitives, attributes, macros, libraries, etc. are used at all

    +
  • +
  • +

    all-Verilog "version" available (auto-generated netlist)

    +
  • +
  • +

    extensive configuration options for adapting the processor to the requirements of the application

    +
  • +
  • +

    highly extensible hardware - on CPU, SoC and system level

    +
  • +
  • +

    aims to be as small as possible while being as RISC-V-compliant as possible - with a reasonable area-vs-performance trade-off

    +
  • +
  • +

    FPGA friendly (e.g. all internal memories can be mapped to block RAM - including the register file)

    +
  • +
  • +

    optimized for high clock frequencies to ease timing closure and integration

    +
  • +
  • +

    from zero to "hello world!" - completely open source and documented

    +
  • +
  • +

    easy to use even for FPGA/RISC-V starters – intended to work out of the box

    +
  • +
+
+
+

NEORV32 CPU (the core)

+
+
+
    +
  • +

    32-bit RISC-V CPU

    +
  • +
  • +

    fully compatible to the RISC-V ISA specs. - checked by the official RISCOF architecture tests

    +
  • +
  • +

    base ISA + privileged ISA + several optional standard and custom ISA extensions

    +
  • +
  • +

    option to add user-defined RISC-V instructions as custom ISA extension

    +
  • +
  • +

    rich set of customization options (ISA extensions, design goal: performance / area / energy, tuning options, …​)

    +
  • +
  • +

    Full Virtualization capabilities to increase execution safety

    +
  • +
  • +

    official RISC-V open source architecture ID

    +
  • +
+
+
+

NEORV32 Processor (the SoC)

+
+
+
    +
  • +

    highly-configurable full-scale microcontroller-like processor system

    +
  • +
  • +

    based on the NEORV32 CPU

    +
  • +
  • +

    optional standard serial interfaces (UART, TWI, SPI (host and device), 1-Wire)

    +
  • +
  • +

    optional timers and counters (watchdog, system timer)

    +
  • +
  • +

    optional general purpose IO and PWM; a native NeoPixel(c)-compatible smart LED interface

    +
  • +
  • +

    optional embedded memories and caches for data, instructions and bootloader

    +
  • +
  • +

    optional external memory interface for custom connectivity

    +
  • +
  • +

    optional execute in-place (XIP) module to execute code directly form an external SPI flash

    +
  • +
  • +

    optional DMA controller for CPU-independent data transfers

    +
  • +
  • +

    optional CRC module to check data integrity

    +
  • +
  • +

    on-chip debugger compatible with OpenOCD and gdb including hardware trigger module

    +
  • +
+
+
+

Software framework

+
+
+
    +
  • +

    GCC-based toolchain - prebuilt toolchains available; application compilation based on GNU makefiles

    +
  • +
  • +

    internal bootloader with serial user interface (via UART)

    +
  • +
  • +

    core libraries and HAL for high-level usage of the provided functions and peripherals

    +
  • +
  • +

    processor-specific runtime environment and several example programs

    +
  • +
  • +

    doxygen-based documentation of the software framework; a deployed version is available at https://stnolting.github.io/neorv32/sw/files.html

    +
  • +
  • +

    FreeRTOS port + demos available

    +
  • +
+
+
+

Extensibility and Customization

+
+
+

The NEORV32 processor is designed to ease customization and extensibility and provides several options for adding +application-specific custom hardware modules and accelerators. The three most common options for adding custom +on-chip modules are listed below.

+
+
+ +
+
+ + + + + +
+ + +A more detailed comparison of the extension/customization options can be found in section +Adding Custom Hardware Modules +of the user guide. +
+
+
+
+
+

1.3. Project Folder Structure

+
+
+
neorv32               - Project home folder
+│
+├docs                 - Project documentation
+│├datasheet           - AsciiDoc sources for the NEORV32 data sheet
+│├figures             - Figures and logos
+│├references          - Data sheets and RISC-V specs
+│├sources             - Sources for the images in 'figures/'
+│└userguide           - AsciiDoc sources for the NEORV32 user guide
+│
+├rtl                  - VHDL sources
+│├core                - Core sources of the CPU & SoC
+││└mem                - SoC-internal memories (default architectures)
+│├processor_templates - Pre-configured SoC wrappers
+│├system_integration  - System wrappers and bridges for advanced connectivity
+│└test_setups         - Minimal test setup "SoCs" used in the User Guide
+│
+├sim                  - Simulation files
+│
+└-sw                  - Software framework
+  ├bootloader         - Sources of the processor-internal bootloader
+  ├common             - Linker script, crt0.S start-up code and central makefile
+  ├example            - Example programs for the core and the SoC modules
+  │├eclipse           - Pre-configured Eclipse IDE project
+  │└...               - Several example programs
+  ├lib                - Processor core library
+  │├include           - NEORV32 core library header files (*.h)
+  │└source            - NEORV32 core library source files (*.c)
+  ├image_gen          - Helper program to generate executables & memory images
+  ├ocd_firmware       - Firmware for the on-chip debugger's "park loop"
+  ├openocd            - OpenOCD configuration files
+  └svd                - Processor system view description file (CMSIS-SVD)
+
+
+
+
+
+

1.4. VHDL File Hierarchy

+
+

All necessary VHDL hardware description files are located in the project’s rtl/core folder. The top entity +of the entire processor including all the required configuration generics is neorv32_top.vhd.

+
+
+ + + + + +
+ + +
Compile Order / File-List Files
+Most of the RTL sources use entity instantiation. Hence, the RTL compile order might be relevant. +Therefore, two file list files (*.f) are provided in the rtl folder that list all required rtl files +for the CPU core and for the entire processor and also represent their recommended compile order. +
+
+
+ + + + + +
+ + +
VHDL Library
+All core VHDL files from the list below have to be assigned to a new library named neorv32. +
+
+
+
+
neorv32_top.vhd                  - NEORV32 PROCESSOR TOP ENTITY
+│
+├neorv32_cpu.vhd                 - NEORV32 CPU TOP ENTIT
+│├neorv32_cpu_alu.vhd            - Arithmetic/logic unit
+││├neorv32_cpu_cp_bitmanip.vhd   - Bit-manipulation co-processor (B ext.)
+││├neorv32_cpu_cp_cfu.vhd        - Custom instructions co-processor (Zxcfu ext.)
+││├neorv32_cpu_cp_cond.vhd       - Integer conditional operations (Zicond ext.)
+││├neorv32_cpu_cp_fpu.vhd        - Floating-point co-processor (Zfinx ext.)
+││├neorv32_cpu_cp_shifter.vhd    - Bit-shift co-processor (base ISA)
+││├neorv32_cpu_cp_muldiv.vhd     - Mul/Div co-processor (M ext.)
+│├neorv32_cpu_control.vhd        - CPU control, exception system and CSRs
+││└neorv32_cpu_decompressor.vhd  - Compressed instructions decoder (C ext.)
+│├neorv32_cpu_lsu.vhd            - Load/store unit
+│├neorv32_cpu_pmp.vhd            - Physical memory protection unit (Smpmp ext.)
+│└neorv32_cpu_regfile.vhd        - Data register file
+│
+├neorv32_boot_rom.vhd            - Bootloader ROM
+│└neorv32_bootloader_image.vhd   - Bootloader ROM memory image
+├neorv32_cfs.vhd                 - Custom functions subsystem
+├neorv32_clockgate.vhd           - Generic clock gating switch
+├neorv32_crc.vhd                 - Cyclic redundancy check unit
+├neorv32_cache.vhd               - Generic cache module
+├neorv32_debug_dm.vhd            - on-chip debugger: debug module
+├neorv32_debug_dtm.vhd           - on-chip debugger: debug transfer module
+├neorv32_dma.vhd                 - Direct memory access controller
+├neorv32_dmem.entity.vhd         - Processor-internal data memory (entity-only!)
+├neorv32_fifo.vhd                - Generic FIFO component
+├neorv32_gpio.vhd                - General purpose input/output port unit
+├neorv32_gptmr.vhd               - General purpose 32-bit timer
+├neorv32_imem.entity.vhd         - Processor-internal instruction memory (entity-only!)
+│└neor32_application_image.vhd   - IMEM application initialization image
+├neorv32_intercon.vhd            - SoC bus infrastructure
+├neorv32_mtime.vhd               - Machine system timer
+├neorv32_neoled.vhd              - NeoPixel (TM) compatible smart LED interface
+├neorv32_onewire.vhd             - One-Wire serial interface controller
+├neorv32_package.vhd             - Main VHDL package file
+├neorv32_pwm.vhd                 - Pulse-width modulation controller
+├neorv32_sdi.vhd                 - Serial data interface controller (SPI device)
+├neorv32_slink.vhd               - Stream link interface
+├neorv32_spi.vhd                 - Serial peripheral interface controller (SPI host)
+├neorv32_sysinfo.vhd             - System configuration information memory
+├neorv32_trng.vhd                - True random number generator
+├neorv32_twi.vhd                 - Two wire serial interface controller
+├neorv32_uart.vhd                - Universal async. receiver/transmitter
+├neorv32_wdt.vhd                 - Watchdog timer
+├neorv32_xbus.vhd                - External (Wishbone) bus interface gateways
+├neorv32_xip.vhd                 - Execute in place module
+├neorv32_xirq.vhd                - External interrupt controller
+│
+├mem/neorv32_dmem.default.vhd    - *Default* data memory (architecture-only!)
+└mem/neorv32_imem.default.vhd    - *Default* instruction memory (architecture-only!)
+
+
+
+ + + + + +
+ + +
Processor-Internal Memories
+The processor-internal instruction and data memories (IMEM and DMEM) are split into two design files each: +a plain entity definition (neorv32_*mem.entity.vhd) and the actual architecture definition +(mem/neorv32_*mem.default.vhd). The *.default.vhd architecture definitions from rtl/core/mem provide a generic and +platform independent memory design (inferring embedded memory blocks). You can replace/modify the architecture +source file in order to use platform-specific features (like advanced memory resources) or to improve technology mapping +and/or timing. +
+
+
+
+
+

1.5. VHDL Coding Style

+
+
    +
  • +

    The entire processor including the CPU core is written in platform-/technology-independent VHDL. +The code makes minimal use of VHDL 2008 features to provide compatibility even for older EDA tools.

    +
  • +
  • +

    A single package / library file (neorv32_package.vhd) is used to provide global defines and helper +functions. The specific user-defined configuration is done entirely by the generics of the top entity.

    +
  • +
  • +

    Internally, the generics are checked to ensure a correct configuration. Asserts and "sanity checks" are used +to inform the user about the actual processor configuration and potential illegal setting.

    +
  • +
  • +

    The code uses entity instation for all internal modules. However, if several "submodules" are specified +within the same file component instantiation is used for those.

    +
  • +
  • +

    When instantiating the processor top module (neorv32_top.vhd) in a custom design either entity instantiation or +component instantiation can be used as the NEORV32 package file / library already provides an according component declaration.

    +
  • +
+
+
+ + + + + +
+ + +
Verilog Version
+A GHDL-generated all-Verilog version of the processor is available at https://github.com/stnolting/neorv32-verilog. +The provided setup generates a synthesizable Verilog netlist for a custom processor configuration. +
+
+
+
+
+

1.6. FPGA Implementation Results

+
+

This section shows exemplary FPGA implementation results for the NEORV32 CPU and NEORV32 Processor modules.

+
+
+ + + + + +
+ + +The results are generated by manual synthesis runs. Hence, they might not represent the latest version of the processor. +
+
+

CPU

+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

HW version:

1.7.8.5

Top entity:

rtl/core/neorv32_cpu.vhd

FPGA:

Intel Cyclone IV E EP4CE22F17C6

Toolchain:

Quartus Prime Lite 21.1

Constraints:

no timing constraints, "balanced optimization", fmax from "Slow 1200mV 0C Model"

+ ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CPU ISA ConfigurationLEsFFsMEM bitsDSPsfmax

rv32i_Zicsr

1223

607

1024

0

130 MHz

rv32i_Zicsr_Zicntr

1578

773

1024

0

130 MHz

rv32im_Zicsr_Zicntr

2087

983

1024

0

130 MHz

rv32imc_Zicsr_Zicntr

2338

992

1024

0

130 MHz

rv32imcb_Zicsr_Zicntr

3175

1247

1024

0

130 MHz

rv32imcbu_Zicsr_Zicntr

3186

1254

1024

0

130 MHz

rv32imcbu_Zicsr_Zicntr_Zifencei

3187

1254

1024

0

130 MHz

rv32imcbu_Zicsr_Zicntr_Zifencei_Zfinx

4450

1906

1024

7

123 MHz

rv32imcbu_Zicsr_Zicntr_Zifencei_Zfinx_DebugMode

4825

2018

1024

7

123 MHz

+
+ + + + + +
+ + +
Goal-Driven Optimization
+The CPU provides further options to reduce the area footprint or to increase performance. +See section Processor Top Entity - Generics for more information. Also, take a look at the User Guide section +Application-Specific Processor Configuration. +
+
+

Processor - Modules

+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

HW version:

1.8.6.7

Top entity:

rtl/core/neorv32_top.vhd

FPGA:

Intel Cyclone IV E EP4CE22F17C6

Toolchain:

Quartus Prime Lite 21.1

Constraints:

no timing constraints, "balanced optimization"

+ + ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Hardware utilization by processor module
ModuleDescriptionLEsFFsMEM bitsDSPs

BOOT ROM

Bootloader ROM (4kB)

2

2

32768

0

Bus switch (core)

SoC bus infrastructure

28

15

0

0

Bus switch (DMA)

SoC bus infrastructure

159

9

0

0

CFS

Custom functions subsystem (depends on custom design logic)

-

-

-

-

CRC

Cyclic redundancy check unit

130

117

0

0

dCACHE

Data cache (4 blocks, 64 bytes per block)

300

167

2112

0

DM

On-chip debugger - debug module

377

241

0

0

DTM

On-chip debugger - debug transfer module (JTAG)

262

220

0

0

DMA

Direct memory access controller

365

291

0

0

DMEM

Processor-internal data memory (8kB)

6

2

65536

0

Gateway

SoC bus infrastructure

215

91

0

0

GPIO

General purpose input/output ports

102

98

0

0

GPTMR

General Purpose Timer

150

105

0

0

IO Switch

SoC bus infrastructure

217

0

0

0

iCACHE

Instruction cache (2x4 blocks, 64 bytes per block)

458

296

4096

0

IMEM

Processor-internal instruction memory (16kB)

7

2

131072

0

MTIME

Machine system timer

307

166

0

0

NEOLED

Smart LED Interface (NeoPixel/WS28128) (FIFO_depth=1)

171

129

0

0

ONEWIRE

1-wire interface

105

77

0

0

PWM

Pulse_width modulation controller (4 channels)

91

81

0

0

Reservation Set

Reservation set controller for LR/SC instructions

52

33

0

0

SDI

Serial data interface

103

77

512

0

SLINK

Stream link interface (RX/TX FIFO depth=32)

96

73

2048

0

SPI

Serial peripheral interface

137

97

1024

0

SYSINFO

System configuration information memory

11

11

0

0

TRNG

True random number generator

140

108

512

0

TWI

Two-wire interface

93

64

0

0

UART0, UART1

Universal asynchronous receiver/transmitter 0/1 (FIFO_depth=1)

222

142

1024

0

WDT

Watchdog timer

107

89

0

0

WISHBONE

External memory interface

122

112

0

0

XIP

Execute in place module

369

276

0

0

XIRQ

External interrupt controller (4 channels)

35

29

0

0

+
+
+
+

1.7. CPU Performance

+
+

The performance of the NEORV32 was tested and evaluated using the Core Mark CPU benchmark. +The according sources can be found in the sw/example/coremark folder. +The resulting CoreMark score is defined as CoreMark iterations per second per MHz.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + +
Table 2. Configuration

HW version:

1.5.7.10

Hardware:

32kB int. IMEM, 16kB int. DMEM, no caches, 100MHz clock

CoreMark:

2000 iterations, MEM_METHOD is MEM_STACK

Compiler:

RISCV32-GCC 10.2.0 (compiled with march=rv32i mabi=ilp32)

Compiler flags:

default but with -O3, see makefile

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3. CoreMark results
CPUCoreMark ScoreCoreMarks/MHzAverage CPI

small (rv32i_Zicsr_Zifencei)

33.89

0.3389

4.04

medium (rv32imc_Zicsr_Zifencei)

62.50

0.6250

5.34

performance (rv32imc_Zicsr_Zifencei + perf. options)

95.23

0.9523

3.54

+
+

The NEORV32 CPU is based on a multi-cycle architecture. Each instruction is executed in a sequence of +several consecutive micro operations. The average CPI (cycles per instruction) depends on the instruction +mix of a specific applications and also on the available CPU extensions. More information regarding the execution +time of each implemented instruction can be found in section Instruction Sets and Extensions.

+
+
+
+
+
+

2. NEORV32 Processor (SoC)

+
+
+

The NEORV32 Processor is based on the NEORV32 CPU. Together with common peripheral +interfaces and embedded memories it provides a RISC-V-based full-scale microcontroller-like SoC platform.

+
+
+
+neorv32 processor +
+
Figure 1. The NEORV32 Processor (Block Diagram)
+
+
+

Section Structure

+
+ +
+

Key Features

+
+
+
    +
  • +

    optional processor-internal data and instruction memories (DMEM/IMEM)

    +
  • +
  • +

    optional caches (iCACHE, dCACHE, xipCACHE, xCACHE)

    +
  • +
  • +

    optional internal bootloader (BOOTROM) with UART console & SPI flash boot option

    +
  • +
  • +

    optional machine system timer (MTIME), RISC-V-compatible

    +
  • +
  • +

    optional two independent universal asynchronous receivers and transmitters (UART0, +UART1) with optional hardware flow control (RTS/CTS)

    +
  • +
  • +

    optional serial peripheral interface host controller (SPI) with 8 dedicated CS lines

    +
  • +
  • +

    optional 8-bit serial data device interface (SDI)

    +
  • +
  • +

    optional two wire serial interface controller (TWI), compatible to the I²C standard

    +
  • +
  • +

    optional general purpose parallel IO port (GPIO), 64xOut, 64xIn

    +
  • +
  • +

    optional 32-bit external bus interface, Wishbone b4 / AXI4-Lite compatible (XBUS)

    +
  • +
  • +

    optional watchdog timer (WDT)

    +
  • +
  • +

    optional PWM controller with up to 12 channels & 8-bit duty cycle resolution (PWM)

    +
  • +
  • +

    optional ring-oscillator-based true random number generator (TRNG)

    +
  • +
  • +

    optional custom functions subsystem for custom co-processor extensions (CFS)

    +
  • +
  • +

    optional NeoPixel™/WS2812-compatible smart LED interface (NEOLED)

    +
  • +
  • +

    optional external interrupt controller with up to 32 channels (XIRQ)

    +
  • +
  • +

    optional general purpose 32-bit timer (GPTMR)

    +
  • +
  • +

    optional execute in-place module (XIP)

    +
  • +
  • +

    optional 1-wire serial interface controller (ONEWIRE), compatible to the 1-wire standard

    +
  • +
  • +

    optional autonomous direct memory access controller (DMA)

    +
  • +
  • +

    optional stream link interface (SLINK), AXI4-Stream compatible

    +
  • +
  • +

    optional cyclic redundancy check unit (CRC)

    +
  • +
  • +

    optional on-chip debugger with JTAG TAP (OCD)

    +
  • +
  • +

    system configuration information memory to check HW configuration via software (SYSINFO)

    +
  • +
+
+
+
+

2.1. Processor Top Entity - Signals

+
+

The following table shows all interface signals of the processor top entity (rtl/core/neorv32_top.vhd). +All signals are of type std_ulogic or std_ulogic_vector, respectively.

+
+
+ + + + + +
+ + +
Default Values of Inputs
+All optional input signals provide default values in case they are not explicitly assigned during instantiation. +The weak driver strengths of VHDL ('L' and 'H') are used to model a pull-down or pull-up resistor. +
+
+
+ + + + + +
+ + +
Variable-Sized Ports
+Some peripherals allow to configure the number of channels to-be-implemented by a generic (for example the number +of PWM 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: +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. +
+
+
+ + + + + +
+ + +
Tri-State Interfaces
+Some interfaces (like the TWI and the 1-Wire bus) require tri-state drivers in the designs top module. +
+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4. NEORV32 Processor Signal List
NameWidthDirectionDefaultDescription

Global Control (Processor Clocking and Processor Reset)

clk_i

1

in

none

global clock line, all registers triggering on rising edge

rstn_i

1

in

none

global reset, asynchronous, low-active

JTAG Access Port for On-Chip Debugger (OCD)

jtag_tck_i

1

in

'L'

serial clock

jtag_tdi_i

1

in

'L'

serial data input

jtag_tdo_o

1

out

-

serial data output

jtag_tms_i

1

in

'L'

mode select

Processor-External Bus Interface (XBUS)

xbus_adr_o

32

out

-

destination address

xbus_dat_o

32

out

-

read data

xbus_tag_o

3

out

-

access tag

xbus_we_o

1

out

-

write enable ('0' = read transfer)

xbus_sel_o

4

out

-

byte enable

xbus_stb_o

1

out

-

strobe

xbus_cyc_o

1

out

-

valid cycle

xbus_dat_i

32

in

'L'

write data

xbus_ack_i

1

in

'L'

transfer acknowledge

xbus_err_i

1

in

'L'

transfer error

Stream Link Interface (SLINK)

slink_rx_dat_i

32

in

'L'

RX data

slink_rx_src_i

4

in

'L'

RX source routing information

slink_rx_val_i

1

in

'L'

RX data valid

slink_rx_lst_i

1

in

'L'

RX last element of stream

slink_rx_rdy_o

1

out

-

RX ready to receive

slink_tx_dat_o

32

out

-

TX data

slink_tx_dst_o

4

out

-

TX destination routing information

slink_tx_val_o

1

out

-

TX data valid

slink_tx_lst_o

1

out

-

TX last element of stream

slink_tx_rdy_i

1

in

'L'

TX allowed to send

Execute In Place Module (XIP)

xip_csn_o

1

out

-

chip select, low-active

xip_clk_o

1

out

-

serial clock

xip_dat_i

1

in

'L'

serial data input

xip_dat_o

1

out

-

serial data output

General Purpose Input and Output Port (GPIO)

gpio_o

64

out

-

general purpose parallel output

gpio_i

64

in

'L'

general purpose parallel input

Primary Universal Asynchronous Receiver and Transmitter (UART0)

uart0_txd_o

1

out

-

serial transmitter

uart0_rxd_i

1

in

'L'

serial receiver

uart0_rts_o

1

out

-

RX ready to receive new char

uart0_cts_i

1

in

'L'

TX allowed to start sending, low-active

Secondary Universal Asynchronous Receiver and Transmitter (UART1)

uart1_txd_o

1

out

-

serial transmitter

uart1_rxd_i

1

in

'L'

serial receiver

uart1_rts_o

1

out

-

RX ready to receive new char

uart1_cts_i

1

in

'L'

TX allowed to start sending, low-active

Serial Peripheral Interface Controller (SPI)

spi_clk_o

1

out

-

controller clock line

spi_dat_o

1

out

-

serial data output

spi_dat_i

1

in

'L'

serial data input

spi_csn_o

8

out

-

select (low-active)

Serial Data Interface Controller (SDI)

sdi_clk_i

1

in

'L'

controller clock line

sdi_dat_o

1

out

-

serial data output

sdi_dat_i

1

in

'L'

serial data input

sdi_csn_i

1

in

'H'

chip select, low-active

Two-Wire Serial Interface Controller (TWI)

twi_sda_i

1

in

'H'

serial data line sense input

twi_sda_o

1

out

-

serial data line output (pull low only)

twi_scl_i

1

in

'H'

serial clock line sense input

twi_scl_o

1

out

-

serial clock line output (pull low only)

One-Wire Serial Interface Controller (ONEWIRE)

onewire_i

1

in

'H'

1-wire bus sense input

onewire_o

1

out

-

1-wire bus output (pull low only)

Pulse-Width Modulation Controller (PWM)

pwm_o

12

out

-

pulse-width modulated channels

Custom Functions Subsystem (CFS)

cfs_in_i

32

in

'L'

custom CFS input signal conduit

cfs_out_o

32

out

-

custom CFS output signal conduit

Smart LED Interface (NEOLED)

neoled_o

1

out

-

asynchronous serial data output

Machine System Timer (MTIME)

mtime_time_o

64

out

-

MTIME system time output

External Interrupt Controller (XIRQ)

xirq_i

32

in

'L'

external interrupt requests

RISC-V Machine-Mode Processor Interrupts

mtime_irq_i

1

in

'L'

machine timer interrupt (RISC-V), high-level-active

msw_irq_i

1

in

'L'

machine software interrupt (RISC-V), high-level-active

mext_irq_i

1

in

'L'

machine external interrupt (RISC-V), high-level-active

+
+
+
+

2.2. Processor Top Entity - Generics

+
+

This section lists all configuration generics of the NEORV32 processor top entity (rtl/neorv32_top.vhd). +These 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 +optimize the system for certain design goals like minimal area or maximum performance.

+
+
+ + + + + +
+ + +
Default Values
+All optional configuration generics provide default values in case they are not explicitly assigned during instantiation. +
+
+
+ + + + + +
+ + +
Software Discovery of Configuration
+Software can determine the actual CPU configuration via the misa and mxisa CSRs. The Soc/Processor +and can be determined via the SYSINFO memory-mapped registers. +
+
+
+ + + + + +
+ + +
Excluded Modules and Extensions
+If optional modules (like CPU extensions or peripheral devices) are not enabled the according hardware +will not be synthesized at all. Hence, the disabled modules do not increase area and power requirements +and do not impact timing. +
+
+
+ + + + + +
+ + +
Table Abbreviations
+The generic type “suv(x:y)” is an abbreviation for “std_ulogic_vector(x downto y)”. +
+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5. NEORV32 Processor Generic List
NameTypeDefaultDescription

General

CLOCK_FREQUENCY

natural

-

The clock frequency of the processor’s clk_i input port in Hertz (Hz).

CLOCK_GATING_EN

boolean

false

Enable clock gating when CPU is in sleep mode (see sections Sleep Mode and Processor Clocking).

INT_BOOTLOADER_EN

boolean

false

Implement the processor-internal Bootloader ROM (BOOTROM), pre-initialized with the default Bootloader image.

HART_ID

suv(31:0)

0x00000000

The hart thread ID of the CPU (passed to mhartid CSR).

JEDEC_ID

suv(10:0)

00000000000

JEDEC ID; continuation codes plus vendor ID (passed to mvendorid CSR and to the Debug Transport Module (DTM)).

On-Chip Debugger (OCD)

ON_CHIP_DEBUGGER_EN

boolean

false

Implement the on-chip debugger and the CPU debug mode.

DM_LEGACY_MODE

boolean

false

Debug module spec. version: false = v1.0, true = v0.13 (legacy mode).

CPU Instruction Sets and Extensions

CPU_EXTENSION_RISCV_A

boolean

false

Enable A ISA Extension (atomic memory accesses).

CPU_EXTENSION_RISCV_B

boolean

false

Enable B ISA Extension (bit-manipulation).

CPU_EXTENSION_RISCV_C

boolean

false

Enable C ISA Extension (compressed instructions).

CPU_EXTENSION_RISCV_E

boolean

false

Enable E ISA Extension (reduced register file size).

CPU_EXTENSION_RISCV_M

boolean

false

Enable M ISA Extension (hardware-based integer multiplication and division).

CPU_EXTENSION_RISCV_U

boolean

false

Enable U ISA Extension (less-privileged user mode).

CPU_EXTENSION_RISCV_Zfinx

boolean

false

Enable Zfinx ISA Extension (single-precision floating-point unit).

CPU_EXTENSION_RISCV_Zicntr

boolean

true

Enable Zicntr ISA Extension (CPU base counters).

CPU_EXTENSION_RISCV_Zicond

boolean

false

Enable Zicond ISA Extension (integer conditional operations).

CPU_EXTENSION_RISCV_Zihpm

boolean

false

Enable Zihpm ISA Extension (hardware performance monitors).

CPU_EXTENSION_RISCV_Zmmul

boolean

false

Enable Zmmul - ISA Extension (hardware-based integer multiplication).

CPU_EXTENSION_RISCV_Zxcfu

boolean

false

Enable NEORV32-specific Zxcfu ISA Extension (custom RISC-V instructions).

CPU Architecture Tuning Options

FAST_MUL_EN

boolean

false

Implement fast but large full-parallel multipliers (trying to infer DSP blocks); see section CPU Arithmetic Logic Unit.

FAST_SHIFT_EN

boolean

false

Implement fast but large full-parallel barrel shifters; see section CPU Arithmetic Logic Unit.

REGFILE_HW_RST

boolean

false

Implement full hardware reset for register file (prevent inferring of BRAM); see section CPU Register File.

Physical Memory Protection (Smpmp ISA Extension)

PMP_NUM_REGIONS

natural

0

Number of implemented PMP regions (0..16).

PMP_MIN_GRANULARITY

natural

4

Minimal region granularity in bytes. Has to be a power of two, min 4.

PMP_TOR_MODE_EN

boolean

true

Implement support for top-of-region (TOR) mode.

PMP_NAP_MODE_EN

boolean

true

Implement support for naturally-aligned power-of-two (NAPOT & NA4) modes.

Hardware Performance Monitors (Zihpm ISA Extension)

HPM_NUM_CNTS

natural

0

Number of implemented hardware performance monitor counters (0..13).

HPM_CNT_WIDTH

natural

40

Total LSB-aligned size of each HPM counter. Min 0, max 64.

Internal Instruction Memory (IMEM)

MEM_INT_IMEM_EN

boolean

false

Implement the processor-internal instruction memory.

MEM_INT_IMEM_SIZE

natural

16*1024

Size in bytes of the processor internal instruction memory (use a power of 2).

Internal Data Memory (DMEM)

MEM_INT_DMEM_EN

boolean

false

Implement the processor-internal data memory.

MEM_INT_DMEM_SIZE

natural

8*1024

Size in bytes of the processor-internal data memory (use a power of 2).

Processor-Internal Instruction Cache (iCACHE)

ICACHE_EN

boolean

false

Implement the instruction cache.

ICACHE_NUM_BLOCKS

natural

4

Number of blocks ("lines") Has to be a power of two.

ICACHE_BLOCK_SIZE

natural

64

Size in bytes of each block. Has to be a power of two.

Processor-Internal Data Cache (dCACHE)

DCACHE_EN

boolean

false

Implement the data cache.

DCACHE_NUM_BLOCKS

natural

4

Number of blocks ("lines"). Has to be a power of two.

DCACHE_BLOCK_SIZE

natural

64

Size in bytes of each block. Has to be a power of two.

Processor-External Bus Interface (XBUS) (Wishbone b4 protocol)

XBUS_EN

boolean

false

Implement the external bus interface.

XBUS_TIMEOUT

natural

255

Clock cycles after which a pending external bus access will auto-terminate and raise a bus fault exception.

XBUS_REGSTAGE_EN

boolean

false

Implement XBUS register stages to ease timing closure.

XBUS_CACHE_EN

boolean

false

Implement the external bus cache.

XBUS_CACHE_NUM_BLOCKS

natural

64

Number of blocks ("lines"). Has to be a power of two.

XBUS_CACHE_BLOCK_SIZE

natural

32

Size in bytes of each block. Has to be a power of two.

Execute In Place Module (XIP)

XIP_EN

boolean

false

Implement the execute in-place module.

XIP_CACHE_EN

boolean

false

Implement XIP cache.

XIP_CACHE_NUM_BLOCKS

natural

8

Number of blocks in XIP cache. Has to be a power of two.

XIP_CACHE_BLOCK_SIZE

natural

256

Number of bytes per XIP cache block. Has to be a power of two, min 4.

External Interrupt Controller (XIRQ)

XIRQ_NUM_CH

natural

0

Number of channels of the external interrupt controller. Valid values are 0..32.

Peripheral/IO Modules

IO_DISABLE_SYSINFO

boolean

false

Disable System Configuration Information Memory (SYSINFO) module; ⚠️ not recommended - for advanced users only!

IO_GPIO_NUM

natural

0

Number of general purpose input/output pairs of the General Purpose Input and Output Port (GPIO).

IO_MTIME_EN

boolean

false

Implement the Machine System Timer (MTIME).

IO_UART0_EN

boolean

false

Implement the Primary Universal Asynchronous Receiver and Transmitter (UART0).

IO_UART0_RX_FIFO

natural

1

UART0 RX FIFO depth, has to be a power of two, minimum value is 1, max 32768.

IO_UART0_TX_FIFO

natural

1

UART0 TX FIFO depth, has to be a power of two, minimum value is 1, max 32768.

IO_UART1_EN

boolean

false

Implement the Secondary Universal Asynchronous Receiver and Transmitter (UART1).

IO_UART1_RX_FIFO

natural

1

UART1 RX FIFO depth, has to be a power of two, minimum value is 1, max 32768.

IO_UART1_TX_FIFO

natural

1

UART1 TX FIFO depth, has to be a power of two, minimum value is 1, max 32768.

IO_SPI_EN

boolean

false

Implement the Serial Peripheral Interface Controller (SPI).

IO_SPI_FIFO

natural

1

Depth of the Serial Peripheral Interface Controller (SPI) FIFO. Has to be a power of two, min 1, max 32768.

IO_SDI_EN

boolean

false

Implement the Serial Data Interface Controller (SDI).

IO_SDI_FIFO

natural

1

Depth of the Serial Data Interface Controller (SDI) FIFO. Has to be a power of two, min 1, max 32768.

IO_TWI_EN

boolean

false

Implement the Two-Wire Serial Interface Controller (TWI).

IO_TWI_FIFO

natural

1

Depth of the Two-Wire Serial Interface Controller (TWI) FIFO. Has to be a power of two, min 1, max 32768.

IO_PWM_NUM_CH

natural

0

Number of channels of the Pulse-Width Modulation Controller (PWM) to implement (0..12).

IO_WDT_EN

boolean

false

Implement the Watchdog Timer (WDT).

IO_TRNG_EN

boolean

false

Implement the True Random-Number Generator (TRNG).

IO_TRNG_FIFO

natural

1

Depth of the TRNG data FIFO. Has to be a power of two, min 1, max 32768.

IO_CFS_EN

boolean

false

Implement the Custom Functions Subsystem (CFS).

IO_CFS_CONFIG

suv(31:0)

0x00000000

"Conduit" generic to pass user-defined flags to the Custom Functions Subsystem (CFS).

IO_CFS_IN_SIZE

natural

32

Size of the Custom Functions Subsystem (CFS) input signal conduit (cfs_in_i).

IO_CFS_OUT_SIZE

natural

32

Size of the Custom Functions Subsystem (CFS) output signal conduit (cfs_out_o).

IO_NEOLED_EN

boolean

false

Implement the Smart LED Interface (NEOLED).

IO_NEOLED_TX_FIFO

natural

1

TX FIFO depth of the the Smart LED Interface (NEOLED). Has to be a power of two, min 1, max 32768.

IO_GPTMR_EN

boolean

false

Implement the General Purpose Timer (GPTMR).

IO_ONEWIRE_EN

boolean

false

Implement the One-Wire Serial Interface Controller (ONEWIRE).

IO_DMA_EN

boolean

false

Implement the Direct Memory Access Controller (DMA).

IO_SLINK_EN

boolean

false

Implement the Stream Link Interface (SLINK).

IO_SLINK_RX_FIFO

natural

1

SLINK RX FIFO depth, has to be a power of two, minimum value is 1, max 32768.

IO_SLINK_TX_FIFO

natural

1

SLINK TX FIFO depth, has to be a power of two, minimum value is 1, max 32768.

IO_CRC_EN

boolean

false

Implement the Cyclic Redundancy Check (CRC) unit.

+
+
+
+

2.3. Processor Clocking

+
+

The processor is implemented as fully-synchronous logic design using a single clock domain that is driven entirely by the +top’s clk_i signal. This clock signal is used by all internal registers and memories, which trigger on the rising edge of +this clock signal - except for the Processor Reset and the clock switching gate that trigger on a falling edge. +External "clocks" like the OCD’s JTAG clock or the SDI’s serial clock are synchronized into the processor’s clock domain +before being further processed.

+
+
+

2.3.1. Clock Gating

+
+

The single clock domain of the processor can be split into an always-on clock domain and a switchable clock domain. +The switchable clock domain is used to clock the CPU core, the CPU’s bus switch and - if implemented - the caches. +This domain can be deactivated to reduce power consumption. The always-on clock domain is used to clock all other +processor modules like peripherals, memories and IO devices. Hence, these modules can continue operation (e.g. a +timer keeps running) even if the CPU is shut down.

+
+
+

The splitting into two clock domain is enabled by the CLOCK_GATING_EN generic (Processor Top Entity - Generics). +When enabled, a generic clock switching gate is added to decouple the switchable clock from the always-on clock domain +(VHDL file neorv32_clockgate.vhd). Whenever the CPU enters Sleep Mode the CPU clock domain ist shut down.

+
+
+ + + + + +
+ + +
Clock Switch Hardware
+By default, a generic clock gate is used (rtl/core/neorv32_clockgate.vhd) to shut down the CPU clock. +Especially for FPGA setups it is highly recommended to replace this default version by a technology-specific primitive +or macro wrapper to improve efficiency (clock skew, global clock tree usage, etc.). +
+
+
+
+

2.3.2. Peripheral Clocks

+
+

Many processor modules like the UARTs or the timers provide a programmable time base for operations. In order to simplify +the hardware, the processor implements a global "clock generator" that provides clock enables for certain frequencies that +are derived from the man clock. Hence, these clock enable signals are synchronous to the system’s main clock and will be high +for only a single cycle. The processor modules can use these enables for sub-main-clock operations while still providing a single +clock domain only.

+
+
+

In total, 8 sub-main-clock signals are available. All processor modules, which feature a time-based configuration, provide a +programmable three-bit prescaler select in their control register to select one of the 8 available clocks. The +mapping of the prescaler select bits to the according clock source is shown in the table below. Here, f represents the +processor main clock from the top entity’s clk_i signal.

+
+ +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Prescaler bits:

0b000

0b001

0b010

0b011

0b100

0b101

0b110

0b111

Resulting clock:

f/2

f/4

f/8

f/64

f/128

f/1024

f/2048

f/4096

+
+ + + + + +
+ + +
Power Saving
+If no peripheral modules requires a clock signal from the internal clock generator (all according modules are disabled by +clearing the enable bit in the according module’s control register) the generator is automatically deactivated to reduce +dynamic power consumption. +
+
+
+
+
+
+

2.4. Processor Reset

+
+ + + + + +
+ + +
Processor Reset Signal
+Always make sure to connect the processor’s reset signal rstn_i to a valid reset source (a button, the "locked" +signal of a PLL, a dedicated reset controller, etc.). +
+
+
+

The processor-wide reset can be triggered by any of the following sources:

+
+
+ +
+
+ + + + + +
+ + +
Reset Cause
+The actual reset cause can be determined via the Watchdog Timer (WDT). +
+
+
+

If any of these sources trigger a reset, the internal reset will be triggered for at least 4 clock cycles ensuring +a valid reset of the entire processor. The internal global reset is asserted aysynchronoulsy if triggered by the external +rstn_i signal. For internal reset sources, the global reset is asserted synchronously. If the reset cause gets inactive +the internal reset is de-asserted synchronously at a falling clock edge.

+
+
+

Internally, all registers that are not meant for mapping to blockRAM (like the register file) do provide a dedicated and +low-active asynchronous hardware reset. This asynchronous reset ensures that the entire processor logic is reset to a +defined state even if the main clock is not operational yet.

+
+
+ + + + + +
+ + +The system reset will only reset the control registers of each implemented IO/peripheral module. This control register +reset will also reset the according "module enable flag" to zero, which - in turn - will cause a synchronous +module-internal reset of the remaining logic. +
+
+
+
+
+

2.5. Processor Interrupts

+
+

The NEORV32 Processor provides several interrupt request signals (IRQs) for custom platform use.

+
+
+ + + + + +
+ + +
Trigger Type
+All interrupt request lines are level-triggered and high-active. Once set, the signal should remain high until +the interrupt request is explicitly acknowledged (e.g. writing to a memory-mapped register). +
+
+
+

2.5.1. RISC-V Standard Interrupts

+
+

The processor setup features the standard machine-level RISC-V interrupt lines for "machine timer interrupt", "machine +software interrupt" and "machine external interrupt". Their usage is defined by the RISC-V privileged architecture +specifications. However, bare-metal system can also repurpose these interrupts. See CPU section +Traps, Exceptions and Interrupts for more information.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
Top signalDescription

mtime_irq_i

Machine timer interrupt from processor-external MTIME unit (MTI). This IRQ is only available if the processor-internal Machine System Timer (MTIME) unit is not implemented.

msw_irq_i

Machine software interrupt (MSI). This interrupt is used for inter-processor interrupts in multi-core systems. However, it can also be used for any custom purpose.

mext_irq_i

Machine external interrupt (MEI). This interrupt is used for any processor-external interrupt source (like a platform interrupt controller).

+
+
+

2.5.2. NEORV32-Specific Fast Interrupt Requests

+
+

As part of the NEORV32-specific CPU extensions, the processor core features 16 fast interrupt request signals +(FIRQ0 to FIRQ15) providing dedicated bits in the mip and mie CSRs and custom mcause trap codes. +The FIRQ signals are reserved for processor-internal modules only (for example for the communication +interfaces to signal "available incoming data" or "ready to send new data").

+
+
+

The mapping of the 16 FIRQ channels to the according processor-internal modules is shown in the following +table (the channel number also corresponds to the according FIRQ priority: 0 = highest, 15 = lowest):

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6. NEORV32 Fast Interrupt Request (FIRQ) Mapping
ChannelSourceDescription

0

TRNG

TRNG data available interrupt

1

CFS

Custom functions subsystem (CFS) interrupt (user-defined)

2

UART0

UART0 RX FIFO level interrupt

3

UART0

UART0 TX FIFO level interrupt

4

UART1

UART1 RX FIFO level interrupt

5

UART1

UART1 TX FIFO level interrupt

6

SPI

SPI FIFO level interrupt

7

TWI

TWI FIFO level interrupt

8

XIRQ

External interrupt controller interrupt

9

NEOLED

NEOLED TX FIFO level interrupt

10

DMA

DMA transfer done interrupt

11

SDI

SDI FIFO level interrupt

12

GPTMR

General purpose timer interrupt

13

ONEWIRE

1-wire idle interrupt

14

SLINK

SLINK RX FIFO level interrupt

15

SLINK

SLINK TX FIFO level interrupt

+
+
+
+
+

2.6. Address Space

+
+

As a 32-bit architecture the NEORV32 can access a 4GB physical address space. By default, this address space is +split into six main regions. Each region provides specific physical memory attributes ("PMAs") that define +the access capabilities (rwxac; r = read permission, w = write permission, x - execute permission, +a = atomic access support, c = cached CPU access, p = privileged access only).

+
+
+
+900 +
+
Figure 2. NEORV32 Processor Address Space (Default Configuration)
+
+
+ + + + + +
+ + +
The "Void" (Unmapped Addresses)
+All accesses to "unmapped" addresses (= "void") are redirected to the Processor-External Bus Interface (XBUS). +For example, if the internal IMEM is disabled, the accesses to the entire address space between 0x00000000 and +0x7FFFFFFF are converted into XBUS requests. If the XBUS interface is not enabled any access to the void will +raise a bus error exception. +
+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 7. Main Address Regions
#RegionPMAsDescription

1

Internal IMEM address space

rwxac-

For instructions (=code) and constants; mapped to the internal Instruction Memory (IMEM).

2

Internal DMEM address space

rwxac-

For application runtime data (heap, stack, etc.); mapped to the internal Data Memory (DMEM)).

3

Memory-mapped XIP flash

r-xac-

Memory-mapped access to the Execute In Place Module (XIP) SPI flash.

4

Bootloader address space

r-xa-p

Read-only memory for the internal Bootloader ROM (BOOTROM) containing the default Bootloader.

5

IO/peripheral address space

rwxa-p

Processor-internal peripherals / IO devices.

6

The "void"

rwxac-

Unmapped address space. All accesses to this region(s) are redirected to the Processor-External Bus Interface (XBUS) (if implemented).

+
+ + + + + +
+ + +
Privileged IO and BOOTROM Access Only
+Only privileged accesses (M-mode) to the IO/peripheral and bootloader address spaces are allowed. +If an unprivileged application tries to access this address space a bus access error exception is raised. +
+
+
+ + + + + +
+ + +
Custom PMAs
+Custom physical memory attributes enforced by the CPU’s physcial memory protection (Smpmp ISA Extension) +can be used to further constrain the physical memory attributes. +
+
+
+

2.6.1. Bus System

+
+

The CPU can access all of the 32-bit address space from the instruction fetch interface and also from the data access +interface. Both CPU interfaces can be equipped with optional caches (Processor-Internal Data Cache (dCACHE) and +Processor-Internal Instruction Cache (iCACHE)). The two CPU interfaces are multiplexed by a simple bus switch into +a single processor-internal bus. Optionally, this bus is further switched by another instance of the bus switch so the +Direct Memory Access Controller (DMA) controller can also access the entire address space. Accesses via the +resulting SoC bus are split by the Bus Gateway that redirects accesses to the according main address regions +(see table above). Accesses to the processor-internal IO/peripheral devices are further redirected via a +dedicated IO Switch.

+
+
+
+1300 +
+
Figure 3. Processor-Internal Bus Architecture
+
+
+ + + + + +
+ + +
Bus Interface
+See sections CPU Architecture and Bus Interface for more information regarding the CPU bus accesses. +
+
+
+
+

2.6.2. Bus Gateway

+
+

The central bus gateway serves two purposes: redirect core accesses to the according modules (e.g. memory accesses +vs. memory-mapped IO accesses) and monitor all bus transactions. The redirection of access request is based on a +customizable memory map implemented via VHDL constants in the main package file (rtl/core/neorv323_package.vhd):

+
+
+
Listing 1. Main Address Regions Configuration in the VHDL Package File
+
+
-- Main Address Regions ---
+constant mem_imem_base_c : std_ulogic_vector(31 downto 0) := x"00000000";
+constant mem_dmem_base_c : std_ulogic_vector(31 downto 0) := x"80000000";
+constant mem_xip_base_c  : std_ulogic_vector(31 downto 0) := x"e0000000";
+constant mem_xip_size_c  : natural := 256*1024*1024;
+constant mem_boot_base_c : std_ulogic_vector(31 downto 0) := x"ffffc000";
+constant mem_boot_size_c : natural := 8*1024;
+constant mem_io_base_c   : std_ulogic_vector(31 downto 0) := x"ffffe000";
+constant mem_io_size_c   : natural := 8*1024;
+
+
+
+

Besides the delegation of bus requests the gateway also implements a bus monitor (aka "the bus keeper") that tracks all +active bus transactions to ensure safe and deterministic operations.

+
+
+

Whenever a memory-mapped device is accessed (a real memory, a memory-mapped IO or some processor-external module) the bus +monitor starts an internal timer. The accessed module has to respond ("ACK") to the bus request within a specific +time window. This time window is defined by a global constant in the processor’s VHDL package file +(rtl/core/neorv323_package.vhd).

+
+
+
Listing 2. Internal Bus Timeout Configuration
+
+
  constant bus_timeout_c : natural := 15;
+
+
+
+

This constant defines the maximum number of cycles after which a non-responding bus request (i.e. no ack +and no err signal) will time out raising a bus access fault exception. For example this can happen when accessing +"address space holes" - addresses that are not mapped to any physical module. The resulting exception type corresponds +to the according access type, i.e. instruction fetch access exception, load access exception or store access exception.

+
+
+ + + + + +
+ + +
XIP Timeout
+Accesses to the memory-mapped XIP flash (via the Execute In Place Module (XIP)) will never time out. +
+
+
+ + + + + +
+ + +
External Bus Interface Timeout
+Accesses that are delegated to the external bus interface have a different maximum timeout value that is defined by an +explicit specific processor generic. See section Processor-External Bus Interface (XBUS) for more information. +
+
+
+
+

2.6.3. Reservation Set Controller

+
+

The reservation set controller is responsible for handling the load-reservate and store-conditional bus transaction that +are triggered by the lr.w (LR) and sc.w (SC) instructions from the CPU’s A ISA Extension.

+
+
+

A "reservation" defines an address or address range that provides a guarding mechanism to support atomic accesses. A new +reservation is registered by the LR instruction. The address provided by this instruction defines the memory location +that is now monitored for atomic accesses. The according SC instruction evaluates the state of this reservation. If +the reservation is still valid the write access triggered by the SC instruction is finally executed and the instruction +return a "success" state (rd = 0). If the reservation has been invalidated the SC instruction will not write to memory +and will return a "failed" state (rd = 1).

+
+
+ + + + + +
+ + +
Reservation Set(s) and Granule
+The reservation set controller supports only a single global reservation set with a word-aligned 4-byte granule. +
+
+
+

The reservation is invalidated if…​

+
+
+
    +
  • +

    an SC instruction is executed that accesses an address outside of the reservation set of the previous LR instruction. +This SC instruction will fail (not writing to memory).

    +
  • +
  • +

    an SC instruction is executed that accesses an address inside of the reservation set of the previous LR instruction. +This SC instruction will succeed (finally writing to memory).

    +
  • +
  • +

    a normal store operation accesses an address inside of the current reservation set (by the CPU or by the DMA).

    +
  • +
  • +

    a hardware reset is triggered.

    +
  • +
+
+
+ + + + + +
+ + +
Consecutive LR Instructions
+If an LR instruction is followed by another LR instruction the reservation set of the former one is overridden +by the reservation set of the latter one. +
+
+
+ + + + + +
+ + +
Bus Access Errors
+If the LR operation causes a bus access error (raising a load access exception) the reservation is registered anyway. +If the SC operation causes a bus access error (raising a store access exception) an already registered reservation set +is invalidated anyway. +
+
+
+ + + + + +
+ + +
Strong Semantic
+The LR/SC mechanism follows the strong semantic approach: the LR/SC instruction pair fails only if there is a write +access to the referenced memory location between the LR and SC instructions (by the CPU itself or by the DMA). +Context changes, interrupts, traps, etc. do not effect nor invalidate the reservation state at all. +
+
+
+ + + + + +
+ + +
Physical Memory Attributes
+The reservation set can be set for any address (only constrained by the configured granularity). This also +includes cached memory, memory-mapped IO devices and processor-external address spaces. +
+
+
+

Bus transactions triggered by the LR instruction register a new reservation set and are delegated to the adressed +memory/device. Bus transactions triggered by the SC remove a reservation set and are forwarded to the adressed +memory/device only if the SC operations succeeds. Otherwise, the access request is not forwarded and a local ACK is +generated to terminate the bus transaction.

+
+
+ + + + + +
+ + +
LR/SC Bus Protocol
+More information regarding the LR/SC bus transactions and the the according protocol can be found in section +Bus Interface / Atomic Accesses. +
+
+
+ + + + + +
+ + +
Cache Coherency
+Atomic operations always bypass the cache using direct/uncached accesses. Care must be taken +to maintain data cache coherency (e.g. by using the fence instruction). +
+
+
+
+

2.6.4. IO Switch

+
+

The IO switch further decodes the address when accessing the processor-internal IO/peripheral devices and forwards +the access request to the according module. Note that a total address space size of 256 bytes is assigned to each +IO module in order to simplify address decoding. The IO-specific address map is also defined in the main VHDL +package file (rtl/core/neorv323_package.vhd).

+
+
+
Listing 3. Exemplary Cut-Out from the IO Address Map
+
+
  -- IO Address Map --
+  constant iodev_size_c    : natural := 256; -- size of a single IO device (bytes)
+  constant base_io_cfs_c   : std_ulogic_vector(31 downto 0) := x"ffffeb00";
+  constant base_io_slink_c : std_ulogic_vector(31 downto 0) := x"ffffec00";
+  constant base_io_dma_c   : std_ulogic_vector(31 downto 0) := x"ffffed00";
+
+
+
+
+

2.6.5. Boot Configuration

+
+

Due to the flexible memory configuration, the NEORV32 Processor provides several different boot scenarios. +The following section illustrates the two most common boot scenarios.

+
+
+
+800 +
+
Figure 4. NEORV32 Boot Configurations
+
+
+

There are two general boot scenarios: Indirect Boot (1a and 1b) and Direct Boot (2a and 2b) configured via the +INT_BOOTLOADER_EN generic. If this generic is true the indirect boot scenario is used. This is also the +default boot configuration of the processor. If INT_BOOTLOADER_EN is *false the direct boot scenario is used.

+
+
+
Indirect Boot
+
+

The indirect_boot scenarios 1a and 1b are based on the processor-internal Bootloader. This boot setup is enabled +by setting the INT_BOOTLOADER_EN generic to true, which will implement the processor-internal Bootloader ROM (BOOTROM). +This read-only memory is pre-initialized during synthesis with the default bootloader firmware. The bootloader provides several +options to upload an executable copying it to the beginning of the instruction address space so the CPU can execute it.

+
+
+

Boot scenario 1a uses the processor-internal IMEM. This scenario implements the internal Instruction Memory (IMEM) +as non-initialized RAM so the bootloader can copy the actual executable to it.

+
+
+

Boot scenario 1b uses a processor-external IMEM that is connected via the processor’s bus interface. In this scenario +the internal Instruction Memory (IMEM) is not implemented at all and the bootloader will copy the executable to the +processor-external memory. Hence, the external memory has to be implemented as RAM.

+
+
+
+
Direct Boot
+
+

The direct boot scenarios 2a and 2b do not use the processor-internal bootloader since the INT_BOOTLOADER_EN +generic is set false. In this configuration the Bootloader ROM (BOOTROM) is not implemented at all and the CPU will +directly begin executing code from the beginning of the instruction address space after reset. An application-specific +"pre-initialization" mechanism is required in order to provide an executable inside the memory.

+
+
+

Boot scenario 2a uses the processor-internal IMEM implemented as read-only memory in this scenario. +It is pre-initialized (by the bitstream) with the actual application executable during synthesis.

+
+
+

In contrast, boot scenario 2b uses a processor-external IMEM. In this scenario the system designer is responsible for +providing an initialized external memory that contains the actual application to be executed.

+
+
+
+
+
+
+

2.7. Processor-Internal Modules

+
+ + + + + +
+ + +
Privileged IO Access Only
+Only privileged accesses (M-mode) to the IO/peripheral modules are allowed. If an unprivileged application +tries to access this address space a bus access error exception is raised. +
+
+
+ + + + + +
+ + +
Full-Word Write Accesses Only
+All peripheral/IO devices should only be written in full-word mode (i.e. 32-bit). Byte or half-word (8/16-bit) write accesses +might cause undefined behavior. +
+
+
+ + + + + +
+ + +
Writing to Read-Only Registers
+Unless otherwise specified, writing to registers that are listed as read-only does not trigger an exception. +The write access is simply ignored by the corresponding hardware module. +
+
+
+ + + + + +
+ + +
IO Module’s Address Space
+Each peripheral/IO module occupies an address space of 256 bytes (64 words). Most devices do not fully utilize this address +space and will simply mirror the available interface registers across the entire 256 bytes of address space. +
+
+
+ + + + + +
+ + +
Unimplemented Modules / Address Holes
+When accessing an IO device that hast not been implemented (disabled via the according generic) +or when accessing an address that is actually unused, a load/store access fault exception is raised. +
+
+
+ + + + + +
+ + +
Module Interrupts
+Several peripheral/IO devices provide some kind of interrupt. These interrupts are mapped to the CPU’s +Custom Fast Interrupt Request Lines. See section Processor Interrupts for more information. +
+
+
+ + + + + +
+ + +
CMSIS System Description View (SVD)
+A CMSIS-compatible System View Description (SVD) file including all peripherals is available in sw/svd. +
+
+
+
+

2.7.1. Instruction Memory (IMEM)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_imem.entity.vhd

entity-only definition

mem/neorv32_imem.default.vhd

default platform-agnostic memory architecture

mem/neorv32_imem.legacy.vhd

alternative legacy-style memory architecture

Software driver files:

none

implicitly used

Top entity ports:

none

Configuration generics:

MEM_INT_IMEM_EN

implement processor-internal IMEM when true

MEM_INT_IMEM_SIZE

IMEM size in bytes (use a power of 2)

INT_BOOTLOADER_EN

use internal bootloader when true (implements IMEM as uninitialized RAM, otherwise the IMEM is implemented an pre-intialized ROM)

CPU interrupts:

none

Access restrictions:

none / read-only if INT_BOOTLOADER_EN = true

+
+

Overview

+
+
+

Implementation of the processor-internal instruction memory is enabled by the processor’s +MEM_INT_IMEM_EN generic. The total memory size in bytes is defined via the MEM_INT_IMEM_SIZE generic. +Note that this size should be a power of two to optimize physical implementation. If the IMEM is implemented, +it is mapped to base address 0x00000000 by default (see section Address Space).

+
+
+

By default the IMEM is implemented as true RAM so the content can be modified during run time. This is +required when using the bootloader (or the on-chip debugger) so it can update the content of the IMEM at +any time. If this feature is not required the IMEM can be implemented as pre-intialized ROM so that the +application code permanently resides in memory. This is automatically implemented when the +processor-internal bootloader is disabled (INT_BOOTLOADER_EN = false).

+
+
+

When the IMEM is implemented as ROM, it will be initialized during synthesis with the actual application program +image. The compiler toolchain provides an option to generate and override the default VHDL initialization file +rtl/core/neorv32_application_image.vhd, which is automatically inserted into the IMEM. If the IMEM is implemented +as RAM (default), the memory block will not be initialized at all.

+
+
+ + + + + +
+ + +
Memory Size
+If the configured memory size (via the MEM_INT_IMEM_SIZE generic) is not a power of two the actual memory +size will be auto-adjusted to the next power of two (e.g. configuring a memory size of 60kB will result in a +physical memory size of 64kB). +
+
+
+ + + + + +
+ + +
VHDL Source File
+The actual IMEM is split into two design files: a plain entity definition (neorv32_imem.entity.vhd) and the actual +architecture definition mem/neorv32_imem.default.vhd. This default architecture provides a generic and +platform independent memory design that infers embedded memory blocks (blockRAM). The default architecture can +be replaced by platform-specific modules in order to use platform-specific features or to improve technology mapping +and/or timing. A "legacy-style" memory architecture is provided in rtl/mem that can be used if the synthesis does +not correctly infer blockRAMs. +
+
+
+ + + + + +
+ + +
Read-Only Access
+If the IMEM is implemented as true ROM any write attempt to it will raise a store access fault exception. +
+
+
+
+
+

2.7.2. Data Memory (DMEM)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_dmem.entity.vhd

entity-only definition

mem/neorv32_dmem.default.vhd

default platform-agnostic memory architecture

mem/neorv32_dmem.legacy.vhd

alternative legacy-style memory architecture

Software driver files:

none

implicitly used

Top entity ports:

none

Configuration generics:

MEM_INT_DMEM_EN

implement processor-internal DMEM when true

MEM_INT_DMEM_SIZE

DMEM size in bytes (use a power of 2)

CPU interrupts:

none

Access restrictions:

none

+
+

Overview

+
+
+

Implementation of the processor-internal data memory is enabled by the processor’s MEM_INT_DMEM_EN +generic. The total memory size in bytes is defined via the MEM_INT_DMEM_SIZE generic. Note that this +size should be a power of two to optimize physical implementation. If the DMEM is implemented, +it is mapped to base address 0x80000000 by default (see section Address Space). +The DMEM is always implemented as true RAM.

+
+
+ + + + + +
+ + +
Memory Size
+If the configured memory size (via the MEM_INT_IMEM_SIZE generic) is not a power of two the actual memory +size will be auto-adjusted to the next power of two (e.g. configuring a memory size of 60kB will result in a +physical memory size of 64kB). +
+
+
+ + + + + +
+ + +
VHDL Source File
+The actual DMEM is split into two design files: a plain entity definition neorv32_dmem.entity.vhd and the actual +architecture definition mem/neorv32_dmem.default.vhd. This default architecture provides a generic and +platform independent memory design that infers embedded memory blocks (blockRAM). The default architecture can +be replaced by platform-specific modules in order to use platform-specific features or to improve technology mapping +and/or timing. A "legacy-style" memory architecture is provided in rtl/mem that can be used if the synthesis does +not correctly infer blockRAMs. +
+
+
+ + + + + +
+ + +
Execute from RAM
+The CPU is capable of executing code also from arbitrary data memory. +
+
+
+
+
+

2.7.3. Bootloader ROM (BOOTROM)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_boot_rom.vhd

Software driver files:

none

Top entity ports:

none

Configuration generics:

INT_BOOTLOADER_EN

implement processor-internal bootloader when true

CPU interrupts:

none

Access restrictions:

privileged access only, read-only

+
+

Overview

+
+
+

This boot ROM module provides a read-only memory that contain the executable image of the default NEORV32 +Bootloader. If the internal bootloader is enabled via the INT_BOOTLOADER_EN generic the CPU’s boot address +is automatically set to the beginning of the bootloader ROM. See sections Address Space and +Boot Configuration for more information regarding the processor’s different boot scenarios.

+
+
+ + + + + +
+ + +
Memory Size
+If the configured boot ROM size is not a power of two the actual memory size will be auto-adjusted to +the next power of two (e.g. configuring a memory size of 6kB will result in a physical memory size of 8kB). +
+
+
+ + + + + +
+ + +
Bootloader Image
+The boot ROM is initialized during synthesis with the default bootloader image +(rtl/core/neorv32_bootloader_image.vhd). +
+
+
+
+
+

2.7.4. Processor-Internal Instruction Cache (iCACHE)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_cache.vhd

Generic cache module

Software driver files:

none

implicitly used

Top entity ports:

none

Configuration generics:

ICACHE_EN

implement processor-internal instruction cache when true

ICACHE_NUM_BLOCKS

number of cache blocks (pages/lines)

ICACHE_BLOCK_SIZE

size of a cache block in bytes

CPU interrupts:

none

Access restrictions:

none

+
+

Overview

+
+
+

The processor features an optional instruction cache to improve performance when using memories with high +access latencies. The cache is connected directly to the CPU’s instruction fetch interface and provides +full-transparent accesses. The cache is direct-mapped and read-only.

+
+
+ + + + + +
+ + +
Cached/Uncached Accesses
+The data cache provides direct accesses (= uncached) to memory in order to access memory-mapped IO (like the +processor-internal IO/peripheral modules). All accesses that target the address range from 0xF0000000 to 0xFFFFFFFF +will not be cached at all (see section Address Space). Direct/uncached accesses have lower priority than +cache block operations to allow continuous burst transfer and also to maintain logical instruction forward +progress / data coherency. Furthermore, atomic load-reservate and store-conditional instructions (A ISA Extension) +will always bypass the cache. +
+
+
+ + + + + +
+ + +
Caching Internal Memories
+The data cache is intended to accelerate data access to processor-external memories. +The CPU cache(s) should not be implemented when using only processor-internal data and instruction memories. +
+
+
+ + + + + +
+ + +
Manual Cache Clear/Reload
+By executing the fence(.i) instruction the cache is cleared and a reload from main memory is triggered. +
+
+
+ + + + + +
+ + +
Retrieve Cache Configuration from Software
+Software can retrieve the cache configuration/layout from the SYSINFO - Cache Configuration register. +
+
+
+ + + + + +
+ + +
Bus Access Fault Handling
+The cache always loads a complete cache block (aligned to the block size) every time a +cache miss is detected. Each cached word from this block provides a single status bit that indicates if the +according bus access was successful or caused a bus error. Hence, the whole cache block remains valid even +if certain addresses inside caused a bus error. If the CPU accesses any of the faulty cache words, an +instruction bus error exception is raised. +
+
+
+
+
+

2.7.5. Processor-Internal Data Cache (dCACHE)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_cache.vhd

Generic cache module

Software driver files:

none

implicitly used

Top entity ports:

none

Configuration generics:

DCACHE_EN

implement processor-internal data cache when true

DCACHE_NUM_BLOCKS

number of cache blocks (pages/lines)

DCACHE_BLOCK_SIZE

size of a cache block in bytes

CPU interrupts:

none

Access restrictions:

none

+
+

Overview

+
+
+

The processor features an optional data cache to improve performance when using memories with high +access latencies. The cache is connected directly to the CPU’s data access interface and provides +full-transparent accesses. The cache is direct-mapped and uses "write-allocate" and "write-back" strategies.

+
+
+ + + + + +
+ + +
Cached/Uncached Accesses
+The data cache provides direct accesses (= uncached) to memory in order to access memory-mapped IO (like the +processor-internal IO/peripheral modules). All accesses that target the address range from 0xF0000000 to 0xFFFFFFFF +will not be cached at all (see section Address Space). Direct/uncached accesses have lower priority than +cache block operations to allow continuous burst transfer and also to maintain logical instruction forward +progress / data coherency. Furthermore, atomic load-reservate and store-conditional instructions (A ISA Extension) +will always bypass the cache. +
+
+
+ + + + + +
+ + +
Caching Internal Memories
+The data cache is intended to accelerate data access to processor-external memories. +The CPU cache(s) should not be implemented when using only processor-internal data and instruction memories. +
+
+
+ + + + + +
+ + +
Manual Cache Flush/Clear/Reload
+By executing the fence(.i) instruction the cache is flushed, cleared and a reload from main memory is triggered. +
+
+
+ + + + + +
+ + +
Retrieve Cache Configuration from Software
+Software can retrieve the cache configuration/layout from the SYSINFO - Cache Configuration register. +
+
+
+ + + + + +
+ + +
Bus Access Fault Handling
+The cache always loads a complete cache block (aligned to the block size) every time a +cache miss is detected. Each cached word from this block provides a single status bit that indicates if the +according bus access was successful or caused a bus error. Hence, the whole cache block remains valid even +if certain addresses inside caused a bus error. If the CPU accesses any of the faulty cache words, a +data bus error exception is raised. +
+
+
+
+
+

2.7.6. Direct Memory Access Controller (DMA)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_dma.vhd

Software driver files:

neorv32_dma.c

neorv32_dma.h

Top entity ports:

none

Configuration generics:

IO_DMA_EN

implement DMA when true

CPU interrupts:

fast IRQ channel 10

DMA transfer done (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The NEORV32 DMA provides a small-scale scatter/gather direct memory access controller that allows to transfer and +modify data independently of the CPU. A single read/write transfer channel is implemented that is configured via +memory-mapped registers. a configured transfer can either be triggered manually or by a programmable CPU FIRQ interrupt +(see NEORV32-Specific Fast Interrupt Requests).

+
+
+

The DMA is connected to the central processor-internal bus system (see section Address Space) and can access the same +address space as the CPU core. It uses interleaving mode accessing the central processor bus only if the CPU does not +currently request and bus access.

+
+
+

The controller can handle different data quantities (e.g. read bytes and write them back as sign-extend words) and can +also change the Endianness of data while transferring.

+
+
+ + + + + +
+ + +
DMA Demo Program
+A DMA example program can be found in sw/example/demo_dma. +
+
+
+

Theory of Operation

+
+
+

The DMA provides four memory-mapped interface registers: A status and control register CTRL and three registers for +configuring the actual DMA transfer. The base address of the source data is programmed via the SRC_BASE register. +Vice versa, the base address of the destination data is programmed via the DST_BASE. The third configuration register +TTYPE is use to configure the actual transfer type and the number of elements to transfer.

+
+
+

The DMA is enabled by setting the DMA_CTRL_EN bit of the control register. Manual trigger mode (i.e. the DMA transfer is +triggered by writing to the TTYPE register) is selected if DMA_CTRL_AUTO is cleared. Alternatively, the DMA transfer can +be triggered by a processor internal FIRQ signal if DMA_CTRL_AUTO is set (see section below).

+
+
+

The DMA uses a load-modify-write data transfer process. Data is read from the bus system, internally modified and then written +back to the bus system. This combination is implemented as an atomic progress, so canceling the current transfer by clearing the +DMA_CTRL_EN bit will stop the DMA right after the current load-modify-write operation.

+
+
+

If the DMA controller detects a bus error during operation, it will set either the DMA_CTRL_ERROR_RD (error during +last read access) or DMA_CTRL_ERROR_WR (error during last write access) and will terminate the current transfer. +Software can read the SRC_BASE or DST_BASE register to retrieve the address that caused the according error. +Alternatively, software can read back the NUM bits of the control register to determine the index of the element +that caused the error. The error bits are automatically cleared when starting a new transfer.

+
+
+

When the DMA_CTRL_DONE flag is set the DMA has actually executed a transfer. However, the DMA_CTRL_ERROR_* flags +should also be checked to verify that the executed transfer completed without errors. The DMA_CTRL_DONE flag is +automatically cleared when writing the CTRL register.

+
+
+ + + + + +
+ + +
DMA Access Privilege Level
+Transactions performed by the DMA are executed as bus transactions with elevated machine-mode privilege level. +Note that any physical memory protection rules (Smpmp ISA Extension) are not applied to DMA transfers. +
+
+
+

Transfer Configuration

+
+
+

If the DMA is set to manual trigger mode (DMA_CTRL_AUTO = 0) writing the TTRIG register will start the +programmed DMA transfer. Once started, the DMA will read one data quantity from the source address, processes it internally +and then will write it back to the destination address. The DMA_TTYPE_NUM bits of the TTYPE register define how many +times this process is repeated by specifying the number of elements to transfer.

+
+
+

Optionally, the source and/or destination addresses can be increments according to the data quantities +automatically by setting the according DMA_TTYPE_SRC_INC and/or DMA_TTYPE_DST_INC bit.

+
+
+

Four different transfer quantities are available, which are configured via the DMA_TTYPE_QSEL bits:

+
+
+
    +
  • +

    00: Read source data as byte, write destination data as byte

    +
  • +
  • +

    01: Read source data as byte, write destination data as zero-extended word

    +
  • +
  • +

    10: Read source data as byte, write destination data as sign-extended word

    +
  • +
  • +

    11: Read source data as word, write destination data as word

    +
  • +
+
+
+

Optionally, the DMA controller can automatically convert Endianness of the transferred data if the DMA_TTYPE_ENDIAN +bit is set.

+
+
+ + + + + +
+ + +
Address Alignment
+Make sure to align the source and destination base addresses to the according transfer data quantities. For instance, +word-to-word transfers require that the two LSB of SRC_BASE and DST_BASE are cleared. +
+
+
+ + + + + +
+ + +
Writing to IO Device
+When writing data to IO / peripheral devices (for example to the Cyclic Redundancy Check (CRC)) the destination +data quantity has to be set to word (32-bit) since all IO registers can only be written in full 32-bit word mode. +
+
+
+

Automatic Trigger

+
+
+

As an alternative to the manual trigger mode, the DMA can be set to automatic trigger mode starting a pre-configured +transfer if a specific processor-internal peripheral issues a FIRQ interrupt request. The automatic trigger mode is enabled by +setting the CTRL register’s DMA_CTRL_AUTO bit. In this configuration no transfer is started when writing to the DMA’s +TTYPE register.

+
+
+

The actually triggering FIRQ channel is configured via the control register’s DMA_CTRL_FIRQ_SEL bits. Writing a 0 will +select FIRQ channel 0, writing a 1 will select FIRQ channel 1, and so on. See section Processor Interrupts +for a list of all FIRQ channels and their according sources.

+
+
+

The FIRQ trigger can operate in two trigger mode configured via the DMA_CTRL_FIRQ_TYPE flag:

+
+
+
    +
  • +

    DMA_CTRL_FIRQ_TYPE = 0: trigger the automatic DMA transfer on a rising-edge of the selected FIRQ channel (e.g. trigger +DMA transfer only once)

    +
  • +
  • +

    DMA_CTRL_FIRQ_TYPE = 1: trigger the automatic DMA transfer when the selected FIRQ channel is active (e.g. trigger +DMA transfer again and again)

    +
  • +
+
+
+ + + + + +
+ + +
FIRQ Trigger
+The DMA transfer will start if a rising edge is detected on the configured FIRQ channel. Hence, the DMA is triggered only +once even if the selected FIRQ channel keeps pending. +
+
+
+

Memory Barrier / Fence Operation

+
+
+

Optionally, the DMA can issue a FENCE request to the downstream memory system when a transfer has been completed +without errors. This can be used to re-sync caches (flush and reload) and buffers to maintain data coherency. +This automatic fencing is enabled by the setting the control register’s DMA_CTRL_FENCE bit.

+
+
+

DMA Interrupt

+
+
+

The DMA features a single CPU interrupt that is triggered when the programmed transfer has completed. This +interrupt is also triggered if the DMA encounters a bus error during operation. The interrupt will remain pending +until the control register’s DMA_CTRL_DONE is cleared (this will happen upon any write access to the control +register).

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 8. DMA Register Map (struct NEORV32_DMA)
AddressName [C]Bit(s), Name [C]R/WFunction

0xffffed00

CTRL

0 DMA_CTRL_EN

r/w

DMA module enable

1 DMA_CTRL_AUTO

r/w

Enable automatic mode (FIRQ-triggered)

2 DMA_CTRL_FENCE

r/w

Issue a downstream FENCE operation when DMA transfer completes (without errors)

7:3 reserved

r/-

reserved, read as zero

8 DMA_CTRL_ERROR_RD

r/-

Error during read access, clears when starting a new transfer

9 DMA_CTRL_ERROR_WR

r/-

Error during write access, clears when starting a new transfer

10 DMA_CTRL_BUSY

r/-

DMA transfer in progress

11 DMA_CTRL_DONE

r/c

Set if a transfer was executed; auto-clears on write-access

14:12 reserved

r/-

reserved, read as zero

15 DMA_CTRL_FIRQ_TYPE

r/w

Trigger on rising-edge (0) or high-level (1) or selected FIRQ channel

19:16 DMA_CTRL_FIRQ_SEL_MSB : DMA_CTRL_FIRQ_SEL_LSB

r/w

FIRQ trigger select (FIRQ0=0 …​ FIRQ15=15)

31:20 reserved

r/-

reserved, read as zero

0xffffed04

SRC_BASE

31:0

r/w

Source base address (shows the last-accessed source address when read)

0xffffed08

DST_BASE

31:0

r/w

Destination base address (shows the last-accessed destination address when read)

0xffffed0c

TTYPE

23:0 DMA_TTYPE_NUM_MSB : DMA_TTYPE_NUM_LSB

r/w

Number of elements to transfer (shows the last-transferred element index when read)

26:24 reserved

r/-

reserved, read as zero

28:27 DMA_TTYPE_QSEL_MSB : DMA_TTYPE_QSEL_LSB

r/w

Source data quantity select (00 = byte, 01 = half-word, 10 = word)

29 DMA_TTYPE_SRC_INC

r/w

Constant (0) or incrementing (1) source address

30 DMA_TTYPE_DST_INC

r/w

Constant (0) or incrementing (1) destination address

31 DMA_TTYPE_ENDIAN

r/w

Swap Endianness when set

+
+
+
+

2.7.7. Processor-External Bus Interface (XBUS)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_xbus.vhd

External bus gateway

neorv32_cache.vhd

Generic cache module

Software driver files:

none

implicitly used

Top entity ports:

xbus_adr_o

address output (32-bit)

xbus_dat_o

data output (32-bit)

xbus_tag_o

access tag (3-bit)

xbus_we_o

write enable (1-bit)

xbus_sel_o

byte enable (4-bit)

xbus_stb_o

bus strobe (1-bit)

xbus_cyc_o

valid cycle (1-bit)

xbus_dat_i

data input (32-bit)

xbus_ack_i

acknowledge (1-bit)

xbus_err_i

bus error (1-bit)

Configuration generics:

XBUS_EN

enable external bus interface when true

XBUS_TIMEOUT

number of clock cycles after which an unacknowledged external bus access will auto-terminate (0 = disabled)

XBUS_REGSTAGE_EN

implement XBUS register stages

XBUS_CACHE_EN

implement the external bus cache

XBUS_CACHE_NUM_BLOCKS

number of blocks ("lines"), has to be a power of two.

XBUS_CACHE_BLOCK_SIZE

size in bytes of each block, has to be a power of two.

CPU interrupts:

none

Access restrictions:

none

+
+

Overview

+
+
+

The external bus interface provides a Wishbone b4-compatible on-chip bus interface that is +implemented if the XBUS_EN generic is true. This bus interface can be used to attach processor-external +modules like memories, custom hardware accelerators or additional peripheral devices. +An optional cache module ("XCACHE") can be enabled to improve memory access latency.

+
+
+ + + + + +
+ + +
Address Mapping
+The external interface is not mapped to a specific address space. Instead, all CPU memory accesses that +do not target a specific (and actually implemented) processor-internal address region (hence, accessing the "void"; +see section Address Space) are redirected to the external bus interface. +
+
+
+ + + + + +
+ + +
AXI4-Lite Interface Bridge
+A processor top entity with an AXI4-Lite-compatible bus interface can be found in rtl/system_inegration. +More information regarding this alternate top entity can be found in in the user guide: +https://stnolting.github.io/neorv32/ug/#_packaging_the_processor_as_vivado_ip_block +
+
+
+ + + + + +
+ + +
AHB3-Lite Interface Bridge
+A simple bridge that converts the processor’s XBUS into an AHB3-lite-compatible host interface can +be found in in rtl/system_inegration (xbus2ahblite_bridge.vhd). +
+
+
+

Wishbone Bus Protocol

+
+
+

The external bus interface complies to the pipelined Wishbone b4 protocol. Even though this protocol +was explicitly designed to support pipelined transfers, only a single transfer will be "in fly" at once. +Hence, just two types of bus transactions are generated by the XBUS controller (see images below).

+
+
+
+700 +
+
Figure 5. XBUS/Wishbone Write Transaction
+
+
+
+700 +
+
Figure 6. XBUS/Wishbone Read Transaction
+
+
+ + + + + +
+ + +
Wishbone "Classic" Protocol
+Native support for the "classic" Wishbone protocol has been deprecated. +However, classic mode can still be emulated by connecting the processor’s xbus_cyc_o directly to the +device’s / bus system’s cyc and stb signals (omitting the processor’s xbus_stb_o signal). +
+
+
+ + + + + +
+ + +
Endianness
+Just like the processor itself the XBUS interface uses little-endian byte order. +
+
+
+ + + + + +
+ + +
Wishbone Specs.
+A detailed description of the implemented Wishbone bus protocol and the according interface signals +can be found in the data sheet "Wishbone B4 - WISHBONE System-on-Chip (SoC) Interconnection +Architecture for Portable IP Cores". A copy of this document can be found in the docs folder of this +project. +
+
+
+

An accessed XBUS/Wishbone device does not have to respond immediately to a bus request by sending an ACK. +Instead, there is a time window where the device has to acknowledge the transfer. This time window +is configured by the XBUS_TIMEOUT generic and it defines the maximum time (in clock cycles) a bus access can +be pending before it is automatically terminated raising an bus fault exception. If XBUS_TIMEOUT is set to zero, +the timeout is disabled and a bus access can take an arbitrary number of cycles to complete. Note that this is not +recommended as a missing ACK will permanently stall the entire processor!

+
+
+

Furthermore, an accesses XBUS/Wishbone device can signal an error condition at any time by setting the ERR signal +high for one cycle. This will also terminate the current bus transaction before raising a CPU bus fault exception.

+
+
+ + + + + +
+ + +
Register Stage
+An optional register stage can be added to the XBUS gateway to break up the critical path easing timing closure. +When XBUS_REGSTAGE_EN is true all outgoing and incoming XBUS signals are registered increasing access latency +by two cycles. Furthermore, all outgoing signals (like the address) will be kept stable if there is no bus access +being initiated. +
+
+
+

Access Tag

+
+
+

The XBUS tag signal xbus_tag_o(0) provides additional information about the current access cycle. +It compatible to the the AXI4 ARPROT and AWPROT signals.

+
+
+
    +
  • +

    xbus_tag_o(0) P: access is performed from privileged mode (machine-mode) when set

    +
  • +
  • +

    xbus_tag_o(1) NS: this bit is hardwired to 0 indicating a secure access

    +
  • +
  • +

    xbus_tag_o(2) I: access is an instruction fetch when set; access is a data access when cleared

    +
  • +
+
+
+

External Bus Cache (X-CACHE)

+
+
+

The XBUS interface provides an optional internal cache that can be used to buffer processor-external accesses. +The x-cache is enabled via the XBUS_CACHE_EN generic. The total size of the cache is split into the number of +cache lines or cache blocks (XBUS_CACHE_NUM_BLOCKS generic) and the line or block size in bytes +(XBUS_CACHE_BLOCK_SIZE generic).

+
+
+
Listing 4. Simplified X-Cache Architecture
+
+
                Direct Access         +----------+
+          /|------------------------->| Register |------------------------>|\
+         | |                          +----------+                         | |
+Core --->| |                                                               | |---> XBUS
+         | |    +--------------+    +--------------+    +-------------+    | |
+          \|--->| Host Arbiter |--->| Cache Memory |<---| Bus Arbiter |--->|/
+                +--------------+    +--------------+    +-------------+
+
+
+
+

The cache uses a direct-mapped architecture that implements "write-allocate" and "write-back" strategies. +The write-allocate strategy will fetch the entire referenced block from main memory when encountering +a cache write-miss. The write-back strategy will gather all writes locally inside the cache until the according +cache block is about to be replaced. In this case, the entire modified cache block is written back to main memory.

+
+
+ + + + + +
+ + +
Cached/Uncached Accesses
+The data cache provides direct accesses (= uncached) to memory in order to access memory-mapped IO. +All accesses that target the address range from 0xF0000000 to 0xFFFFFFFF +will not be cached at all (see section Address Space). Direct/uncached accesses have lower priority than +cache block operations to allow continuous burst transfer and also to maintain logical instruction forward +progress / data coherency. Furthermore, atomic load-reservate and store-conditional instructions (A ISA Extension) +will always bypass the cache. +
+
+
+
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_slink.vhd

Software driver files:

neorv32_slink.c

neorv32_slink.h

Top entity ports:

slink_rx_dat_i

RX link data (32-bit)

slink_rx_src_i

RX routing information (4-bit)

slink_rx_val_i

RX link data valid (1-bit)

slink_rx_lst_i

RX link last element of stream (1-bit)

slink_rx_rdy_o

RX link ready to receive (1-bit)

slink_tx_dat_o

TX link data (32-bit)

slink_tx_dst_o

TX routing information (4-bit)

slink_tx_val_o

TX link data valid (1-bit)

slink_tx_lst_o

TX link last element of stream (1-bit)

slink_tx_rdy_i

TX link allowed to send (1-bit)

Configuration generics:

IO_SLINK_EN

implement SLINK when true

IO_SLINK_RX_FIFO

RX FIFO depth (1..32k), has to be a power of two, min 1

IO_SLINK_TX_FIFO

TX FIFO depth (1..32k), has to be a power of two, min 1

CPU interrupts:

fast IRQ channel 14

RX SLINK IRQ (see Processor Interrupts)

fast IRQ channel 15

TX SLINK IRQ (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The stream link interface provides independent RX and TX channels for sending and receiving +stream data. Each channel features a configurable internal FIFO to buffer stream data +(IO_SLINK_RX_FIFO for the RX FIFO, IO_SLINK_TX_FIFO for the TX FIFO). The SLINK interface provides higher +bandwidth and less latency than the external bus interface making it ideally suited for coupling custom +stream processors or streaming peripherals.

+
+
+ + + + + +
+ + +
Example Program
+An example program for the SLINK module is available in sw/example/demo_slink. +
+
+
+

Interface & Protocol

+
+
+

The SLINK interface consists of four signals for each channel:

+
+
+
    +
  • +

    dat contains the actual data word

    +
  • +
  • +

    val marks the current transmission cycle as valid

    +
  • +
  • +

    lst marks the current transmission cycle as the last element of a stream

    +
  • +
  • +

    rdy indicates that the receiver is ready to receive

    +
  • +
  • +

    src and dst provide source/destination routing information (optional)

    +
  • +
+
+
+ + + + + +
+ + +
AXI4-Stream Compatibility
+The interface names (except for src and dst) and the underlying protocol is compatible to the AXI4-Stream protocol standard. +A processor top entity with a AXI4-Stream-compatible interfaces can be found in rtl/system_inegration. +More information regarding this alternate top entity can be found in in the user guide: +https://stnolting.github.io/neorv32/ug/#_packaging_the_processor_as_vivado_ip_block +
+
+
+

Theory of Operation

+
+
+

The SLINK provides four interface registers. The control register (CTRL) is used to configure +the module and to check its status. Two individual data registers (DATA and DATA_LAST) +are used to send and receive the link’s actual data stream.

+
+
+

The DATA register provides direct access to the RX/TX FIFO buffers. Read accesses return data from the RX FIFO. +After reading data from this register the control register’s SLINK_CTRL_RX_LAST flag can be checked to determine +if the according data word has been marked as "end of stream" via the slink_rx_lst_i signal (this signal is also +buffered by the link’s FIFO). +Writing to the DATA register will immediately write to the TX link FIFO. +When writing to the TX_DATA_LAST the according data word will also be marked as "end of stream" via the +slink_tx_lst_o signal (this signal is also buffered by the link’s FIFO).

+
+
+

The configured FIFO sizes can be retrieved by software via the control register’s SLINK_CTRL_RX_FIFO_* and +SLINK_CTRL_TX_FIFO_* bits.

+
+
+

The SLINK is globally activated by setting the control register’s enable bit SLINK_CTRL_EN. Clearing this bit will +reset all internal logic and will also clear both FIFOs. The FIFOs can also be cleared manually at any time by +setting the SLINK_CTRL_RX_CLR and/or SLINK_CTRL_TX_CLR bits (these bits will auto-clear).

+
+
+ + + + + +
+ + +
FIFO Overflow
+Writing to the TX channel’s FIFO while it is full will have no effect. Reading from the RX channel’s FIFO while it +is empty will also have no effect and will return the last received data word. There is no overflow indicator +implemented yet. +
+
+
+

The current status of the RX and TX FIFOs can be determined via the control register’s SLINK_CTRL_RX_* and +SLINK_CTRL_TX_* flags.

+
+
+

Stream Routing Information

+
+
+

Both stream link interface provide an optional port for routing information: slink_tx_dst_o (AXI stream’s TDEST) +can be used to set a destination address when using a switch/interconnect to access several stream sinks. slink_rx_src_i +(AXI stream’s TID) can be used to determine the source when several sources can send data via a switch/interconnect. +The routing information can be set/read via the ROUTE interface registers. Note that all routing information is also +fully buffered by the internal RX/TX FIFOs. RX routing information has to be read after reading the according RX +data. Vice versa, TX routing information has to be set before writing the according TX data.

+
+
+

Interrupts

+
+
+

The SLINK module provides two independent interrupt channels: one for RX events and one for TX events. +The interrupt conditions are based on the according link’s FIFO status flags and are configured via the control +register’s SLINK_CTRL_IRQ_* flags. The according interrupt will fire when the module is enabled (SLINK_CTRL_EN) +and the selected interrupt conditions are met. Note that all enabled interrupt conditions are logically OR-ed per +channel. If any enable interrupt conditions becomes active the interrupt will become pending until the +interrupt-causing condition is resolved (e.g. by reading from the RX FIFO).

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 9. SLINK register map (struct NEORV32_SLINK)
AddressName [C]Bit(s)R/WFunction

0xffffec00

NEORV32_SLINK.CTRL

0 SLINK_CTRL_EN

r/w

SLINK global enable

1 SLINK_CTRL_RX_CLR

-/w

Clear RX FIFO when set (bit auto-clears)

2 SLINK_CTRL_TX_CLR

-/w

Clear TX FIFO when set (bit auto-clears)

3 reserved

r/-

reserved, read as zero

4 SLINK_CTRL_RX_LAST

r/-

Last word read from RX_DATA is marked as "end of stream"

7:5 reserved

r/-

reserved, read as zero

8 SLINK_CTRL_RX_EMPTY

r/-

RX FIFO empty

9 SLINK_CTRL_RX_HALF

r/-

RX FIFO at least half full

10 SLINK_CTRL_RX_FULL

r/-

RX FIFO full

11 SLINK_CTRL_TX_EMPTY

r/-

TX FIFO empty

12 SLINK_CTRL_TX_HALF

r/-

TX FIFO at least half full

13 SLINK_CTRL_TX_FULL

r/-

TX FIFO full

15:14 reserved

r/-

reserved, read as zero

16 SLINK_CTRL_IRQ_RX_NEMPTY

r/w

RX interrupt if RX FIFO not empty

17 SLINK_CTRL_IRQ_RX_HALF

r/w

RX interrupt if RX FIFO at least half full

18 SLINK_CTRL_IRQ_RX_FULL

r/w

RX interrupt if RX FIFO full

19 SLINK_CTRL_IRQ_TX_EMPTY

r/w

TX interrupt if TX FIFO empty

20 SLINK_CTRL_IRQ_TX_NHALF

r/w

TX interrupt if TX FIFO not at least half full

21 SLINK_CTRL_IRQ_TX_NFULL

r/w

TX interrupt if TX FIFO not full

23:22 reserved

r/-

reserved, read as zero

27:24 SLINK_CTRL_RX_FIFO_MSB : SLINK_CTRL_RX_FIFO_LSB

r/-

log2(RX FIFO size)

31:28 SLINK_CTRL_TX_FIFO_MSB : SLINK_CTRL_TX_FIFO_LSB

r/-

log2(TX FIFO size)

0xffffec04

NEORV32_SLINK.ROUTE

3:0

r/w

TX destination routing information (slink_tx_dst_o)

7:4

r/-

RX source routing information (slink_rx_src_i)

31:8

-/-

reserved

0xffffec08

NEORV32_SLINK.DATA

31:0

r/w

Write data to TX FIFO; read data from RX FIFO

0xffffec0c

NEORV32_SLINK.DATA_LAST

31:0

r/w

Write data to TX FIFO (and also set "last" signal); read data from RX FIFO

+
+
+
+

2.7.9. General Purpose Input and Output Port (GPIO)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_gpio.vhd

Software driver files:

neorv32_gpio.c

neorv32_gpio.h

Top entity ports:

gpio_o

64-bit parallel output port

gpio_i

64-bit parallel input port

Configuration generics:

IO_GPIO_NUM

number of input/output pairs to implement (0..64)

CPU interrupts:

none

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The general purpose parallel IO unit provides a simple parallel input and output port. These ports can be used +chip-externally (for example to drive status LEDs, connect buttons, etc.) or chip-internally to provide control +signals for other IP modules.

+
+
+

The actual number of input/output pairs is defined by the IO_GPIO_NUM generic. When set to zero, the GPIO module +is excluded from synthesis and the output port gpio_o is tied to all-zero. If IO_GPIO_NUM is less than the +maximum value of 64, only the LSB-aligned bits in gpio_o and gpio_i are actually connected while the remaining +bits are tied to zero or are left unconnected, respectively.

+
+
+ + + + + +
+ + +
Access Atomicity
+The GPIO modules uses two memory-mapped registers (each 32-bit) each for accessing the input and +output signals. Since the CPU can only process 32-bit "at once" updating the entire output cannot +be performed within a single clock cycle. +
+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 10. GPIO unit register map (struct NEORV32_GPIO)
AddressName [C]Bit(s)R/WFunction

0xfffffc00

INPUT[0]

31:0

r/-

parallel input port pins 31:0

0xfffffc04

INPUT[1]

31:0

r/-

parallel input port pins 63:32

0xfffffc08

OUTPUT[0]

31:0

r/w

parallel output port pins 31:0

0xfffffc0c

OUTPUT[1]

31:0

r/w

parallel output port pins 63:32

+
+
+
+

2.7.10. Cyclic Redundancy Check (CRC)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_crc.vhd

Software driver files:

neorv32_crc.c

neorv32_crc.h

Top entity ports:

none

Configuration generics:

IO_CRC_EN

implement CRC module when true

CPU interrupts:

none

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The cyclic redundancy check unit provides a programmable checksum computation module. The unit operates on +single bytes and can either compute CRC8, CRC16 or CRC32 checksums based on an arbitrary polynomial and +start value.

+
+
+ + + + + +
+ + +
CRC Demo Program
+A CRC example program (also using CPU-independent DMA transfers) can be found in sw/example/crc_dma. +
+
+
+ + + + + +
+ + +
CPU-Independent Operation
+The CRC unit can compute a checksum for an arbitrary memory array without any CPU overhead +by using the processor’s Direct Memory Access Controller (DMA). +
+
+
+

Theory of Operation

+
+
+

The module provides four interface registers:

+
+
+
    +
  • +

    MODE: selects either CRC8-, CRC16- or CRC32-mode

    +
  • +
  • +

    POLY: programmable polynomial

    +
  • +
  • +

    DATA: data input register (single bytes only)

    +
  • +
  • +

    SREG: the CRC shift register; this register is used to define the start value and to obtain +the final processing result

    +
  • +
+
+
+

The MODE, POLY and SREG registers need to be programmed before the actual processing can be started. +Writing a byte to DATA will update the current checksum in SREG.

+
+
+ + + + + +
+ + +
Access Latency
+Write access to the CRC module have an increased latency of 8 clock cycles. This additional latency +ensures that the internal bit-serial processing of the current data byte has also been completed when the +transfer is completed. +
+
+
+ + + + + +
+ + +
Data Size
+For CRC8-mode only bits 7:0 of POLY and SREG are relevant; for CRC16-mode only bits 15:0 are used +and for CRC32-mode the entire 32-bit of POLY and SREG are used. +
+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 11. CRC Register Map (struct NEORV32_CRC)
AddressName [C]Bit(s), Name [C]R/WFunction

0xffffee00

CTRL

1:0

r/w

CRC mode select (00 CRC8, 01: CRC16, 10: CRC32)

31:2

r/-

reserved, read as zero

0xffffee04

POLY

31:0

r/w

CRC polynomial

0xffffee08

DATA

7:0

r/w

data input (single byte)

31:8

r/-

reserved, read as zero, writes are ignored

0xffffee0c

SREG

32:0

r/w

current CRC shift register value (set start value on write)

+
+
+
+

2.7.11. Watchdog Timer (WDT)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_wdt.vhd

Software driver files:

neorv32_wdt.c

neorv32_wdt.h

Top entity ports:

none

Configuration generics:

IO_WDT_EN

implement watchdog when true

CPU interrupts:

none

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The watchdog (WDT) provides a last resort for safety-critical applications. When a pre-programmed timeout value is reached +a system-wide hardware reset is generated. The internal counter has to be reset explicitly by the application +program every now and then to prevent a timeout.

+
+
+

Theory of Operation

+
+
+

The watchdog is enabled by setting the control register’s WDT_CTRL_EN bit. When this bit is cleared, the internal +timeout counter is reset to zero and no system reset can be triggered by this module.

+
+
+

The internal 32-bit timeout counter is clocked at 1/4096th of the processor’s main clock (fWDT[Hz] = fmain[Hz] / 4096). +Whenever this counter reaches the programmed timeout value (WDT_CTRL_TIMEOUT bits in the control register) a +hardware reset is triggered.

+
+
+

The watchdog’s timeout counter is reset ("feeding the watchdog") by writing the reset PASSWORD to the RESET register. +The password is hardwired to hexadecimal 0x709D1AB3.

+
+
+ + + + + +
+ + +
Watchdog Operation during Debugging
+By default, the watchdog stops operation when the CPU enters debug mode and will resume normal operation after +the CPU has left debug mode again. This will prevent an unintended watchdog timeout during a debug session. However, +the watchdog can also be configured to keep operating even when the CPU is in debug mode by setting the control +register’s WDT_CTRL_DBEN bit. +
+
+
+ + + + + +
+ + +
Watchdog Operation during CPU Sleep
+By default, the watchdog stops operating when the CPU enters sleep mode. However, the watchdog can also be configured +to keep operating even when the CPU is in sleep mode by setting the control register’s WDT_CTRL_SEN bit. +
+
+
+

Configuration Lock

+
+
+

The watchdog control register can be locked to protect the current configuration from being modified. The lock is +activated by setting the WDT_CTRL_LOCK bit. In the locked state any write access to the control register is entirely +ignored (see table below, "writable if locked"). However, read accesses to the control register as well as watchdog resets +are further possible.

+
+
+

The lock bit can only be set if the WDT is already enabled (WDT_CTRL_EN is set). Furthermore, the lock bit can +only be cleared again by a system-wide hardware reset.

+
+
+

Strict Mode

+
+
+

The strict operation mode provides additional safety functions. If the strict mode is enabled by the WDT_CTRL_STRICT +control register bit an immediate hardware reset if enforced if

+
+
+
    +
  • +

    the RESET register is written with an incorrect password or

    +
  • +
  • +

    the CTRL register is written and the WDT_CTRL_LOCK bit is set.

    +
  • +
+
+
+

Cause of last Hardware Reset

+
+
+

The cause of the last system hardware reset can be determined via the WDT_CTRL_RCAUSE_* bits:

+
+
+
    +
  • +

    0b00: Reset caused by external reset signal/pin

    +
  • +
  • +

    0b01: Reset caused by on-chip debugger

    +
  • +
  • +

    0b10: Reset caused by watchdog

    +
  • +
+
+
+

Register Map

+
+ + +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12. WDT register map (struct NEORV32_WDT)
AddressName [C]Bit(s), Name [C]R/WReset valueWritable if lockedFunction

0xfffffb00

CTRL

0 WDT_CTRL_EN

r/w

0

no

watchdog enable

1 WDT_CTRL_LOCK

r/w

0

no

lock configuration when set, clears only on system reset, can only be set if enable bit is set already

2 WDT_CTRL_DBEN

r/w

0

no

set to allow WDT to continue operation even when CPU is in debug mode

3 WDT_CTRL_SEN

r/w

0

no

set to allow WDT to continue operation even when CPU is in sleep mode

4 WDT_CTRL_STRICT

r/w

0

no

set to enable strict mode (force hardware reset if reset password is incorrect or if write access to locked CTRL register)

6:5 WDT_CTRL_RCAUSE_HI : WDT_CTRL_RCAUSE_LO

r/-

0

-

cause of last system reset; 0=external reset, 1=ocd-reset, 2=watchdog reset

7 -

r/-

-

-

reserved, reads as zero

31:8 WDT_CTRL_TIMEOUT_MSB : WDT_CTRL_TIMEOUT_LSB

r/w

0

no

24-bit watchdog timeout value

0xfffffb04

RESET

31:0

-/w

-

yes

Write PASSWORD to reset WDT timeout counter

+
+
+
+

2.7.12. Machine System Timer (MTIME)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_mtime.vhd

Software driver files:

neorv32_mtime.c

neorv32_mtime.h

Top entity ports:

mtime_irq_i

RISC-V machine timer IRQ if internal one is not implemented

mtime_time_o

Current system time (TIME register)

Configuration generics:

IO_MTIME_EN

implement machine timer when true

CPU interrupts:

MTI

machine timer interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The MTIME module implements a memory-mapped machine system timer that is compatible to the RISC-V +privileged specifications. The 64-bit system time is accessed via individual TIME_LO and +TIME_HI registers. A 64-bit time compare register, which is accessible via individual TIMECMP_LO +and TIMECMP_HI registers, can be used to configure the CPU’s machine timer interrupt (MTI)).

+
+
+

The interrupt is triggered whenever TIME (high & low part) is greater than or equal to TIMECMP (high & low part). +The interrupt remains active (=pending) until TIME becomes less than TIMECMP again (either by modifying +TIME or TIMECMP). The current system time is available for other SoC modules via the top’s mtime_time_o signal.

+
+
+ + + + + +
+ + +
Hardware Reset
+After a hardware reset the TIME and TIMECMP register are reset to all-zero. +
+
+
+ + + + + +
+ + +
External MTIME Interrupt
+If the internal MTIME module is disabled (IO_MTIME_EN = false) the machine timer interrupt becomes available +as external signal. The mtime_irq_i signal is level-triggered and high-active. Once set the signal has to stay +high until the interrupt request is explicitly acknowledged (e.g. writing to a user-defined memory-mapped register). +
+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 13. MTIME register map (struct NEORV32_MTIME)
AddressName [C]BitsR/WFunction

0xfffff400

TIME_LO

31:0

r/w

system time, low word

0xfffff404

TIME_HI

31:0

r/w

system time, high word

0xfffff408

TIMECMP_LO

31:0

r/w

time compare, low word

0xfffff40c

TIMECMP_HI

31:0

r/w

time compare, high word

+
+
+
+

2.7.13. Primary Universal Asynchronous Receiver and Transmitter (UART0)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_uart.vhd

Software driver files:

neorv32_uart.c

neorv32_uart.h

Top entity ports:

uart0_txd_o

serial transmitter output

uart0_rxd_i

serial receiver input

uart0_rts_o

flow control: RX ready to receive, low-active

uart0_cts_i

flow control: RX ready to receive, low-active

Configuration generics:

IO_UART0_EN

implement UART0 when true

UART0_RX_FIFO

RX FIFO depth (power of 2, min 1)

UART0_TX_FIFO

TX FIFO depth (power of 2, min 1)

CPU interrupts:

fast IRQ channel 2

RX interrupt

fast IRQ channel 3

TX interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The NEORV32 UART provides a standard serial interface with independent transmitter and receiver channels, each +equipped with a configurable FIFO. The transmission frame is fixed to 8N1: 8 data bits, no parity bit, 1 stop +bit. The actual transmission rate (Baud rate) is programmable via software. The module features two memory-mapped +registers: CTRL and DATA. These are used for configuration, status check and data transfer.

+
+
+ + + + + +
+ + +
Standard Console
+All default example programs and software libraries of the NEORV32 software framework (including the bootloader +and the runtime environment) use the primary UART (UART0) as default user console interface. Furthermore, UART0 +is used to implement the "standard consoles" (STDIN, STDOUT and STDERR). +
+
+
+

RX and TX FIFOs

+
+
+

The UART provides individual data FIFOs for RX and TX to allow data transmission without CPU intervention. +The sizes of these FIFOs can be configured via the according configuration generics (UART0_RX_FIFO and UART0_TX_FIFO). +Both FIFOs a re automatically cleared when disabling the module via the UART_CTRL_EN flag. However, the FIFOs can +also be cleared individually by setting the UART_CTRL_RX_CLR / UART_CTRL_TX_CLR flags.

+
+
+

Theory of Operation

+
+
+

The module is enabled by setting the UART_CTRL_EN bit in the UART0 control register CTRL. The Baud rate +is configured via a 10-bit UART_CTRL_BAUDx baud divisor (baud_div) and a 3-bit UART_CTRL_PRSCx +clock prescaler (clock_prescaler).

+
+ + +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 14. UART0 Clock Configuration
UART_CTRL_PRSCx0b0000b0010b0100b0110b1000b1010b1100b111

Resulting clock_prescaler

2

4

8

64

128

1024

2048

4096

+
+

Baud rate = (fmain[Hz] / clock_prescaler) / (baud_div + 1)

+
+
+

The control register’s UART_CTRL_RX_* and UART_CTRL_TX_* flags provide information about the RX and TX FIFO fill level. +Disabling the module via the UART_CTRL_EN bit will also clear these FIFOs.

+
+
+

A new TX transmission is started by writing to the DATA register. The +transfer is completed when the UART_CTRL_TX_BUSY control register flag returns to zero. RX data is available when +the UART_CTRL_RX_NEMPTY flag becomes set. The UART_CTRL_RX_OVER will be set if the RX FIFO overflows. This flag +is cleared only by disabling the module via UART_CTRL_EN.

+
+
+

UART Interrupts

+
+
+

The UART module provides independent interrupt channels for RX and TX. These interrupts are triggered by certain RX and TX +FIFO levels. The actual configuration is programmed independently for the RX and TX interrupt channel via the control register’s +UART_CTRL_IRQ_RX_* and UART_CTRL_IRQ_TX_* bits:

+
+
+
    +
  1. +

    RX IRQ The RX interrupt can be triggered by three different RX FIFO level states: If UART_CTRL_IRQ_RX_NEMPTY is set the +interrupt fires if the RX FIFO is not empty (e.g. when incoming data is available). If UART_CTRL_IRQ_RX_HALF is set the RX IRQ +fires if the RX FIFO is at least half-full. If UART_CTRL_IRQ_RX_FULL the interrupt fires if the RX FIFO is full. Note that all +these programmable conditions are logically OR-ed (interrupt fires if any enabled conditions is true).

    +
  2. +
  3. +

    TX IRQ The TX interrupt can be triggered by two different TX FIFO level states: If UART_CTRL_IRQ_TX_EMPTY is set the +interrupt fires if the TX FIFO is empty. If UART_CTRL_IRQ_TX_NHALF is set the interrupt fires if the TX FIFO is not at least +half full. Note that all these programmable conditions are logically OR-ed (interrupt fires if any enabled conditions is true).

    +
  4. +
+
+
+

Once an UART interrupt has fired it remains pending until the actual cause of the interrupt is resolved; for +example if just the UART_CTRL_IRQ_RX_NEMPTY bit is set, the RX interrupt will keep firing until the RX FIFO is empty again.

+
+
+ + + + + +
+ + +
RX/TX FIFO Size
+Software can retrieve the configured sizes of the RX and TX FIFO via the according UART_DATA_RX_FIFO_SIZE and +UART_DATA_TX_FIFO_SIZE bits from the DATA register. +
+
+
+

RTS/CTS Hardware Flow Control

+
+
+

The NEORV32 UART supports optional hardware flow control using the standard CTS uart0_cts_i ("clear to send") and RTS +uart0_rts_o ("ready to send" / "ready to receive (RTR)") signals. Both signals are low-active. +Hardware flow control is enabled by setting the UART_CTRL_HWFC_EN bit in the modules control register CTRL.

+
+
+

When hardware flow control is enabled:

+
+
+
    +
  1. +

    The UART’s transmitter will not start a new transmission until the uart0_cts_i signal goes low. +During this time, the UART busy flag UART_CTRL_TX_BUSY remains set.

    +
  2. +
  3. +

    The UART will set uart0_rts_o signal low if the RX FIFO is less than half full (to have a wide safety margin). +As long as this signal is low, the connected device can send new data. uart0_rts_o is always low if the hardware flow-control +is disabled. Disabling the UART (setting UART_CTRL_EN low) while having hardware flow-control enabled, will set uart0_rts_o +high to signal that the UARt is not capable of receiving new data.

    +
  4. +
+
+
+ + + + + +
+ + +Note that RTS and CTS signaling can only be activated together. If the RTS handshake is not required the signal can be left +unconnected. If the CTS handshake is not required it has to be tied to zero. +
+
+
+

Simulation Mode

+
+
+

The UART provides a simulation-only mode to dump console data as well as raw data directly to a file. When the simulation +mode is enabled (by setting the UART_CTRL_SIM_MODE bit) there will be no physical transaction on the uart0_txd_o signal. +Instead, all data written to the DATA register is immediately dumped to a file. Data written to DATA[7:0] will be dumped as +ASCII chars to a file named neorv32.uart0.sim_mode.text.out. Additionally, the ASCII data is printed to the simulator console.

+
+
+

Both file are created in the simulation’s home folder.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 15. UART0 register map (struct NEORV32_UART0)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff500

CTRL

0 UART_CTRL_EN

r/w

UART enable

1 UART_CTRL_SIM_MODE

r/w

enable simulation mode

2 UART_CTRL_HWFC_EN

r/w

enable RTS/CTS hardware flow-control

5:3 UART_CTRL_PRSC2 : UART_CTRL_PRSC0

r/w

Baud rate clock prescaler select

15:6 UART_CTRL_BAUD9 : UART_CTRL_BAUD0

r/w

12-bit Baud value configuration value

16 UART_CTRL_RX_NEMPTY

r/-

RX FIFO not empty

17 UART_CTRL_RX_HALF

r/-

RX FIFO at least half-full

18 UART_CTRL_RX_FULL

r/-

RX FIFO full

19 UART_CTRL_TX_EMPTY

r/-

TX FIFO empty

20 UART_CTRL_TX_NHALF

r/-

TX FIFO not at least half-full

21 UART_CTRL_TX_FULL

r/-

TX FIFO full

22 UART_CTRL_IRQ_RX_NEMPTY

r/w

fire IRQ if RX FIFO not empty

23 UART_CTRL_IRQ_RX_HALF

r/w

fire IRQ if RX FIFO at least half-full

24 UART_CTRL_IRQ_RX_FULL

r/w

fire IRQ if RX FIFO full

25 UART_CTRL_IRQ_TX_EMPTY

r/w

fire IRQ if TX FIFO empty

26 UART_CTRL_IRQ_TX_NHALF

r/w

fire IRQ if TX not at least half full

27 -

r/-

reserved read as zero

28 UART_CTRL_RX_CLR

r/w

Clear RX FIFO, flag auto-clears

29 UART_CTRL_TX_CLR

r/w

Clear TX FIFO, flag auto-clears

30 UART_CTRL_RX_OVER

r/-

RX FIFO overflow; cleared by disabling the module

31 UART_CTRL_TX_BUSY

r/-

TX busy or TX FIFO not empty

0xfffff504

DATA

7:0 UART_DATA_RTX_MSB : UART_DATA_RTX_LSB

r/w

receive/transmit data

11:8 UART_DATA_RX_FIFO_SIZE_MSB : UART_DATA_RX_FIFO_SIZE_LSB

r/-

log2(RX FIFO size)

15:12 UART_DATA_TX_FIFO_SIZE_MSB : UART_DATA_TX_FIFO_SIZE_LSB

r/-

log2(RX FIFO size)

+
+
+
+

2.7.14. Secondary Universal Asynchronous Receiver and Transmitter (UART1)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_uart.vhd

Software driver files:

neorv32_uart.c

neorv32_uart.h

Top entity ports:

uart1_txd_o

serial transmitter output

uart1_rxd_i

serial receiver input

uart1_rts_o

flow control: RX ready to receive, low-active

uart1_cts_i

flow control: RX ready to receive, low-active

Configuration generics:

IO_UART1_EN

implement UART1 when true

UART1_RX_FIFO

RX FIFO depth (power of 2, min 1)

UART1_TX_FIFO

TX FIFO depth (power of 2, min 1)

CPU interrupts:

fast IRQ channel 4

RX interrupt

fast IRQ channel 5

TX interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The secondary UART (UART1) is functionally identical to the primary UART +(Primary Universal Asynchronous Receiver and Transmitter (UART0)). Obviously, UART1 uses different addresses for the +control register (CTRL) and the data register (DATA). The register’s bits/flags use the same bit positions and naming +as for the primary UART. The RX and TX interrupts of UART1 are mapped to different CPU fast interrupt (FIRQ) channels.

+
+
+

Simulation Mode

+
+
+

The secondary UART (UART1) provides the same simulation options as the primary UART (UART0). However, output data is +written to UART1-specific file neorv32.uart1.sim_mode.text.out. This data is also printed to the simulator console.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 16. UART1 register map (struct NEORV32_UART1)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff600

CTRL

…​

…​

Same as UART0

0xfffff604

DATA

…​

…​

Same as UART0

+
+
+
+

2.7.15. Serial Peripheral Interface Controller (SPI)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_spi.vhd

Software driver files:

neorv32_spi.c

neorv32_spi.h

Top entity ports:

spi_clk_o

1-bit serial clock output

spi_dat_o

1-bit serial data output

spi_dat_i

1-bit serial data input

spi_csn_o

8-bit dedicated chip select output (low-active)

Configuration generics:

IO_SPI_EN

implement SPI controller when true

IO_SPI_FIFO

FIFO depth, has to be a power of two, min 1

CPU interrupts:

fast IRQ channel 6

configurable SPI interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The NEORV32 SPI module is a host transceiver. Hence, it is responsible for generating transmission. +The module operates on a byte.wide data granularity, supports all 4 standard clock modes, a fine-tunable +SPI clock generator and provides up to 8 dedicated chip select signals via the top entity’s spi_csn_o signal. +An optional receive/transmit ring-buffer/FIFO can be configured via the IO_SPI_FIFO generic to support block-based +transmissions without CPU interaction.

+
+
+ + + + + +
+ + +
Host-Mode Only
+The NEORV32 SPI module only supports host mode. Transmission are initiated only by the processor’s SPI module +and not by an external SPI module. If you are looking for a device-mode serial peripheral interface (transactions +initiated by an external host) check out the Serial Data Interface Controller (SDI). +
+
+
+

The SPI module provides a single control register CTRL to configure the module and to check it’s status +and a single data register DATA for receiving/transmitting data.

+
+
+

Theory of Operation

+
+
+

The SPI module is enabled by setting the SPI_CTRL_EN bit in the CTRL control register. No transfer can be initiated +and no interrupt request will be triggered if this bit is cleared. Clearing this bit will reset the entire module, clear +the FIFO and terminate any transfer being in process.

+
+
+

The actual SPI transfer (receiving one byte while sending one byte) as well as control of the chip-select lines is handled +via the module’s DATA register. Note that this register will access the TX FIFO of the ring-buffer when writing and will +access the RX FIFO of the ring-buffer when reading.

+
+
+

The most significant bit of the DATA register (SPI_DATA_CMD) is used to select the purpose of the data being written. +When the SPI_DATA_CMD is cleared, the lowest 8-bit represent the actual SPI TX data. This data will be transmitted by the +SPI bus engine. After completion, the received data is stored to the RX FIFO.

+
+
+

If SPI_DATA_CMD is cleared, the lowest 4-bit control the chip-select lines. In this case, bis 2:0 select one of the eight +chip-select lines. The selected line will become enabled when bit 3 is also set. If bit 3 is cleared, all chip-select +lines will be disabled.

+
+
+

Examples: +. Enable chip-select line 3: NEORV32_SPI→DATA = (1 << SPI_DATA_CMD) | (1 << 3) | 3; +. Enable chip-select line 7: NEORV32_SPI→DATA = (1 << SPI_DATA_CMD) | (1 << 3) | 7; +. Disable all chip-select lines: NEORV32_SPI→DATA = (1 << SPI_DATA_CMD) | (0 << 3); +. Send data byte 0xAB: NEORV32_SPI→DATA = (0 << SPI_DATA_CMD) | 0xAB;

+
+
+

Since all SPI operations are controlled via the FIFO, entire SPI sequences (chip-enable, data transmissions, chip-disable) +can be "programmed". Thus, SPI operations can be executed without any CPU interaction at all.

+
+
+

Application software can check if any chip-select is enabled by reading the control register’s SPI_CS_ACTIVE flag.

+
+
+

SPI Clock Configuration

+
+
+

The SPI module supports all standard SPI clock modes (0, 1, 2, 3), which are configured via the two control register bits +SPI_CTRL_CPHA and SPI_CTRL_CPOL. The SPI_CTRL_CPHA bit defines the clock phase and the SPI_CTRL_CPOL +bit defines the clock polarity.

+
+ +
+

The SPI clock frequency (spi_clk_o) is programmed by the 3-bit SPI_CTRL_PRSCx clock prescaler for a coarse clock selection +and a 4-bit clock divider SPI_CTRL_CDIVx for a fine clock configuration. +The following clock prescalers (SPI_CTRL_PRSCx) are available:

+
+ + +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 17. SPI prescaler configuration
SPI_CTRL_PRSCx0b0000b0010b0100b0110b1000b1010b1100b111

Resulting clock_prescaler

2

4

8

64

128

1024

2048

4096

+
+

Based on the programmed clock configuration, the actual SPI clock frequency fSPI is derived +from the processor’s main clock fmain according to the following equation:

+
+
+

fSPI = fmain[Hz] / (2 * clock_prescaler * (1 + SPI_CTRL_CDIVx))

+
+
+

Hence, the maximum SPI clock is fmain / 4 and the lowest SPI clock is fmain / 131072. The SPI clock is always +symmetric having a duty cycle of exactly 50%.

+
+
+

High-Speed Mode

+
+
+

The SPI provides a high-speed mode to further boost the maximum SPI clock frequency. When enabled via the control +register’s SPI_CTRL_HIGHSPEED bit the clock prescaler configuration (SPI_CTRL_PRSCx bits) is overridden setting it +to a minimal factor of 1. However, the clock speed can still be fine-tuned using the SPI_CTRL_CDIVx bits.

+
+
+

fSPI = fmain[Hz] / (2 * 1 * (1 + SPI_CTRL_CDIVx))

+
+
+

Hence, the maximum SPI clock is fmain / 2 when in high-speed mode.

+
+
+

SPI Interrupt

+
+
+

The SPI module provides a set of programmable interrupt conditions based on the level of the RX/TX FIFO. The different +interrupt sources are enabled by setting the according control register’s SPI_CTRL_IRQ_* bits. All enabled interrupt +conditions are logically OR-ed, so any enabled interrupt source will trigger the module’s interrupt signal.

+
+
+

Once the SPI interrupt has fired it remains pending until the actual cause of the interrupt is resolved; for +example if just the SPI_CTRL_IRQ_RX_AVAIL bit is set, the interrupt will keep firing until the RX FIFO is empty again.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 18. SPI register map (struct NEORV32_SPI)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff800

CTRL

0 SPI_CTRL_EN

r/w

SPI module enable

1 SPI_CTRL_CPHA

r/w

clock phase

2 SPI_CTRL_CPOL

r/w

clock polarity

5:3 SPI_CTRL_PRSC2 : SPI_CTRL_PRSC0

r/w

3-bit clock prescaler select

9:6 SPI_CTRL_CDIV2 : SPI_CTRL_CDIV0

r/w

4-bit clock divider for fine-tuning

10 SPI_CTRL_HIGHSPEED

r/w

high-speed mode enable (overriding SPI_CTRL_PRSC*)

15:11 reserved

r/-

reserved, read as zero

16 SPI_CTRL_RX_AVAIL

r/-

RX FIFO data available (RX FIFO not empty)

17 SPI_CTRL_TX_EMPTY

r/-

TX FIFO empty

18 SPI_CTRL_TX_NHALF

r/-

TX FIFO not at least half full

19 SPI_CTRL_TX_FULL

r/-

TX FIFO full

20 SPI_CTRL_IRQ_RX_AVAIL

r/w

Trigger IRQ if RX FIFO not empty

21 SPI_CTRL_IRQ_TX_EMPTY

r/w

Trigger IRQ if TX FIFO empty

22 SPI_CTRL_IRQ_TX_NHALF

r/w

Trigger IRQ if TX FIFO not at least half full

23 SPI_CTRL_IRQ_IDLE

r/w

Trigger IRQ if TX FIFO is empty and SPI bus engine is idle

27:24 SPI_CTRL_FIFO_MSB : SPI_CTRL_FIFO_LSB

r/-

FIFO depth; log2(IO_SPI_FIFO)

30:28 reserved

r/-

reserved, read as zero

30 SPI_CS_ACTIVE

r/-

Set if any chip-select line is active

31 SPI_CTRL_BUSY

r/-

SPI module busy when set (serial engine operation in progress and TX FIFO not empty yet)

0xfffff804

DATA

7:0 SPI_DATA_MSB : SPI_DATA_LSB

r/w

receive/transmit data (FIFO)

30:8 reserved

r/-

reserved, read as zero

31 SPI_DATA_CMD

-/w

data (0) / chip-select-command (1) select

+
+
+
+

2.7.16. Serial Data Interface Controller (SDI)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_sdi.vhd

Software driver files:

neorv32_sdi.c

neorv32_sdi.h

Top entity ports:

sdi_clk_i

1-bit serial clock input

sdi_dat_o

1-bit serial data output

sdi_dat_i

1-bit serial data input

sdi_csn_i

1-bit chip-select input (low-active)

Configuration generics:

IO_SDI_EN

implement SDI controller when true

IO_SDI_FIFO

data FIFO size, has to a power of two, min 1

CPU interrupts:

fast IRQ channel 11

configurable SDI interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The serial data interface module provides a device-class SPI interface and allows to connect the processor +to an external SPI host, which is responsible of performing the actual transmission - the SDI is entirely +passive. An optional receive/transmit ring buffer (FIFOs) can be configured via the IO_SDI_FIFO generic to +support block-based transmissions without CPU interaction.

+
+
+ + + + + +
+ + +
Device-Mode Only
+The NEORV32 SDI module only supports device mode. Transmission are initiated by an external host and not by the +the processor itself. If you are looking for a host-mode serial peripheral interface (transactions +performed by the NEORV32) check out the Serial Peripheral Interface Controller (SPI). +
+
+
+

The SDI module provides a single control register CTRL to configure the module and to check it’s status +and a single data register DATA for receiving/transmitting data. Any access to the DATA register +actually accesses the internal ring buffer.

+
+
+

Theory of Operation

+
+
+

The SDI module is enabled by setting the SDI_CTRL_EN bit in the CTRL control register. Clearing this bit +resets the entire module and will also clear the entire RX/TX ring buffer.

+
+
+

The SDI operates on byte-level only. Data written to the DATA register will be pushed to the TX FIFO. Received +data can be retrieved by reading the RX FIFO via the DATA register. The current state of these FIFOs is available +via the control register’s SDI_CTRL_RX_* and SDI_CTRL_TX_* flags. If no data is available in the TX FIFO while +an external device performs a transmission the external device will read all-zero from the SDI controller.

+
+
+

Application software can check the current state of the SDI chip-select input via the control register’s +SDI_CTRL_CS_ACTIVE flag (the flag is set when the chip-select line is active (pulled low)).

+
+
+ + + + + +
+ + +
MSB-first Only
+The NEORV32 SDI module only supports MSB-first mode. +
+
+
+ + + + + +
+ + +
In-Transmission Abort
+If the external SPI controller aborts the transmission by setting the chip-select signal high again before +8 data bits have been transferred, no data is written to the RX FIFO. +
+
+
+

SDI Clocking

+
+
+

The SDI module supports both SPI clock polarity modes ("CPOL") but only "CPHA=0"-clock-phase is officially supported +yet. However, experiments have shown that the SDI module can also deal with both clock phase modes (for slow SDI clock speeds).

+
+
+

All SDI operations are clocked by the external sdi_clk_i signal. This signal is synchronized to the processor’s +clock domain to simplify timing behavior. This clock synchronization requires the external SDI clock +(sdi_clk_i) does not exceed 1/4 of the processor’s main clock.

+
+
+

SDI Interrupt

+
+
+

The SDI module provides a set of programmable interrupt conditions based on the level of the RX & TX FIFOs. The different +interrupt sources are enabled by setting the according control register’s SDI_CTRL_IRQ_* bits. All enabled interrupt +conditions are logically OR-ed so any enabled interrupt source will trigger the module’s interrupt signal.

+
+
+

Once the SDI interrupt has fired it will remain active until the actual cause of the interrupt is resolved; for +example if just the SDI_CTRL_IRQ_RX_AVAIL bit is set, the interrupt will keep firing until the RX FIFO is empty again.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 19. SDI register map (struct NEORV32_SDI)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff700

CTRL

0 SDI_CTRL_EN

r/w

SDI module enable

3:1 reserved

r/-

reserved, read as zero

7:4 SDI_CTRL_FIFO_MSB : SDI_CTRL_FIFO_LSB

r/-

FIFO depth; log2(IO_SDI_FIFO)

14:8 reserved

r/-

reserved, read as zero

15 SDI_CTRL_IRQ_RX_AVAIL

r/w

fire interrupt if RX FIFO is not empty

16 SDI_CTRL_IRQ_RX_HALF

r/w

fire interrupt if RX FIFO is at least half full

17 SDI_CTRL_IRQ_RX_FULL

r/w

fire interrupt if if RX FIFO is full

18 SDI_CTRL_IRQ_TX_EMPTY

r/w

fire interrupt if TX FIFO is empty

19 SDI_CTRL_IRQ_TX_NHALF

r/w

fire interrupt if TX FIFO is not at least half full

22:20 reserved

r/-

reserved, read as zero

23 SDI_CTRL_RX_AVAIL

r/-

RX FIFO data available (RX FIFO not empty)

24 SDI_CTRL_RX_HALF

r/-

RX FIFO at least half full

25 SDI_CTRL_RX_FULL

r/-

RX FIFO full

26 SDI_CTRL_TX_EMPTY

r/-

TX FIFO empty

27 SDI_CTRL_TX_NHALF

r/-

TX FIFO not at least half full

28 SDI_CTRL_TX_FULL

r/-

TX FIFO full

30:29 reserved

r/-

reserved, read as zero

31 SDI_CTRL_CS_ACTIVE

r/-

Chip-select is active when set

0xfffff704

DATA

7:0

r/w

receive/transmit data (FIFO)

31:8 reserved

r/-

reserved, read as zero

+
+
+
+

2.7.17. Two-Wire Serial Interface Controller (TWI)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_twi.vhd

Software driver files:

neorv32_twi.c

neorv32_twi.h

Top entity ports:

twi_sda_i

1-bit serial data line sense input

twi_sda_o

1-bit serial data line output (pull low only)

twi_scl_i

1-bit serial clock line sense input

twi_scl_o

1-bit serial clock line output (pull low only)

Configuration generics:

IO_TWI_EN

implement TWI controller when true

IO_TWI_FIFO

FIFO depth, has to be a power of two, min 1

CPU interrupts:

fast IRQ channel 7

FIFO empty and module idle interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The NEORV32 TWI implements an I2C-compatible host controller to communicate with arbitrary I2C-devices. +Note that peripheral-mode (controller acts as a device) and multi-controller mode are not supported yet.

+
+
+

The TWI controller provides two memory-mapped registers that are used for configuring the module and +for triggering operation: CTRL is the control and status register, DCMD is the command and data register.

+
+
+

Key features:

+
+
+
    +
  • +

    Programmable clock speed

    +
  • +
  • +

    Optional clock stretching

    +
  • +
  • +

    Generate START / repeated-START and STOP conditions

    +
  • +
  • +

    Sending & receiving 8 data bits including ACK/NACK

    +
  • +
  • +

    Generating a host-ACK (ACK send by the TWI controller)

    +
  • +
  • +

    Configurable data/command FIFO to "program" large TWI sequences without further involvement of the CPU

    +
  • +
+
+
+

Tristate Drivers

+
+
+

The TWI module requires two tristate drivers (actually: open-drain drivers; signals can only be actively driven low) for +the SDA and SCL lines, which have to be implemented by the user in the setup’s top module / IO ring. A generic VHDL example +is shown below (here, sda_io and scl_io are the actual TWI bus lines, which are of type std_logic).

+
+
+
Listing 5. TWI VHDL Tristate Driver Example
+
+
sda_io    <= '0' when (twi_sda_o = '0') else 'Z'; -- drive
+scl_io    <= '0' when (twi_scl_o = '0') else 'Z'; -- drive
+twi_sda_i <= std_ulogic(sda_io); -- sense
+twi_scl_i <= std_ulogic(scl_io); -- sense
+
+
+
+

TWI Clock Speed

+
+
+

The TWI clock frequency is programmed by two bit-fields in the device’s control register CTRL: a 3-bit TWI_CTRL_PRSCx +clock prescaler is sued for a coarse clock configuration and a 4-bit clock divider TWI_CTRL_CDIVx is used for a fine +clock configuration.

+
+ + +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 20. TWI prescaler configuration
TWI_CTRL_PRSCx0b0000b0010b0100b0110b1000b1010b1100b111

Resulting clock_prescaler

2

4

8

64

128

1024

2048

4096

+
+

Based on the clock configuration, the actual TWI clock frequency fSCL is derived +from the processor’s main clock fmain according to the following equation:

+
+
+

fSCL = fmain[Hz] / (4 * clock_prescaler * (1 + TWI_CTRL_CDIV))

+
+
+

Hence, the maximum TWI clock is fmain / 8 and the lowest TWI clock is fmain / 262144. The generated TWI clock is +always symmetric having a duty cycle of exactly 50%.

+
+
+ + + + + +
+ + +
Clock Stretching
+An accessed peripheral can slow down/halt the controller’s bus clock by using clock stretching (= actively keeping the +SCL line low). The controller will halt operation in this case. Clock stretching is enabled by setting the +TWI_CTRL_CLKSTR bit in the module’s control register CTRL. +
+
+
+

TWI Transfers

+
+
+

The TWI is enabled via the TWI_CTRL_EN bit in the CTRL control register. All TWI operations are controlled by +the DCMD register. The actual operation is selected by a 2-bit value that is written to the register’s TWI_DCMD_CMD_* +bit-field:

+
+
+
    +
  • +

    00: NOP (no-operation); all further bit-fields in DCMD are ignored

    +
  • +
  • +

    01: Generate a (repeated) START conditions; all further bit-fields in DCMD are ignored

    +
  • +
  • +

    10: Generate a STOP conditions; all further bit-fields in DCMD are ignored

    +
  • +
  • +

    11: Trigger a data transmission; the data to be send has to be written to the register’s TWI_DCMD_MSB : TWI_DCMD_LSB +bit-field; if TWI_DCMD_ACK is set the controller will send a host-ACK in the ACK/NACK time slot; after the transmission +is completed TWI_DCMD_MSB : TWI_DCMD_LSB contains the RX data and TWI_DCMD_ACK the device’s response if no host-ACK was +configured (0 = ACK, 1 = ACK)

    +
  • +
+
+
+

All operations/data written to the DCMD register are buffered by a configurable data/command FIFO. The depth of the FIFO is +configured by the IO_TWI_FIFO top generic. Software can retrieve this size by reading the control register’s TWI_CTRL_FIFO bits.

+
+
+

The command/data FIFO is internally split into a TX FIFO and a RX FIFO. Writing to DCMD will write to the TX FIFO while reading from +DCMD will read from the RX FIFO. The TX FIFO is full when the TWI_CTRL_TX_FULL flag is set. Accordingly, the RX FIFO contains valid +data when the TWI_CTRL_RX_AVAIL flag is set.

+
+
+

The control register’s busy flag TWI_CTRL_BUSY is set as long as the TX FIFO contains valid data (i.e. programmed TWI operations +that have not been executed yet) or of the TWI bus engine is still processing an operation.

+
+
+ + + + + +
+ + +An active transmission can be terminated at any time by disabling the TWI module. This will also clear the data/command FIFO. +
+
+
+ + + + + +
+ + +When reading data from a device, an all-one byte (0xFF) has to be written to TWI data register NEORV32_TWI.DATA +so the accessed device can actively pull-down SDA when required. +
+
+
+

TWI Interrupt

+
+
+

The TWI module provides a single interrupt to signal "idle condition" to the CPU. The interrupt becomes active when the +TWI module is enabled (TWI_CTRL_EN = 1) and the TX FIFO is empty and the TWI bus engine is idle.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 21. TWI register map (struct NEORV32_TWI)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff900

CTRL

0 TWI_CTRL_EN

r/w

TWI enable, reset if cleared

3:1 TWI_CTRL_PRSC2 : TWI_CTRL_PRSC0

r/w

3-bit clock prescaler select

7:4 TWI_CTRL_CDIV3 : TWI_CTRL_CDIV0

r/w

4-bit clock divider

8 TWI_CTRL_CLKSTR

r/w

Enable (allow) clock stretching

14:9 -

r/-

reserved, read as zero

18:15 TWI_CTRL_FIFO_MSB : TWI_CTRL_FIFO_LSB

r/-

FIFO depth; log2(IO_TWI_FIFO)

28:12 -

r/-

reserved, read as zero

29 TWI_CTRL_TX_FULL

r/-

set if the TWI bus is claimed by any controller

30 TWI_CTRL_RX_AVAIL

r/-

RX FIFO data available

31 TWI_CTRL_BUSY

r/-

TWI bus engine busy or TX FIFO not empty

0xfffff904

DCMD

7:0 TWI_DCMD_MSB : TWI_DCMD_LSB

r/w

RX/TX data byte

8 TWI_DCMD_ACK

r/w

write: ACK bit sent by controller; read: 1 = device NACK, 0 = device ACK

10:9 TWI_DCMD_CMD_HI : TWI_DCMD_CMD_LO

r/w

TWI operation (00 = NOP, 01 = START conditions, 10 = STOP condition, 11 = data transmission)

+
+
+
+

2.7.18. One-Wire Serial Interface Controller (ONEWIRE)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_onewire.vhd

Software driver files:

neorv32_onewire.c

neorv32_onewire.h

Top entity ports:

onewire_i

1-bit 1-wire bus sense input

onewire_o

1-bit 1-wire bus output (pull low only)

Configuration generics:

IO_ONEWIRE_EN

implement ONEWIRE interface controller when true

CPU interrupts:

fast IRQ channel 13

operation done interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The NEORV32 ONEWIRE module implements a single-wire interface controller that is compatible to the +Dallas/Maxim 1-Wire protocol, which is an asynchronous half-duplex bus requiring only a single signal wire +connected to onewire_io (plus ground).

+
+
+

The bus is based on a single open-drain signal. The controller and all the devices can only pull-down the bus actively. +Hence, an external pull-up resistor is required. Recommended values are between 1kΩ and 4kΩ depending on the bus +characteristics (wire length, number of devices, etc.). Furthermore, a series resistor (~100Ω) at the controller side +is recommended to control the slew rate and to reduce signal reflections. Also, additional external ESD protection clamp diodes +should be added to the bus line.

+
+
+

Tri-State Drivers

+
+
+

The ONEWIRE module requires a tri-state driver (actually, open-drain) for the 1-wire bus line, which has to be implemented +in the top module of the setup. A generic VHDL example is given below (onewire is the actual 1-wire +bus signal, which is of type std_logic).

+
+
+
Listing 6. ONEWIRE VHDL tri-state driver example
+
+
onewire   <= '0' when (onewire_o = '0') else 'Z'; -- drive
+onewire_i <= std_ulogic(onewire); -- sense
+
+
+
+

Theory of Operation

+
+
+

The ONEWIRE controller provides two interface registers: CTRL and DATA. The control registers (CTRL) +is used to configure the module, to trigger bus transactions and to monitor the current state of the module. +The DATA register is used to read/write data from/to the bus.

+
+
+

The module is enabled by setting the ONEWIRE_CTRL_EN bit in the control register. If this bit is cleared, the +module is automatically reset and the bus is brought to high-level (due to the external pull-up resistor). +The basic timing configuration is programmed via the clock prescaler bits ONEWIRE_CTRL_PRSCx and the +clock divider bits ONEWIRE_CTRL_CLKDIVx (see next section).

+
+
+

The controller can execute three basic bus operations, which are triggered by setting one out of three specific +control register bits (the bits auto-clear):

+
+
+
    +
  1. +

    generate reset pulse and check for device presence; triggered when setting ONEWIRE_CTRL_TRIG_RST

    +
  2. +
  3. +

    transfer a single-bit (read-while-write); triggered when setting ONEWIRE_CTRL_TRIG_BIT

    +
  4. +
  5. +

    transfer a full-byte (read-while-write); triggered when setting ONEWIRE_CTRL_TRIG_BYTE

    +
  6. +
+
+
+ + + + + +
+ + +Only one trigger bit may be set at once, otherwise undefined behavior might occur. +
+
+
+

When a single-bit operation has been triggered, the data previously written to DATA[0] will be send to the bus +and DATA[7] will be sampled from the bus. Accordingly, a full-byte transmission will send the previously +byte written to DATA[7:0] to the bus and will update DATA[7:0] with the data read from the bus (LSB-first). +The triggered operation has completed when the module’s busy flag ONEWIRE_CTRL_BUSY has cleared again.

+
+
+ + + + + +
+ + +
Read from Bus
+In order to read a single bit from the bus DATA[0] has to set to 1 before triggering the bit transmission +operation to allow the accessed device to pull-down the bus. Accordingly, DATA has to be set to 0xFF before +triggering the byte transmission operation when the controller shall read a byte from the bus. +
+
+
+

The ONEWIRE_CTRL_PRESENCE bit gets set if at least one device has send a "presence" signal right after the +reset pulse.

+
+
+

Bus Timing

+
+
+

The control register provides a 2-bit clock prescaler select (ONEWIRE_CTRL_PRSCx) and a 8-bit clock divider +(ONEWIRE_CTRL_CLKDIVx) for timing configuration. Both are used to define the elementary base time Tbase. +All bus operations are timed using multiples of this elementary base time.

+
+ + +++++++ + + + + + + + + + + + + + + + + + + +
Table 22. ONEWIRE Clock Prescaler Configurations
ONEWIRE_CTRL_PRSCx0b000b010b100b11

Resulting clock_prescaler

2

4

8

64

+
+

Together with the clock divider value (ONEWIRE_CTRL_PRSCx bits = clock_divider) the base time is defined by the +following formula:

+
+
+

Tbase = (1 / fmain[Hz]) * clock_prescaler * (clock_divider + 1)

+
+
+

Example:

+
+
+
    +
  • +

    fmain = 100MHz

    +
  • +
  • +

    clock prescaler select = 0b01clock_prescaler = 4

    +
  • +
  • +

    clock divider clock_divider = 249

    +
  • +
+
+
+

Tbase = (1 / 100000000Hz) * 4 * (249 + 1) = 10000ns = 10µs

+
+
+

The base time is used to coordinate all bus interactions. Hence, all delays, time slots and points in time are +quantized as multiples of the base time. The following images show the two basic operations of the ONEWIRE +controller: single-bit (0 or 1) transaction and reset with presence detect. The relevant points in time are +shown as absolute time (in multiples of the time base) with the bus' falling edge as reference point.

+
+ ++++ + + + + + + + + + + +
+
+onewire data +
+
+
+onewire reset +
+

Single-bit data transmission (not to scale)

Reset pulse and presence detect (not to scale)

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 23. Data Transmission Timing
SymbolDescriptionMultiples of TbaseTime when Tbase = 10µs

Single-bit data transmission

t0 (a→b)

Time until end of active low-phase when writing a '1' or when reading

1

10µs

t1 (a→c)

Time until controller samples bus state (read operation)

2

20µs

t2 (a→d)

Time until end of bit time slot (when writing a '0' or when reading)

7

70µs

t3 (a→e)

Time until end of inter-slot pause (= total duration of one bit)

9

90µs

Reset pulse and presence detect

t4 (f→g)

Time until end of active reset pulse

48

480µs

t5 (f→h)

Time until controller samples bus presence

55

550µs

t6 (f→i)

Time until end of presence phase

96

960µs

+
+ + + + + +
+ + +The default values for base time multiples were chosen to for stable and reliable bus +operation (not for maximum throughput). +
+
+
+

The absolute points in time are hardwired by the VHDL code and cannot be changed during runtime. +However, the timing parameter can be customized by editing the ONEWIRE’s VHDL source file:

+
+
+
Listing 7. Hardwired time configuration in neorv32_onewire.vhd
+
+
-- timing configuration (absolute time in multiples of the base tick time t_base) --
+constant t_write_one_c       : unsigned(6 downto 0) := to_unsigned( 1, 7); -- t0
+constant t_read_sample_c     : unsigned(6 downto 0) := to_unsigned( 2, 7); -- t1
+constant t_slot_end_c        : unsigned(6 downto 0) := to_unsigned( 7, 7); -- t2
+constant t_pause_end_c       : unsigned(6 downto 0) := to_unsigned( 9, 7); -- t3
+constant t_reset_end_c       : unsigned(6 downto 0) := to_unsigned(48, 7); -- t4
+constant t_presence_sample_c : unsigned(6 downto 0) := to_unsigned(55, 7); -- t5
+constant t_presence_end_c    : unsigned(6 downto 0) := to_unsigned(96, 7); -- t6
+
+
+
+ + + + + +
+ + +
Overdrive
+The ONEWIRE controller does not support the overdrive mode. However, it can be implemented by reducing the base +time Tbase (and by eventually changing the hardwired timing configuration in the VHDL source file). +
+
+
+

Interrupt

+
+
+

A single interrupt is provided by the ONEWIRE module to signal "idle" condition to the CPU. Whenever the +controller is idle (again) the interrupt becomes active.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 24. ONEWIRE register map (struct NEORV32_ONEWIRE)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff200

CTRL

0 ONEWIRE_CTRL_EN

r/w

ONEWIRE enable, reset if cleared

2:1 ONEWIRE_CTRL_PRSC1 : ONEWIRE_CTRL_PRSC0

r/w

2-bit clock prescaler select

10:3 ONEWIRE_CTRL_CLKDIV7 : ONEWIRE_CTRL_CLKDIV0

r/w

8-bit clock divider value

11 ONEWIRE_CTRL_TRIG_RST

-/w

trigger reset pulse, auto-clears

12 ONEWIRE_CTRL_TRIG_BIT

-/w

trigger single bit transmission, auto-clears

13 ONEWIRE_CTRL_TRIG_BYTE

-/w

trigger full-byte transmission, auto-clears

28:14 -

r/-

reserved, read as zero

29 ONEWIRE_CTRL_SENSE

r/-

current state of the bus line

30 ONEWIRE_CTRL_PRESENCE

r/-

device presence detected after reset pulse

31 ONEWIRE_CTRL_BUSY

r/-

operation in progress when set

0xfffff204

DATA

7:0 ONEWIRE_DATA_MSB : ONEWIRE_DATA_LSB

r/w

receive/transmit data (8-bit)

+
+
+
+

2.7.19. Pulse-Width Modulation Controller (PWM)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_pwm.vhd

Software driver files:

neorv32_pwm.c

neorv32_pwm.h

Top entity ports:

pwm_o

PWM output channels (12-bit)

Configuration generics:

IO_PWM_NUM_CH

number of PWM channels to implement (0..12)

CPU interrupts:

none

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The PWM module implements a pulse-width modulation controller with up to 12 independent channels providing +8-bit resolution per channel. The actual number of implemented channels is defined by the IO_PWM_NUM_CH generic. +Setting this generic to zero will completely remove the PWM controller from the design.

+
+
+ + + + + +
+ + +The pwm_o has a static size of 12-bit. If less than 12 PWM channels are configured, only the LSB-aligned channel +bits are used while the remaining bits are hardwired to zero. +
+
+
+

Theory of Operation

+
+
+

The PWM controller is activated by setting the PWM_CTRL_EN bit in the module’s control register CTRL. When this +bit is cleared, the unit is reset and all PWM output channels are set to zero. The module +provides three duty cycle registers DC[0] to DC[2]. Each register contains the duty cycle configuration for four +consecutive channels. For example, the duty cycle of channel 0 is defined via bits 7:0 in DC[0]. The duty cycle of +channel 2 is defined via bits 15:0 in DC[0] and so on.

+
+
+ + + + + +
+ + +Regardless of the configuration of IO_PWM_NUM_CH all module registers can be accessed without raising an exception. +Software can discover the number of available channels by writing 0xff to all duty cycle configuration bytes and +reading those values back. The duty-cycle of channels that were not implemented always reads as zero. +
+
+
+

Based on the configured duty cycle the according intensity of the channel can be computed by the following formula:

+
+
+

Intensityx = DC[y](i*8+7 downto i*8) / (28)

+
+
+

The base frequency of the generated PWM signals is defined by the PWM core clock. This clock is derived +from the main processor clock and divided by a prescaler via the 3-bit PWM_CTRL_PRSCx in the unit’s control +register.

+
+ + +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 25. PWM prescaler configuration
PWM_CTRL_PRSCx0b0000b0010b0100b0110b1000b1010b1100b111

Resulting clock_prescaler

2

4

8

64

128

1024

2048

4096

+
+

The resulting PWM carrier frequency is defined by:

+
+
+

fPWM = fmain[Hz] / (28 * clock_prescaler)

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 26. PWM register map (struct neorv32_pwm_t)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff000

CTRL

0 PWM_CTRL_EN

r/w

PWM enable

3:1 PWM_CTRL_PRSC2 : PWM_CTRL_PRSC0

r/w

3-bit clock prescaler select

31:4 -

r/-

reserved, read as zero

0xfffff004

DC[0]

7:0

r/w

8-bit duty cycle for channel 0

15:8

r/w

8-bit duty cycle for channel 1

23:16

r/w

8-bit duty cycle for channel 2

31:24

r/w

8-bit duty cycle for channel 3

0xfffff008

DC[1]

7:0

r/w

8-bit duty cycle for channel 4

15:8

r/w

8-bit duty cycle for channel 5

23:16

r/w

8-bit duty cycle for channel 6

31:24

r/w

8-bit duty cycle for channel 7

0xfffff00c

DC[2]

7:0

r/w

8-bit duty cycle for channel 8

15:8

r/w

8-bit duty cycle for channel 9

23:16

r/w

8-bit duty cycle for channel 10

31:24

r/w

8-bit duty cycle for channel 11

+
+
+
+

2.7.20. True Random-Number Generator (TRNG)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_trng.vhd

Software driver files:

neorv32_trng.c

neorv32_trng.h

Top entity ports:

none

Configuration generics:

IO_TRNG_EN

implement TRNG when true

IO_TRNG_FIFO

data FIFO depth, min 1, has to be a power of two

CPU interrupts:

fast IRQ channel 0

TRNG data available interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The NEORV32 true random number generator provides physically true random numbers. It is based on free-running +ring-oscillators that generate phase noise when being sampled by a constant clock. This phase noise is +used as physical entropy source. The TRNG features a platform independent architecture without FPGA-specific +primitives, macros or attributes so it can be synthesized for any FPGA.

+
+
+ + + + + +
+ + +
In-Depth Documentation
+For more information about the neoTRNG architecture and an analysis of its random quality check out the +neoTRNG repository: https://github.com/stnolting/neoTRNG +
+
+
+ + + + + +
+ + +
Inferring Latches
+The synthesis tool might emit warnings regarding inferred latches or combinatorial loops. However, this +is not design flaw as this is exactly what we want. ;) +
+
+
+ + + + + +
+ + +
Simulation
+When simulating the processor the TRNG is automatically set to "simulation mode". In this mode the physical entropy +sources (the ring oscillators) are replaced by a simple pseudo RNG based on a LFSR providing only +deterministic pseudo-random data. The TRNG_CTRL_SIM_MODE flag of the control register is set if simulation +mode is active. +
+
+
+

Theory of Operation

+
+
+

The TRNG features a single control register CTRL for control, status check and data access. When the TRNG_CTRL_EN +bit is set, the TRNG is enabled and starts operation. As soon as the TRNG_CTRL_VALID bit is set a new random data byte +is available and can be obtained from the lowest 8 bits of the CTRL register. If this bit is cleared, there is no +valid data available and the lowest 8 bit of the CTRL register are set to all-zero.

+
+
+

An internal entropy FIFO can be configured using the IO_TRNG_FIFO generic. This FIFO automatically samples +new random data from the TRNG to provide some kind of random data pool for applications, which require a large number +of random data in a short time. The random data FIFO can be cleared at any time either by disabling the TRNG or by +setting the TRNG_CTRL_FIFO_CLR flag. The FIFO depth can be retrieved by software via the TRNG_CTRL_FIFO_* bits.

+
+
+

TRNG Interrupt

+
+
+

As the neoTRNG is a rather slow entropy source, a "data available" interrupt is provided to inform the application +software that new random data is available. This interrupt can be trigger by either of two conditions: trigger the +interrupt if any random data is available (i.e. the data FIFO is not empty; TRNG_CTRL_IRQ_SEL = 0) or trigger +the interrupt if the random pool is full (i.e. the data FIFO is full; TRNG_CTRL_IRQ_SEL = 1). +Once the TRNG interrupt has fired it remains pending until the actual cause of the interrupt is resolved.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 27. TRNG register map (struct NEORV32_TRNG)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffffa00

CTRL

7:0 TRNG_CTRL_DATA_MSB : TRNG_CTRL_DATA_MSB

r/-

8-bit random data

15:8 -

r/-

reserved, read as zero

19:16 TRNG_CTRL_FIFO_MSB : TRNG_CTRL_FIFO_MSB

r/-

FIFO depth, log2(IO_TRNG_FIFO)

27:20 -

r/-

reserved, read as zero

27 TRNG_CTRL_IRQ_SEL

r/w

interrupt trigger select (0 = data available, 1 = FIFO full)

28 TRNG_CTRL_FIFO_CLR

-/w

flush random data FIFO when set; flag auto-clears

29 TRNG_CTRL_SIM_MODE

r/-

simulation mode (PRNG!)

30 TRNG_CTRL_EN

r/w

TRNG enable

31 TRNG_CTRL_VALID

r/-

random data is valid when set

+
+
+
+

2.7.21. Custom Functions Subsystem (CFS)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_cfs.vhd

Software driver files:

neorv32_cfs.c

neorv32_cfs.h

Top entity ports:

cfs_in_i

custom input conduit

cfs_out_o

custom output conduit

Configuration generics:

IO_CFS_EN

implement CFS when true

IO_CFS_CONFIG

custom generic conduit

IO_CFS_IN_SIZE

size of cfs_in_i

IO_CFS_OUT_SIZE

size of cfs_out_o

CPU interrupts:

fast IRQ channel 1

CFS interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The custom functions subsystem is meant for implementing custom tightly-coupled co-processors or interfaces. +IT provides up to 64 32-bit memory-mapped read/write registers (REG, see register map below) that can be +accessed by the CPU via normal load/store operations. The actual functionality of these register has to be +defined by the hardware designer. Furthermore, the CFS provides two IO conduits to implement custom on-chip +or off-chip interfaces.

+
+
+

Just like any other externally-connected IP, logic implemented within the custom functions subsystem can operate +independently of the CPU providing true parallel processing capabilities. Potential use cases might include +dedicated hardware accelerators for en-/decryption (AES), signal processing (FFT) or AI applications +(CNNs) as well as custom IO systems like fast memory interfaces (DDR) and mass storage (SDIO), networking (CAN) +or real-time data transport (I2S).

+
+
+ + + + + +
+ + +If you like to implement custom instructions that are executed right within the CPU’s ALU +see the Zxcfu ISA Extension and the according Custom Functions Unit (CFU). +
+
+
+ + + + + +
+ + +Take a look at the template CFS VHDL source file (rtl/core/neorv32_cfs.vhd). The file is highly +commented to illustrate all aspects that are relevant for implementing custom CFS-based co-processor designs. +
+
+
+ + + + + +
+ + +The CFS can also be used to replicate existing NEORV32 modules - for example to implement several TWI controllers. +
+
+
+

CFS Software Access

+
+
+

The CFS memory-mapped registers can be accessed by software using the provided C-language aliases (see +register map table below). Note that all interface registers are defined as 32-bit words of type uint32_t.

+
+
+
Listing 8. CFS Software Access Example
+
+
// C-code CFS usage example
+NEORV32_CFS->REG[0] = (uint32_t)some_data_array(i); // write to CFS register 0
+int temp = (int)NEORV32_CFS->REG[20]; // read from CFS register 20
+
+
+
+

CFS Interrupt

+
+
+

The CFS provides a single high-level-triggered interrupt request signal mapped to the CPU’s fast interrupt channel 1.

+
+
+

CFS Configuration Generic

+
+
+

By default, the CFS provides a single 32-bit std_ulogic_vector configuration generic IO_CFS_CONFIG +that is available in the processor’s top entity. This generic can be used to pass custom configuration options +from the top entity directly down to the CFS. The actual definition of the generic and it’s usage inside the +CFS is left to the hardware designer.

+
+
+

CFS Custom IOs

+
+
+

By default, the CFS also provides two unidirectional input and output conduits cfs_in_i and cfs_out_o. +These signals are directly propagated to the processor’s top entity. These conduits can be used to implement +application-specific interfaces like memory or peripheral connections. The actual use case of these signals +has to be defined by the hardware designer.

+
+
+

The size of the input signal conduit cfs_in_i is defined via the top’s IO_CFS_IN_SIZE configuration +generic (default = 32-bit). The size of the output signal conduit cfs_out_o is defined via the top’s +IO_CFS_OUT_SIZE configuration generic (default = 32-bit). If the custom function subsystem is not implemented +(IO_CFS_EN = false) the cfs_out_o signal is tied to all-zero.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 28. CFS register map (struct NEORV32_CFS)
AddressName [C]Bit(s)R/WFunction

0xffffeb00

REG[0]

31:0

(r)/(w)

custom CFS register 0

0xffffeb04

REG[1]

31:0

(r)/(w)

custom CFS register 1

…​

…​

31:0

(r)/(w)

…​

0xffffebf8

REG[62]

31:0

(r)/(w)

custom CFS register 62

0xffffebfc

REG[63]

31:0

(r)/(w)

custom CFS register 63

+
+
+
+

2.7.22. Smart LED Interface (NEOLED)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_neoled.vhd

Software driver files:

neorv32_neoled.c

neorv32_neoled.h

Top entity ports:

neoled_o

1-bit serial data output

Configuration generics:

IO_NEOLED_EN

implement NEOLED controller when true

IO_NEOLED_TX_FIFO

TX FIFO depth, has to be a power of 2, min 1

CPU interrupts:

fast IRQ channel 9

configurable NEOLED data FIFO interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The NEOLED module provides a dedicated interface for "smart RGB LEDs" like WS2812, WS2811 or any other compatible +LEDs. These LEDs provide a single-wire interface that uses an asynchronous serial protocol for transmitting color +data. Using the NEOLED module allows CPU-independent operation of an arbitrary number of smart LEDs. A configurable data +buffer (FIFO) allows to utilize block transfer operation without requiring the CPU.

+
+
+ + + + + +
+ + +The NEOLED interface is compatible to the "Adafruit Industries NeoPixel™" products, which feature +WS2812 (or older WS2811) smart LEDs. Other LEDs might be compatible as well when adjusting the controller’s programmable +timing configuration. +
+
+
+

The interface provides a single 1-bit output neoled_o to drive an arbitrary number of cascaded LEDs. Since the +NEOLED module provides 24-bit and 32-bit operating modes, a mixed setup with RGB LEDs (24-bit color) +and RGBW LEDs (32-bit color including a dedicated white LED chip) is possible.

+
+
+

Theory of Operation

+
+
+

The NEOLED modules provides two accessible interface registers: the control register CTRL and the write-only +TX data register DATA. The NEOLED module is globally enabled via the control register’s +NEOLED_CTRL_EN bit. Clearing this bit will terminate any current operation, clear the TX buffer, reset the module +and set the neoled_o output to zero. The precise timing (e.g. implementing the WS2812 protocol) and transmission +mode are fully programmable via the CTRL register to provide maximum flexibility.

+
+
+

RGB / RGBW Configuration

+
+
+

NeoPixel™ LEDs are available in two "color" version: LEDs with three chips providing RGB color and LEDs with +four chips providing RGB color plus a dedicated white LED chip (= RGBW). Since the intensity of every +LED chip is defined via an 8-bit value the RGB LEDs require a frame of 24-bit per module and the RGBW +LEDs require a frame of 32-bit per module.

+
+
+

The data transfer quantity of the NEOLED module can be programmed via the NEOLED_MODE_EN control +register bit. If this bit is cleared, the NEOLED interface operates in 24-bit mode and will transmit bits 23:0 of +the data written to DATA to the LEDs. If NEOLED_MODE_EN is set, the NEOLED interface operates in 32-bit +mode and will transmit bits 31:0 of the data written to DATA to the LEDs.

+
+
+

The mode bit can be reconfigured before writing a new data word to DATA in order to support an arbitrary setup/mixture +of RGB and RGBW LEDs.

+
+
+

Protocol

+
+
+

The interface of the WS2812 LEDs uses an 800kHz carrier signal. Data is transmitted in a serial manner +starting with LSB-first. The intensity for each R, G & B (& W) LED chip (= color code) is defined via an 8-bit +value. The actual data bits are transferred by modifying the duty cycle of the signal (the timings for the +WS2812 are shown below). A RESET command is "send" by pulling the data line LOW for at least 50μs.

+
+
+
+neopixel timing +
+
Figure 8. WS2812 bit-level timing (timing does not scale)
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 29. WS2812 interface timing

Ttotal (Tcarrier)

1.25μs +/- 300ns

period for a single bit

T0H

0.4μs +/- 150ns

high-time for sending a 1

T0L

0.8μs +/- 150ns

low-time for sending a 1

T1H

0.85μs +/- 150ns

high-time for sending a 0

T1L

0.45μs +/- 150 ns

low-time for sending a 0

RESET

Above 50μs

low-time for sending a RESET command

+
+

Timing Configuration

+
+
+

The basic carrier frequency (800kHz for the WS2812 LEDs) is configured via a 3-bit main clock prescaler +(NEOLED_CTRL_PRSC*, see table below) that scales the main processor clock fmain and a 5-bit cycle +multiplier NEOLED_CTRL_T_TOT_*.

+
+ + +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 30. NEOLED Prescaler Configuration
NEOLED_CTRL_PRSCx0b0000b0010b0100b0110b1000b1010b1100b111

Resulting clock_prescaler

2

4

8

64

128

1024

2048

4096

+
+

The duty-cycles (or more precisely: the high- and low-times for sending either a '1' bit or a '0' bit) are +defined via the 5-bit NEOLED_CTRL_T_ONE_H_* and NEOLED_CTRL_T_ZERO_H_* values, respectively. These programmable +timing constants allow to adapt the interface for a wide variety of smart LED protocol (for example WS2812 vs. +WS2811).

+
+
+

Timing Configuration - Example (WS2812)

+
+
+

Generate the base clock fTX for the NEOLED TX engine:

+
+
+
    +
  • +

    processor clock fmain = 100 MHz

    +
  • +
  • +

    NEOLED_CTRL_PRSCx = 0b001 = fmain / 4

    +
  • +
+
+
+

fTX = fmain[Hz] / clock_prescaler = 100MHz / 4 = 25MHz

+
+
+

TTX = 1 / fTX = 40ns

+
+
+

Generate carrier period (Tcarrier) and high-times (duty cycle) for sending 0 (T0H) and 1 (T1H) bits:

+
+
+
    +
  • +

    NEOLED_CTRL_T_TOT = 0b11110 (= decimal 30)

    +
  • +
  • +

    NEOLED_CTRL_T_ZERO_H = 0b01010 (= decimal 10)

    +
  • +
  • +

    NEOLED_CTRL_T_ONE_H = 0b10100 (= decimal 20)

    +
  • +
+
+
+

Tcarrier = TTX * NEOLED_CTRL_T_TOT = 40ns * 30 = 1.4µs

+
+
+

T0H = TTX * NEOLED_CTRL_T_ZERO_H = 40ns * 10 = 0.4µs

+
+
+

T1H = TTX * NEOLED_CTRL_T_ONE_H = 40ns * 20 = 0.8µs

+
+
+ + + + + +
+ + +The NEOLED SW driver library (neorv32_neoled.h) provides a simplified configuration +function that configures all timing parameters for driving WS2812 LEDs based on the processor +clock frequency. +
+
+
+

TX Data FIFO

+
+
+

The interface features a configurable TX data buffer (a FIFO) to allow more CPU-independent operation. The buffer +depth is configured via the IO_NEOLED_TX_FIFO top generic (default = 1 entry). The FIFO size configuration can be +read via the NEOLED_CTRL_BUFS_x control register bits, which result log2(IO_NEOLED_TX_FIFO).

+
+
+

When writing data to the DATA register the data is automatically written to the TX buffer. Whenever +data is available in the buffer the serial transmission engine will take and transmit it to the LEDs. +The data transfer size (NEOLED_MODE_EN) can be modified at any time since this control register bit is also buffered +in the FIFO. This allows an arbitrary mix of RGB and RGBW LEDs in the chain.

+
+
+

Software can check the FIFO fill level via the control register’s NEOLED_CTRL_TX_EMPTY, NEOLED_CTRL_TX_HALF +and NEOLED_CTRL_TX_FULL flags. The NEOLED_CTRL_TX_BUSY flags provides additional information if the the serial +transmit engine is still busy sending data.

+
+
+ + + + + +
+ + +Please note that the timing configurations (NEOLED_CTRL_PRSCx, NEOLED_CTRL_T_TOT_x, +NEOLED_CTRL_T_ONE_H_x and NEOLED_CTRL_T_ZERO_H_x) are NOT stored to the buffer. Changing +these value while the buffer is not empty or the TX engine is still busy will cause data corruption. +
+
+
+

Strobe Command ("RESET")

+
+
+

According to the WS2812 specs the data written to the LED’s shift registers is strobed to the actual PWM driver +registers when the data line is low for 50μs ("RESET" command, see table above). This can be implemented +using busy-wait for at least 50μs. Obviously, this concept wastes a lot of processing power.

+
+
+

To circumvent this, the NEOLED module provides an option to automatically issue an idle time for creating the RESET +command. If the NEOLED_CTRL_STROBE control register bit is set, all data written to the data FIFO (via DATA, +the actually written data is irrelevant) will trigger an idle phase (neoled_o = zero) of 127 periods (= Tcarrier). +This idle time will cause the LEDs to strobe the color data into the PWM driver registers.

+
+
+

Since the NEOLED_CTRL_STROBE flag is also buffered in the TX buffer, the RESET command is treated just as another +data word being written to the TX buffer making busy wait concepts obsolete and allowing maximum refresh rates.

+
+
+

NEOLED Interrupt

+
+
+

The NEOLED modules features a single interrupt that triggers based on the current TX buffer fill level. +The interrupt can only become pending if the NEOLED module is enabled. The specific interrupt condition +is configured via the NEOLED_CTRL_IRQ_CONF bit in the unit’s control register.

+
+
+

If NEOLED_CTRL_IRQ_CONF is set, the module’s interrupt is generated whenever the TX FIFO is less than half-full. +In this case software can write up to IO_NEOLED_TX_FIFO/2 new data words to DATA without checking the FIFO +status flags. If NEOLED_CTRL_IRQ_CONF is cleared, an interrupt is generated when the TX FIFO is empty.

+
+
+

Once the NEOLED interrupt has fired it remains pending until the actual cause of the interrupt is resolved.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 31. NEOLED register map (struct NEORV32_NEOLED)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffffd00

CTRL

0 NEOLED_CTRL_EN

r/w

NEOLED enable

1 NEOLED_CTRL_MODE

r/w

data transfer size; 0=24-bit; 1=32-bit

2 NEOLED_CTRL_STROBE

r/w

0=send normal color data; 1=send RESET command on data write access

5:3 NEOLED_CTRL_PRSC2 : NEOLED_CTRL_PRSC0

r/w

3-bit clock prescaler, bit 0

9:6 NEOLED_CTRL_BUFS3 : NEOLED_CTRL_BUFS0

r/-

4-bit log2(IO_NEOLED_TX_FIFO)

14:10 NEOLED_CTRL_T_TOT_4 : NEOLED_CTRL_T_TOT_0

r/w

5-bit pulse clock ticks per total single-bit period (Ttotal)

19:15 NEOLED_CTRL_T_ZERO_H_4 : NEOLED_CTRL_T_ZERO_H_0

r/w

5-bit pulse clock ticks per high-time for sending a zero-bit (T0H)

24:20 NEOLED_CTRL_T_ONE_H_4 : NEOLED_CTRL_T_ONE_H_0

r/w

5-bit pulse clock ticks per high-time for sending a one-bit (T1H)

27 NEOLED_CTRL_IRQ_CONF

r/w

TX FIFO interrupt configuration: 0=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full

28 NEOLED_CTRL_TX_EMPTY

r/-

TX FIFO is empty

29 NEOLED_CTRL_TX_HALF

r/-

TX FIFO is at least half full

30 NEOLED_CTRL_TX_FULL

r/-

TX FIFO is full

31 NEOLED_CTRL_TX_BUSY

r/-

TX serial engine is busy when set

0xfffffd04

DATA

31:0 / 23:0

-/w

TX data (32- or 24-bit, depending on NEOLED_CTRL_MODE bit)

+
+
+
+

2.7.23. External Interrupt Controller (XIRQ)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_xirq.vhd

Software driver files:

neorv32_xirq.c

neorv32_xirq.h

Top entity ports:

xirq_i

External interrupts input (32-bit)

Configuration generics:

XIRQ_NUM_CH

Number of external IRQ channels to implement (0..32)

CPU interrupts:

fast IRQ channel 8

XIRQ (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The external interrupt controller provides a simple mechanism to implement up to 32 platform-level / processor-external +interrupt request signals. The external IRQ requests are prioritized, queued and signaled to the CPU via a +single CPU fast interrupt request channel.

+
+
+

Theory of Operation

+
+
+

The XIRQ provides up to 32 external interrupt channels configured via the XIRQ_NUM_CH generic. Each bit in the +xirq_i input signal vector represents one interrupt channel. If less than 32 channels are configured, only the +LSB-aligned channels are used while the remaining ones are left unconnected internally.

+
+
+

The external interrupt controller features five interface registers:

+
+
+
    +
  1. +

    external interrupt channel enable (EIE)

    +
  2. +
  3. +

    external interrupt channel pending (EIP)

    +
  4. +
  5. +

    external interrupt source (ESC)

    +
  6. +
  7. +

    trigger type configuration (TTYP)

    +
  8. +
  9. +

    trigger polarity configuration (TPOL)

    +
  10. +
+
+
+ + + + + +
+ + +From a functional point of view, the EIE, EIP and ESC registers follow the behavior +of the RISC-V mie, mip and mcause CSRs. +
+
+
+

The actual interrupt trigger type can be configured individually for each channel using the TTYP and TPOL +registers. TTYP defines the actual trigger type (level-triggered or edge-triggered), while TPOL defines +the trigger’s polarity (low-level/falling-edge or high-level_/rising-edge). The position of each bit in these +registers corresponds the according XIRQ channel.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 32. XIRQ Trigger Configuration
TTYP(i)TPOL(i)Resulting trigger of xirq_i(i)

0

0

low-level

0

1

high-level

1

0

falling-edge

1

1

rising-edge

+
+

When the configured trigger of an interrupt channel fires the according interrupt channel becomes pending +which is indicated by the according channel bit being set in the EIP register. This pending interrupt can +be manually cleared at any time by writing zero to the according EIP bit.

+
+
+

A pending interrupt can only generate a CPU interrupt if the according channel is enabled by the EIE +register. Once triggered, disabled channels that were already triggered remain pending until explicitly +(= manually) cleared. The channels are prioritized in a static order, i.e. channel 0 (xirq_i(0)) has the +highest priority and channel 31 (xirq_i(31)) has the lowest priority. If any pending interrupt channel is +also enabled, an interrupt request is sent to the CPU.

+
+
+

The CPU can determine the most prioritized external interrupt request either by checking the bits in the EIP +register or by reading the interrupt source register ESC. This register provides a 5-bit wide ID (0..31) +identifying the currently firing external interrupt source channel. Writing any value to this register will +acknowledge and clear the current CPU interrupt (so the XIRQ controller can issue a new CPU interrupt).

+
+
+

In order to acknowledge an XIRQ interrupt, the interrupt handler has to…​ +* clear the pending XIRQ channel by clearing the according EIP bit +* writing any value to ESC to acknowledge the XIRQ CPU interrupt

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 33. XIRQ register map (struct NEORV32_XIRQ)
AddressName [C]Bit(s)R/WDescription

0xfffff300

EIE

31:0

r/w

External interrupt enable register (one bit per channel, LSB-aligned)

0xfffff304

EIP

31:0

r/w

External interrupt pending register (one bit per channel, LSB-aligned); writing 0 to a bit clears the according pending interrupt

0xfffff308

ESC

4:0

r/w

Interrupt source ID (0..31) of firing IRQ (prioritized!); writing any value will acknowledge the current XIRQ CPU interrupt

0xfffff30c

TTYP

31:0

r/w

Trigger type select (0 = level trigger, 1 = edge trigger); each bit corresponds to the according channel number

0xfffff310

TPOL

31:0

r/w

Trigger polarity select (0 = low-level/falling-edge, 1 = high-level/rising-edge); each bit corresponds to the according channel number

0xfffff314

-

31:0

r/-

reserved, read as zero

0xfffff318

-

31:0

r/-

reserved, read as zero

0xfffff31c

-

31:0

r/-

reserved, read as zero

+
+
+
+

2.7.24. General Purpose Timer (GPTMR)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_gptmr.vhd

Software driver files:

neorv32_gptmr.c

neorv32_gptmr.h

Top entity ports:

none

Configuration generics:

IO_GPTMR_EN

implement general purpose timer when true

CPU interrupts:

fast IRQ channel 12

timer interrupt (see Processor Interrupts)

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The general purpose timer module implements a simple yet universal 32-bit timer. It is implemented if the processor’s +IO_GPTMR_EN top generic is set true. The timer provides a pre-scaled counter register that can trigger an interrupt +when reaching a programmable threshold value.

+
+
+

The GPTMR provides three interface registers : a control register (CTRL), a 32-bit counter register (COUNT) and a +32-bit threshold register (THRES). The timer is globally enabled by setting the GPTMR_CTRL_EN bit in the module’s +control register. When the timer is enable the COUNT register will start incrementing from zero at a programmable +rate that scales the main processor clock. this pre-scaler is configured via the three GPTMR_CTRL_PRSCx +control register bits:

+
+ + +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 34. GPTMR prescaler configuration
GPTMR_CTRL_PRSCx0b0000b0010b0100b0110b1000b1010b1100b111

Resulting clock_prescaler

2

4

8

64

128

1024

2048

4096

+
+

Whenever the counter register COUNT equals the programmable threshold value THRES the module’s interrupt +signal becomes pending (indicated by GPTMR_CTRL_IRQ_PND being set). Note that a pending interrupt has to be +cleared manually by writing a 1 to GPTMR_CTRL_IRQ_CLR.

+
+
+

The control register’s GPTMR_CTRL_MODE bit defines what will happen when COUNT == THRES.

+
+
+
    +
  • +

    GPTMR_CTRL_MODE = 0: single-shot mode - the COUNT register will stop incrementing

    +
  • +
  • +

    GPTMR_CTRL_MODE = 1: continuous mode - the COUNT register is automatically reset and restarts incrementing from zero

    +
  • +
+
+
+ + + + + +
+ + +
Resetting the Counter
+Disabling the GPTMR will also clear the COUNT register. +
+
+
+

Interrupt

+
+
+

The GPTRM provides a single interrupt line is triggered whenever COUNT equals THRES. Once triggered, the interrupt will +stay pending until explicitly cleared by writing a 1 to GPTMR_CTRL_IRQ_CLR.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 35. GPTMR register map (struct NEORV32_GPTMR)
AddressName [C]Bit(s), Name [C]R/WFunction

0xfffff100

CTRL

0 GPTMR_CTRL_EN

r/w

Timer enable flag

3:1 GPTMR_CTRL_PRSC2 : GPTMR_CTRL_PRSC0

r/w

3-bit clock prescaler select

4 GPTMR_CTRL_MODE

r/w

Operation mode (0=single-shot, 1=continuous)

29:5 -

r/-

reserved, read as zero

30 GPTMR_CTRL_IRQ_CLR

-/w

Write 1 to clear timer-match interrupt; auto-clears

31 GPTMR_CTRL_IRQ_PND

r/-

Timer-match interrupt pending

0xfffff104

THRES

31:0

r/w

Threshold value register

0xfffff108

COUNT

31:0

r/-

Counter register

+
+
+
+

2.7.25. Execute In Place Module (XIP)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_xip.vhd

XIP module

neorv32_cache.vhd

Generic cache module

Software driver files:

neorv32_xip.c

neorv32_xip.h

Top entity ports:

xip_csn_o

1-bit chip select, low-active

xip_clk_o

1-bit serial clock output

xip_dat_i

1-bit serial data input

xip_dat_o

1-bit serial data output

Configuration generics:

XIP_EN

implement XIP module when true

XIP_CACHE_EN

implement XIP cache when true

XIP_CACHE_NUM_BLOCKS

number of blocks in XIP cache; has to be a power of two

XIP_CACHE_BLOCK_SIZE

number of bytes per XIP cache block; has to be a power of two, min 4

CPU interrupts:

none

Access restrictions:

control registers: privileged access only, non-32-bit write accesses are ignored

XIP data access: read-only

+
+

Overview

+
+
+

The execute in-place (XIP) module allows to execute code (and read constant data) directly from an external SPI flash memory. +The standard serial peripheral interface (SPI) is used as transfer protocol. All bus requests issued by the CPU +are converted transparently into SPI flash access commands. Hence, the external XIP flash behaves like a simple on-chip ROM.

+
+
+

From the CPU side, the modules provides two independent interfaces: one for transparently accessing the XIP flash and another +one for accessing the module’s control and status registers. The first interface provides the transparent +gateway to the SPI flash, so the CPU can directly fetch and execute instructions and/or read constant data. +Note that this interface is read-only. Any write access will raise a bus error exception. The second interface is +mapped to the processor’s IO space and allows accesses to the XIP module’s configuration registers as well as +conducting individual SPI transfers.

+
+
+

The XIP module provides an optional configurable cache to accelerate SPI flash accesses.

+
+
+ + + + + +
+ + +
XIP Address Mapping
+When XIP mode is enabled the flash is mapped to fixed address space region starting at address +0xE0000000 (see section Address Space) supporting a maximum flash size of 256MB. +
+
+
+ + + + + +
+ + +
XIP Example Program
+An example program is provided in sw/example/demo_xip that illustrate how to program and configure +an external SPI flash to run a program from it. +
+
+
+

SPI Configuration

+
+
+

The XIP module accesses external flash using the standard SPI protocol. The module always sends data MSB-first and +provides all of the standard four clock modes (0..3), which are configured via the XIP_CTRL_CPOL (clock polarity) +and XIP_CTRL_CPHA (clock phase) control register bits, respectively. The flash’s "read command", which initiates +a read access, is defined by the XIP_CTRL_RD_CMD control register bits. For most SPI flash memories this is 0x03 +for normal SPI mode.

+
+
+

The SPI clock (xip_clk_o) frequency is programmed by the 3-bit XIP_CTRL_PRSCx clock prescaler for a coarse clock +selection and a 4-bit clock divider XPI_CTRL_CDIVx for a fine clock selection. +The following clock prescalers (XIP_CTRL_PRSCx) are available:

+
+ + +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 36. XIP clock prescaler configuration
XIP_CTRL_PRSCx0b0000b0010b0100b0110b1000b1010b1100b111

Resulting clock_prescaler

2

4

8

64

128

1024

2048

4096

+
+

Based on the programmed clock configuration, the actual SPI clock frequency fSPI is derived +from the processor’s main clock fmain according to the following equation:

+
+
+

fSPI = fmain[Hz] / (2 * clock_prescaler * (1 + XPI_CTRL_CDIVx))

+
+
+

Hence, the maximum SPI clock is fmain / 4 and the lowest SPI clock is fmain / 131072. The SPI clock is always +symmetric having a duty cycle of 50%.

+
+
+

High-Speed Mode

+
+
+

The XIP module provides a high-speed mode to further boost the maximum SPI clock frequency. When enabled via the control +register’s XIP_CTRL_HIGHSPEED bit the clock prescaler configuration (XIP_CTRL_PRSCx bits) is overridden setting it +to a minimal factor of 1. However, the clock speed can still be fine-tuned using the XPI_CTRL_CDIVx bits.

+
+
+

fSPI = fmain[Hz] / (2 * 1 * (1 + XPI_CTRL_CDIVx))

+
+
+

Hence, the maximum SPI clock when in high-speed mode is fmain / 2.

+
+
+

Direct SPI Access

+
+
+

The XIP module allows to initiate direct SPI transactions. This feature can be used to configure the attached SPI +flash or to perform direct read and write accesses to the flash memory. Two data registers DATA_LO and +DATA_HI are provided to send up to 64-bit of SPI data. The DATA_HI register is write-only, +so a total of just 32-bits of receive data is provided. Note that the module handles the chip-select +line (xip_csn_o) by itself so it is not possible to construct larger consecutive transfers.

+
+
+

The actual data transmission size in bytes is defined by the control register’s XIP_CTRL_SPI_NBYTES bits. +Any configuration from 1 byte to 8 bytes is valid. Other value will result in unpredictable behavior.

+
+
+

Since data is always transferred MSB-first, the data in DATA_HI:DATA_LO also has to be MSB-aligned. Receive data is +available in DATA_LO only since DATA_HI is write-only. Writing to DATA_HI triggers the actual SPI transmission. +The XIP_CTRL_PHY_BUSY control register flag indicates a transmission being in progress.

+
+
+

The chip-select line of the XIP module (xip_csn_o) will only become asserted (enabled, pulled low) if the +XIP_CTRL_SPI_CSEN control register bit is set. If this bit is cleared, xip_csn_o is always disabled +(pulled high).

+
+
+ + + + + +
+ + +Direct SPI mode is only possible when the module is enabled (setting XIP_CTRL_EN) but before the actual +XIP mode is enabled via XIP_CTRL_XIP_EN. +
+
+
+ + + + + +
+ + +When the XIP mode is not enabled, the XIP module can also be used as additional general purpose SPI controller +with a transfer size of up to 64 bits per transmission. +
+
+
+

Using the XIP Mode

+
+
+

The XIP module is globally enabled by setting the XIP_CTRL_EN bit in the device’s CTRL control register. +Clearing this bit will reset the whole module and will also terminate any pending SPI transfer.

+
+
+

Since there is a wide variety of SPI flash components with different sizes, the XIP module allows to specify +the address width of the flash: the number of address bytes used for addressing flash memory content has to be +configured using the control register’s XIP_CTRL_XIP_ABYTES bits. These two bits contain the number of SPI +address bytes (minus one). For example for a SPI flash with 24-bit addresses these bits have to be set to +0b10.

+
+
+

The transparent XIP accesses are transformed into SPI transmissions with the following format (starting with the MSB):

+
+
+
    +
  • +

    8-bit command: configured by the XIP_CTRL_RD_CMD control register bits ("SPI read command")

    +
  • +
  • +

    8 to 32 bits address: defined by the XIP_CTRL_XIP_ABYTES control register bits ("number of address bytes")

    +
  • +
  • +

    32-bit data: sending zeros and receiving the according flash word (32-bit)

    +
  • +
+
+
+

Hence, the maximum XIP transmission size is 72-bit, which has to be configured via the XIP_CTRL_SPI_NBYTES +control register bits. Note that the 72-bit transmission size is only available in XIP mode. The transmission +size of the direct SPI accesses is limited to 64-bit.

+
+
+ + + + + +
+ + +When using four SPI flash address bytes, the most significant 4 bits of the address are always hardwired +to zero allowing a maximum accessible flash size of 256MB. +
+
+
+ + + + + +
+ + +The XIP module always fetches a full naturally aligned 32-bit word from the SPI flash. Any sub-word data masking +or alignment will be performed by the CPU core logic. +
+
+
+ + + + + +
+ + +The XIP mode requires the 4-byte data words in the flash to be ordered in little-endian byte order. +
+
+
+

After the SPI properties (including the amount of address bytes and the total amount of SPI transfer bytes) +and XIP address mapping are configured, the actual XIP mode can be enabled by setting +the control register’s XIP_CTRL_XIP_EN bit. This will enable the "transparent SPI access port" of the module and thus, +the transparent conversion of access requests into proper SPI flash transmissions. Hence, any access to the processor’s +memory-mapped XIP region (0xE0000000 to 0xEFFFFFFF) will be converted into SPI flash accesses. +Make sure XIP_CTRL_SPI_CSEN is also set so the module can actually select/enable the attached SPI flash. +No more direct SPI accesses via DATA_HI:DATA_LO are possible when the XIP mode is enabled. However, the +XIP mode can be disabled at any time.

+
+
+ + + + + +
+ + +If the XIP module is disabled (XIP_CTRL_EN = 0) any accesses to the memory-mapped XIP flash address region +will raise a bus access exception. If the XIP module is enabled (XIP_CTRL_EN = 1) but XIP mode is not enabled +yet (XIP_CTRL_XIP_EN = '0') any access to the programmed XIP memory segment will also raise a bus access exception. +
+
+
+ + + + + +
+ + +It is highly recommended to enable the Processor-Internal Instruction Cache (iCACHE) to cover some +of the SPI access latency. +
+
+
+

XIP Cache

+
+
+

Since every single instruction fetch request from the CPU is translated into serial SPI transmissions the access latency is +very high resulting in a low throughput. In order to improve performance, the XIP module provides an optional cache that +allows to buffer recently-accessed data. The cache is implemented as a simple direct-mapped read-only cache with a configurable +cache layout:

+
+
+
    +
  • +

    XIP_CACHE_EN: when set to true the CIP cache is implemented

    +
  • +
  • +

    XIP_CACHE_NUM_BLOCKS defines the number of cache blocks (or lines)

    +
  • +
  • +

    XIP_CACHE_BLOCK_SIZE defines the size in bytes of each cache block

    +
  • +
+
+
+

When the cache is implemented, the XIP module operates in burst mode utilizing the flash’s incremental read capabilities. +Thus, several bytes (= XIP_CACHE_BLOCK_SIZE) are read consecutively from the flash using a single read command.

+
+
+

The XIP cache is cleared when the XIP module is disabled (XIP_CTRL_EN = 0), when XIP mode is disabled +(XIP_CTRL_XIP_EN = 0) or when the CPU issues a fence(.i) instruction.

+
+
+

Register Map

+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 37. XIP Register Map (struct NEORV32_XIP)
AddressName [C]Bit(s), Name [C]R/WFunction

0xffffff40

CTRL

0 XIP_CTRL_EN

r/w

XIP module enable

3:1 XIP_CTRL_PRSC2 : XIP_CTRL_PRSC0

r/w

3-bit SPI clock prescaler select

4 XIP_CTRL_CPOL

r/w

SPI clock polarity

5 XIP_CTRL_CPHA

r/w

SPI clock phase

9:6 XIP_CTRL_SPI_NBYTES_MSB : XIP_CTRL_SPI_NBYTES_LSB

r/w

Number of bytes in SPI transaction (1..9)

10 XIP_CTRL_XIP_EN

r/w

XIP mode enable

12:11 XIP_CTRL_XIP_ABYTES_MSB : XIP_CTRL_XIP_ABYTES_LSB

r/w

Number of address bytes for XIP flash (minus 1)

20:13 XIP_CTRL_RD_CMD_MSB : XIP_CTRL_RD_CMD_LSB

r/w

Flash read command

21 XIP_CTRL_SPI_CSEN

r/w

Allow SPI chip-select to be actually asserted when set

22 XIP_CTRL_HIGHSPEED

r/w

enable SPI high-speed mode (ignoring XIP_CTRL_PRSCx)

26:23 XIP_CTRL_CDIV3 : XIP_CTRL_CDIV0

r/-

4-bit clock divider for fine-tuning

29:27 -

r/-

reserved, read as zero

30 XIP_CTRL_PHY_BUSY

r/-

SPI PHY busy when set

31 XIP_CTRL_XIP_BUSY

r/-

XIP access in progress when set

0xffffff44

reserved

31:0

r/-

reserved, read as zero

0xffffff48

DATA_LO

31:0

r/w

Direct SPI access - data register low

0xffffff4C

DATA_HI

31:0

-/w

Direct SPI access - data register high; write access triggers SPI transfer

+
+
+
+

2.7.26. System Configuration Information Memory (SYSINFO)

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Hardware source files:

neorv32_sysinfo.vhd

Software driver files:

neorv32_sysinfo.h

Top entity ports:

none

Configuration generics:

*

most of the top’s configuration generics

CPU interrupts:

none

Access restrictions:

privileged access only, non-32-bit write accesses are ignored

+
+

Overview

+
+
+

The SYSINFO allows the application software to determine the setting of most of the Processor Top Entity - Generics +that are related to processor/SoC configuration. All registers of this unit are read-only. +This device is always implemented - regardless of the actual hardware configuration. The bootloader as well +as the NEORV32 software runtime environment require information from this device (like memory layout +and default clock frequency) for correct operation.

+
+
+

Register Map

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 38. SYSINFO register map (struct NEORV32_SYSINFO)
AddressName [C]Function

0xfffffe00

CLK

clock frequency in Hz (via top’s CLOCK_FREQUENCY generic)

0xfffffe04

MEM[4]

internal memory configuration (see SYSINFO - Memory Configuration)

0xfffffe08

SOC

specific SoC configuration (see SYSINFO - SoC Configuration)

0xfffffe0c

CACHE

cache configuration information (see SYSINFO - Cache Configuration)

+
+
SYSINFO - Memory Configuration
+
+ + + + + +
+ + +Bit fields in this register are set to all-zero if the according cache is not implemented. +
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 39. SYSINFO MEM Bytes
ByteName [C]Function

0

SYSINFO_MEM_IMEM

log2(internal IMEM size in bytes), via top’s MEM_INT_IMEM_SIZE generic

1

SYSINFO_MEM_DMEM

log2(internal DMEM size in bytes), via top’s MEM_INT_DMEM_SIZE generic

2

-

reserved, read as zero

3

-

reserved, read as zero

+
+
+
SYSINFO - SoC Configuration
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 40. SYSINFO SOC Bits
BitName [C]Function

0

SYSINFO_SOC_BOOTLOADER

set if processor-internal bootloader is implemented (via top’s INT_BOOTLOADER_EN generic)

1

SYSINFO_SOC_XBUS

set if external Wishbone bus interface is implemented (via top’s XBUS_EN generic)

2

SYSINFO_SOC_MEM_INT_IMEM

set if processor-internal DMEM implemented (via top’s MEM_INT_DMEM_EN generic)

3

SYSINFO_SOC_MEM_INT_DMEM

set if processor-internal IMEM is implemented (via top’s MEM_INT_IMEM_EN generic)

4

SYSINFO_SOC_OCD

set if on-chip debugger is implemented (via top’s ON_CHIP_DEBUGGER_EN generic)

5

SYSINFO_SOC_ICACHE

set if processor-internal instruction cache is implemented (via top’s ICACHE_EN generic)

6

SYSINFO_SOC_DCACHE

set if processor-internal data cache is implemented (via top’s DCACHE_EN generic)

7

SYSINFO_SOC_CLOCK_GATING

set if CPU clock gating is implemented (via top’s CLOCK_GATING_EN generic)

8

SYSINFO_SOC_XBUS_CACHE

set if external bus interface cache is implemented (via top’s XBUS_CACHE_EN generic)

9

SYSINFO_SOC_XIP

set if XIP module is implemented (via top’s XIP_EN generic)

10

SYSINFO_SOC_XIP_CACHE

set if XIP cache is implemented (via top’s XIP_CACHE_EN generic)

13:11

-

reserved, read as zero

14

SYSINFO_SOC_IO_DMA

set if direct memory access controller is implemented (via top’s IO_DMA_EN generic)

15

SYSINFO_SOC_IO_GPIO

set if GPIO is implemented (via top’s IO_GPIO_EN generic)

16

SYSINFO_SOC_IO_MTIME

set if MTIME is implemented (via top’s IO_MTIME_EN generic)

17

SYSINFO_SOC_IO_UART0

set if primary UART0 is implemented (via top’s IO_UART0_EN generic)

18

SYSINFO_SOC_IO_SPI

set if SPI is implemented (via top’s IO_SPI_EN generic)

19

SYSINFO_SOC_IO_TWI

set if TWI is implemented (via top’s IO_TWI_EN generic)

20

SYSINFO_SOC_IO_PWM

set if PWM is implemented (via top’s IO_PWM_NUM_CH generic)

21

SYSINFO_SOC_IO_WDT

set if WDT is implemented (via top’s IO_WDT_EN generic)

22

SYSINFO_SOC_IO_CFS

set if custom functions subsystem is implemented (via top’s IO_CFS_EN generic)

23

SYSINFO_SOC_IO_TRNG

set if TRNG is implemented (via top’s IO_TRNG_EN generic)

24

SYSINFO_SOC_IO_SDI

set if SDI is implemented (via top’s IO_SDI_EN generic)

25

SYSINFO_SOC_IO_UART1

set if secondary UART1 is implemented (via top’s IO_UART1_EN generic)

26

SYSINFO_SOC_IO_NEOLED

set if NEOLED is implemented (via top’s IO_NEOLED_EN generic)

27

SYSINFO_SOC_IO_XIRQ

set if XIRQ is implemented (via top’s XIRQ_NUM_CH generic)

28

SYSINFO_SOC_IO_GPTMR

set if GPTMR is implemented (via top’s IO_GPTMR_EN generic)

29

SYSINFO_SOC_IO_SLINK

set if stream link interface is implemented (via top’s IO_SLINK_EN generic)

30

SYSINFO_SOC_IO_ONEWIRE

set if ONEWIRE interface is implemented (via top’s IO_ONEWIRE_EN generic)

31

SYSINFO_SOC_IO_CRC

set if cyclic redundancy check unit is implemented (via top’s IO_CRC_EN generic)

+
+
+
SYSINFO - Cache Configuration
+
+ + + + + +
+ + +Bit fields in this register are set to all-zero if the according cache is not implemented. +
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 41. SYSINFO CACHE Bits
BitName [C]Function

3:0

SYSINFO_CACHE_INST_BLOCK_SIZE_3 : SYSINFO_CACHE_INST_BLOCK_SIZE_0

log2(i-cache block size in bytes), via top’s ICACHE_BLOCK_SIZE generic

7:4

SYSINFO_CACHE_INST_NUM_BLOCKS_3 : SYSINFO_CACHE_INST_NUM_BLOCKS_0

log2(i-cache number of cache blocks), via top’s ICACHE_NUM_BLOCKS generic

11:8

SYSINFO_CACHE_DATA_BLOCK_SIZE_3 : SYSINFO_CACHE_DATA_BLOCK_SIZE_0

log2(d-cache block size in bytes), via top’s DCACHE_BLOCK_SIZE generic

15:12

SYSINFO_CACHE_DATA_NUM_BLOCKS_3 : SYSINFO_CACHE_DATA_NUM_BLOCKS_0

log2(d-cache number of cache blocks), via top’s DCACHE_NUM_BLOCKS generic

19:16

SYSINFO_CACHE_XIP_BLOCK_SIZE_3 : SYSINFO_CACHE_XIP_BLOCK_SIZE_0

log2(xip-cache block size in bytes), via top’s XIP_CACHE_BLOCK_SIZE generic

23:20

SYSINFO_CACHE_XIP_NUM_BLOCKS_3 : SYSINFO_CACHE_XIP_NUM_BLOCKS_0

log2(xip-cache number of cache blocks), via top’s XIP_CACHE_NUM_BLOCKS generic

27:24

SYSINFO_CACHE_XBUS_BLOCK_SIZE_3 : SYSINFO_CACHE_XBUS_BLOCK_SIZE_0

log2(xbus-cache block size in bytes), via top’s XBUS_CACHE_BLOCK_SIZE generic

31:28

SYSINFO_CACHE_XBUS_NUM_BLOCKS_3 : SYSINFO_CACHE_XBUS_NUM_BLOCKS_0

log2(xbus-cache number of cache blocks), via top’s XBUS_CACHE_NUM_BLOCKS generic

+
+
+
+
+
+
+

3. NEORV32 Central Processing Unit (CPU)

+
+
+

The NEORV32 CPU is an area-optimized RISC-V core implementing the rv32i_zicsr_zifencei base (privileged) ISA and +supporting several additional/optional ISA extensions. The CPU’s micro architecture is based on a von-Neumann +machine build upon a mixture of multi-cycle and pipelined execution schemes.

+
+
+ + + + + +
+ + +This chapter assumes that the reader is familiar with the official +RISC-V User and Privileged Architecture specifications. +
+
+
+

Section Structure

+
+ +
+

3.1. RISC-V Compatibility

+
+

The NEORV32 CPU passes the tests of the official RISCOF RISC-V Architecture Test Framework. This framework is used to check +RISC-V implementations for compatibility to the official RISC-V user/privileged ISA specifications. The NEORV32 port of this +test framework is available in a separate repository at GitHub: https://github.com/stnolting/neorv32-riscof

+
+
+ + + + + +
+ + +
Unsupported ISA Extensions
+Executing instructions or accessing CSRs from yet unsupported ISA extensions will raise an illegal +instruction exception (see section Full Virtualization). +
+
+
+

Incompatibility Issues and Limitations

+
+
+ + + + + +
+ + +
time[h] CSRs (Wall Clock Time)
+The NEORV32 does not implement the time[h] registers. Any access to these registers will trap. It is +recommended that the trap handler software provides a means of accessing the platform-defined Machine System Timer (MTIME). +
+
+
+ + + + + +
+ + +
No Hardware Support of Misaligned Memory Accesses
+The CPU does not support resolving unaligned memory access by the hardware (this is not a +RISC-V-incompatibility issue but an important thing to know!). Any kind of unaligned memory access +will raise an exception to allow a software-based emulation provided by the application. However, unaligned memory +access can be emulated using the NEORV32 runtime environment. See section Application Context Handling +for more information. +
+
+
+ + + + + +
+ + +
No Atomic Read-Modify-Write Operations
+The NEORV32 A ISA Extension only supports the load-reservate (LR) and store-conditional (SR) instructions. +The remaining read-modify-write operations are not supported. However, these missing instructions can +be emulated. The NEORV32 Core Libraries provide an emulation wrapper for the missing AMO/read-modify-write +instructions that is based on LR/SC pairs. A demo/program can be found in sw/example/atomic_test. +
+
+
+
+
+

3.2. CPU Top Entity - Signals

+
+

The following table shows all interface signals of the CPU top entity rtl/core/neorv32_cpu.vhd. The +type of all signals is std_ulogic or std_ulogic_vector, respectively. The "Dir." column shows the signal +direction as seen from the CPU.

+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 42. NEORV32 CPU Signal List
SignalWidth/TypeDirDescription

Global Signals

clk_i

1

in

Global clock line, all registers triggering on rising edge, this clock can be switched off during Sleep Mode

clk_aux_i

1

in

Always-on clock, used to keep the the sleep control active when clk_i is switched off

rstn_i

1

in

Global reset, low-active

sleep_o

1

out

CPU is in Sleep Mode when set

debug_o

1

out

CPU is in debug mode when set

Interrupts (Traps, Exceptions and Interrupts)

msi_i

1

in

RISC-V machine software interrupt

mei_i

1

in

RISC-V machine external interrupt

mti_i

1

in

RISC-V machine timer interrupt

firq_i

16

in

Custom fast interrupt request signals

dbi_i

1

in

Request CPU to halt and enter debug mode (RISC-V On-Chip Debugger (OCD))

Instruction Bus Interface

ibus_req_o

bus_req_t

out

Instruction fetch bus request

ibus_rsp_i

bus_rsp_t

in

Instruction fetch bus response

Data Bus Interface

dbus_req_o

bus_req_t

out

Data access (load/store) bus request

dbus_rsp_i

bus_rsp_t

in

Data access (load/store) bus response

+
+ + + + + +
+ + +
Bus Interface Protocol
+See section Bus Interface for the instruction fetch and data access interface protocol and the +according interface types (bus_req_t and bus_rsp_t). +
+
+
+
+
+

3.3. CPU Top Entity - Generics

+
+

Most of the CPU configuration generics are a subset of the actual Processor configuration generics +(see section Processor Top Entity - Generics). and are not listed here. However, the CPU provides +some specific generics that are used to configure the CPU for the NEORV32 processor setup. These generics +are assigned by the processor setup only and are not available for user defined configuration. +The specific generics are listed below.

+
+
+ + + + + +
+ + +
Table Abbreviations
+The generic type "suv(x:y)" defines a std_ulogic_vector(x downto y). +
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 43. NEORV32 CPU-Exclusive Generic List
NameTypeDescription

VENDOR_ID

suv(31:0)

Value for the mvendorid CSR.

CPU_BOOT_ADDR

suv(31:0)

CPU reset address. See section Address Space.

CPU_DEBUG_PARK_ADDR

suv(31:0)

"Park loop" entry address for the On-Chip Debugger (OCD), has to be 4-byte aligned.

CPU_DEBUG_EXC_ADDR

suv(31:0)

"Exception" entry address for the On-Chip Debugger (OCD), has to be 4-byte aligned.

CPU_EXTENSION_RISCV_Sdext

boolean

Implement RISC-V-compatible "debug" CPU operation mode required for the On-Chip Debugger (OCD).

CPU_EXTENSION_RISCV_Sdtrig

boolean

Implement RISC-V-compatible trigger module. See section On-Chip Debugger (OCD).

CPU_EXTENSION_RISCV_Smpmp

boolean

Implement RISC-V-compatible physical memory protection (PMP). See section Smpmp ISA Extension.

+
+
+
+

3.4. Architecture

+
+
+neorv32 cpu +
+
+
+

The CPU implements a pipelined multi-cycle architecture: each instruction is executed as a series of consecutive +micro-operations. In order to increase performance, the CPU’s front-end (instruction fetch) and back-end +(instruction execution) are de-couples via a FIFO (the instruction prefetch buffer. Thus, the front-end can already +fetch new instructions while the back-end is still processing the previously-fetched instructions.

+
+
+

Basically, the CPU’s micro architecture is somewhere between a classical pipelined architecture, where each stage +requires exactly one processing cycle (if not stalled) and a classical multi-cycle architecture, which executes +every single instruction (including fetch) in a series of consecutive micro-operations. The combination of these +two design paradigms allows an increased instruction execution in contrast to a pure multi-cycle approach (due to +overlapping operation of fetch and execute) at a reduced hardware footprint (due to the multi-cycle concept).

+
+
+

As a Von-Neumann machine, the CPU provides independent interfaces for instruction fetch and data access. However, +these two bus interfaces are merged into a single processor-internal bus via a prioritizing bus switch (data accesses +have higher priority). Hence, all memory addresses including peripheral devices are mapped to a single unified 32-bit +Address Space.

+
+
+ + + + + +
+ + +The CPU does not perform any speculative/out-of-order operations at all. Hence, it is not vulnerable to security issues +caused by speculative execution (like Spectre or Meltdown). +
+
+
+

3.4.1. CPU Register File

+
+

The data register file contains the general purpose architecture registers x0 to x31. For the rv32e ISA only the lower +16 registers are implemented. Register zero (x0/zero) always read as zero and any write access to it has no effect. +Up to four individual synchronous read ports allow to fetch up to 4 register operands at once. The write and read accesses +are mutually exclusive as they happen in separate cycles. Hence, there is no need to consider things like "read-during-write" +behavior.

+
+
+

The register file provides two different implementation options configured via the top’s REGFILE_HW_RST generic.

+
+
+
    +
  • +

    REGFILE_HW_RST = false (default): In this configuration the register file is implemented as plain memory array without a +dictated hardware reset. This architecture allows to infer FPGA block RAM for the entire register file resulting in minimal +logic utilization and optimal timing.

    +
  • +
  • +

    REGFILE_HW_RST = true: This configuration is based on individual FFs that do provide a dedicated hardware reset. +Hence, the register cannot be mapped to FPGA block RAM. This optional should only be selected if the application requires a +reset of the register file (e.g. for security reasons) or if the design shall be synthesized for an ASIC implementation.

    +
  • +
+
+
+

The state of this configuration generic can be checked by software via the mxisa CSR.

+
+
+ + + + + +
+ + +
FPGA Implementation
+Enabling the REGFILE_HW_RST option for FPGA implementation is not recommended as this will massively increase the amount +of required logic resources. +
+
+
+ + + + + +
+ + +
Implementation of the zero Register within FPGA Block RAM
+Register zero is also mapped to a physical memory location within the register file’s block RAM. By this, there is no need +to add a further multiplexer to "insert" zero if reading from register zero reducing logic requirements and shortening the +critical path. However, this also requires that the physical storage bits of register zero are explicitly initialized (set +to zero) by the hardware. This is done transparently by the CPU control requiring no additional processing overhead. +
+
+
+ + + + + +
+ + +
Block RAM Ports
+The default register file configuration uses two access ports: a read-only port for reading register rs2 (second source operand) +and a read/write port for reading register rs1 (first source operand) and for writing processing results to register rd +(destination register). Hence, a simple dual-port RAM can be used to implement the entire register file. From a functional point +of view, read and write accesses to the register file do never occur in the same clock cycle, so no bypass logic is required at all. +
+
+
+
+

3.4.2. CPU Arithmetic Logic Unit

+
+

The arithmetic/logic unit (ALU) is used for actual data processing as well as generating memory and branch addresses. +All "simple" I ISA Extension computational instructions (like add and or) are implemented as plain combinatorial logic +requiring only a single cycle to complete. More sophisticated instructions like shift operations or multiplications are processed +by so-called "ALU co-processors".

+
+
+

The co-processors are implemented as iterative units that require several cycles to complete processing. Besides the base ISA’s +shift instructions, the co-processors are used to implement all further processing-based ISA extensions (e.g. M ISA Extension +and B ISA Extension).

+
+
+ + + + + +
+ + +
Multi-Cycle Execution Monitor
+The CPU control will raise an illegal instruction exception if a multi-cycle functional unit (like the Custom Functions Unit (CFU)) +does not complete processing in a bound amount of time (configured via the package’s monitor_mc_tmo_c constant; default = 512 clock cycles). +
+
+
+ + + + + +
+ + +
Tuning Options
+The ALU architecture can be tuned for an application-specific area-vs-performance trade-off. The FAST_MUL_EN and FAST_SHIFT_EN +generics can be used to implement performance-optimized barrel shifters and DSP blocks, respectively. See sections I ISA Extension, +B ISA Extension and M ISA Extension for specific examples. +
+
+
+
+

3.4.3. CPU Bus Unit

+
+

The bus unit takes care of handling data memory accesses via load and store instructions. It handles data adjustment when accessing +sub-word data quantities (16-bit or 8-bit) and performs sign-extension for singed load operations. The bus unit also includes the optional +Smpmp ISA Extension that performs permission checks for all data and instruction accesses.

+
+
+

A list of the bus interface signals and a detailed description of the protocol can be found in section Bus Interface. +All bus interface signals are driven/buffered by registers; so even a complex SoC interconnection bus network will not +effect maximal operation frequency.

+
+
+ + + + + +
+ + +
Unaligned Accesses
+The CPU does not support a hardware-based handling of unaligned memory accesses! Any unaligned access will raise a bus load/store unaligned +address exception. The exception handler can be used to emulate unaligned memory accesses in software. +See the NEORV32 Runtime Environment’s Application Context Handling section for more information. +
+
+
+
+

3.4.4. CPU Control Unit

+
+

The CPU control unit is responsible for generating all the control signals for the different CPU modules. +The control unit is split into a "front-end" and a "back-end".

+
+
+

Front-End

+
+
+

The front-end is responsible for fetching instructions in chunks of 32-bits. This can be a single aligned 32-bit instruction, +two aligned 16-bit instructions or a mixture of those. The instructions including control and exception information are stored +to a FIFO queue - the instruction prefetch buffer (IPB). This FIFO has a depth of two entries by default but can be customized +via the ipb_depth_c VHDL package constant.

+
+
+

The FIFO allows the front-end to do "speculative" instruction fetches, as it keeps fetching the next consecutive instruction +all the time. This also allows to decouple front-end (instruction fetch) and back-end (instruction execution) so both modules +can operate in parallel to increase performance. However, all potential side effects that are caused by this "speculative" +instruction fetch are already handled by the CPU front-end ensuring a defined execution stage while preventing security +side attacks.

+
+
+

Back-End

+
+
+

Instruction data from the instruction prefetch buffer is decompressed (if the C ISA extension is enabled) and sent to the +CPU back-end for actual execution. Execution is conducted by a state-machine that controls all of the CPU modules. The back-end also +includes the Control and Status Registers (CSRs) as well as the trap controller.

+
+
+
+

3.4.5. Sleep Mode

+
+

The NEORV32 CPU provides a single sleep mode that can be entered to power-down the core reducing +dynamic power consumption. Sleep mode is entered by executing the wfi ("wait for interrupt") instruction.

+
+
+ + + + + +
+ + +The wfi instruction will raise an illegal instruction exception when executed in user-mode +if TW in mstatus is set. When executed in debug-mode or during single-stepping wfi will behave as +simple nop without entering sleep mode. +
+
+
+

After executing the wfi instruction the CPU’s sleep_o signal (CPU Top Entity - Signals) will become set +as soon as the CPU has fully halted ("CPU is sleeping"):

+
+
+
There is no enabled interrupt being pending.
+

CPU-external modules like memories, timers and peripheral interfaces are not affected by this. Furthermore, the CPU will +continue to buffer/enqueue incoming interrupt. The CPU will leave sleep mode as soon as any enabled interrupt (via mie) +source becomes pending or if a debug session is started.

+
+
+
Power-Down Mode
+
+

Optionally, the sleep mode can also be used to shut down the CPU’s main clock to further reduce power consumption +by halting the core’s clock tree. This clock gating mode is enabled by the CLOCK_GATING_EN generic +(Processor Top Entity - Generics). See section Processor Clocking for more information.

+
+
+
+
+

3.4.6. Full Virtualization

+
+

Just like the RISC-V ISA, the NEORV32 aims to provide maximum virtualization capabilities on CPU and SoC level to +allow a high standard of execution safety. The CPU supports all traps specified by the official RISC-V +specifications. Thus, the CPU provides defined hardware fall-backs via traps for any expected and unexpected situations +(e.g. executing a malformed or not supported instruction or accessing a non-allocated memory address). For any kind +of trap the core is always in a defined and fully synchronized state throughout the whole system (i.e. there are no +out-of-order operations that might have to be reverted). This allows a defined and predictable execution behavior +at any time improving overall execution safety.

+
+
+
+
+
+

3.5. Bus Interface

+
+

The NEORV32 CPU provides separated instruction fetch and data access interfaces making it a Harvard Architecture: +the instruction fetch interface (i_bus_* signals) is used for fetching instructions and the data access interface +(d_bus_* signals) is used to access data via load and store operations. Each of these interfaces can access an address +space of up to 232 bytes (4GB).

+
+
+

The bus interface uses two custom interface types: bus_req_t is used to propagate the bus access requests. These +signals are driven by the accessing device (i.e. the CPU core). bus_rsp_t is used to return the bus response and +is driven by the accessed device or bus system (i.e. a processor-internal memory or IO device).

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 44. Bus Interface - Request Bus (bus_req_t)
SignalWidthDescription

addr

32

Access address (byte addressing)

data

32

Write data

ben

4

Byte-enable for each byte in data

stb

1

Request trigger ("strobe", single-shot)

rw

1

Access direction (0 = read, 1 = write)

src

1

Access source (0 = instruction fetch, 1 = load/store)

priv

1

Set if privileged (M-mode) access

rvso

1

Set if current access is a reservation-set operation (atomic lr or sc instruction)

fence

1

Data/instruction fence operation; valid without stb being set

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 45. Bus Interface - Response Bus (bus_rsp_t)
SignalWidthDescription

data

32

Read data (single-shot)

ack

1

Transfer acknowledge / success (single-shot)

err

1

Transfer error / fail (single-shot)

+
+

3.5.1. Bus Interface Protocol

+
+

Transactions are triggered entirely by the request bus. A new bus request is initiated by setting the strobe +signal stb high for exactly one cycle. All remaining signals of the bus are set together with stb and will +remain unchanged until the transaction is completed.

+
+
+

The transaction is completed when the accessed device returns a response via the response interface: +ack is high for exactly one cycle if the transaction was completed successfully. err is high for exactly +one cycle if the transaction failed to complete. These two signals are mutually exclusive. In case of a read +access the read data is returned together with the ack signal. Otherwise, the return data signal is +kept at all-zero allowing wired-or interconnection of all response buses.

+
+
+

The figure below shows three exemplary bus accesses:

+
+
+
    +
  1. +

    A read access to address A_addr returning rdata after several cycles (slow response; ACK arrives after several cycles).

    +
  2. +
  3. +

    A write access to address B_addr writing wdata (fastest response; ACK arrives right in the next cycle).

    +
  4. +
  5. +

    A failing read access to address C_addr (slow response; ERR arrives after several cycles).

    +
  6. +
+
+
+
+700 +
+
Figure 9. Three Exemplary Bus Transactions
+
+
+ + + + + +
+ + +
Adding Register Stages
+Arbitrary pipeline stages can be added to the request and response buses at any point to relax timing (at the cost of +additional latency). However, all bus signals (request and response) need to be registered. +
+
+
+
+

3.5.2. Atomic Accesses

+
+

The load-reservate (lr.w) and store-conditional (sc.w) instructions from the A ISA Extension execute as standard +load/store bus transactions but with the rvso ("reservation set operation") signal being set. It is the task of the +Reservation Set Controller to handle these LR/SC bus transactions accordingly. Note that these reservation set operations +are intended for processor-internal usage only (i.e. the reservation state is not available for processor-external modules yet).

+
+
+ + + + + +
+ + +
Reservation Set Controller
+See section Address Space / Reservation Set Controller for more information. +
+
+
+ + + + + +
+ + +
Read-Modify-Write Operations
+Read-modify-write operations (like an atomic swap / amoswap.w) are not supported yet. However, the NEORV32 +Core Libraries provide an emulation wrapper for those unsupported instructions that is +based on LR/SC pairs. A demo/program can be found in sw/example/atomic_test. +
+
+
+

The figure below shows three exemplary bus accesses (1 to 3 from left to right). The req signal record represents +the CPU-side of the bus interface. For easier understanding the current state of the reservation set is added as rvs_valid signal.

+
+
+
    +
  1. +

    A load-reservate (LR) instruction using addr as address. This instruction returns the loaded data rdata via rsp.data +and also registers a reservation for the address addr (rvs_valid becomes set).

    +
  2. +
  3. +

    A store-conditional (SC) instruction attempts to write wdata1 to address addr. This SC operation succeeds, so +wdata1 is actually written to address addr. The successful operation is indicated by a 0 being returned via +rsp.data together with ack. As the LR/SC is completed the registered reservation is invalidated (rvs_valid becomes cleared).

    +
  4. +
  5. +

    Another store-conditional (SC) instruction attempts to write wdata2 to address addr. As the reservation set is already +invalidated (rvs_valid is 0) the store access fails, so wdata2 is not written to address addr at all. The failed +operation is indicated by a 1 being returned via rsp.data together with ack.

    +
  6. +
+
+
+
+700 +
+
Figure 10. Three Exemplary LR/SC Bus Transactions
+
+
+ + + + + +
+ + +
SC Status
+The "normal" load data mechanism is used to return success/failure of the sc.w instruction to the CPU (via the LSB of rsp.data). +
+
+
+
+
+
+

3.6. Instruction Sets and Extensions

+
+

The NEORV32 CPU provides several optional RISC-V and custom ISA extensions. The extensions can be enabled/configured +via the according Processor Top Entity - Generics. This chapter gives a brief overview of the different ISA extensions.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 46. NEORV32 Instruction Set Extensions
NameDescriptionEnabled by Generic

A

Atomic memory access instructions

CPU_EXTENSION_RISCV_A

B

Bit-manipulation instructions

CPU_EXTENSION_RISCV_B

C

Compressed (16-bit) instructions

CPU_EXTENSION_RISCV_C

E

Embedded CPU extension (reduced register file size)

CPU_EXTENSION_RISCV_E

I

Integer base ISA

Enabled if CPU_EXTENSION_RISCV_E is not enabled

M

Integer multiplication and division instructions

CPU_EXTENSION_RISCV_M

U

Less-privileged user mode extension

CPU_EXTENSION_RISCV_U

X

Platform-specific / NEORV32-specific extension

Always enabled

Zifencei

Instruction stream synchronization instruction

Always enabled

Zfinx

Floating-point instructions using integer registers

CPU_EXTENSION_RISCV_Zfinx

Zicntr

Base counters extension

CPU_EXTENSION_RISCV_Zicntr

Zicond

Integer conditional operations

CPU_EXTENSION_RISCV_Zicond

Zicsr

Control and status register access instructions

Always enabled

Zihpm

Hardware performance monitors extension

CPU_EXTENSION_RISCV_Zihpm

Zmmul

Integer multiplication-only instruction

CPU_EXTENSION_RISCV_Zmmul

Zcfu

Custom / user-defined instructions

CPU_EXTENSION_RISCV_Zxcfu

Smpmp

Physical memory protection (PMP) extension

CPU_EXTENSION_RISCV_Smpmp

Sdext

External debug support extension

ON_CHIP_DEBUGGER_EN

Sdtrig

Trigger module extension

ON_CHIP_DEBUGGER_EN

+
+ + + + + +
+ + +
RISC-V ISA Specifications
+For more information regarding the RISC-V ISA extensions please refer to the "RISC-V Instruction Set Manual - Volume +I: Unprivileged ISA" and "The RISC-V Instruction Set Manual Volume II: Privileged Architecture" Acopy of all currently +implemented ISA extensions can be found in the projects docs/references folder. +
+
+
+ + + + + +
+ + +
Discovering ISA Extensions
+Software can discover available ISA extensions via the misa and mxisa CSRs or by executing an instruction +and checking for an illegal instruction exception (i.e. Full Virtualization). +
+
+
+ + + + + +
+ + +
Instruction Cycles
+This chapter shows the CPI values (cycles per instruction) for each individual instruction/type. Note that +values reflect optimal conditions (i.e. not additional memory delay, no cache misses, no pipeline waits, etc.). +To benchmark a certain processor configuration for its setup-specific CPI value please refer to the +sw/example/performance_tests test programs. +
+
+
+

3.6.1. A ISA Extension

+
+

The A ISA extension adds instructions and mechanisms for atomic memory access operations. Note that the NEORV32 A +only includes the load-reservate (lr.w) and store-conditional (sc.w) instructions - the remaining read-modify-write +instructions (like amoswap) are not supported. However, these missing instructions can be emulated using the +LR and SC operations (quote from the RISC-V spec.: "Any AMO can be emulated by an LR/SC pair.").

+
+
+ + + + + +
+ + +
AMO Emulation
+The NEORV32 Core Libraries provide an emulation wrapper for the missing AMO/read-modify-write instructions that is +based on LR/SC pairs. A demo/program can be found in sw/example/atomic_test. +
+
+
+

Atomic instructions allow to notify an application if a certain memory location has been altered by another instance +(like another process running on the same CPU or a DMA access). Hence, they can be used to implement synchronization +mechanisms like mutexes and semaphores).

+
+
+

The NEORV32 A extension is enabled via the CPU_EXTENSION_RISCV_A generic (see Processor Top Entity - Generics). +When enabled the following additional instructions are available.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 47. Instructions and Timing
ClassInstructionsExecution cycles

Load-reservate word

lr.w

5

Store-conditional word

sc.w

5

+
+

The lr.w instructions stores one word to a word-aligned address and registers a reservation set. The sc.w +instruction stores a word to a word-aligned address only if the reservation set is still valid. Furthermore, the +sc.w operations returns the state of the reservation set (0 = reservation set still valid, data has been written; +1 = reservation set was broken, no data has been written). The reservation set is invalidated if another lr.w instruction +is executed or if any write access to the reservated address takes place. Traps and/or CPU privilege level changes +do not modify current reservation sets.

+
+
+ + + + + +
+ + +
aq and rl Bits
+The instruction word’s aq and lr memory ordering bits are not evaluated by the hardware at all. +
+
+
+ + + + + +
+ + +
Atomic Memory Access on Hardware Level
+More information regarding the atomic memory accesses and the according reservation +sets can be found in section Reservation Set Controller. +
+
+
+ + + + + +
+ + +
Cache Coherency
+Atomic operations always bypass the CPU caches using direct/uncached accesses. Care must be taken +to maintain data cache coherency (e.g. by using the fence instruction). +
+
+
+
+

3.6.2. B ISA Extension

+
+

The B ISA extension adds instructions for bit-manipulation operations. +This ISA extension is implemented as multi-cycle ALU co-process (rtl/core/neorv32_cpu_cp_bitmanip.vhd). +The NEORV32 B ISA extension includes the following sub-extensions:

+
+
+
    +
  • +

    Zba - Address-generation instructions

    +
  • +
  • +

    Zbb - Basic bit-manipulation instructions

    +
  • +
  • +

    Zbs - Single-bit instructions

    +
  • +
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 48. Instructions and Timing
ClassInstructionsExecution cycles

Arithmetic/logic

min[u] max[u] sext.b sext.h andn orn xnor zext(pack) rev8(grevi) orc.b(gorci)

4

Shifts

clz ctz

3 + 1..32; FAST_SHIFT: 4

Shifts

cpop

36; FAST_SHIFT: 4

Shifts

rol ror[i]

4 + shift_amount; FAST_SHIFT: 4

Shifted-add

sh1add sh2add sh3add

4

Single-bit

sbset[i] sbclr[i] sbinv[i] sbext[i]

4

+
+ + + + + +
+ + +
Shift Operations
+Shift operations can be accelerated (at the cost of additional logic resources) by enabling the FAST_SHIFT_EN +configuration option that will replace the (time-variant) bit-serial shifter by a (time-constant) barrel shifter. +
+
+
+
+

3.6.3. C ISA Extension

+
+

The "compressed" ISA extension provides 16-bit encodings of commonly used instructions to reduce code space size.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 49. Instructions and Timing
ClassInstructionsExecution cycles

ALU

c.addi4spn c.nop c.add[i] c.li c.addi16sp c.lui c.and[i] c.sub c.xor c.or c.mv

2

ALU

c.srli c.srai c.slli

3 + 1..32; FAST_SHIFT: 4

Branches

c.beqz c.bnez

taken: 6; not taken: 3

Jumps / calls

c.jal[r] c.j c.jr

6

Memory access

c.lw c.sw c.lwsp c.swsp

4

System

c.break

3

+
+
+

3.6.4. E ISA Extension

+
+

The "embedded" ISA extensions reduces the size of the general purpose register file from 32 entries to 16 entries to +shrink hardware size. It provides the same instructions as the the base I ISA extensions.

+
+
+ + + + + +
+ + +Due to the reduced register file size an alternate toolchain ABI (ilp32e*) is required. +
+
+
+
+

3.6.5. I ISA Extension

+
+

The I ISA extensions is the base RISC-V integer ISA that is always enabled.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 50. Instructions and Timing
ClassInstructionsExecution cycles

ALU

add[i] slt[i] slt[i]u xor[i] or[i] and[i] sub lui auipc

2

ALU shifts

sll[i] srl[i] sra[i]

3 + 1..32; FAST_SHIFT: 4

Branches

beq bne blt bge bltu bgeu

taken: 6; not taken: 3

Jump/call

jal[r]

6

Load/store

lb lh lw lbu lhu sb sh sw

5

System

ecall ebreak

3

Data fence

fence

5

System

wfi

3

System

mret

5

Illegal inst.

-

3

+
+ + + + + +
+ + +
fence Instruction
+The fence instruction word’s predecessor and successor bits (used for memory ordering) are not evaluated +by the hardware at all. For the NEORV32 the fence instruction behaves exactly like the fence.i instruction +(see Zifencei ISA Extension). However, software should still use distinct fence and fence.i to provide +platform-compatibility and to indicate the actual intention of the according fence instruction(s). +
+
+
+ + + + + +
+ + +
wfi Instruction
+The wfi instruction is used to enter Sleep Mode. Executing the wfi instruction in user-mode +will raise an illegal instruction exception if the TW bit of mstatus is set. +
+
+
+ + + + + +
+ + +
Barrel Shifter
+The shift operations are implemented as multi-cycle ALU co-process (rtl/core/neorv32_cpu_cp_shifter.vhd). +These operations can be accelerated (at the cost of additional logic resources) by enabling the FAST_SHIFT_EN +configuration option that will replace the (time-variant) bit-serial shifter by a (time-constant) barrel shifter. +
+
+
+
+

3.6.6. M ISA Extension

+
+

Hardware-accelerated integer multiplication and division operations are available via the RISC-V M ISA extension. +This ISA extension is implemented as multi-cycle ALU co-process (rtl/core/neorv32_cpu_cp_muldiv.vhd).

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 51. Instructions and Timing
ClassInstructionsExecution cycles

Multiplication

mul mulh mulhsu mulhu

36; FAST_MUL: 4

Division

div divu rem remu

36

+
+ + + + + +
+ + +
DSP Blocks
+Multiplication operations can be accelerated (at the cost of additional logic resources) by enabling the FAST_MUL_EN +configuration option that will replace the (time-variant) bit-serial multiplier by (time-constant) FPGA DSP blocks. +
+
+
+
+

3.6.7. U ISA Extension

+
+

In addition to the highest-privileged machine-mode, the user-mode ISA extensions adds a second less-privileged +operation mode. Code executed in user-mode has reduced CSR access rights. Furthermore, user-mode accesses to the address space +(like peripheral/IO devices) can be constrained via the physical memory protection. +Any kind of privilege rights violation will raise an exception to allow Full Virtualization.

+
+
+
+

3.6.8. X ISA Extension

+
+

The NEORV32-specific ISA extensions X is always enabled. The most important points of the NEORV32-specific extensions are: +* The CPU provides 16 fast interrupt interrupts (FIRQ), which are controlled via custom bits in the mie +and mip CSRs. These extensions are mapped to CSR bits, that are available for custom use according to the +RISC-V specs. Also, custom trap codes for mcause are implemented. +* All undefined/unimplemented/malformed/illegal instructions do raise an illegal instruction exception (see Full Virtualization). +* There are NEORV32-Specific CSRs.

+
+
+
+

3.6.9. Zifencei ISA Extension

+
+

The Zifencei CPU extension allows manual synchronization of the instruction stream. This extension is always enabled.

+
+
+ + + + + +
+ + +
NEORV32 Fence Instructions
+The NEORV32 treats both fence instructions (fence = data fence, fence.i = instruction fence) in exactly the same way. +Both instructions cause a flush of the CPU’s instruction prefetch buffer and also send a fence request via the system +bus (see Bus Interface). This system bus fence operation will, for example, clear/flush all downstream caches. +
+
+ + +++++ + + + + + + + + + + + + + + +
Table 52. Instructions and Timing
ClassInstructionsExecution cycles

Instruction fence

fence.i

5

+
+
+

3.6.10. Zfinx ISA Extension

+
+

The Zfinx floating-point extension is an alternative of the standard F floating-point ISA extension. +It also uses the integer register file x to store and operate on floating-point data +instead of a dedicated floating-point register file. Thus, the Zfinx extension requires +less hardware resources and features faster context changes. This also implies that there are NO dedicated f +register file-related load/store or move instructions. The Zfinx extension’S floating-point unit is controlled +via dedicated Floating-Point CSRs. +This ISA extension is implemented as multi-cycle ALU co-process (rtl/core/neorv32_cpu_cp_fpu.vhd).

+
+
+ + + + + +
+ + +
Fused / Multiply-Add Instructions
+Fused multiply-add instructions f[n]m[add/sub].s are not supported. A special GCC switch is used to prevent the +compiler from emitting contracted/fused floating-point operations (see Default Compiler Flags). +
+
+
+ + + + + +
+ + +
Division and Squarer Root Instructions
+Division fdiv.s and square root fsqrt.s instructions are not supported yet. +
+
+
+ + + + + +
+ + +
Subnormal Number
+Subnormal numbers ("de-normalized" numbers, i.e. exponent = 0) are not supported by the NEORV32 FPU. +Subnormal numbers are flushed to zero setting them to +/- 0 before being processed by any FPU operation. +If a computational instruction generates a subnormal result it is also flushed to zero during normalization. +
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 53. Instructions and Timing
ClassInstructionsExecution cycles

Artihmetic

fadd.s

110

Artihmetic

fsub.s

112

Artihmetic

fmul.s

22

Compare

fmin.s fmax.s feq.s flt.s fle.s

13

Conversion

fcvt.w.s fcvt.wu.s fcvt.s.w fcvt.s.wu

48

Misc

fsgnj.s fsgnjn.s fsgnjx.s fclass.s

12

+
+
+

3.6.11. Zicntr ISA Extension

+
+

The Zicntr ISA extension adds the basic cycle[h], mcycle[h], instret[h] and minstret[h] +counter CSRs. Section (Machine) Counter and Timer CSRs shows a list of all Zicntr-related CSRs.

+
+
+ + + + + +
+ + +The user-mode time[h] CSRs are not implemented. Any access will trap allowing the trap handler to +retrieve system time from the Machine System Timer (MTIME). +
+
+
+ + + + + +
+ + +This extensions is stated as mandatory by the RISC-V spec. However, area-constrained setups may remove +support for these counters. +
+
+
+
+

3.6.12. Zicond ISA Extension

+
+

The Zicond ISA extension adds integer conditional move primitives that allow to implement branch-less +control flows. It is enabled by the top’s CPU_EXTENSION_RISCV_Zicond generic. +This ISA extension is implemented as multi-cycle ALU co-process (rtl/core/neorv32_cpu_cp_cond.vhd).

+
+ + +++++ + + + + + + + + + + + + + + +
Table 54. Instructions and Timing
ClassInstructionsExecution cycles

Conditional

czero.eqz czero.nez

3

+
+
+

3.6.13. Zicsr ISA Extension

+
+

This ISA extensions provides instructions for accessing the Control and Status Registers (CSRs) as well as further +privileged-architecture extensions. This extension is mandatory and cannot be disabled. Hence, there is no generic +for enabling/disabling this ISA extension.

+
+
+ + + + + +
+ + +If rd=x0 for the csrrw[i] instructions there will be no actual read access to the according CSR. +However, access privileges are still enforced so these instruction variants do cause side-effects +(the RISC-V spec. state that these combinations "shall" not cause any side-effects). +
+
+ + +++++ + + + + + + + + + + + + + + +
Table 55. Instructions and Timing
ClassInstructionsExecution cycles

System

csrrw[i] csrrs[i] csrrc[i]

3

+
+
+

3.6.14. Zihpm ISA Extension

+
+

In additions to the base counters the NEORV32 CPU provides up to 13 hardware performance monitors (HPM 3..15), +which can be used to benchmark applications. Each HPM consists of an N-bit wide counter (split in a high-word 32-bit +CSR and a low-word 32-bit CSR), where N is defined via the top’s +HPM_CNT_WIDTH generic and a corresponding event configuration CSR. The event configuration +CSR defines the architectural events that lead to an increment of the associated HPM counter. See section +Hardware Performance Monitors (HPM) CSRs for a list of all HPM-related CSRs and event configurations.

+
+
+ + + + + +
+ + +Auto-increment of the HPMs can be deactivated individually via the mcountinhibit CSR. +
+
+
+
+

3.6.15. Zmmul - ISA Extension

+
+

This is a sub-extension of the M ISA Extension ISA extension. It implements only the multiplication operations +of the M extensions and is intended for size-constrained setups that require hardware-based +integer multiplications but not hardware-based divisions, which will be computed entirely in software.

+
+
+
+

3.6.16. Zxcfu ISA Extension

+
+

The Zxcfu presents a NEORV32-specific ISA extension. It adds the Custom Functions Unit (CFU) to +the CPU core, which allows to add custom RISC-V instructions to the processor core. +For detailed information regarding the CFU, its hardware and the according software interface +see section Custom Functions Unit (CFU).

+
+
+

Software can utilize the custom instructions by using intrinsics, which are basically inline assembly functions that +behave like regular C functions but that evaluate to a single custom instruction word (no calling overhead at all).

+
+
+
+

3.6.17. Smpmp ISA Extension

+
+

The NEORV32 physical memory protection (PMP) provides an elementary memory +protection mechanism that can be used to constrain read, write and execute rights of arbitrary memory regions. +The NEORV32 PMP is fully compatible to the RISC-V Privileged Architecture Specifications. In general, the PMP can +grant permissions to user mode, which by default has none, and can revoke permissions from M-mode, which +by default has full permissions. The PMP is configured via the Machine Physical Memory Protection CSRs.

+
+
+

Several Processor Top Entity - Generics are provided to fine-tune the CPU’s PMP capabilities: +* PMP_NUM_REGIONS defines the number of implemented PMP region +* PMP_MIN_GRANULARITY defines the minimal granularity of each region +* PMP_TOR_MODE_EN controls the implementation of the top-of-region (TOR) mode +* PMP_NAP_MODE_EN controls the implementation of the naturally-aligned-power-of-two (NA4 and NAPOT) modes

+
+
+ + + + + +
+ + +
PMP Rules when in Debug Mode
+When in debug-mode all PMP rules are ignored making the debugger have maximum access rights. +
+
+
+ + + + + +
+ + +
Protected Instruction Fetches
+New instruction fetches are always triggered even when denied by a certain PMP rule. However, the fetched instruction(s) +will not be executed and will not change CPU core state. Instead, they will raise a bus exception when reaching the CPU’s +executions stage. +
+
+
+
+

3.6.18. Sdext ISA Extension

+
+

This ISA extension enables the RISC-V-compatible "external debug support" by implementing +the CPU "debug mode", which is required for the on-chip debugger. +See section On-Chip Debugger (OCD) / CPU Debug Mode for more information.

+
+ + +++++ + + + + + + + + + + + + + + +
Table 56. Instructions and Timing
ClassInstructionsExecution cycles

System

dret

5

+
+
+

3.6.19. Sdtrig ISA Extension

+
+

This ISA extension implements the RISC-V-compatible "trigger module". +See section On-Chip Debugger (OCD) / Trigger Module for more information.

+
+
+
+
+
+
+

3.7. Custom Functions Unit (CFU)

+
+

The Custom Functions Unit (CFU) is the central part of the NEORV32-specific Zxcfu ISA Extension and +represents the actual hardware module that can be used to implement custom RISC-V instructions.

+
+
+

The CFU is intended for operations that are inefficient in terms of performance, latency, energy consumption or +program memory requirements when implemented entirely in software. Some potential application fields and exemplary +use-cases might include:

+
+
+
    +
  • +

    AI: sub-word / vector / SIMD operations like processing all four bytes of a 32-bit data word in parallel

    +
  • +
  • +

    Cryptographic: bit substitution and permutation

    +
  • +
  • +

    Communication: conversions like binary to gray-code; multiply-add operations

    +
  • +
  • +

    Image processing: look-up-tables for color space transformations

    +
  • +
  • +

    implementing instructions from other RISC-V ISA extensions that are not yet supported by NEORV32

    +
  • +
+
+
+

The CFU is not intended for complex and CPU-independent functional units that implement complete accelerators +(like block-based AES encryption). These kind of accelerators should be implemented as memory-mapped +Custom Functions Subsystem (CFS). A comparison of all NEORV32-specific chip-internal hardware extension +options is provided in the user guide section +Adding Custom Hardware Modules.

+
+
+ + + + + +
+ + +
Default CFU Hardware Example
+The default CFU module (rtl/core/neorv32_cpu_cp_cfu.vhd) implements the Extended Tiny Encryption Algorithm (XTEA) +as "real world" application example. +
+
+
+

3.7.1. CFU Instruction Formats

+
+

The custom instructions executed by the CFU utilize a specific opcode space in the rv32 32-bit instruction +encoding space that has been explicitly reserved for user-defined extensions by the RISC-V specifications ("Guaranteed +Non-Standard Encoding Space"). The NEORV32 CFU uses the custom-* opcodes to identify the instructions implemented +by the CFU and to differentiate between the predefined instruction formats. The according binary encoding of these +opcodes is shown below:

+
+
+ +
+
+ + + + + +
+ + +The four presented instructions types/formats are predefined to allow an easy integration framework. +However, system designers are free to ignore those and use their own instruction types and formats. +
+
+
+
CFU R3-Type Instructions
+
+

The R3-type CFU instructions operate on two source registers rs1 and rs2 and return the processing result to +the destination register rd. The actual operation can be defined by using the funct7 and funct3 bit fields. +These immediates can also be used to pass additional data to the CFU like offsets, look-up-tables addresses or +shift-amounts. However, the actual functionality is entirely user-defined. Note that all immediate values are +always compile-time-static.

+
+
+

Example operation: rd ⇐ rs1 xnor rs2 (bit-wise XNOR)

+
+
+
+cfu r3type instruction +
+
Figure 11. CFU R3-type instruction format
+
+
+
    +
  • +

    funct7: 7-bit immediate (immediate data or function select)

    +
  • +
  • +

    rs2: address of second source register (32-bit source data)

    +
  • +
  • +

    rs1: address of first source register (32-bit source data)

    +
  • +
  • +

    funct3: 3-bit immediate (immediate data or function select)

    +
  • +
  • +

    rd: address of destination register (for the 32-bit processing result)

    +
  • +
  • +

    opcode: 0001011 (RISC-V "custom-0" opcode)

    +
  • +
+
+
+ + + + + +
+ + +
RISC-V compatibility
+The CFU R3-type instruction format is compliant to the RISC-V ISA specification. +
+
+
+ + + + + +
+ + +
Instruction encoding space
+By using the funct7 and funct3 bit fields entirely for selecting the actual operation a total of 1024 custom +R3-type instructions can be implemented (7-bit + 3-bit = 10 bit → 1024 different values). +
+
+
+
+
CFU R4-Type Instructions
+
+

The R4-type CFU instructions operate on three source registers rs1, rs2 and rs2 and return the processing +result to the destination register rd. The actual operation can be defined by using the funct3 bit field. +Alternatively, this immediate can also be used to pass additional data to the CFU like offsets, look-up-tables +addresses or shift-amounts. However, the actual functionality is entirely user-defined. Note that all immediate +values are always compile-time-static.

+
+
+

Example operation: rd ⇐ (rs1 * rs2 + rs3)[31:0] (multiply-and-accumulate; "MAC")

+
+
+
+cfu r4type instruction +
+
Figure 12. CFU R4-type instruction format
+
+
+
    +
  • +

    rs3: address of third source register (32-bit source data)

    +
  • +
  • +

    rs2: address of second source register (32-bit source data)

    +
  • +
  • +

    rs1: address of first source register (32-bit source data)

    +
  • +
  • +

    funct3: 3-bit immediate (immediate data or function select)

    +
  • +
  • +

    rd: address of destination register (for the 32-bit processing result)

    +
  • +
  • +

    opcode: 0101011 (RISC-V "custom-1" opcode)

    +
  • +
+
+
+ + + + + +
+ + +
RISC-V compatibility
+The CFU R4-type instruction format is compliant to the RISC-V ISA specification. +
+
+
+ + + + + +
+ + +
Unused instruction bits
+The RISC-V ISA specification defines bits [26:25] of the R4-type instruction word to be all-zero. These bits +are ignored by the hardware (CFU and illegal instruction check logic) and should be set to all-zero to preserve +compatibility with future ISA spec. versions. +
+
+
+ + + + + +
+ + +
Instruction encoding space
+By using the funct3 bit field entirely for selecting the actual operation a total of 8 custom R4-type +instructions can be implemented (3-bit → 8 different values). +
+
+
+
+
CFU R5-Type Instructions
+
+

The R5-type CFU instructions operate on four source registers rs1, rs2, rs3 and r4 and return the +processing result to the destination register rd. As all bits of the instruction word are used to encode the +five registers and the opcode, no further immediate bits are available to specify the actual operation. There +are two different R5-type instruction with two different opcodes available. Hence, only two R5-type operations +can be implemented by default.

+
+
+

Example operation: rd ⇐ rs1 & rs2 & rs3 & rs4 (bit-wise AND of 4 operands)

+
+
+
+cfu r5type instruction a +
+
Figure 13. CFU R5-type instruction A format
+
+
+
+cfu r5type instruction b +
+
Figure 14. CFU R5-type instruction B format
+
+
+
    +
  • +

    rs4.hi & rs4.lo: address of fourth source register (32-bit source data)

    +
  • +
  • +

    rs3: address of third source register (32-bit source data)

    +
  • +
  • +

    rs2: address of second source register (32-bit source data)

    +
  • +
  • +

    rs1: address of first source register (32-bit source data)

    +
  • +
  • +

    rd: address of destination register (for the 32-bit processing result)

    +
  • +
  • +

    opcode: 1011011 (RISC-V "custom-2" opcode) and/or 1111011 (RISC-V "custom-3" opcode)

    +
  • +
+
+
+ + + + + +
+ + +
RISC-V compatibility
+The RISC-V ISA specifications does not specify a R5-type instruction format. Hence, this instruction +format is NEORV32-specific. +
+
+
+ + + + + +
+ + +
Instruction encoding space
+There are no immediate fields in the CFU R5-type instruction so the actual operation is specified entirely +by the opcode resulting in just two different operations out of the box. However, another CFU instruction +(like a R3-type instruction) can be used to "program" the actual operation of a R5-type instruction by +writing operation information to a CFU-internal "command" register. +
+
+
+
+
+

3.7.2. Using Custom Instructions in Software

+
+

The custom instructions provided by the CFU can be used in plain C code by using intrinsics. Intrinsics +behave like "normal" C functions but under the hood they are a set of macros that hide the complexity of inline assembly. +Using intrinsics removes the need to modify the compiler, built-in libraries or the assembler when using custom +instructions. Each intrinsic will be compiled into a single 32-bit instruction word providing maximum code efficiency.

+
+
+ + + + + +
+ + +
CFU Example Program
+There is an example program for the CFU, which shows how to use the default CFU hardware module. +This example program is located in sw/example/demo_cfu. +
+
+
+

The NEORV32 software framework provides four pre-defined prototypes for custom instructions, which are defined in +sw/lib/include/neorv32_cpu_cfu.h:

+
+
+
Listing 9. CFU instruction prototypes
+
+
neorv32_cfu_r3_instr(funct7, funct3, rs1, rs2) // R3-type instructions
+neorv32_cfu_r4_instr(funct3, rs1, rs2, rs3)    // R4-type instructions
+neorv32_cfu_r5_instr_a(rs1, rs2, rs3, rs4)     // R5-type instruction A
+neorv32_cfu_r5_instr_b(rs1, rs2, rs3, rs4)     // R5-type instruction B
+
+
+
+

The intrinsic functions always return a 32-bit value of type uint32_t (the processing result), which can be discarded +if not needed. Each intrinsic function requires several arguments depending on the instruction type/format:

+
+
+
    +
  • +

    funct7 - 7-bit immediate (R3-type only)

    +
  • +
  • +

    funct3 - 3-bit immediate (R3-type, R4-type)

    +
  • +
  • +

    rs1 - source operand 1, 32-bit (R3-type, R4-type)

    +
  • +
  • +

    rs2 - source operand 2, 32-bit (R3-type, R4-type)

    +
  • +
  • +

    rs3 - source operand 3, 32-bit (R3-type, R4-type, R5-type)

    +
  • +
  • +

    rs4 - source operand 4, 32-bit (R4-type, R4-type, R5-type)

    +
  • +
+
+
+

The funct3 and funct7 bit-fields are used to pass 3-bit or 7-bit literals to the CFU. The rs1, rs2, rs3 +and r4 arguments pass the actual data to the CFU. These register arguments can be populated with variables or +literals. The following example shows how to pass arguments:

+
+
+
Listing 10. CFU instruction usage example
+
+
uint32_t tmp = some_function();
+...
+uint32_t res = neorv32_cfu_r3_instr(0b0000000, 0b101, tmp, 123);
+uint32_t foo = neorv32_cfu_r4_instr(0b011, tmp, res, (uint32_t)some_array[i]);
+uint32_t bar = neorv32_cfu_r5_instr_a(tmp, res, foo, tmp);
+
+
+
+
+

3.7.3. CFU Control and Status Registers (CFU-CSRs)

+
+

The CPU provides up to four control and status registers (cfureg*) to be +used within the CFU. These CSRs are mapped to the "custom user-mode read/write" CSR address space, which is +explicitly reserved for platform-specific application by the RISC-V spec. For example, these CSRs can be used +to pass additional operands to the CFU, to obtain additional results, to check processing status or to program +operation modes.

+
+
+
Listing 11. CFU CSR Access Example
+
+
neorv32_cpu_csr_write(CSR_CFUREG0, 0xabcdabcd); // write data to CFU CSR 0
+uint32_t tmp = neorv32_cpu_csr_read(CSR_CFUREG3); // read data from CFU CSR 3
+
+
+
+ + + + + +
+ + +
Additional CFU-internal CSRs
+If more than four CFU-internal CSRs are required the designer can implement an "indirect access mechanism" based +on just two of the default CSRs: one CSR is used to configure the index while the other is used as alias to exchange +data with the indexed CFU-internal CSR - this concept is similar to the RISC-V Indirect CSR Access Extension +Specification (Smcsrind). +
+
+
+ + + + + +
+ + +
Security Considerations
+The CFU CSRs are mapped to the user-mode CSR space so software running at any privilege level can access these +CSRs. However, accesses can be constrained to certain privilege level (see Custom Instructions Hardware). +
+
+
+
+

3.7.4. Custom Instructions Hardware

+
+

The actual functionality of the CFU’s custom instructions is defined by the user-defined logic inside +the CFU hardware module rtl/core/neorv32_cpu_cp_cfu.vhd. This file is highly commented to illustrate the +hardware design considerations.

+
+
+

CFU operations can be entirely combinatorial (like bit-reversal) so the result is available at the end of +the current clock cycle. Operations can also take several clock cycles to complete (like multiplications) +and may also include internal states and memories. The CFU’s internal control unit takes care of +interfacing the custom user logic to the CPU pipeline.

+
+
+ + + + + +
+ + +
CFU Hardware Resource Requirements
+Enabling the CFU and actually implementing R4-type and/or R5-type instructions (or more precisely, using +the according operands for the CFU hardware) will add one or two, respectively, additional read ports to +the core’s register file significantly increasing resource requirements. +
+
+
+ + + + + +
+ + +
CFU Access Privilege Levels
+The CFU is accessible from all privilege modes (including CFU-internal registers accessed via the indirects CSR +access mechanism). It is the task of the CFU designers to add according access-constraining logic if certain CFU +states shall not be exposed to all privilege levels (i.e. encryption keys). +
+
+
+ + + + + +
+ + +
CFU Execution Time
+The CFU has to complete computation within a bound time window. Otherwise, the CFU operation is terminated +by the hardware and an illegal instruction exception is raised. See section CPU Arithmetic Logic Unit +for more information. +
+
+
+ + + + + +
+ + +
CFU Exception
+The CFU can intentionally raise an illegal instruction exception by not asserting the done at all causing an +execution timeout. For example this can be used to signal invalid configurations/operations to the runtime +environment. See the CFU’s VHDL file for more information. +
+
+
+
+
+
+
+

3.8. Control and Status Registers (CSRs)

+
+

The following table shows a summary of all available NEORV32 CSRs. The address field defines the CSR address for +the CSR access instructions. The "Name [ASM]" column provides the CSR name aliases that can be used in (inline) assembly. +The "Name [C]" column lists the name aliases that are defined by the NEORV32 core library. These can be used in plain C code. +The "Access" column shows the minimal required privilege mode required for accessing the according CSR (M = machine-mode, +U = user-mode, D = debug-mode) and the read/write capabilities (RW = read-write, RO = read-only)

+
+
+ + + + + +
+ + +
Unused, Reserved, Unimplemented and Disabled CSRs
+All CSRs and CSR bits that are not listed in the table below are unimplemented and are hardwired to zero. Additionally, +CSRs that are unavailable ("disabled") because the according ISA extension is not enabled are also considered unimplemented +and are also hardwired to zero. Any access to such a CSR will raise an illegal instruction exception. All writable CSRs provide +WARL behavior (write all values; read only legal values). Application software should always read back a CSR after writing +to check if the targeted bits can actually be modified. +
+
+ + +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 57. NEORV32 Control and Status Registers (CSRs)
AddressName [ASM]Name [C]AccessDescription

Floating-Point CSRs

0x001

fflags

CSR_FFLAGS

URW

Floating-point accrued exceptions

0x002

frm

CSR_FRM

URW

Floating-point dynamic rounding mode

0x003

fcsr

CSR_FCSR

URW

Floating-point control and status

Machine Trap Setup CSRs

0x300

mstatus

CSR_MSTATUS

MRW

Machine status register - low word

0x301

misa

CSR_MISA

MRW

Machine CPU ISA and extensions

0x304

mie

CSR_MIE

MRW

Machine interrupt enable register

0x305

mtvec

CSR_MTVEC

MRW

Machine trap-handler base address for ALL traps

0x306

mcounteren

CSR_MCOUNTEREN

MRW

Machine counter-enable register

0x310

mstatush

CSR_MSTATUSH

MRW

Machine status register - high word

Machine Configuration CSRs

0x30a

menvcfg

CSR_MENVCFG

MRW

Machine environment configuration register - low word

0x31a

menvcfgh

CSR_MENVCFGH

MRW

Machine environment configuration register - high word

Machine Counter Setup CSRs

0x320

mcountinhibit

CSR_MCOUNTINHIBIT

MRW

Machine counter-inhibit register

Machine Trap Handling CSRs

0x340

mscratch

CSR_MSCRATCH

MRW

Machine scratch register

0x341

mepc

CSR_MEPC

MRW

Machine exception program counter

0x342

mcause

CSR_MCAUSE

MRW

Machine trap cause

0x343

mtval

CSR_MTVAL

MRW

Machine trap value

0x344

mip

CSR_MIP

MRW

Machine interrupt pending register

0x34a

mtinst

CSR_MTINST

MRW

Machine trap instruction

Machine Physical Memory Protection CSRs

0x3a0 .. 0x303

pmpcfg0 .. pmpcfg3

CSR_PMPCFG0 .. CSR_PMPCFG3

MRW

Physical memory protection configuration registers

0x3b0 .. 0x3bf

pmpaddr0 .. pmpaddr15

CSR_PMPADDR0 .. CSR_PMPADDR15

MRW

Physical memory protection address registers

Trigger Module CSRs

0x7a0

tselect

CSR_TSELECT

MRW

Trigger select register

0x7a1

tdata1

CSR_TDATA1

MRW

Trigger data register 1

0x7a2

tdata2

CSR_TDATA2

MRW

Trigger data register 2

0x7a4

tinfo

CSR_TINFO

MRW

Trigger information register

CPU Debug Mode CSRs

0x7b0

dcsr

-

DRW

Debug control and status register

0x7b1

dpc

-

DRW

Debug program counter

0x7b2

dscratch0

-

DRW

Debug scratch register 0

Custom Functions Unit (CFU) CSRs

0x800 .. 0x803

cfureg0 .. cfureg3

CSR_CFUCREG0 .. CSR_CFUCREG3

URW

Custom CFU registers 0 to 3

(Machine) Counter and Timer CSRs

0xb00

mcycle

CSR_MCYCLE

MRW

Machine cycle counter low word

0xb02

minstret

CSR_MINSTRET

MRW

Machine instruction-retired counter low word

0xb80

mcycleh

CSR_MCYCLEH

MRW

Machine cycle counter high word

0xb82

minstreth

CSR_MINSTRETH

MRW

Machine instruction-retired counter high word

0xc00

cycle

CSR_CYCLE

URO

Cycle counter low word

0xc02

instret

CSR_INSTRET

URO

Instruction-retired counter low word

0xc80

cycleh

CSR_CYCLEH

URO

Cycle counter high word

0xc82

instreth

CSR_INSTRETH

URO

Instruction-retired counter high word

Hardware Performance Monitors (HPM) CSRs

0x323 .. 0x32f

mhpmevent3 .. mhpmevent15

CSR_MHPMEVENT3 .. CSR_MHPMEVENT15

MRW

Machine performance-monitoring event select for counter 3..15

0xb03 .. 0xb0f

mhpmcounter3 .. mhpmcounter15

CSR_MHPMCOUNTER3 .. CSR_MHPMCOUNTER15

MRW

Machine performance-monitoring counter 3..15 low word

0xb83 .. 0xb8f

mhpmcounter3h .. mhpmcounter15h

CSR_MHPMCOUNTER3H .. CSR_MHPMCOUNTER15H

MRW

Machine performance-monitoring counter 3..15 high word

0xc03 .. 0xc0f

hpmcounter3 .. hpmcounter15

CSR_HPMCOUNTER3 .. CSR_HPMCOUNTER15H

URO

User performance-monitoring counter 3..15 low word

0xc83 .. 0xc8f

hpmcounter3h .. hpmcounter15h

CSR_HPMCOUNTER3H .. CSR_HPMCOUNTER15H

URO

User performance-monitoring counter 3..15 high word

Machine Information CSRs

0xf11

mvendorid

CSR_MVENDORID

MRO

Machine vendor ID

0xf12

marchid

CSR_MARCHID

MRO

Machine architecture ID

0xf13

mimpid

CSR_MIMPID

MRO

Machine implementation ID / version

0xf14

mhartid

CSR_MHARTID

MRO

Machine hardware thread ID

0xf15

mconfigptr

CSR_MCONFIGPTR

MRO

Machine configuration pointer register

NEORV32-Specific CSRs

0xfc0

mxisa

CSR_MXISA

MRO

NEORV32-specific "eXtended" machine CPU ISA and extensions

+
+
+

3.8.1. Floating-Point CSRs

+
fflags
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Floating-point accrued exceptions

Address

0x001

Reset value

0x00000000

ISA

Zicsr & Zfinx

Description

FPU status flags.

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 58. fflags CSR bits
BitR/WFunction

0

r/w

NX: inexact

1

r/w

UF: underflow

2

r/w

OF: overflow

3

r/w

DZ: division by zero

4

r/w

NV: invalid operation

+
+


+
+
frm
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Floating-point dynamic rounding mode

Address

0x002

Reset value

0x00000000

ISA

Zicsr & Zfinx

Description

The frm CSR is used to configure the rounding mode of the FPU.

+ + +++++ + + + + + + + + + + + + + + +
Table 59. frm CSR bits
BitR/WFunction

2:0

r/w

Rounding mode

+
+


+
+
fcsr
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Floating-point control and status register

Address

0x003

Reset value

0x00000000

ISA

Zicsr & Zfinx

Description

The fcsr provides combined access to the fflags and frm flags.

+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 60. fcsr CSR bits
BitR/WFunction

4:0

r/w

Accrued exception flags (fflags)

7:5

r/w

Rounding mode (frm)

+
+
+
+

3.8.2. Machine Trap Setup CSRs

+
mstatus
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine status register - low word

Address

0x300

Reset value

0x00001800

ISA

Zicsr

Description

The mstatus CSR is used to configure general machine environment parameters.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 61. mstatus CSR bits
BitName [C]R/WFunction

3

CSR_MSTATUS_MIE

r/w

MIE: Machine-mode interrupt enable flag

7

CSR_MSTATUS_MPIE

r/w

MPIE: Previous machine-mode interrupt enable flag state

12:11

CSR_MSTATUS_MPP_H : CSR_MSTATUS_MPP_L

r/w

MPP: Previous machine privilege mode, 11 = machine-mode "M", 00 = user-mode "U"; other values will fall-back to machine-mode

17

CSR_MSTATUS_MPRV

r/w

MPRV: Effective privilege mode for load/stores; use MPP as effective privilege mode when set; hardwired to zero if user-mode not implemented

21

CSR_MSTATUS_TW

r/w

TW: Trap on execution of wfi instruction in user mode when set; hardwired to zero if user-mode not implemented

+
+ + + + + +
+ + +If the core is in user-mode, machine-mode interrupts are globally enabled even if mstatus.mie is cleared: +"Interrupts for higher-privilege modes, y>x, are always globally enabled regardless of the setting of the global yIE +bit for the higher-privilege mode." - RISC-V ISA Spec. +
+
+
+


+
+
misa
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

ISA and extensions

Address

0x301

Reset value

DEFINED, according to enabled ISA extensions

ISA

Zicsr

Description

The misa CSR provides information regarding the availability of basic RISC-V ISa extensions.

+
+ + + + + +
+ + +The NEORV32 misa CSR is read-only. Hence, active CPU extensions are entirely defined by pre-synthesis configurations +and cannot be switched on/off during runtime. For compatibility reasons any write access to this CSR is simply ignored and +will not cause an illegal instruction exception. +
+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 62. misa CSR bits
BitName [C]R/WFunction

0

CSR_MISA_A_EXT

r/-

A: CPU extension (atomic memory access) available, set when A ISA Extension enabled

1

CSR_MISA_B_EXT

r/-

B: CPU extension (bit-manipulation) available, set when B ISA Extension enabled

2

CSR_MISA_C_EXT

r/-

C: CPU extension (compressed instruction) available, set when C ISA Extension enabled

4

CSR_MISA_E_EXT

r/-

E: CPU extension (embedded) available, set when E ISA Extension enabled

8

CSR_MISA_I_EXT

r/-

I: CPU base ISA, cleared when E ISA Extension enabled

12

CSR_MISA_M_EXT

r/-

M: CPU extension (mul/div) available, set when M ISA Extension enabled

20

CSR_MISA_U_EXT

r/-

U: CPU extension (user mode) available, set when U ISA Extension enabled

23

CSR_MISA_X_EXT

r/-

X: bit is always set to indicate non-standard / NEORV32-specific extensions

31:30

CSR_MISA_MXL_HI_EXT : CSR_MISA_MXL_LO_EXT

r/-

MXL: 32-bit architecture indicator (always 01)

+
+ + + + + +
+ + +Machine-mode software can discover available Z* sub-extensions (like Zicsr or Zfinx) by checking the NEORV32-specific +mxisa CSR. +
+
+
+


+
+
mie
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine interrupt-enable register

Address

0x304

Reset value

0x00000000

ISA

Zicsr

Description

The mie CSR is used to enable/disable individual interrupt sources.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 63. mie CSR bits
BitName [C]R/WFunction

3

CSR_MIE_MSIE

r/w

MSIE: Machine software interrupt enable

7

CSR_MIE_MTIE

r/w

MTIE: Machine timer interrupt enable (from Machine System Timer (MTIME))

11

CSR_MIE_MEIE

r/w

MEIE: Machine external interrupt enable

31:16

CSR_MIE_FIRQ15E : CSR_MIE_FIRQ0E

r/w

Fast interrupt channel 15..0 enable

+
+


+
+
mtvec
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine trap-handler base address

Address

0x305

Reset value

CPU_BOOT_ADDR, CPU boot address, 4-byte aligned (see CPU Top Entity - Generics and Address Space)

ISA

Zicsr

Description

The mtvec CSR holds the trap vector configuration.

+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 64. mtvec CSR bits
BitR/WFunction

1:0

r/w

MODE: mode configuration, 00 = DIRECT, 01 = VECTORED. (Others will fall back to DIRECT mode.)

31:2

r/w

BASE: in DIRECT mode = 4-byte aligned base address of trap base handler, all traps set pc = BASE; in VECTORED mode = 128-byte aligned base address of trap vector table, interrupts cause a jump to pc = BASE + 4 * mcause and exceptions to pc = BASE.

+
+ + + + + +
+ + +
Interrupt Latency
+The vectored mtvec mode is useful for reducing the time between interrupt request (IRQ) and servicing it (ISR). As software does not need to determine the interrupt cause the reduction in latency can be 5 to 10 times and as low as 26 cycles. +
+
+
+


+
+
mcounteren
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine counter enable

Address

0x306

Reset value

0x00000000

ISA

Zicsr & U

Description

The mcounteren CSR is used to constrain user-mode access to the CPU’s counter CSRs.

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 65. mcounteren CSR bits
BitR/WFunction

0

r/w (!)

CY: User-mode is allowed to read cycle[h] CSRs when set

1

r/-

TM: not implemented, hardwired to zero

2

r/w (!)

IR: User-mode is allowed to read instret[h] CSRs when set

15:3

r/w (!)

HPM: user-mode is allowed to read hpmcounter[h] CSRs when set

+
+ + + + + +
+ + +Physically, the NEORV32’s mcounteren CSR is implemented as a single 1-bit register. Setting any bit of +the CSR will result in all bits being set. Hence, user-mode access can either be granted for all counter CSRs +or entirely denied allowing access to none counter CSRs. +
+
+
+


+
+
mstatush
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine status register - high word

Address

0x310

Reset value

0x00000000

ISA

Zicsr

Description

The features of this CSR are not implemented yet. The register is read-only and always returns zero.

+
+
+
+

3.8.3. Machine Trap Handling CSRs

+
mscratch
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Scratch register for machine trap handlers

Address

0x340

Reset value

0x00000000

ISA

Zicsr

Description

The mscratch is a general-purpose machine-mode scratch register.

+
+


+
+
mepc
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine exception program counter

Address

0x341

Reset value

CPU_BOOT_ADDR, CPU boot address, 4-byte aligned (see CPU Top Entity - Generics and Address Space)

ISA

Zicsr

Description

The mepc CSR provides the instruction address where execution has stopped/failed when +an instruction is triggered / an exception is raised. See section Traps, Exceptions and Interrupts for a list of all legal values. +The mret instruction will return to the address stored in mepc by automatically moving mepc to the program counter.

+
+ + + + + +
+ + +mepc[0] is hardwired to zero. If IALIGN = 32 (i.e. C ISA Extension is disabled) then mepc[1] is also hardwired to zero. +
+
+
+


+
+
mcause
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine trap cause

Address

0x342

Reset value

0x00000000

ISA

Zicsr

Description

The mcause CSRs shows the exact cause of a trap. See section Traps, Exceptions and Interrupts for a list of all legal values.

+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 66. mcause CSR bits
BitR/WFunction

4:0

r/w

Exception code: see NEORV32 Trap Listing

31

r/w

Interrupt: 1 if the trap is caused by an interrupt (0 if the trap is caused by an exception)

+
+


+
+
mtval
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine trap value

Address

0x343

Reset value

0x00000000

ISA

Zicsr

Description

The mtval CSR provides additional information why a trap was entered. See section Traps, Exceptions and Interrupts for more information.

+
+ + + + + +
+ + +
Read-Only
+Note that the NEORV32 mtval CSR is updated by the hardware only and cannot be written from software. +However, any write-access will be ignored and will not cause an exception to maintain RISC-V compatibility. +
+
+
+


+
+
mip
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine interrupt pending

Address

0x344

Reset value

0x00000000

ISA

Zicsr

Description

The mip CSR shows currently pending machine-mode interrupt requests. Any write access to this register is ignored.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 67. mip CSR bits
BitName [C]R/WFunction

3

CSR_MIP_MSIP

r/-

MSIP: Machine software interrupt pending; cleared by platform-defined mechanism

7

CSR_MIP_MTIP

r/-

MTIP: Machine timer interrupt pending; cleared by platform-defined mechanism

11

CSR_MIP_MEIP

r/-

MEIP: Machine external interrupt pending; cleared by platform-defined mechanism

31:16

CSR_MIP_FIRQ15P : CSR_MIP_FIRQ0P

r/-

FIRQxP: Fast interrupt channel 15..0 pending; cleared by platform-defined mechanism

+
+ + + + + +
+ + +
FIRQ Channel Mapping
+See section NEORV32-Specific Fast Interrupt Requests for the mapping of the FIRQ channels and the according +interrupt-triggering processor module. +
+
+
+


+
+
mtinst
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine trap instruction

Address

0x34a

Reset value

0x00000000

ISA

Zicsr

Description

The mtinst CSR provides additional information why a trap was entered. See section Traps, Exceptions and Interrupts for more information.

+
+ + + + + +
+ + +
Read-Only
+Note that the NEORV32 mtinst CSR is updated by the hardware only and cannot be written from software. +However, any write-access will be ignored and will not cause an exception to maintain RISC-V compatibility. +
+
+
+ + + + + +
+ + +
Instruction Transformation
+The RISC-V priv. spec. suggests that the instruction word written to mtinst by the hardware should be "transformed". +However, the NEORV32 mtinst CSR uses a simplified transformation scheme: if the trap-causing instruction is a +standard 32-bit instruction, mtinst contains the exact instruction word that caused the trap. If the trap-causing +instruction is a compressed instruction, mtinst contains the de-compressed 32-bit equivalent with bit 1 being cleared +while all remaining bits represent the pre-decoded 32-bit instruction equivalent. +
+
+
+
+
+

3.8.4. Machine Configuration CSRs

+
menvcfg
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine environment configuration register - low word

Address

0x30a

Reset value

0x00000000

ISA

Zicsr & U

Description

Currently, the features of this CSR are not supported. Hence, the entire register is hardwired to all-zero.

+
+


+
+
menvcfgh
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine environment configuration register - high word

Address

0x31a

Reset value

0x00000000

ISA

Zicsr & U

Description

Currently, the features of this CSR are not supported. Hence, the entire register is hardwired to all-zero.

+
+
+
+

3.8.5. Machine Physical Memory Protection CSRs

+
+

The physical memory protection system is configured via the PMP_NUM_REGIONS and PMP_MIN_GRANULARITY top entity +generics. PMP_NUM_REGIONS defines the total number of implemented regions. Note that the maximum number of regions +is constrained to 16. If trying to access a PMP-related CSR beyond PMP_NUM_REGIONS no illegal instruction exception +is triggered. The according CSRs are read-only (writes are ignored) and always return zero. +See section Smpmp ISA Extension for more information.

+
+
pmpcfg
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

PMP region configuration registers

Address

0x3a0 (pmpcfg0)

0x3a1 (pmpcfg1)

0x3a2 (pmpcfg2)

0x3a3 (pmpcfg3)

Reset value

0x00000000

ISA

Zicsr & PMP

Description

Configuration of physical memory protection regions. Each region provides an individual 8-bit array in these CSRs.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 68. pmpcfg0 CSR Bits
BitName [C]R/WFunction

0

PMPCFG_R

r/w

R: Read permission

1

PMPCFG_W

r/w

W: Write permission

2

PMPCFG_X

r/w

X: Execute permission

4:3

PMPCFG_A_MSB : PMPCFG_A_LSB

r/w

A: Mode configuration (00 = OFF, 01 = TOR, 10 = NA4, 11 = NAPOT)

7

PMPCFG_L

r/w

L: Lock bit, prevents further write accesses, also enforces access rights in machine-mode, can only be cleared by CPU reset

+
+ + + + + +
+ + +
Implemented Modes
+In order to reduce the CPU size certain PMP modes (A bits) can be excluded from synthesis. +Use the PMP_TOR_MODE_EN and PMP_NAP_MODE_EN Processor Top Entity - Generics to control +implementation of the according modes. +
+
+
+


+
+
pmpaddr
+
+

The pmpaddr* CSRs are used to configure the region’s address boundaries.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Physical memory protection address registers

Address

0x3b0 (pmpaddr1)

0x3b1 (pmpaddr2)

0x3b2 (pmpaddr3)

0x3b3 (pmpaddr4)

0x3b4 (pmpaddr5)

0x3b5 (pmpaddr6)

0x3b6 (pmpaddr6)

0x3b7 (pmpaddr7)

0x3b8 (pmpaddr8)

0x3b9 (pmpaddr9)

0x3ba (pmpaddr10)

0x3bb (pmpaddr11)

0x3bc (pmpaddr12)

0x3bd (pmpaddr13)

0x3be (pmpaddr14)

0x3bf (pmpaddr15)

Reset value

0x00000000

ISA

Zicsr & PMP

Description

Region address configuration. The two MSBs of each CSR are hardwired to zero (= bits 33:32 of the physical address).

+
+
+
+

3.8.6. Custom Functions Unit (CFU) CSRs

+
cfureg
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Custom (user-defined) CFU CSRs

Address

0x800 (cfureg0)

0x801 (cfureg1)

0x802 (cfureg2)

0x803 (cfureg3)

Reset value

0x00000000

ISA

Zicsr & Zxcfu

Description

User-defined CSRs to be used within the Custom Functions Unit (CFU).

+
+
+
+

3.8.7. (Machine) Counter and Timer CSRs

+
+ + + + + +
+ + +
time[h] CSRs (Wall Clock Time)
+The NEORV32 does not implement the user-mode time[h] registers. Any access to these registers will trap. +It is recommended that the trap handler software provides a means of accessing the platform-defined Machine System Timer (MTIME). +
+
+
+ + + + + +
+ + +
Instruction Retired Counter Increment
+The [m]instret[h] counter always increments when a instruction enters the pipeline’s execute stage no matter +if this instruction is actually going to retire or if it causes an exception. +
+
+
cycle[h]
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Cycle counter

Address

0xc00 (cycle)

0xc80 (cycleh)

Reset value

0x00000000

ISA

Zicsr & Zicntr

Description

The cycle[h] CSRs are user-mode shadow copies of the according mcycle[h] CSRs. The user-mode +counter are read-only. Any write access will raise an illegal instruction exception.

+
+


+
+
instret[h]
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Instructions-retired counter

Address

0xc02 (instret)

0xc82 (instreth)

Reset value

0x00000000

ISA

Zicsr & Zicntr

Description

The instret[h] CSRs are user-mode shadow copies of the according minstret[h] CSRs. The user-mode +counter are read-only. Any write access will raise an illegal instruction exception.

+
+


+
+
mcycle[h]
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine cycle counter

Address

0xb00 (mcycle)

0xb80 (mcycleh)

Reset value

0x00000000

ISA

Zicsr & Zicntr

Description

If not halted via the mcountinhibit CSR the cycle[h] CSRs will increment with every active CPU clock +cycle (CPU not in sleep mode). These registers are read/write only for machine-mode software.

+
+


+
+
minstret[h]
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine instructions-retired counter

Address

0xb02 (minstret)

0xb82 (minstreth)

Reset value

0x00000000

ISA

Zicsr & Zicntr

Description

If not halted via the mcountinhibit CSR the minstret[h] CSRs will increment with every retired instruction. +These registers are read/write only for machine-mode software

+
+ + + + + +
+ + +
Instruction Retiring
+Note that all executed instruction do increment the [m]instret[h] counters even if they do not retire +(e.g. if the instruction causes an exception). +
+
+
+
+
+

3.8.8. Hardware Performance Monitors (HPM) CSRs

+
+

The actual number of implemented hardware performance monitors is configured via the HPM_NUM_CNTS top entity generic, +Note that always all 13 HPM counter and configuration registers (mhpmcounter*[h] and mhpmevent*) are implemented, but +only the actually configured ones are implemented as "real" physical registers - the remaining ones will be hardwired to zero.

+
+
+

If trying to access an HPM-related CSR beyond HPM_NUM_CNTS no illegal instruction exception is +triggered. These CSRs are read-only (writes are ignored) and always return zero.

+
+
+

The total counter width of the HPMs can be configured before synthesis via the HPM_CNT_WIDTH generic (0..64-bit). +If HPM_NUM_CNTS is less than 64, all remaining MSB-aligned bits are hardwired to zero.

+
+
mhpmevent
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine hardware performance monitor event select

Address

0x233 (mhpmevent3)

0x234 (mhpmevent4)

0x235 (mhpmevent5)

0x236 (mhpmevent6)

0x237 (mhpmevent7)

0x238 (mhpmevent8)

0x239 (mhpmevent9)

0x23a (mhpmevent10)

0x23b (mhpmevent11)

0x23c (mhpmevent12)

0x23d (mhpmevent13)

0x23e (mhpmevent14)

0x23f (mhpmevent15)

Reset value

0x00000000

ISA

Zicsr & Zihpm

Description

The value in these CSRs define the architectural events that cause an increment of the according mhpmcounter*[h] counter(s). +All available events are listed in the table below. If more than one event is selected, the according counter will increment if any of +the enabled events is observed (logical OR). Note that the counter will only increment by 1 step per clock +cycle even if more than one trigger event is observed.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 69. mhpmevent* CSR Bits
BitName [C]R/WEvent Description

RISC-V-compatible

0

HPMCNT_EVENT_CY

r/w

active clock cycle (CPU not in Sleep Mode)

1

HPMCNT_EVENT_TM

r/-

not implemented, hardwired to zero

2

HPMCNT_EVENT_IR

r/w

any executed instruction (16-bit/compressed or 32-bit/uncompressed)

NEORV32-specific

3

HPMCNT_EVENT_COMPR

r/w

any executed 16-bit/compressed (C ISA Extension) instruction

4

HPMCNT_EVENT_WAIT_DIS

r/w

instruction dispatch wait cycle (wait for instruction prefetch-buffer refill (CPU Control Unit IPB); +caused by a fence instruction, a control flow transfer or a instruction fetch bus wait cycle)

5

HPMCNT_EVENT_WAIT_ALU

r/w

any delay/wait cycle caused by a multi-cycle CPU Arithmetic Logic Unit operation

6

HPMCNT_EVENT_BRANCH

r/w

any executed branch instruction (unconditional, conditional-taken or conditional-not-taken)

7

HPMCNT_EVENT_BRANCHED

r/w

any control transfer operation (unconditional jump, taken conditional branch or trap entry/exit)

8

HPMCNT_EVENT_LOAD

r/w

any executed load operation (including atomic memory operations, A ISA Extension)

9

HPMCNT_EVENT_STORE

r/w

any executed store operation (including atomic memory operations, A ISA Extension)

10

HPMCNT_EVENT_WAIT_LSU

r/w

any memory/bus/cache/etc. delay/wait cycle while executing any load or store operation (caused by a data bus wait cycle))

11

HPMCNT_EVENT_TRAP

r/w

starting processing of any trap (Traps, Exceptions and Interrupts)

+
+ + + + + +
+ + +
Instruction Retiring ("Retired == Executed")
+The CPU HPM/counter logic treats all executed instruction as "retired" even if they raise an exception, +cause an interrupt, trigger a privilege mode change or were not meant to retire (by the RISC-V spec.). +
+
+
+


+
+
mhpmcounter[h]
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine hardware performance monitor (HPM) counter

Address

0xb03, 0xb83 (mhpmcounter3, mhpmcounter3h)

0xb04, 0xb84 (mhpmcounter4, mhpmcounter4h)

0xb05, 0xb85 (mhpmcounter5, mhpmcounter5h)

0xb06, 0xb86 (mhpmcounter6, mhpmcounter6h)

0xb07, 0xb87 (mhpmcounter7, mhpmcounter7h)

0xb08, 0xb88 (mhpmcounter8, mhpmcounter8h)

0xb09, 0xb89 (mhpmcounter9, mhpmcounter9h)

0xb0a, 0xb8a (mhpmcounter10, mhpmcounter10h)

0xb0b, 0xb8b (mhpmcounter11, mhpmcounter11h)

0xb0c, 0xb8c (mhpmcounter12, mhpmcounter12h)

0xb0d, 0xb8d (mhpmcounter13, mhpmcounter13h)

0xb0e, 0xb8e (mhpmcounter14, mhpmcounter14h)

0xb0f, 0xb8f (mhpmcounter15, mhpmcounter15h)

Reset value

0x00000000

ISA

Zicsr & Zihpm

Description

If not halted via the mcountinhibit CSR the HPM counter CSR(s) increment whenever a +configured event from the according mhpmevent CSR occurs. The counter registers are read/write for machine mode +and are not accessible for lower-privileged software.

+
+


+
+
hpmcounter[h]
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

User hardware performance monitor (HPM) counter

Address

0xc03, 0xc83 (hpmcounter3, hpmcounter3h)

0xc04, 0xc84 (hpmcounter4, hpmcounter4h)

0xc05, 0xc85 (hpmcounter5, hpmcounter5h)

0xc06, 0xc86 (hpmcounter6, hpmcounter6h)

0xc07, 0xc87 (hpmcounter7, hpmcounter7h)

0xc08, 0xc88 (hpmcounter8, hpmcounter8h)

0xc09, 0xc89 (hpmcounter9, hpmcounter9h)

0xc0a, 0xc8a (hpmcounter10, hpmcounter10h)

0xc0b, 0xc8b (hpmcounter11, hpmcounter11h)

0xc0c, 0xc8c (hpmcounter12, hpmcounter12h)

0xc0d, 0xc8d (hpmcounter13, hpmcounter13h)

0xc0e, 0xc8e (hpmcounter14, hpmcounter14h)

0xc0f, 0xc8f (hpmcounter15, hpmcounter15h)

Reset value

0x00000000

ISA

Zicsr & Zihpm

Description

The hpmcounter*[h] are user-mode shadow copies of the according mhpmcounter[h] CSRs. The user mode +counter CSRs are read-only. Any write access will raise an illegal instruction exception.

+
+
+
+

3.8.9. Machine Counter Setup CSRs

+
mcountinhibit
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine counter-inhibit register

Address

0x320

Reset value

0x00000000

ISA

Zicsr

Description

Set bit to halt the according counter CSR.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 70. mcountinhibit CSR Bits
BitName [C]R/WDescription

0

CSR_MCOUNTINHIBIT_IR

r/w

IR: Set to 1 to halt [m]instret[h]; hardwired to zero if Zicntr ISA extension is disabled

1

-

r/-

TM: Hardwired to zero as time[h] CSRs are not implemented

2

CSR_MCOUNTINHIBIT_CY

r/w

CY: Set to 1 to halt [m]cycle[h]; hardwired to zero if Zicntr ISA extension is disabled

15:3

CSR_MCOUNTINHIBIT_HPM3 : CSR_MCOUNTINHIBIT_HPM15

r/w

HPMx: Set to 1 to halt [m]hpmcount*[h]; hardwired to zero if Zihpm ISA extension is disabled

+
+
+
+

3.8.10. Machine Information CSRs

+
mvendorid
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine vendor ID

Address

0xf11

Reset value

DEFINED

ISA

Zicsr

Description

Vendor ID (JEDEC identifier, lowest 11 bits), assigned via the JEDEC_ID top generic (Processor Top Entity - Generics).

+
+


+
+
marchid
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine architecture ID

Address

0xf12

Reset value

0x00000013

ISA

Zicsr

Description

The marchid CSR is read-only and provides the NEORV32 official RISC-V open-source architecture ID +(decimal: 19, 32-bit hexadecimal: 0x00000013).

+
+


+
+
mimpid
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine implementation ID

Address

0xf13

Reset value

DEFINED

ISA

Zicsr

Description

The mimpid CSR is read-only and provides the version of the +NEORV32 as BCD-coded number (example: mimpid = 0x01020312 → 01.02.03.12 → version 1.2.3.12).

+
+


+
+
mhartid
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine hardware thread ID

Address

0xf14

Reset value

DEFINED

ISA

Zicsr

Description

The mhartid CSR is read-only and provides the core’s hart ID, +which is assigned via the HW_THREAD_ID top generic (Processor Top Entity - Generics).

+
+


+
+
mconfigptr
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine configuration pointer register

Address

0xf15

Reset value

0x00000000

ISA

Zicsr

Description

The features of this CSR are not implemented yet. The register is read-only and always returns zero.

+
+
+
+

3.8.11. NEORV32-Specific CSRs

+
+ + + + + +
+ + +All NEORV32-specific CSRs are mapped to addresses that are explicitly reserved for custom Machine-Mode, read-only CSRs +(assured by the RISC-V privileged specifications). Hence, these CSRs can only be accessed when in machine-mode. Any access +outside of machine-mode will raise an illegal instruction exception. +
+
+
mxisa
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Machine extended isa and extensions register

Address

0xfc0

Reset value

DEFINED

ISA

Zicsr & X

Description

The mxisa CSRs is a NEORV32-specific read-only CSR that helps machine-mode software to +discover ISA sub-extensions and CPU configuration options

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 71. mxisa CSR Bits
BitName [C]R/WDescription

0

CSR_MXISA_ZICSR

r/-

Zicsr ISA Extension available

1

CSR_MXISA_ZIFENCEI

r/-

Zifencei ISA Extension available

2

CSR_MXISA_ZMMUL

r/-

Zmmul - ISA Extension available

3

CSR_MXISA_ZXCFU

r/-

Zxcfu ISA Extension available

4

-

r/-

reserved, hardwired to zero

5

CSR_MXISA_ZFINX

r/-

Zfinx ISA Extension available

6

CSR_MXISA_ZICOND

r/-

Zicond ISA Extension available

7

CSR_MXISA_ZICNTR

r/-

Zicntr ISA Extension available

8

CSR_MXISA_SMPMP

r/-

Smpmp ISA Extension available

9

CSR_MXISA_ZIHPM

r/-

Zihpm ISA Extension available

10

CSR_MXISA_SDEXT

r/-

Sdext ISA Extension available

11

CSR_MXISA_SDTRIG

r/-

Sdtrig ISA Extension available

19:12

-

r/-

hardwired to zero

20

CSR_MXISA_IS_SIM

r/-

set if CPU is being simulated (⚠️ not guaranteed)

28:21

-

r/-

hardwired to zero

29

CSR_MXISA_RFHWRST

r/-

full hardware reset of register file available when set (REGFILE_HW_RST)

30

CSR_MXISA_FASTMUL

r/-

fast multiplication available when set (FAST_MUL_EN)

31

CSR_MXISA_FASTSHIFT

r/-

fast shifts available when set (FAST_SHIFT_EN)

+
+
+
+

3.8.12. Traps, Exceptions and Interrupts

+
+

In this document the following terminology is used (derived from the RISC-V trace specification +available at https://github.com/riscv-non-isa/riscv-trace-spec):

+
+
+
    +
  • +

    exception: an unusual condition occurring at run time associated (i.e. synchronous) with an instruction in a RISC-V hart

    +
  • +
  • +

    interrupt: an external asynchronous event that may cause a RISC-V hart to experience an unexpected transfer of control

    +
  • +
  • +

    trap: the transfer of control to a trap handler caused by either an exception or an interrupt

    +
  • +
+
+
+

Whenever an exception or interrupt is triggered, the CPU switches to machine-mode (if not already in machine-mode) +and continues operation at the address being stored in the mtvec CSR. The cause of the the trap can be determined via the +mcause CSR. A list of all implemented mcause values and the according description can be found below in section +NEORV32 Trap Listing. The address that reflects the current program counter when a trap was taken is stored to +mepc CSR. Additional information regarding the cause of the trap can be retrieved from the mtval and mtinst CSRs.

+
+
+

The traps are prioritized. If several exceptions occur at once only the one with highest priority is triggered +while all remaining exceptions are ignored and discarded. If several interrupts trigger at once, the one with highest priority +is serviced first while the remaining ones stay pending. After completing the interrupt handler the interrupt with +the second highest priority will get serviced and so on until no further interrupts are pending.

+
+
+ + + + + +
+ + +
Interrupts when in User-Mode
+If the core is currently operating in less privileged user-mode, interrupts are globally enabled +even if mstatus.mie is cleared. +
+
+
+ + + + + +
+ + +
Interrupt Signal Requirements - Standard RISC-V Interrupts
+All interrupt request signals are high-active. Once triggered, a interrupt request line should stay high +until it is explicitly acknowledged by a source-specific mechanism (for example by writing to a specific memory-mapped register). +
+
+
+ + + + + +
+ + +
Instruction Atomicity and Forward-Progress
+All instructions execute as atomic operations - interrupts can only trigger between consecutive instructions. +Additionally, if there is a permanent interrupt request, exactly one instruction from the interrupted program will be executed before +another interrupt handler can start. This allows program progress even if there are permanent interrupt requests. +
+
+
+
Memory Access Exceptions
+
+

If a load operation causes any exception, the instruction’s destination register is not written at all. Furthermore, +exceptions caused by a misaligned memory address a physical memory protection fault do not trigger a memory access request at all.

+
+
+

For 32-bit-only instructions (= no C extension) the misaligned instruction exception is raised if bit 1 of the fetch +address is set (i.e. not on a 32-bit boundary). If the C extension is implemented there will never be a misaligned +instruction exception at all.

+
+
+
+
Custom Fast Interrupt Request Lines
+
+

As a custom extension, the NEORV32 CPU features 16 fast interrupt request (FIRQ) lines via the firq_i CPU top +entity signals. These interrupts have custom configuration and status flags in the mie and mip CSRs and also +provide custom trap codes in mcause. These FIRQs are reserved for NEORV32 processor-internal usage only.

+
+
+
+
NEORV32 Trap Listing
+
+

The following tables show all traps that are currently supported by the NEORV32 CPU. It also shows the prioritization +and the CSR side-effects.

+
+
+

Table Annotations

+
+
+

The "Prio." column shows the priority of each trap with the highest priority being 1. The "RTE Trap ID" aliases are +defined by the NEORV32 core library (the runtime environment RTE) and can be used in plain C code when interacting +with the pre-defined RTE function. The mcause, mepc, mtval and mtinst columns show the value being +written to the according CSRs when a trap is triggered:

+
+
+
    +
  • +

    I-PC - address of intercepted instruction (instruction has not been executed yet)

    +
  • +
  • +

    PC - address of instruction that caused the trap (instruction has been executed)

    +
  • +
  • +

    ADR - bad data memory access address that caused the trap

    +
  • +
  • +

    INS - the transformed/decompressed instruction word that caused the trap

    +
  • +
  • +

    0 - zero

    +
  • +
+
+ + +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 72. NEORV32 Trap Listing
Prio.mcauseRTE Trap IDCausemepcmtvalmtinst

Exceptions (synchronous to instruction execution)

1

0x00000001

TRAP_CODE_I_ACCESS

instruction access fault

I-PC

0

INS

2

0x00000002

TRAP_CODE_I_ILLEGAL

illegal instruction

PC

0

INS

3

0x00000000

TRAP_CODE_I_MISALIGNED

instruction address misaligned

PC

0

INS

4

0x0000000b

TRAP_CODE_MENV_CALL

environment call from M-mode

PC

0

INS

5

0x00000008

TRAP_CODE_UENV_CALL

environment call from U-mode

PC

0

INS

6

0x00000003

TRAP_CODE_BREAKPOINT

software breakpoint / trigger firing

PC

0

INS

7

0x00000006

TRAP_CODE_S_MISALIGNED

store address misaligned

PC

ADR

INS

8

0x00000004

TRAP_CODE_L_MISALIGNED

load address misaligned

PC

ADR

INS

9

0x00000007

TRAP_CODE_S_ACCESS

store access fault

PC

ADR

INS

10

0x00000005

TRAP_CODE_L_ACCESS

load access fault

PC

ADR

INS

Interrupts (asynchronous to instruction execution)

11

0x80000010

TRAP_CODE_FIRQ_0

fast interrupt request channel 0

I-PC

0

0

12

0x80000011

TRAP_CODE_FIRQ_1

fast interrupt request channel 1

I-PC

0

0

13

0x80000012

TRAP_CODE_FIRQ_2

fast interrupt request channel 2

I-PC

0

0

14

0x80000013

TRAP_CODE_FIRQ_3

fast interrupt request channel 3

I-PC

0

0

15

0x80000014

TRAP_CODE_FIRQ_4

fast interrupt request channel 4

I-PC

0

0

16

0x80000015

TRAP_CODE_FIRQ_5

fast interrupt request channel 5

I-PC

0

0

17

0x80000016

TRAP_CODE_FIRQ_6

fast interrupt request channel 6

I-PC

0

0

18

0x80000017

TRAP_CODE_FIRQ_7

fast interrupt request channel 7

I-PC

0

0

19

0x80000018

TRAP_CODE_FIRQ_8

fast interrupt request channel 8

I-PC

0

0

20

0x80000019

TRAP_CODE_FIRQ_9

fast interrupt request channel 9

I-PC

0

0

21

0x8000001a

TRAP_CODE_FIRQ_10

fast interrupt request channel 10

I-PC

0

0

22

0x8000001b

TRAP_CODE_FIRQ_11

fast interrupt request channel 11

I-PC

0

0

23

0x8000001c

TRAP_CODE_FIRQ_12

fast interrupt request channel 12

I-PC

0

0

24

0x8000001d

TRAP_CODE_FIRQ_13

fast interrupt request channel 13

I-PC

0

0

25

0x8000001e

TRAP_CODE_FIRQ_14

fast interrupt request channel 14

I-PC

0

0

26

0x8000001f

TRAP_CODE_FIRQ_15

fast interrupt request channel 15

I-PC

0

0

27

0x8000000B

TRAP_CODE_MEI

machine external interrupt (MEI)

I-PC

0

0

28

0x80000003

TRAP_CODE_MSI

machine software interrupt (MSI)

I-PC

0

0

29

0x80000007

TRAP_CODE_MTI

machine timer interrupt (MTI)

I-PC

0

0

+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 73. NEORV32 Trap Description
Trap ID [C]Triggered when …​

TRAP_CODE_I_ACCESS

bus timeout, bus access error or PMP rule violation during instruction fetch

TRAP_CODE_I_ILLEGAL

trying to execute an invalid instruction word (malformed or not supported) or on a privilege violation

TRAP_CODE_I_MISALIGNED

fetching a 32-bit instruction word that is not 32-bit-aligned (see note below)

TRAP_CODE_MENV_CALL

executing ecall instruction in machine-mode

TRAP_CODE_UENV_CALL

executing ecall instruction in user-mode

TRAP_CODE_BREAKPOINT

executing ebreak instruction or if Trigger Module fires

TRAP_CODE_S_MISALIGNED

storing data to an address that is not naturally aligned to the data size (half/word)

TRAP_CODE_L_MISALIGNED

loading data from an address that is not naturally aligned to the data size (half/word)

TRAP_CODE_S_ACCESS

bus timeout, bus access error or PMP rule violation during load data operation

TRAP_CODE_L_ACCESS

bus timeout, bus access error or PMP rule violation during store data operation

TRAP_CODE_FIRQ_*

caused by interrupt-condition of processor-internal modules, see NEORV32-Specific Fast Interrupt Requests

TRAP_CODE_MEI

machine external interrupt (via dedicated Processor Top Entity - Signals)

TRAP_CODE_MSI

machine software interrupt (via dedicated Processor Top Entity - Signals)

TRAP_CODE_MTI

machine timer interrupt (internal Machine System Timer (MTIME) or via dedicated Processor Top Entity - Signals)

+
+ + + + + +
+ + +
Resumable Exceptions
+Note that not all exceptions are resumable. For example, the "instruction access fault" exception or the "instruction +address misaligned" exception are not resumable in most cases. These exception might indicate a fatal memory hardware failure. +
+
+
+
+
+
+
+
+

4. Software Framework

+
+
+

The NEORV32 project comes with a complete software ecosystem called the "software framework", which +is based on the C-language RISC-V GCC port and consists of the following parts:

+
+ +
+

A summarizing list of the most important elements of the software framework and their according +files and folders is shown below:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Application start-up code

sw/common/crt0.S

Application linker script

sw/common/neorv32.ld

Core hardware driver libraries ("HAL")

sw/lib/include/ & sw/lib/source/

Central application makefile

sw/common/common.mk

Tool for generating NEORV32 executables

sw/image_gen/

Default bootloader

sw/bootloader

Example programs

sw/example

+
+ + + + + +
+ + +
Software Documentation
+All core libraries and example programs are documented "in-code" using Doxygen. +The documentation is automatically built and deployed to GitHub pages and is available online +at https://stnolting.github.io/neorv32/sw/files.html. +
+
+
+ + + + + +
+ + +
Example Programs
+A collection of annotated example programs, which show how to use certain CPU functions +and peripheral/IO modules, can be found in sw/example. +
+
+
+

4.1. Compiler Toolchain

+
+

The toolchain for this project is based on the free and open RISC-V GCC-port. You can find the compiler sources and +build instructions on the official RISC-V GNU toolchain GitHub page: https://github.com/riscv/riscv-gnutoolchain.

+
+
+

The NEORV32 implements a 32-bit RISC-V architecture and uses a 32-bit integer and soft-float ABI by default. +Make sure the toolchain / toolchain build is configured accordingly.

+
+
+
    +
  • +

    MARCH=rv32i

    +
  • +
  • +

    MABI=ilp32

    +
  • +
  • +

    RISCV_PREFIX=riscv32-unknown-elf-

    +
  • +
+
+
+

These default configurations can be overridden at any times using Application Makefile variables.

+
+
+ + + + + +
+ + +More information regarding the toolchain (building from scratch or downloading prebuilt ones) can be found in the +user guide section Software Toolchain Setup. +
+
+
+
+
+

4.2. Core Libraries

+
+

The NEORV32 project provides a set of pre-defined C libraries that allow an easy integration of the processor/CPU features +(also called "HAL" - hardware abstraction layer). All driver and runtime-related files are located in +sw/lib. These library files are automatically included and linked by adding the following include statement:

+
+
+
+
#include <neorv32.h> // NEORV32 HAL, core and runtime libraries
+
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 74. NEORV32 Hardware Abstraction Layer File List
C source fileC header fileDescription

-

neorv32.h

Main NEORV32 library file

neorv32_aux.c

neorv32_aux.h

General auxiliary/helper function

neorv32_cfs.c

neorv32_cfs.h

Custom Functions Subsystem (CFS) HAL

neorv32_crc.c

neorv32_crc.h

Cyclic Redundancy Check (CRC) HAL

neorv32_cpu.c

neorv32_cpu.h

NEORV32 Central Processing Unit (CPU) HAL

neorv32_cpu_amo.c

neorv32_cpu_amo.h

Emulation functions for the read-modify-write A ISA Extension instructions

neorv32_cpu_csr.h

Control and Status Registers (CSRs) definitions

neorv32_cpu_cfu.c

neorv32_cpu_cfu.h

Custom Functions Unit (CFU) HAL

neorv32_dma.c

neorv32_dma.h

Direct Memory Access Controller (DMA) HAL

neorv32_gpio.c

neorv32_gpio.h

General Purpose Input and Output Port (GPIO) HAL

neorv32_gptmr.c

neorv32_gptmr.h

General Purpose Timer (GPTMR) HAL

-

neorv32_intrinsics.h

Macros for intrinsics and custom instructions

-

neorv32_legacy.h

Legacy compatibility layer / wrappers (do not use for new designs!)

neorv32_mtime.c

neorv32_mtime.h

Machine System Timer (MTIME) HAL

neorv32_neoled.c

neorv32_neoled.h

Smart LED Interface (NEOLED) HAL

neorv32_onewire.c

neorv32_onewire.h

One-Wire Serial Interface Controller (ONEWIRE) HAL

neorv32_pwm.c

neorv32_pwm.h

Pulse-Width Modulation Controller (PWM) HAL

neorv32_rte.c

neorv32_rte.h

NEORV32 Runtime Environment

neorv32_sdi.c

neorv32_sdi.h

Serial Data Interface Controller (SDI) HAL

neorv32_slink.c

neorv32_slink.h

Stream Link Interface (SLINK) HAL

neorv32_spi.c

neorv32_spi.h

Serial Peripheral Interface Controller (SPI) HAL

-

neorv32_sysinfo.h

System Configuration Information Memory (SYSINFO) HAL

neorv32_trng.c

neorv32_trng.h

True Random-Number Generator (TRNG) HAL

neorv32_twi.c

neorv32_twi.h

Two-Wire Serial Interface Controller (TWI) HAL

neorv32_uart.c

neorv32_uart.h

Primary Universal Asynchronous Receiver and Transmitter (UART0) and UART1 HAL

neorv32_wdt.c

neorv32_wdt.h

Watchdog Timer (WDT) HAL

neorv32_xip.c

neorv32_xip.h

Execute In Place Module (XIP) HAL

neorv32_xirq.c

neorv32_xirq.h

External Interrupt Controller (XIRQ) HAL

syscalls.c

-

Newlib "system calls" (stubs)

+
+ + + + + +
+ + +
Core Library Documentation
+The doxygen-based documentation of the software framework including all core libraries is available online at +https://stnolting.github.io/neorv32/sw/files.html. +
+
+
+ + + + + +
+ + +
CMSIS System View Description File (SVD)
+A CMSIS-SVD-compatible System View Description (SVD) file including all peripherals is available in sw/svd. +Together with a third-party plugin the processor’s SVD file can be imported right into GDB to allow comfortable +debugging of peripheral/IO devices (see https://github.com/stnolting/neorv32/discussions/656). +
+
+
+
+
+

4.3. Application Makefile

+
+

Application compilation is based on a single, centralized GNU makefile (sw/common/common.mk). Each project in the +sw/example folder provides a makefile that just includes this central makefile.

+
+
+ + + + + +
+ + +When creating a new project, copy an existing project folder or at least the makefile to the new project folder. +It is recommended to create new projects also in sw/example to keep the file dependencies. However, these +dependencies can be manually configured via makefile variables if the new project is located somewhere else. +
+
+
+ + + + + +
+ + +Before the makefile can be used to compile applications, the RISC-V GCC toolchain needs to be installed and +the compiler’s bin folder has to be added to the system’s PATH environment variable. More information can be +found in User Guide: Software Toolchain Setup. +
+
+
+

4.3.1. Makefile Targets

+
+

Just executing make (or executing make help) will show the help menu listing all available targets.

+
+
+
+
$ make
+NEORV32 Software Application Makefile
+Find more information at https://github.com/stnolting/neorv32
+
+Targets:
+ help       - show this text
+ check      - check toolchain
+ info       - show makefile/toolchain configuration
+ gdb        - run GNU debugging session
+ asm        - compile and generate <main.asm> assembly listing file for manual debugging
+ elf        - compile and generate <main.elf> ELF file
+ exe        - compile and generate <neorv32_exe.bin> executable image file for upload via default bootloader (binary file)
+ bin        - compile and generate <neorv32_raw_exe.bin> RAW executable memory image (binary file)
+ hex        - compile and generate <neorv32_raw_exe.hex> RAW executable memory image (hex char file)
+ coe        - compile and generate <neorv32_raw_exe.coe> RAW executable memory image (COE file)
+ mem        - compile and generate <neorv32_raw_exe.mem> RAW executable memory image (MEM file)
+ mif        - compile and generate <neorv32_raw_exe.mif> RAW executable memory image (MIF file)
+ image      - compile and generate VHDL IMEM boot image (for application, no header) in local folder
+ install    - compile, generate and install VHDL IMEM boot image (for application, no header)
+ sim        - in-console simulation using default/simple testbench and GHDL
+ all        - exe + install + hex + bin + asm
+ elf_info   - show ELF layout info
+ clean      - clean up project home folder
+ clean_all  - clean up whole project, core libraries and image generator
+ bl_image   - compile and generate VHDL BOOTROM boot image (for bootloader only, no header) in local folder
+ bootloader - compile, generate and install VHDL BOOTROM boot image (for bootloader only, no header)
+
+Variables:
+ USER_FLAGS     - Custom toolchain flags [append only]: ""
+ USER_LIBS      - Custom libraries [append only]: ""
+ EFFORT         - Optimization level: "-Os"
+ MARCH          - Machine architecture: "rv32i_zicsr_zifencei"
+ MABI           - Machine binary interface: "ilp32"
+ APP_INC        - C include folder(s) [append only]: "-I ."
+ ASM_INC        - ASM include folder(s) [append only]: "-I ."
+ RISCV_PREFIX   - Toolchain prefix: "riscv32-unknown-elf-"
+ NEORV32_HOME   - NEORV32 home folder: "../../.."
+ GDB_ARGS       - GDB (connection) arguments: "-ex target extended-remote localhost:3333"
+ GHDL_RUN_FLAGS - GHDL simulation run arguments: ""
+
+
+
+
+

4.3.2. Makefile Configuration

+
+

The compilation flow is configured via variables right at the beginning of the central +makefile (sw/common/common.mk):

+
+
+ + + + + +
+ + +
Customizing Makefile Variables
+The makefile configuration variables can be overridden or extended directly when invoking the makefile. For +example $ make MARCH=rv32ic_zicsr_zifencei clean_all exe overrides the default MARCH variable definitions. +
+
+
+
Listing 12. Default Makefile Configuration
+
+
# *****************************************************************************
+# USER CONFIGURATION
+# *****************************************************************************
+# User's application sources (*.c, *.cpp, *.s, *.S); add additional files here
+APP_SRC ?= $(wildcard ./*.c) $(wildcard ./*.s) $(wildcard ./*.cpp) $(wildcard ./*.S)
+# User's application include folders (don't forget the '-I' before each entry)
+APP_INC ?= -I .
+# User's application include folders - for assembly files only (don't forget the '-I' before each
+entry)
+ASM_INC ?= -I .
+# Optimization
+EFFORT ?= -Os
+# Compiler toolchain
+RISCV_PREFIX ?= riscv32-unknown-elf-
+# CPU architecture and ABI
+MARCH ?= rv32i_zicsr_zifencei
+MABI  ?= ilp32
+# User flags for additional configuration (will be added to compiler flags)
+USER_FLAGS ?=
+# User libraries (will be included by linker)
+USER_LIBS ?=
+# Language specific compiler flags: C
+CFLAGS ?=
+# C++
+CXXFLAGS ?=
+# Assembly
+ASFLAGS ?=
+# Flags passed only to the linker
+LDFLAGS ?=
+# Relative or absolute path to the NEORV32 home folder
+NEORV32_HOME ?= ../../..
+# GDB arguments
+GDB_ARGS ?= -ex "target extended-remote localhost:3333"
+# *****************************************************************************
+
+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 75. Variables Description

APP_SRC

The source files of the application (.c, .cpp, .S and .s files are allowed; files of these types in the project folder are automatically added via wild cards). Additional files can be added separated by white spaces

APP_INC

Include file folders; separated by white spaces; must be defined with -I prefix

ASM_INC

Include file folders that are used only for the assembly source files (.S/.s).

EFFORT

Optimization level, optimize for size (-Os) is default; legal values: -O0, -O1, -O2, -O3, -Os, -Ofast, …​

RISCV_PREFIX

The toolchain prefix to be used; follows the triplet naming convention [architecture]-[host_system]-[output]-…​

MARCH

The targeted RISC-V architecture/ISA

MABI

Application binary interface (default: 32-bit integer ABI ilp32)

USER_FLAGS

Additional flags that will be forwarded to the compiler tools

USER_LIBS

Additional libraries to include during linking (*.a)

CFLAGS

Additional flags that will be forwarded to the C compiler

CXXFLAGS

Additional flags that will be forwarded to the C++ compiler

ASFLAGS

Additional flags that will be forwarded to the assembler

LDFLAGS

Additional flags that will be forwarded to the linker

NEORV32_HOME

Relative or absolute path to the NEORV32 project home folder; adapt this if the makefile/project is not in the project’s default sw/example folder

GDB_ARGS

Default GDB arguments when running the gdb target

GHDL_RUN_FLAGS

GHDL run arguments (e.g. --stop-time=1ms)

+
+
+

4.3.3. Default Compiler Flags

+
+

The following default compiler flags are used for compiling an application. These flags are defined via the +CC_OPTS variable.

+
+
+ + + + + +
+ + +The makefile’s CC_OPTS is exported as define to be available within a C program; for example +neorv32_uart0_printf("%s\n", CC_OPTS);. +
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

-Wall

Enable all compiler warnings.

-ffunction-sections

Put functions and data segment in independent sections. This allows a code optimization as dead code and unused data can be easily removed.

-nostartfiles

Do not use the default start code. Instead, the NEORV32-specific start-up code (sw/common/crt0.S) is used (pulled-in by the linker script).

-Wl,--gc-sections

Make the linker perform dead code elimination.

-lm

Include/link with math.h.

-lc

Search for the standard C library when linking.

-lgcc

Make sure we have no unresolved references to internal GCC library subroutines.

-mno-fdiv

Use built-in software functions for floating-point divisions and square roots (since the according instructions are not supported yet).

-g

Include debugging information/symbols in ELF.

-mstrict-align

Unaligned memory accesses cannot be resolved by the hardware and require emulation.

-mbranch-cost=10

Branching costs a lot of cycles.

-ffp-contract=off

Do not allow contraction of floating-point operations (no fused operations as they are not supported).

+
+
+

4.3.4. Custom (Compiler) Flags

+
+

Custom flags can be appended to the USER_FLAGS variable. This allows to customize the entire software framework while +calling make without the need to change the makefile(s) or the linker script. The following example will add debug symbols +to the executable (-g) and will also re-define the linker script’s __neorv32_heap_size variable setting the maximal heap +size to 4096 bytes (see sections Linker Script and RAM Layout):

+
+
+
Listing 13. Using the USER_FLAGS Variable for Customization
+
+
$ make USER_FLAGS+="-g -Wl,--__neorv32_heap_size,__heap_size=4096" clean_all exe
+
+
+
+

The configuration can also be made "permanent" by adapting the application’s makefile (make sure to use the +override command here):

+
+
+
Listing 14. Using the USER_FLAGS Variable for Permanent Customization
+
+
override USER_FLAGS += "-g -Wl,--__neorv32_heap_size,__heap_size=4096"
+
+
+
+
+
+
+

4.4. Executable Image Format

+
+

In order to generate an executable for the processors all source files have to be compiled, linked +and packed into a final executable. This executable can be further converted into several image formats.

+
+
+ + + + + +
+ + +
Memory Image Formats
+The NEORV32 software framework includes an Executable Image Generator than can convert an application +into several different file formats. These include raw hex files, a proprietary format for uploading via the +default Bootloader as well as several standard FPGA memory initialization file types (e.g. .coe, +.mem and *.mif). These image file formats are generated by the according Makefile Targets. +
+
+
+

4.4.1. Linker Script

+
+

After all the application sources have been compiled, they need to be linked. +For this purpose the makefile uses the NEORV32-specific linker script. This linker script defines several sections +for the final executable (compare with Address Space). However, only the ram and rom sections are +relevant for the executable itself; the remaining sections are just listed for completeness.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 76. Linker script - memory sections
Memory sectionDescription

ram

Data memory address space (processor-internal Data Memory (DMEM) and/or external memory)

rom

Instruction memory address space (processor-internal Instruction Memory (IMEM) and/or external memory)

xip

Address space for the Execute In Place Module (XIP) (accessing an external SPI memory)

boot

Address space for the processor-internal Bootloader ROM (BOOTROM)

io

Address space for the processor-internal IO/peripheral devices

+
+ + + + + +
+ + +The rom section is automatically re-mapped to the processor-internal Bootloader ROM (BOOTROM) when compiling the +bootloader sources. +
+
+
+

Each section has two main attributes: ORIGIN and LENGTH. ORIGIN defines the base address of the according section +while LENGTH defines its size in bytes. For the ram and rom sections these attributes are configured indirectly +via variables that provide default values.

+
+
+
Listing 15. Linker script - section configuration
+
+
/* Default rom/ram (IMEM/DMEM) sizes */
+__neorv32_rom_size = DEFINED(__neorv32_rom_size) ? __neorv32_rom_size : 2048M;
+__neorv32_ram_size = DEFINED(__neorv32_ram_size) ? __neorv32_ram_size : 8K;
+
+/* Default section base addresses */
+__neorv32_rom_base = DEFINED(__neorv32_rom_base) ? __neorv32_rom_base : 0x00000000;
+__neorv32_ram_base = DEFINED(__neorv32_ram_base) ? __neorv32_ram_base : 0x80000000;
+
+
+
+

The region size and base address configuration can be edited by the user - either by explicitly +changing the default values in the linker script or by overriding them when invoking make:

+
+
+
Listing 16. Overriding default rom size configuration (configuring 4096 bytes)
+
+
$ make USER_FLAGS+="-Wl,--defsym,__neorv32_rom_size=4096" clean_all exe
+
+
+
+ + + + + +
+ + +neorv32_rom_base (= ORIGIN of the rom section) and neorv32_ram_base (= ORIGIN of the ram section) have to +be sync to the actual memory layout configuration of the processor (see section Address Space). +
+
+
+ + + + + +
+ + +The default configuration for the rom section assumes a maximum of 2GB logical memory address space. This size does not +have to reflect the actual physical size of the entire instruction memory. It just provides a maximum limit. When uploading +a new executable via the bootloader, the bootloader itself checks if sufficient physical instruction memory is available. +If a new executable is embedded right into the internal-IMEM the synthesis tool will check, if the configured instruction memory +size is sufficient. +
+
+
+

The linker maps all the regions from the compiled object files into five final sections: .text, +.rodata, .data, .bss and .heap:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 77. Linker script - memory regions
RegionDescription

.text

Executable instructions generated from the start-up code and all application sources.

.rodata

Constants (like strings) from the application; also the initial data for initialized variables.

.data

This section is required for the address generation of fixed (= global) variables only.

.bss

This section is required for the address generation of dynamic memory constructs only.

.heap

This section is required for the address generation of dynamic memory constructs only.

+
+

The .text and .rodata sections are mapped to processor’s instruction memory space and the .data, +.bss and heap sections are mapped to the processor’s data memory space. Finally, the .text, .rodata and .data +sections are extracted and concatenated into a single file main.bin.

+
+
+ + + + + +
+ + +
Section Alignment
+The default NEORV32 linker script aligns all regions so they start and end on a 32-bit (word) boundaries. The default +NEORV32 start-up code (crt0) makes use of this alignment by using word-level memory instructions to initialize the .data +section and to clear the .bss section (faster!). +
+
+
+
+

4.4.2. RAM Layout

+
+

The default NEORV32 linker script uses all of the defined RAM (linker script memory section ram) to several sections. +Note that depending on the application some sections might have zero size.

+
+
+
+400 +
+
Figure 15. Default RAM Layout
+
+
+
    +
  1. +

    Constant data (.data): The constant data section is placed right at the beginning of the RAM. For example, this section +contains explicitly initialized global variables. This section is initialized by the executable.

    +
  2. +
  3. +

    Dynamic data (.bss): The constant data section is followed by the dynamic data section, which contains uninitialized data +like global variables without explicit initialization. This section is cleared by the start-up code crt0.S.

    +
  4. +
  5. +

    Heap (.heap): The heap is used for dynamic memory that is managed by functions like malloc() and free(). The heap +grows upwards. This section is not initialized at all.

    +
  6. +
  7. +

    Stack: The stack starts at the very end of the RAM at address ORIGIN(ram) + LENGTH(ram) - 4. The stack grows downwards.

    +
  8. +
+
+
+

There is no explicit limit for the maximum stack size as this is hard to check. However, a physical memory protection rule could +be used to configure a maximum size by adding a "protection area" between stack and heap (a PMP region without any access rights).

+
+
+ + + + + +
+ + +
Heap Size
+The maximum size of the heap is defined by the linker script’s neorv32_heap_size variable. This variable has to be +explicitly defined in order to define a heap size (and to use dynamic memory allocation at all) other than zero. The user +can define the heap size while invoking the application makefile: $ USER_FLAGS+="-Wl,--defsym,neorv32_heap_size=4k" make clean_all exe +(defines a heap size of 4*1024 bytes). +
+
+
+ + + + + +
+ + +
Heap-Stack Collisions
+Take care when using dynamic memory to avoid collision of the heap and stack memory areas. There is no compile-time protection +mechanism available as the actual heap and stack size are defined by runtime data. Also beware of fragmentation when +using dynamic memory allocation. +
+
+
+
+

4.4.3. C Standard Library

+
+

The default software framework relies on newlib as default C standard library.

+
+
+ + + + + +
+ + +
RTOS Support
+The NEORV32 CPU and processor do support embedded RTOS like FreeRTOS and Zephyr. See the User guide section +Zephyr RTOS Support and +FreeRTOS Support +for more information.
+
+
+
+

+ +The FreeRTOS port and demo is available in a separate repository: https://github.com/stnolting/neorv32-freertos

+
+
+

Newlib provides stubs for common "system calls" (like file handling and standard input/output) that are used by other +C libraries like stdio. These stubs are available in sw/source/source/syscalls.c and were adapted for the NEORV32 processor.

+
+
+ + + + + +
+ + +
Standard Consoles
+The UART0 +is used to implement all the standard input, output and error consoles (STDIN, STDOUT and STDERR). +
+
+
+ + + + + +
+ + +
Constructors and Destructors
+Constructors and destructors for plain C code or for C++ applications are supported by the software framework. +See sw/example/hello_cpp for a minimal example. +
+
+
+ + + + + +
+ + +
Newlib Test/Demo Program
+A simple test and demo program, which uses some of newlib’s core functions (like malloc/free and read/write) +is available in sw/example/demo_newlib +
+
+
+
+

4.4.4. Executable Image Generator

+
+

The main.bin file is packed by the NEORV32 image generator (sw/image_gen) to generate the final executable file. +The image generator can generate several types of executable file formats selected by a flag when calling the generator:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

-app_bin

Generates an executable binary file neorv32_exe.bin (including bootloader header) for uploading via the bootloader.

-app_img

Generates an executable VHDL memory initialization image for the processor-internal IMEM. This option regenerates the rtl/core/neorv32_application_image.vhd file.

-bld_img

Generates an executable VHDL memory initialization image for the processor-internal BOOT ROM. This option regenerates the rtl/core/neorv32_bootloader_image.vhd file.

-raw_hex

Generates a raw 8x ASCII hex-char file neorv32_raw_exe.hex for custom purpose.

-raw_bin

Generates a raw binary file neorv32_raw_exe.bin for custom purpose.

-raw_coe

Generates a raw COE file neorv32_raw_exe.coe for FPGA memory initialization.

-raw_mem

Generates a raw MEM file neorv32_raw_exe.mem for FPGA memory initialization.

-raw_mif

Generates a raw MIF file neorv32_raw_exe.mif for FPGA memory initialization.

+
+

All these options are managed by the makefile (see Makefile Targets).

+
+
+ + + + + +
+ + +
Image Generator Compilation
+The sources of the image generator are automatically compiled when invoking the makefile (requiring a native GCC installation). +
+
+
+ + + + + +
+ + +
Executable Header
+The image generator add a small header to the neorv32_exe.bin executable, which consists of three 32-bit words located right +at the beginning of the file. The first word of the executable is the signature word and is always 0x4788cafe. Based on this +word the bootloader can identify a valid image file. The next word represents the size in bytes of the actual program image in +bytes. A simple "complement" checksum of the actual program image is given by the third word. This provides a simple protection +against data transmission or storage errors. Note that this executable format cannot be used for direct execution (e.g. via +XIP or direct memory access). +
+
+
+
+

4.4.5. Start-Up Code (crt0)

+
+

The CPU and also the processor require a minimal start-up and initialization code to bring the CPU (and the SoC) +into a stable and initialized state and to initialize the C runtime environment before the actual application can be executed. +This start-up code is located in sw/common/crt0.S and is automatically linked every application program +and placed right before the actual application code so it gets executed right after reset.

+
+
+

The crt0.S start-up performs the following operations:

+
+
+
    +
  1. +

    Clear mstatus.

    +
  2. +
  3. +

    Clear mie disabling all interrupt sources.

    +
  4. +
  5. +

    Install an Early Trap Handler to mtvec.

    +
  6. +
  7. +

    Initialize the global pointer gp and the stack pointer sp according to the RAM Layout provided by the linker script.

    +
  8. +
  9. +

    Initialize all integer register x1 - x31 (only x1 - x15 if the E CPU extension is enabled).

    +
  10. +
  11. +

    Setup .data section to configure initialized variables.

    +
  12. +
  13. +

    Clear the .bss section.

    +
  14. +
  15. +

    Call all constructors (if there are any).

    +
  16. +
  17. +

    Call the application’s main function (with no arguments: argc = argv = 0).

    +
  18. +
  19. +

    If main returns:

    +
    +
      +
    • +

      All interrupt sources are disabled by clearing mie.

      +
    • +
    • +

      The return value of main is copied to the mscratch CSR to allow inspection by the debugger.

      +
    • +
    • +

      Call all destructors (if there are any). If any destructor causes an exception the crt0’s trap handler is used for handling (= skipping) this.

      +
    • +
    • +

      The CPU enters sleep mode executing the wfi instruction in an endless loop.

      +
    • +
    +
    +
  20. +
+
+
+
Early Trap Handler
+
+

The start-up code provides a very basic trap handler for the early boot stage. This handler does nothing but trying to move +on to the next linear instruction whenever an interrupt or synchronous exception is encountered.

+
+
+

This simple trap handler does not interact with the stack at all as it just uses a single register that is backup-ed +using the mscratch CSR. Furthermore, the information if the trap-causing instruction is compressed or uncompressed +is not determined by loading the instruction from memory. Instead, the transformed instruction word is read from the +mtinst CSRs. These two features allow the trap handler to execute with minimal latency and high robustness.

+
+
+ + + + + +
+ + +The early-trap handler should be replaced by a more capable / informative one as soon as the application software is started +(for example by using the NEORV32 Runtime Environment). +
+
+
+
+
+
+
+

4.5. Bootloader

+
+ + + + + +
+ + +
Pre-Built Bootloader Image
+This section refers to the default NEORV32 bootloader. A pre-compiled memory image for the processor-internal +Bootloader ROM (BOOTROM) is available in the project’s rtl folder: rtl/core/neorv32_bootloader_image.vhd. +This image is automatically inserted into the boot ROM when synthesizing the processor with the bootloader being +enabled. Note that the default bootloader image was compiled for a minimal rv32i + priv. ISA! +
+
+
+

The NEORV32 bootloader (sw/bootloader/bootloader.c) provides an optional built-in firmware that +allows to upload new application executables at any time without the need to re-synthesize the FPGA’s bitstream. +A UART connection is used to provide a simple text-based user interface that allows to upload executables.

+
+
+

Furthermore, the bootloader provides options to store an executable to a processor-external SPI flash. +An "auto boot" feature can optionally fetch this executable right after reset if there is no user interaction +via UART. This allows to build processor setups with non-volatile application storage while maintaining the option +to update the application software at any timer.

+
+
+

4.5.1. Bootloader SoC/CPU Requirements

+
+

The bootloader requires certain CPU and SoC extensions and modules to be enabled in order to operate correctly.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

REQUIRED

The bootloader is implemented only if the INT_BOOTLOADER_EN top generic is true. This will automatically select the CPU’s Indirect Boot boot configuration.

REQUIRED

The bootloader requires the privileged architecture CPU extension (Zicsr ISA Extension) to be enabled.

REQUIRED

At least 512 bytes of data memory (processor-internal DMEM or processor-external DMEM) are required for the bootloader’s stack and global variables.

RECOMMENDED

For user interaction via the Bootloader Console (like uploading executables) the primary UART (Primary Universal Asynchronous Receiver and Transmitter (UART0)) is required.

RECOMMENDED

The default bootloader uses bit 0 of the General Purpose Input and Output Port (GPIO) output port to drive a high-active "heart beat" status LED.

RECOMMENDED

The Machine System Timer (MTIME) is used to control blinking of the status LED and also to automatically trigger the Auto Boot Sequence.

OPTIONAL

The SPI controller (Serial Peripheral Interface Controller (SPI)) is needed to store/load executable from external flash using the Auto Boot Sequence.

OPTIONAL

The XIP controller (Execute In Place Module (XIP)) is needed to boot/execute code directly from a pre-programmed SPI flash.

+
+
+

4.5.2. Bootloader Flash Requirements

+
+

The bootloader can access an SPI-compatible flash via the processor’s top entity SPI port. By default, the flash +chip-select line is driven by spi_csn_o(0) and the SPI clock uses 1/8 of the processor’s main clock as clock frequency. +The SPI flash has to support single-byte read and write operations, 24-bit addresses and at least the following standard commands:

+
+
+
    +
  • +

    0x02: Program page (write byte)

    +
  • +
  • +

    0x03: Read data (byte)

    +
  • +
  • +

    0x04: Write disable (for volatile status register)

    +
  • +
  • +

    0x05: Read (first) status register

    +
  • +
  • +

    0x06: Write enable (for volatile status register)

    +
  • +
  • +

    0xAB: Wake-up from sleep mode (optional)

    +
  • +
  • +

    0xD8: Block erase (64kB)

    +
  • +
+
+
+ + + + + +
+ + +
Custom Configuration
+Most properties (like chip select line, flash address width, SPI clock frequency, …​) of the default bootloader can be reconfigured +without the need to change the source code. Custom configuration can be made using command line switches (defines) when recompiling +the bootloader. See the User Guide https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader for more information. +
+
+
+
+

4.5.3. Bootloader Console

+
+

To interact with the bootloader, connect the primary UART (UART0) signals (uart0_txd_o and uart0_rxd_o) of the processor’s top +entity via a serial port (-adapter) to your computer (hardware flow control is not used so the according interface signals can be +ignored), configure your terminal program using the following settings and perform a reset of the processor.

+
+
+

Terminal console settings (19200-8-N-1):

+
+
+
    +
  • +

    19200 Baud

    +
  • +
  • +

    8 data bits

    +
  • +
  • +

    no parity bit

    +
  • +
  • +

    1 stop bit

    +
  • +
  • +

    newline on \r\n (carriage return, newline)

    +
  • +
  • +

    no transfer protocol / control flow protocol - just raw bytes

    +
  • +
+
+
+ + + + + +
+ + +
Terminal Program
+Any terminal program that can connect to a serial port should work. However, make sure the program +can transfer data in raw byte mode without any protocol overhead (e.g. XMODEM). Some terminal programs struggle with +transmitting files larger than 4kB (see https://github.com/stnolting/neorv32/pull/215). Try a different terminal program +if uploading of a binary does not work. +
+
+
+

The bootloader uses the LSB of the top entity’s gpio_o output port as high-active status LED. All other +output pins are set to low level and won’t be altered. After reset, the status LED will start blinking at 2Hz and the +following intro screen shows up:

+
+
+
+
<< NEORV32 Bootloader >>
+
+BLDV: Mar  7 2023
+HWV:  0x01080107
+CLK:  0x05f5e100
+MISA: 0x40901106
+XISA: 0xc0000fab
+SOC:  0xffff402f
+IMEM: 0x00008000
+DMEM: 0x00002000
+
+Autoboot in 10s. Press any key to abort.
+
+
+
+

The start-up screen gives some brief information about the bootloader and several system configuration parameters:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

BLDV

Bootloader version (built date).

HWV

Processor hardware version (the mimpid CSR); in BCD format; example: 0x01040606 = v1.4.6.6).

CLK

Processor clock speed in Hz (via the CLK register from the System Configuration Information Memory (SYSINFO).

MISA

RISC-V CPU extensions (misa CSR).

XISA

NEORV32-specific CPU extensions (mxisa CSR).

SOC

Processor configuration (via the SOC register from the System Configuration Information Memory (SYSINFO).

IMEM

Internal IMEM size in byte (via the MEM register from the System Configuration Information Memory (SYSINFO).

DMEM

Internal DMEM size in byte (via the MEM register from the System Configuration Information Memory (SYSINFO).

+
+

Now you have 10 seconds to press any key. Otherwise, the bootloader starts the Auto Boot Sequence. When +you press any key within the 10 seconds, the actual bootloader user console starts:

+
+
+
+
<< NEORV32 Bootloader >>
+
+BLDV: Mar  7 2023
+HWV:  0x01080107
+CLK:  0x05f5e100
+MISA: 0x40901106
+XISA: 0xc0000fab
+SOC:  0xffff402f
+IMEM: 0x00008000
+DMEM: 0x00002000
+
+Autoboot in 10s. Press any key to abort. (1)
+Aborted.
+
+Available CMDs:
+ h: Help
+ r: Restart
+ u: Upload
+ s: Store to flash
+ l: Load from flash
+ x: Boot from flash (XIP)
+ e: Execute
+CMD:>
+
+
+
+ + + + + +
1Auto boot sequence aborted due to user console input.
+
+
+

The auto boot countdown is stopped and the bootloader’s user console is ready to receive one of the following commands:

+
+
+
    +
  • +

    h: Show the help text (again)

    +
  • +
  • +

    r: Restart the bootloader and the auto-boot sequence

    +
  • +
  • +

    u: Upload new program executable (neorv32_exe.bin) via UART into the instruction memory

    +
  • +
  • +

    s: Store executable to SPI flash at spi_csn_o(0) (little-endian byte order)

    +
  • +
  • +

    l: Load executable from SPI flash at spi_csn_o(0) (little-endian byte order)

    +
  • +
  • +

    x: Boot program directly from flash via XIP (requires a pre-programmed image)

    +
  • +
  • +

    e: Start the application, which is currently stored in the instruction memory (IMEM)

    +
  • +
+
+
+

A new executable can be uploaded via UART by executing the u command. After that, the executable can be directly +executed via the e command. To store the recently uploaded executable to an attached SPI flash press s. To +directly load an executable from the SPI flash press l. The bootloader and the auto-boot sequence can be +manually restarted via the r command.

+
+
+ + + + + +
+ + +
Executable Upload
+Make sure to upload the NEORV32 executable neorv32_exe.bin. Uploading any other file (like main.bin) +will cause an ERR_EXE bootloader error (see Bootloader Error Codes). +
+
+
+ + + + + +
+ + +
Booting via XIP
+The bootloader allows to execute an application right from flash using the Execute In Place Module (XIP) module. +This requires a pre-programmed flash. The bootloader’s "store" option can not be used to program an XIP image. +
+
+
+ + + + + +
+ + +
SPI Flash Power Down Mode
+The bootloader will issue a "wake-up" command prior to using the SPI flash to ensure it is not +in sleep mode / power-down mode (see https://github.com/stnolting/neorv32/pull/552). +
+
+
+ + + + + +
+ + +
Default Configuration
+More information regarding the default SPI, GPIO, XIP, etc. configuration can be found in the User Guide +section https://stnolting.github.io/neorv32/ug/#_customizing_the_internal_bootloader. +
+
+
+ + + + + +
+ + +
SPI Flash Programming
+For detailed information on using an SPI flash for application storage see User Guide section +Programming an External SPI Flash via the Bootloader. +
+
+
+
+

4.5.4. Auto Boot Sequence

+
+

When you reset the NEORV32 processor, the bootloader waits 8 seconds for a UART console input before it +starts the automatic boot sequence. This sequence tries to fetch a valid boot image from the external SPI +flash, connected to SPI chip select spi_csn_o(0). If a valid boot image is found that can be successfully +transferred into the instruction memory, it is automatically started. If no SPI flash is detected or if there +is no valid boot image found, and error code will be shown.

+
+
+
+

4.5.5. Bootloader Error Codes

+
+

If something goes wrong during bootloader operation an error code and a short message is shown. In this case the processor +is halted, the bootloader status LED is permanently activated and the processor has to be reset manually.

+
+
+ + + + + +
+ + +In many cases the error source is just temporary (like some HF spike during an UART upload). Just try again. +
+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

ERR_EXE

If you try to transfer an invalid executable (via UART or from the external SPI flash), this error message shows up. There might be a transfer protocol configuration error in the terminal program or maybe just the wrong file was selected. Also, if no SPI flash was found during an auto-boot attempt, this message will be displayed.

ERR_SIZE

Your program is way too big for the internal processor’s instructions memory. Increase the memory size or reduce your application code.

ERR_CHKS

This indicates a checksum error. Something went wrong during the transfer of the program image (upload via UART or loading from the external SPI flash). If the error was caused by a UART upload, just try it again. When the error was generated during a flash access, the stored image might be corrupted.

ERR_FLSH

This error occurs if the attached SPI flash cannot be accessed. Make sure you have the right type of flash and that it is properly connected to the NEORV32 SPI port using chip select #0.

ERR_EXC

The bootloader encountered an unexpected exception during operation. This might be caused when it tries to access peripherals that were not implemented during synthesis. Example: executing commands l or s (SPI flash operations) without the SPI module being implemented.

+
+ + + + + +
+ + +If an unexpected exception has been raised the bootloader prints hexadecimal debug information showing +the mcause, mepc and mtval CSR values. +
+
+
+
+
+
+

4.6. NEORV32 Runtime Environment

+
+

The NEORV32 software framework provides a minimal runtime environment (abbreviated "RTE") that takes care of a stable +and safe execution environment by handling all traps (exceptions & interrupts). The RTE simplifies trap handling +by wrapping the CPU’s privileged architecture (i.e. trap-related CSRs) into a unified software API.

+
+
+

Once initialized, the RTE provides Default RTE Trap Handlers that catch all possible traps. These +default handlers just output a message via UART to inform the user when a certain trap has been triggered. The +default handlers can be overridden by the application code to install application-specific handler functions for each trap.

+
+
+ + + + + +
+ + +Using the RTE is optional but highly recommended. The RTE provides a simple and comfortable way of delegating +traps to application-specific handlers while making sure that all traps (even though they are not explicitly used +by the application) are handled correctly. Performance-optimized applications or embedded operating systems may +not use the RTE at all in order to increase response time. +
+
+
+

4.6.1. RTE Operation

+
+

The RTE manages the trap-related CSRs of the CPU’s privileged architecture (Machine Trap Handling CSRs). +It initializes the mtvec CSR in DIRECT mode, which then provides the base entry point for all traps. The address +stored to this register defines the address of the first-level trap handler, which is provided by the +NEORV32 RTE. Whenever an exception or interrupt is triggered this first-level trap handler is executed.

+
+
+

The first-level handler performs a complete context save, analyzes the source of the trap and +calls the according second-level trap handler, which takes care of the actual exception/interrupt +handling. The RTE manages a private look-up table to store the addresses of the according second-level trap handlers.

+
+
+

After the initial RTE setup, each entry in the RTE’s trap handler look-up table is initialized with a +Default RTE Trap Handlers. These default handler do not execute any trap-related operations - they +just output a message via the primary UART (UART0) to inform the user that a trap has occurred, which is not (yet) +handled by the actual application. After sending this message, the RTE tries to continue executing the actual program +by resolving the trap cause.

+
+
+
+

4.6.2. Using the RTE

+
+ + + + + +
+ + +All provided RTE functions can be called only from machine-mode code. +
+
+
+

The NEORV32 is part of the default NEORV32 software framework. However, it has to explicitly enabled by calling +the RTE’s setup function:

+
+
+
Listing 17. RTE Setup (Function Prototype)
+
+
void neorv32_rte_setup(void);
+
+
+
+ + + + + +
+ + +The RTE should be enabled right at the beginning of the application’s main function. +
+
+
+ + + + + +
+ + +It is recommended to not use the mscratch CSR when using the RTE as this register is used to provide services +for Application Context Handling (i.e. modifying the registers of application code that caused a trap). +
+
+
+

As mentioned above, all traps will just trigger execution of the RTE’s Default RTE Trap Handlers at first. +To use application-specific handlers, which actually "handle" a trap, the default handlers can be overridden +by installing user-defined ones:

+
+
+
Listing 18. Installing an Application-Specific Trap Handler (Function Prototype)
+
+
int neorv32_rte_handler_install(uint8_t id, void (*handler)(void));
+
+
+
+

The first argument id defines the "trap ID" (for example a certain interrupt request) that shall be handled +by the user-defined handler. These IDs are defined in sw/lib/include/neorv32_rte.h:

+
+
+
Listing 19. RTE Trap Identifiers (cut-out)
+
+
enum NEORV32_RTE_TRAP_enum {
+  RTE_TRAP_I_MISALIGNED =  0, /**< Instruction address misaligned */
+  RTE_TRAP_I_ACCESS     =  1, /**< Instruction (bus) access fault */
+  RTE_TRAP_I_ILLEGAL    =  2, /**< Illegal instruction */
+  RTE_TRAP_BREAKPOINT   =  3, /**< Breakpoint (EBREAK instruction) */
+  RTE_TRAP_L_MISALIGNED =  4, /**< Load address misaligned */
+  RTE_TRAP_L_ACCESS     =  5, /**< Load (bus) access fault */
+  RTE_TRAP_S_MISALIGNED =  6, /**< Store address misaligned */
+  RTE_TRAP_S_ACCESS     =  7, /**< Store (bus) access fault */
+  RTE_TRAP_UENV_CALL    =  8, /**< Environment call from user mode (ECALL instruction) */
+  RTE_TRAP_MENV_CALL    =  9, /**< Environment call from machine mode (ECALL instruction) */
+  RTE_TRAP_MSI          = 10, /**< Machine software interrupt */
+  RTE_TRAP_MTI          = 11, /**< Machine timer interrupt */
+  RTE_TRAP_MEI          = 12, /**< Machine external interrupt */
+  RTE_TRAP_FIRQ_0       = 13, /**< Fast interrupt channel 0 */
+  RTE_TRAP_FIRQ_1       = 14, /**< Fast interrupt channel 1 */
+  RTE_TRAP_FIRQ_2       = 15, /**< Fast interrupt channel 2 */
+  RTE_TRAP_FIRQ_3       = 16, /**< Fast interrupt channel 3 */
+  RTE_TRAP_FIRQ_4       = 17, /**< Fast interrupt channel 4 */
+  RTE_TRAP_FIRQ_5       = 18, /**< Fast interrupt channel 5 */
+  RTE_TRAP_FIRQ_6       = 19, /**< Fast interrupt channel 6 */
+  RTE_TRAP_FIRQ_7       = 20, /**< Fast interrupt channel 7 */
+  RTE_TRAP_FIRQ_8       = 21, /**< Fast interrupt channel 8 */
+  RTE_TRAP_FIRQ_9       = 22, /**< Fast interrupt channel 9 */
+  RTE_TRAP_FIRQ_10      = 23, /**< Fast interrupt channel 10 */
+  RTE_TRAP_FIRQ_11      = 24, /**< Fast interrupt channel 11 */
+  RTE_TRAP_FIRQ_12      = 25, /**< Fast interrupt channel 12 */
+  RTE_TRAP_FIRQ_13      = 26, /**< Fast interrupt channel 13 */
+  RTE_TRAP_FIRQ_14      = 27, /**< Fast interrupt channel 14 */
+  RTE_TRAP_FIRQ_15      = 28  /**< Fast interrupt channel 15 */
+
+
+
+

The second argument *handler is the actual function that implements the user-defined trap handler. +The custom handler functions need to have a specific format without any arguments and with no return value:

+
+
+
Listing 20. Custom Trap Handler (Function Prototype)
+
+
void custom_trap_handler_xyz(void) {
+
+  // handle trap...
+}
+
+
+
+ + + + + +
+ + +
Custom Trap Handler Attributes
+Do NOT use the interrupt attribute for the application trap handler functions! This +will place a mret instruction to the end of it making it impossible to return to the first-level +trap handler of the RTE core, which will cause stack corruption. +
+
+
+

The following example shows how to install a custom handler (custom_mtime_irq_handler) for handling +the RISC-V machine timer (MTIME) interrupt:

+
+
+
Listing 21. Installing a MTIME IRQ Handler
+
+
neorv32_rte_handler_install(RTE_TRAP_MTI, custom_mtime_irq_handler);
+
+
+
+

User-defined trap handlers can also be un-installed. This will remove the users trap handler from the RTE core +and will re-install the Default RTE Trap Handlers for the specific trap.

+
+
+
Listing 22. Function Prototype: Installing an Application-Specific Trap Handler
+
+
int neorv32_rte_handler_uninstall(uint8_t id);
+
+
+
+

The argument id defines the identifier of the according trap that shall be un-installed. +The following example shows how to un-install the custom handler custom_mtime_irq_handler from the +RISC-V machine timer (MTIME) interrupt:

+
+
+
Listing 23. Example: Removing the Custom MTIME IRQ Handler
+
+
neorv32_rte_handler_uninstall(RTE_TRAP_MTI);
+
+
+
+ + + + + +
+ + +The current RTE configuration can be printed via UART0 via the neorv32_rte_info function. +
+
+
+
+

4.6.3. Default RTE Trap Handlers

+
+

The default RTE trap handlers are executed when a certain trap is triggered that is not (yet) handled by an +application-defined trap handler. The default handler will output a message giving additional debug information +via the Primary Universal Asynchronous Receiver and Transmitter (UART0) to inform the user and it will also +try to resume normal program execution. Some exemplary RTE outputs are shown below.

+
+
+ + + + + +
+ + +
Continuing Execution
+In most cases the RTE can successfully continue operation - for example if it catches an interrupt request +that is not handled by the actual application program. However, if the RTE catches an un-handled trap like +a bus access fault exception continuing execution will most likely fail making the CPU crash. Some exceptions +cannot be resolved by the default debug trap handlers and will halt the CPU (see example below). +
+
+
+
Listing 24. RTE Default Trap Handler Output Examples
+
+
<NEORV32-RTE> [M] Illegal instruction @ PC=0x000002d6, MTINST=0x000000FF, MTVAL=0x00000000 </NEORV32-RTE> (1)
+<NEORV32-RTE> [U] Illegal instruction @ PC=0x00000302, MTINST=0x00000000, MTVAL=0x00000000 </NEORV32-RTE> (2)
+<NEORV32-RTE> [U] Load address misaligned @ PC=0x00000440, MTINST=0x01052603, MTVAL=0x80000101 </NEORV32-RTE> (3)
+<NEORV32-RTE> [M] Fast IRQ 0x00000003 @ PC=0x00000820, MTINST=0x00000000, MTVAL=0x00000000 </NEORV32-RTE> (4)
+<NEORV32-RTE> [M] Instruction access fault @ PC=0x90000000, MTINST=0x42078b63, MTVAL=0x00000000 !!FATAL EXCEPTION!! Halting CPU. </NEORV32-RTE>\n (5)
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Illegal 32-bit instruction MTINST=0x000000FF at address PC=0x000002d6 while the CPU was in machine-mode ([M]).
2Illegal 16-bit instruction MTINST=0x00000000 at address PC=0x00000302 while the CPU was in user-mode ([U]).
3Misaligned load access at address PC=0x00000440 caused by instruction MTINST=0x01052603 (trying to load a full 32-bit word from address MTVAL=0x80000101) while the CPU was in machine-mode ([U]).
4Fast interrupt request from channel 3 before executing instruction at address PC=0x00000820 while the CPU was in machine-mode ([M]).
5Instruction bus access fault at address PC=0x90000000 while executing instruction MTINST=0x42078b63 - this is fatal for the default debug trap handler while the CPU was in machine-mode ([M]).
+
+
+

The specific message right at the beginning of the debug trap handler message corresponds to the trap code +obtained from the mcause CSR (see NEORV32 Trap Listing). A full list of all messages and the according +mcause trap codes is shown below.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 78. RTE Default Trap Handler Messages and According mcause Values
Trap identifierAccording mcause CSR value

"Instruction address misaligned"

0x00000000

"Instruction access fault"

0x00000001

"Illegal instruction"

0x00000002

"Breakpoint"

0x00000003

"Load address misaligned"

0x00000004

"Load access fault"

0x00000005

"Store address misaligned"

0x00000006

"Store access fault"

0x00000007

"Environment call from U-mode"

0x00000008

"Environment call from M-mode"

0x0000000b

"Machine software IRQ"

0x80000003

"Machine timer IRQ"

0x80000007

"Machine external IRQ"

0x8000000b

"Fast IRQ 0x00000000"

0x80000010

"Fast IRQ 0x00000001"

0x80000011

"Fast IRQ 0x00000002"

0x80000012

"Fast IRQ 0x00000003"

0x80000013

"Fast IRQ 0x00000004"

0x80000014

"Fast IRQ 0x00000005"

0x80000015

"Fast IRQ 0x00000006"

0x80000016

"Fast IRQ 0x00000007"

0x80000017

"Fast IRQ 0x00000008"

0x80000018

"Fast IRQ 0x00000009"

0x80000019

"Fast IRQ 0x0000000a"

0x8000001a

"Fast IRQ 0x0000000b"

0x8000001b

"Fast IRQ 0x0000000c"

0x8000001c

"Fast IRQ 0x0000000d"

0x8000001d

"Fast IRQ 0x0000000e"

0x8000001e

"Fast IRQ 0x0000000f"

0x8000001f

"Unknown trap cause"

undefined

+
+
+

4.6.4. Application Context Handling

+
+

Upon trap entry the RTE backups the entire application context (i.e. all x general purpose registers) +to the stack. The context is restored automatically after trap completion. The base address of the according +stack frame is copied to the mscratch CSR. By having this information available, the RTE provides dedicated +functions for accessing and altering the application context:

+
+
+
Listing 25. Context Access Functions
+
+
// Prototypes
+uint32_t neorv32_rte_context_get(int x); // read register x
+void     neorv32_rte_context_put(int x, uint32_t data); write data to register x
+
+// Examples
+uint32_t tmp = neorv32_rte_context_get(9); // read register 'x9'
+neorv32_rte_context_put(28, tmp); // write 'tmp' to register 'x28'
+
+
+
+ + + + + +
+ + +
RISC-V E Extension
+Registers x16..x31 are not available if the RISC-V E ISA Extension is enabled. +
+
+
+

The context access functions can be used by application-specific trap handlers to emulate unsupported +CPU / SoC features like unimplemented IO modules, unsupported instructions and even unaligned memory accesses.

+
+
+ + + + + +
+ + +
Demo Program: Emulate Unaligned Memory Access
+A demo program, which showcases how to emulate unaligned memory accesses using the NEORV32 runtime environment +can be found in sw/example/demo_emulate_unaligned. +
+
+
+
+
+
+
+
+

5. On-Chip Debugger (OCD)

+
+
+

The NEORV32 Processor features an on-chip debugger (OCD) implementing the execution-based debugging scheme +compatible to the Minimal RISC-V Debug Specification. A copy of the specification is +available in docs/references.

+
+
+

Key Features

+
+
+
    +
  • +

    standard JTAG access port

    +
  • +
  • +

    full control of the CPU: halting, single-stepping and resuming

    +
  • +
  • +

    indirect access to all core registers (via program buffer)

    +
  • +
  • +

    indirect access to the whole processor address space (via program buffer)

    +
  • +
  • +

    trigger module for hardware breakpoints

    +
  • +
  • +

    compatible with upstream OpenOCD and GDB

    +
  • +
+
+
+

Section Structure

+
+
+

This chapter is separated into four sections:

+
+ +
+ + + + + +
+ + +
GDB + SVD
+Together with a third-party plugin the processor’s SVD file can be imported right into GDB to allow comfortable +debugging of peripheral/IO devices (see https://github.com/stnolting/neorv32/discussions/656). +
+
+
+ + + + + +
+ + +
Hands-On Tutorial
+A simple example on how to use NEORV32 on-chip debugger in combination with OpenOCD and the GNU debugger is shown in +section Debugging using the On-Chip Debugger +of the User Guide. +
+
+
+

The NEORV32 on-chip debugger is based on four hardware modules:

+
+
+
+neorv32 ocd complex +
+
Figure 16. NEORV32 on-chip debugger complex
+
+
+
    +
  1. +

    Debug Transport Module (DTM) (rtl/core/neorv32_debug_dtm.vhd): JTAG access tap to allow an external +adapter to interface with the debug module (DM) using the debug module interface (dmi).

    +
  2. +
  3. +

    Debug Module (DM) (rtl/core/neorv32_debug_tm.vhd): RISC-V debug module that is configured by the DTM via the dmi. +From the CPU’s "point of view" this module behaves as another memory-mapped peripheral that can be accessed via the +processor-internal bus. The memory-mapped registers provide an internal data buffer for data transfer from/to the DM, a +code ROM containing the "park loop" code, a program buffer to allow the debugger to execute small programs defined by the +DM and a status register that is used to communicate exception, halt, resume and execute requests/acknowledges from/to the DM.

    +
  4. +
  5. +

    CPU Debug Mode extension (part of rtl/core/neorv32_cpu_control.vhd): This extension provides the "debug execution mode" +as another operation mode, which is used to execute the park loop code from the DM. This mode also provides additional CSRs and instructions.

    +
  6. +
  7. +

    CPU Trigger Module (also part of rtl/core/neorv32_cpu_control.vhd): This module provides a single hardware breakpoint.

    +
  8. +
+
+
+

Theory of Operation

+
+
+

When debugging the system using the OCD, the debugger issues a halt request to the CPU (via the CPU’s +db_halt_req_i signal) to make the CPU enter debug mode. In this mode, the application-defined architectural +state of the system/CPU is "frozen" so the debugger can monitor if without interfering with the actual application. +However, the OCD can also modify the entire architectural state at any time. While in debug mode, the debugger has +full control over the entire CPU and processor operating at highest-privileged mode.

+
+
+

While in debug mode, the CPU executes the "park loop" code from the code ROM of the debug module (DM). +This park loop implements an endless loop, where the CPU polls a memory-mapped Status Register that is +controlled by the DM. The flags in this register are used to communicate requests from +the DM and to acknowledge them by the CPU: trigger execution of the program buffer or resume the halted +application. Furthermore, the CPU uses this register to signal that the CPU has halted after a halt request +and to signal that an exception has been triggered while being in debug mode.

+
+
+
+

5.1. Debug Transport Module (DTM)

+
+

The debug transport module "DTM" (VHDL module: rtl/core/neorv32_debug_dtm.vhd) provides a JTAG test access port ("tap"). +External JTAG access is provided by the following top-level ports:

+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 79. JTAG top level signals
NameWidthDirectionDescription

jtag_tck_i

1

in

serial clock

jtag_tdi_i

1

in

serial data input

jtag_tdo_o

1

out

serial data output

jtag_tms_i

1

in

mode select

+
+ + + + + +
+ + +
Maximum JTAG Clock
+All JTAG signals are synchronized to the processor’s clock domain. Hence, no additional clock domain is required for the DTM. +However, this constraints the maximal JTAG clock frequency (jtag_tck_i) to be less than or equal to 1/5 of the processor +clock frequency (clk_i). +
+
+
+ + + + + +
+ + +
JTAG TAP Reset
+The NEORV32 JTAG TAP does not provide a dedicated reset signal ("TRST"). However, the missing TRST is not a problem, +since JTAG-level resets can be triggered using with TMS signaling. +
+
+
+ + + + + +
+ + +
Maintaining JTAG Chain
+If the on-chip debugger is disabled the JTAG serial input jtag_tdi_i is directly +connected to the JTAG serial output jtag_tdo_o to maintain the JTAG chain. +
+
+
+

JTAG accesses are based on a single instruction register IR, which is 5 bit wide, and several data registers DR +with different sizes. The individual data registers are accessed by writing the according address to the instruction +register. The following table shows the available data registers and their addresses:

+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 80. JTAG TAP registers
Address (via IR)NameSize (bits)Description

00001

IDCODE

32

identifier, version and part ID fields are hardwired to zero, manufacturer ID is assigned via the JEDEC_ID top generic (Processor Top Entity - Generics)

10000

DTMCS

32

debug transport module control and status register

10001

DMI

41

debug module interface (dmi); 7-bit address, 32-bit read/write data, 2-bit operation (00 = NOP; 10 = write; 01 = read)

others

BYPASS

1

default JTAG bypass register

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 81. DTMCS - DTM Control and Status Register
Bit(s)NameR/WDescription

31:18

-

r/-

reserved, hardwired to zero

17

dmihardreset

r/w

setting this bit will reset the debug module interface; this bit auto-clears

16

dmireset

r/w

setting this bit will clear the sticky error state; this bit auto-clears

15

-

r/-

reserved, hardwired to zero

14:12

idle

r/-

recommended idle states (= 0, no idle states required)

11:10

dmistat

r/-

DMI status: 00 = no error, 01 = reserved, 10 = operation failed, 11 = failed operation during pending DMI operation

9:4

abits

r/-

number of address bits in DMI register (= 6)

3:0

version

r/-

0001 = DTM is compatible to spec. versions v0.13 and v1.0

+
+
+
+

5.2. Debug Module (DM)

+
+

The debug module "DM" (VHDL module: rtl/core/neorv32_debug_dm.vhd) acts as a translation interface between abstract +operations issued by the debugger application (like GDB) and the platform-specific debugger hardware. +It supports the following features:

+
+
+
    +
  • +

    Gives the debugger necessary information about the implementation.

    +
  • +
  • +

    Allows the hart to be halted/resumed/reset and provides the current status.

    +
  • +
  • +

    Provides abstract read and write access to the halted hart’s generap purpose registers.

    +
  • +
  • +

    Provides access to a reset signal that allows debugging from the very first instruction after reset.

    +
  • +
  • +

    Provides a Program Buffer to force the hart to execute arbitrary instructions.

    +
  • +
  • +

    Allows memory access from a hart’s point of view.

    +
  • +
+
+
+

The NEORV32 DM follows the "Minimal RISC-V External Debug Specification" to provide full debugging capabilities while +keeping resource/area requirements at a minimum. It implements the execution based debugging scheme for a +single hart and provides the following core features:

+
+
+
    +
  • +

    program buffer with 2 entries and an implicit ebreak instruction

    +
  • +
  • +

    indirect bus access via the CPU using the program buffer

    +
  • +
  • +

    abstract commands: "access register" plus auto-execution

    +
  • +
  • +

    halt-on-reset capability

    +
  • +
+
+
+ + + + + +
+ + +
DM Spec. Version
+By default, the OCD’s debug module supports version 1.0 of the RISC-V debug spec. For backwards compatibility, the DM +can be "downgraded" back to version 0.13 via the DM_LEGACY_MODE generic (see Processor Top Entity - Generics). +
+
+
+

The DM provides two access "point of views": accesses from the DTM via the debug module interface (dmi) and +accesses from the CPU via the processor-internal bus system. From the DTM’s point of view, the DM implements a set of +DM Registers that are used to control and monitor the debugging session. From the CPU’s point of view, the +DM implements several memory-mapped registers (within the normal address space) that are used for communicating +debugging control and status (DM CPU Access).

+
+
+

5.2.1. DM Registers

+
+

The DM is controlled via a set of registers that are accessed via the DTM’s debug module interface (dmi). +The following registers are implemented:

+
+
+ + + + + +
+ + +Write accesses to registers that are not implemented are simply ignored and read accesses +to these registers will always return zero. +
+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 82. Available DM registers
AddressNameDescription

0x04

data0

Abstract data 0, used for data transfer between debugger and processor

0x10

dmcontrol

Debug module control

0x11

dmstatus

Debug module status

0x12

hartinfo

Hart information

0x16

abstracts

Abstract control and status

0x17

command

Abstract command

0x18

abstractauto

Abstract command auto-execution

0x1d

nextdm

Base address of next DM; reads as zero to indicate there is only one DM

0x20

progbuf0

Program buffer 0

0x21

progbuf1

Program buffer 1

0x38

sbcs

System bus access control and status; reads as zero to indicate there is no direct system bus access

0x40

haltsum0

Halted harts

+
+
data0
+ +++++ + + + + + + + + + + + + + +

0x04

Abstract data 0

data0

Reset value: 0x00000000

Basic read/write data exchange register to be used with abstract commands (for example to read/write data from/to CPU GPRs).

+
+
+
dmcontrol
+ +++++ + + + + + + + + + + + + + +

0x10

Debug module control register

dmcontrol

Reset value: 0x00000000

Control of the overall debug module and the hart. The following table shows all implemented bits. All remaining bits/bit-fields +are configured as "zero" and are read-only. Writing '1' to these bits/fields will be ignored.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 83. dmcontrol Register Bits
BitName [RISC-V]R/WDescription

31

haltreq

-/w

set/clear hart halt request

30

resumereq

-/w

request hart to resume

28

ackhavereset

-/w

write 1 to clear *havereset flags

1

ndmreset

r/w

put whole system (except OCD) into reset state when 1

0

dmactive

r/w

DM enable; writing 0-1 will reset the DM

+
+
+
dmstatus
+ +++++ + + + + + + + + + + + + + +

0x11

Debug module status register

dmstatus

Reset value: 0x00400083

Current status of the overall debug module and the hart. The entire register is read-only.

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 84. dmstatus Register Bits
BitName [RISC-V]Description

31:23

reserved

reserved; always zero

22

impebreak

always 1; indicates an implicit ebreak instruction after the last program buffer entry

21:20

reserved

reserved; always zero

19

allhavereset

1 when the hart is in reset

18

anyhavereset

17

allresumeack

1 when the hart has acknowledged a resume request

16

anyresumeack

15

allnonexistent

always zero to indicate the hart is always existent

14

anynonexistent

13

allunavail

1 when the DM is disabled to indicate the hart is unavailable

12

anyunavail

11

allrunning

1 when the hart is running

10

anyrunning

9

allhalted

1 when the hart is halted

8

anyhalted

7

authenticated

always 1; there is no authentication

6

authbusy

always 0; there is no authentication

5

hasresethaltreq

always 0; halt-on-reset is not supported (directly)

4

confstrptrvalid

always 0; no configuration string available

3:0

version

debug spec. version; 0011 (v1.0) or 0010 (v0.13); configured via the DM_LEGACY_MODE Processor Top Entity - Generics

+
+ + + + + +
+ + +
OCD Security
+JTAG access via the OCD is always authenticated (dmstatus.authenticated = 1). Hence, the entire system can always +be accessed via the on-chip debugger. +
+
+
+
+
hartinfo
+ +++++ + + + + + + + + + + + + + +

0x12

Hart information

hartinfo

Reset value: see below

This register gives information about the hart. The entire register is read-only.

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 85. hartinfo Register Bits
BitName [RISC-V]Description

31:24

reserved

reserved; always zero

23:20

nscratch

0001, number of dscratch* CPU registers = 1

19:17

reserved

reserved; always zero

16

dataccess

0, the data registers are shadowed in the hart’s address space

15:12

datasize

0001, number of 32-bit words in the address space dedicated to shadowing the data registers (1 register)

11:0

dataaddr

= dm_data_base_c(11:0), signed base address of data words (see address map in DM CPU Access)

+
+
+
abstracts
+ +++++ + + + + + + + + + + + + + +

0x16

Abstract control and status

abstracts

Reset value: 0x02000801

Command execution info and status.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 86. abstracts Register Bits
BitName [RISC-V]R/WDescription

31:29

reserved

r/-

reserved; always zero

28:24

progbufsize

r/-

always 0010: size of the program buffer (progbuf) = 2 entries

23:11

reserved

r/-

reserved; always zero

12

busy

r/-

1 when a command is being executed

11

relaxedpriv

r/-

always 1: PMP rules are ignored when in debug mode

10:8

cmderr

r/w

error during command execution (see below); has to be cleared by writing 111

7:4

reserved

r/-

reserved; always zero

3:0

datacount

r/-

always 0001: number of implemented data registers for abstract commands = 1

+
+

Error codes in cmderr (highest priority first):

+
+
+
    +
  • +

    000 - no error

    +
  • +
  • +

    100 - command cannot be executed since hart is not in expected state

    +
  • +
  • +

    011 - exception during command execution

    +
  • +
  • +

    010 - unsupported command

    +
  • +
  • +

    001 - invalid DM register read/write while command is/was executing

    +
  • +
+
+
+
+
command
+ +++++ + + + + + + + + + + + + + +

0x17

Abstract command

command

Reset value: 0x00000000

Writing this register will trigger the execution of an abstract command. New command can only be executed if +cmderr is zero. The entire register in write-only (reads will return zero).

+
+ + + + + +
+ + +The NEORV32 DM only supports Access Register abstract commands. These commands can only access the +hart’s GPRs x0 - x15/31 (abstract command register index 0x1000 - 0x101f). +
+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 87. command Register Bits
BitName [RISC-V]R/WDescription / required value

31:24

cmdtype

-/w

00000000 to indicate "access register" command

23

reserved

-/w

reserved, has to be 0 when writing

22:20

aarsize

-/w

010 to indicate 32-bit accesses

21

aarpostincrement

-/w

0, post-increment is not supported

18

postexec

-/w

if set the program buffer is executed after the command

17

transfer

-/w

if set the operation in write is conducted

16

write

-/w

1: copy data0 to [regno], 0: copy [regno] to data0

15:0

regno

-/w

GPR-access only; has to be 0x1000 - 0x101f

+
+
+
abstractauto
+ +++++ + + + + + + + + + + + + + +

0x18

Abstract command auto-execution

abstractauto

Reset value: 0x00000000

Register to configure if a read/write access to a DM register re-triggers execution of the last abstract command.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 88. abstractauto Register Bits
BitName [RISC-V]R/WDescription

17

autoexecprogbuf[1]

r/w

when set reading/writing from/to progbuf1 will execute command again

16

autoexecprogbuf[0]

r/w

when set reading/writing from/to progbuf0 will execute command again

0

autoexecdata[0]

r/w

when set reading/writing from/to data0 will execute command again

+
+
+
progbuf
+ +++++ + + + + + + + + + + + + + + + + + + +

0x20

Program buffer 0

progbuf0

0x21

Program buffer 1

progbuf1

Reset value: 0x00000013 ("NOP")

Program buffer (two entries) for the DM.

+
+
+
haltsum0
+ +++++ + + + + + + + + + + + + + +

0x408

Halted harts status

haltsum0

Reset value: 0x00000000

Hart has halted when according bit is set.

+ + ++++++ + + + + + + + + + + + + + + + + +
Table 89. haltsum0 Register Bits
BitName [RISC-V]R/WDescription

0

haltsum0[0]

r/-

Hart is halted when set.

+
+
+
+

5.2.2. DM CPU Access

+
+

From the CPU’s perspective, the DM acts like another memory-mapped peripheral. It occupies 256 bytes of the CPU’s address +space starting at address dm_base_c (see table below). This address space is divided into four sections of 64 bytes +each to provide access to the park loop code ROM, the program buffer, the data buffer and the status register. +The program buffer, the data buffer and the status register do not fully occupy the 64-byte-wide sections and are +mirrored several times to fill the entire section.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 90. DM CPU Access - Address Map
Base addressActual sizeDescription

0xffffff00

64 bytes

ROM for the "park loop" code

0xffffff40

16 bytes

Program buffer (progbuf)

0xffffff80

4 bytes

Data buffer (data0)

0xffffffc0

4 bytes

Control and Status Register

+
+ + + + + +
+ + +
DM Register Access
+All memory-mapped registers of the DM can only be accessed by the CPU if it is actually in debug mode. +Hence, the DM registers are not "visible" for normal CPU operations. +Any CPU access outside of debug mode will raise a bus access fault exception. +
+
+
+ + + + + +
+ + +
Park Loop Code Sources ("OCD Firmware")
+The assembly sources of the park loop code are available in sw/ocd-firmware/park_loop.S. +
+
+
+
Code ROM Entry Points
+
+

The park loop code provides two entry points where the actual code execution can start. These are used to enter +the park loop either when an explicit debug-entry request has been issued (for example a halt request) or when an exception +has occurred while executing code inside debug mode.

+
+ + ++++ + + + + + + + + + + + + + + + + +
Table 91. Park Loop Entry Points
AddressDescription

dm_exc_entry_c (dm_base_c + 0)

Exception entry address

dm_park_entry_c (dm_base_c + 8)

Normal entry address

+
+

When the CPU enters or re-enters debug mode (for example via an ebreak in the DM’s program buffer), it jumps to +the normal entry point that is configured via the CPU_DEBUG_PARK_ADDR (= dm_base_c) generic +(CPU Top Entity - Generics). By default, this generic is set to dm_park_entry_c, which is defined in main +package file. If an exception is encountered during debug mode, the CPU jumps to the address of the exception +entry point configured via the CPU_DEBUG_EXC_ADDR generic (CPU Top Entity - Generics). By default, this generic +is set to dm_exc_entry_c, which is also defined in main package file.

+
+
+
+
Status Register
+
+

The status register provides a direct communication channel between the CPU’s debug mode executing the park loop +and the debugger-controlled debug module. This register is used to communicate requests, which are issued by the +DM and the according acknowledges, which are generated by the CPU.

+
+
+

There are only 4 bits in this register that are used to implement the requests/acknowledges. Each bit is left-aligned +in one sub-byte of the entire 32-bit register. Thus, the CPU can access each bit individually using store-byte and +load-byte instructions. This eliminates the need to perform bit-masking in the park loop code leading to less code size +and faster execution.

+
+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 92. DM Status Register - CPU Access
BitNameCPU accessDescription

0

sreg_halt_ack

read

-

-

write

Set by the CPU while it is halted (and executing the park loop).

8

sreg_resume_req

read

Set by the DM to request the CPU to resume normal operation.

sreg_resume_ack

write

Set by the CPU before it starts resuming.

16

sreg_execute_req

read

Set by the DM to request execution of the program buffer.

sreg_execute_ack

write

Set by the CPU before it starts executing the program buffer.

24

-

read

-

sreg_execute_ack

write

Set by the CPU if an exception occurs while being in debug mode.

+
+
+
+
+
+

5.3. CPU Debug Mode

+
+

The NEORV32 CPU Debug Mode is compatible to the Minimal RISC-V Debug Specification 1.0 +Sdext (external debug) ISA extension. When enabled via the CPU’s Sdext ISA Extension generic and/or +the processor’s ON_CHIP_DEBUGGER_EN it adds a new CPU operation mode ("debug mode"), three additional +CPU Debug Mode CSRs and one additional instruction (dret) to the core.

+
+
+

Debug-mode is entered on any of the following events:

+
+
+
    +
  1. +

    The CPU executes an ebreak instruction (when in machine-mode and ebreakm in dcsr is set OR when in user-mode and ebreaku in dcsr is set).

    +
  2. +
  3. +

    A debug halt request is issued by the DM (via CPU signal db_halt_req_i, high-active).

    +
  4. +
  5. +

    The CPU completes executing of a single instruction while being in single-step debugging mode (step in dcsr is set).

    +
  6. +
  7. +

    A hardware trigger from the Trigger Module fires (exe and action in tdata1 / mcontrol are set).

    +
  8. +
+
+
+ + + + + +
+ + +From a hardware point of view these debug-mode-entry conditions are special traps (synchronous exceptions or +asynchronous interrupts) that are handled transparently by the control logic. +
+
+
+

Whenever the CPU enters debug-mode it performs the following operations:

+
+
+
    +
  • +

    wake-up CPU if it was send to sleep mode by the wfi instruction

    +
  • +
  • +

    switch to debug-mode privilege level

    +
  • +
  • +

    move the current program counter to dpc

    +
  • +
  • +

    copy the hart’s current privilege level to the prv flags in dcsr

    +
  • +
  • +

    set cause in [_dcrs] according to the cause why debug mode is entered

    +
  • +
  • +

    no update of mtval, mcause, mtval and mstatus CSRs

    +
  • +
  • +

    load the address configured via the CPU’s CPU_DEBUG_PARK_ADDR (CPU Top Entity - Generics) generic to the program counter jumping to the +"debugger park loop" code stored in the debug module (DM)

    +
  • +
+
+
+

When the CPU is in debug-mode the following things are important:

+
+
+
    +
  • +

    while in debug mode, the CPU executes the parking loop and - if requested by the DM - the program buffer

    +
  • +
  • +

    effective CPU privilege level is machine mode; any active physical memory protection (PMP) configuration is bypassed

    +
  • +
  • +

    the wfi instruction acts as a nop (also during single-stepping)

    +
  • +
  • +

    if an exception occurs while being in debug mode:

    +
    +
      +
    • +

      if the exception was caused by any debug-mode entry action the CPU jumps to the normal entry point (defined by CPU_DEBUG_PARK_ADDR generic of the CPU Top Entity - Generics) of the park loop again (for example when executing ebreak while in debug-mode)

      +
    • +
    • +

      for all other exception sources the CPU jumps to the exception entry point (defined by CPU_DEBUG_EXC_ADDR generic of the CPU Top Entity - Generics) to signal an exception to the DM; the CPU restarts the park loop again afterwards

      +
    • +
    +
    +
  • +
  • +

    interrupts are disabled; however, they will remain pending and will get executed after the CPU has left debug mode and is not being single-stepped

    +
  • +
  • +

    if the DM makes a resume request, the park loop exits and the CPU leaves debug mode (executing dret)

    +
  • +
  • +

    the standard counters (Machine) Counter and Timer CSRs [m]cycle[h] and [m]instret[h] are stopped

    +
  • +
  • +

    all Hardware Performance Monitors (HPM) CSRs are stopped

    +
  • +
+
+
+

Debug mode is left either by executing the dret instruction or by performing a hardware reset of the CPU. +Executing dret outside of debug mode will raise an illegal instruction exception.

+
+
+

Whenever the CPU leaves debug mode it performs the following operations:

+
+
+
    +
  • +

    set the hart’s current privilege level according to the prv flags of dcsr

    +
  • +
  • +

    restore the original program counter from [_dpcs] resuming normal operation

    +
  • +
+
+
+

5.3.1. CPU Debug Mode CSRs

+
+

Two additional CSRs are required by the Minimal RISC-V Debug Specification: the debug mode control and status register +dcsr and the debug program counter dpc. An additional general purpose scratch register for debug-mode-only +(dscratch0) allows faster execution by having a fast-accessible backup register. +These CSRs are only accessible when the CPU is in debug mode. If these CSRs are accessed outside of debug mode +an illegal instruction exception is raised.

+
+
+
dcsr
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Debug control and status register

Address

0x7b0

Reset value

0x40000413

ISA

Zicsr & Sdext

Description

This register is used to configure the debug mode environment and provides additional status information.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 93. Debug control and status register dcsr bits
BitName [RISC-V]R/WDescription

31:28

xdebugver

r/-

0100 - CPU debug mode is compatible to spec. version 1.0

27:16

-

r/-

000000000000 - reserved

15

ebereakm

r/w

ebreak instructions in machine mode will enter debug mode when set

14

ebereakh

r/-

0 - hypervisor mode not supported

13

ebereaks

r/-

0 - supervisor mode not supported

12

ebereaku

r/w

ebreak instructions in user mode will enter debug mode when set

11

stepie

r/-

0 - IRQs are disabled during single-stepping

10

stopcount

r/-

1 - standard counters and HPMs are stopped when in debug mode

9

stoptime

r/-

0 - timers increment as usual

8:6

cause

r/-

cause identifier - why debug mode was entered (see below)

5

-

r/-

0 - reserved

4

mprven

r/-

1 - mprv in mstatus is also evaluated when in debug mode

3

nmip

r/-

0 - non-maskable interrupt is pending

2

step

r/w

enable single-stepping when set

1:0

prv

r/w

CPU privilege level before/after debug mode

+
+

Cause codes in dcsr.cause (highest priority first):

+
+
+
    +
  • +

    010 - triggered by hardware Trigger Module

    +
  • +
  • +

    001 - executed EBREAK instruction

    +
  • +
  • +

    011 - external halt request (from DM)

    +
  • +
  • +

    100 - return from single-stepping

    +
  • +
+
+
+
+
dpc
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Debug program counter

Address

0x7b1

Reset value

CPU_BOOT_ADDR, CPU boot address, 4-byte aligned (see CPU Top Entity - Generics and Address Space)

ISA

Zicsr & Sdext

Description

The register is used to store the current program counter when debug mode is entered. The dret instruction will +return to the address stored in dpc by automatically moving dpc to the program counter.

+
+ + + + + +
+ + +dpc[0] is hardwired to zero. If IALIGN = 32 (i.e. C ISA Extension is disabled) then dpc[1] is also hardwired to zero. +
+
+
+
+
dscratch0
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Debug scratch register 0

Address

0x7b2

Reset value

0x00000000

ISA

Zicsr & Sdext

Description

The register provides a general purpose debug mode-only scratch register.

+
+
+
+
+
+

5.4. Trigger Module

+
+

"Normal" software breakpoints (using GDB’s b/break command) are implemented by temporarily replacing the according +instruction word by an [c.]ebreak instruction. However, this is not possible when debugging code that is executed from +read-only memory (for example when debugging programs that are executed via the Execute In Place Module (XIP)). +To circumvent this limitation a hardware trigger logic allows to (re-)enter debug-mode when instruction execution +reaches a programmable address. These "hardware-assisted breakpoints" are used by GDB’s hb/hbreak commands.

+
+
+

The RISC-V Sdtrig ISA extension adds a programmable trigger module to the CPU core that is enabled via the +Sdtrig ISA Extension generic. The trigger module implements a subset of the features described in the +"RISC-V Debug Specification / Trigger Module" and complies to version v1.0 of the Sdtrig spec.

+
+
+

The NEORV32 trigger module features only a single trigger implementing a "type 6 - instruction address match" trigger. +This limitation is granted by the RISC-V debug spec and is sufficient to debug code executed from read-only memory (ROM). +The trigger module can also be used independently of the CPU debug-mode / Sdext ISA extension. +Machine-mode software can use the trigger module to raise a breakpoint exception when instruction execution +reaches a programmed address.

+
+
+ + + + + +
+ + +
Trigger Timing
+When enabled the address match trigger will fire BEFORE the instruction at the programmed address gets executed. +
+
+
+ + + + + +
+ + +
MEPC & DPC CSRs
+The breakpoint exception when raised by the trigger module behaves different then the "normal" trapping (see +NEORV32 Trap Listing): mepc / dpc is set to the address of the next instruction that needs to be +executed to preserve the program flow. A "normal" breakpoint exception would set mepc / dpc to the address +of the actual ebreak instruction itself. +
+
+
+

5.4.1. Trigger Module CSRs

+
+

The Sdtrig ISA extension adds 4 additional CSRs that are accessible from debug-mode and also from machine-mode. +Machine-mode write accesses can be ignored by setting ´dmode´ in tdata1. This is automatically done by the debugger +if it uses the trigger module for implementing a "hardware breakpoint"

+
+
+
tselect
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Trigger select register

Address

0x7a0

Reset value

0x00000000

ISA

Zicsr & Sdtrig

Description

This CSR is hardwired to zero indicating there is only one trigger available. Any write access is ignored.

+
+
+
tdata1
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Trigger data register 1, visible as trigger "type 6 match control" (mcontrol6)

Address

0x7a1

Reset value

0x60000048

ISA

Zicsr & Sdtrig

Description

This CSR is used to configure the address match trigger using the "type 6" format.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 94. Match Control CSR (tdata1) Bits
BitName [RISC-V]R/WDescription

31:28

type

r/-

0100 - address match trigger type 6

27

dmode

r/w

set to ignore write accesses to tdata1 and tdata2 from machine-mode; writable from debug-mode only

26

uncertain

r/-

0 - trigger satisfies the configured conditions

25

hit1

r/-

0 - hardwired to zero, only hit0 is used

24

vs

r/-

0 - VS-mode not supported

23

vu

r/-

0 - VU-mode not supported

22

hit0

r/c

set when trigger has fired (BEFORE executing the triggering address); must be explicitly cleared by writing zero; writing 1 has no effect

21

select

r/-

0 - only address matching is supported

20:19

reserved

r/-

00 - hardwired to zero

18:16

size

r/-

000 - match accesses of any size

15:12

action

r/w

0000 = breakpoint exception on trigger match, 0001 = enter debug-mode on trigger match

11

chain

r/-

0 - chaining is not supported as there is only one trigger

10:6

match

r/-

0000 - equal-match only

6

m

r/-

1 - trigger enabled when in machine-mode

5

uncertainen

r/-

0 - feature not supported, hardwired to zero

4

s

r/-

0 - supervisor-mode not supported

3

u

r/-

0/1 - trigger enabled when in user-mode, set if U ISA extension is enabled

2

execute

r/w

set to enable trigger matching on instruction address

1

store

r/-

0 - store address/data matching not supported

0

load

r/-

0 - load address/data matching not supported

+
+
+
tdata2
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Trigger data register 2

Address

0x7a2

Reset value

0x00000000

ISA

Zicsr & Sdtrig

Description

Since only the "address match trigger" type is supported, this r/w CSR is used to configure the address of the triggering instruction. +Note that the trigger module will fire before the instruction at the programmed address gets executed.

+
+
+
tinfo
+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Trigger information register

Address

0x7a4

Reset value

0x01000006

ISA

Zicsr & Sdtrig

Description

The CSR shows global trigger information (see below). Any write access is ignored.

+ + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 95. Trigger Info CSR (tinfo) Bits
BitName [RISC-V]R/WDescription

31:24

version

r/-

0x01 - compatible to spec. version v1.0

23:15

reserved

r/-

0x00 - hardwired to zero

15:0

info

r/-

0x0006 - only the "type 6 trigger" is supported

+
+
+
+
+
+
+
+ +
+
+

About

+
+
+
+

The NEORV32 RISC-V Processor
+https://github.com/stnolting/neorv32
+Dipl.-Ing. Stephan Nolting (M.Sc.)
+🇪🇺 European Union, Germany
+stnolting@gmail.com

+
+
+
+
+
+

License

+
+

BSD 3-Clause License

+
+
+

Copyright (c) NEORV32 contributors. +Copyright (c) 2020 - 2024, Stephan Nolting. All rights reserved.

+
+
+

Redistribution and use in source and binary forms, with or without modification, are permitted provided that +the following conditions are met:

+
+
+
    +
  1. +

    Redistributions of source code must retain the above copyright notice, this list of conditions and the +following disclaimer.

    +
  2. +
  3. +

    Redistributions in binary form must reproduce the above copyright notice, this list of conditions and +the following disclaimer in the documentation and/or other materials provided with the distribution.

    +
  4. +
  5. +

    Neither the name of the copyright holder nor the names of its contributors may be used to endorse or +promote products derived from this software without specific prior written permission.

    +
  6. +
+
+
+

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE.

+
+
+ + + + + +
+ + +
SPDX Identifier
+SPDX-License-Identifier: BSD-3-Clause +
+
+
+
+
+

Proprietary Notice

+
+
    +
  • +

    "GitHub" is a Subsidiary of Microsoft Corporation.

    +
  • +
  • +

    "Vivado" and "Artix" are trademarks of AMD Inc.

    +
  • +
  • +

    "AXI", "AXI", "AXI4-Lite", "AXI4-Stream", "AHB", "AHB3" and "AHB3-Lite" are trademarks of Arm Holdings plc.

    +
  • +
  • +

    "ModelSim" is a trademark of Mentor Graphics – A Siemens Business.

    +
  • +
  • +

    "Quartus Prime" and "Cyclone" are trademarks of Intel Corporation.

    +
  • +
  • +

    "iCE40", "UltraPlus" and "Radiant" are trademarks of Lattice Semiconductor Corporation.

    +
  • +
  • +

    "Windows" is a trademark of Microsoft Corporation.

    +
  • +
  • +

    "Tera Term" copyright by T. Teranishi.

    +
  • +
  • +

    "NeoPixel" is a trademark of Adafruit Industries.

    +
  • +
  • +

    "Segger Embedded Studio" and "J-Link" are trademarks of Segger Microcontroller Systems GmbH.

    +
  • +
  • +

    Images/figures made with Microsoft Power Point.

    +
  • +
  • +

    Timing diagrams made with WaveDrom Editor.

    +
  • +
  • +

    Documentation made with asciidoctor.

    +
  • +
+
+
+

All further/unreferenced projects/products/brands belong to their according copyright holders. +No copyright infringement intended.

+
+
+
+

Disclaimer

+
+

This project is released under the BSD 3-Clause license. No copyright infringement intended. +Other implied or used projects/sources might have different licensing – see their according +documentation for more information.

+
+
+
+ +
+

This document contains links to the websites of third parties ("external links"). As the content of these websites +is not under our control, we cannot assume any liability for such external content. In all cases, the provider of +information of the linked websites is liable for the content and accuracy of the information provided. At the +point in time when the links were placed, no infringements of the law were recognizable to us. As soon as an +infringement of the law becomes known to us, we will immediately remove the link in question.

+
+
+
+

Citing

+
+ + + + + +
+ + +This is an open-source project that is free of charge. Use this project in any way you like +(as long as it complies to the permissive license). Please cite it appropriately. 👍 +
+
+
+ + + + + +
+ + +
Contributors & Community 🤝
+Please add as many contributors as possible to the author field.
+This project would not be where it is without them. +
+
+
+ + + + + +
+ + +
DOI
+This project provides a digital object identifier provided by zenodo: +zenodo.5018888 +
+
+
+
+

Acknowledgments

+
+

A big shout-out to the community and all the contributors, +who helped improving this project! This project would not be where it is without them. ❤️

+
+
+

RISC-V - instruction sets want to be free!

+
+
+

Continuous integration provided by GitHub Actions and powered by GHDL.

+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/sw/annotated.html b/sw/annotated.html new file mode 100644 index 0000000000..e6e646d19f --- /dev/null +++ b/sw/annotated.html @@ -0,0 +1,129 @@ + + + + + + + +NEORV32 Software Framework Documentation: Data Structures + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+
+ + +
+ + diff --git a/sw/atomic__test_2main_8c.html b/sw/atomic__test_2main_8c.html new file mode 100644 index 0000000000..bb5283f995 --- /dev/null +++ b/sw/atomic__test_2main_8c.html @@ -0,0 +1,308 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/atomic_test/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
main.c File Reference
+
+
+ +

Test program for the NEORV32 'A' ISA extension - check the emulation of the AMO (read-modify-write) operations. +More...

+
#include <neorv32.h>
+
+ + + + + + + + + + + + + + + + + +

User configuration

#define BAUD_RATE   (19200)
 
#define NUM_TEST_CASES   (1000)
 
#define SILENT_MODE   (1)
 
volatile uint32_t amo_var
 
uint32_t check_result (uint32_t num, uint32_t amo_var_old, uint32_t amo_var_pre, uint32_t amo_var_new, uint32_t amo_var)
 
void print_report (int num_err, int num_tests)
 
void trap_handler_emulate_amo (void)
 
int main ()
 
+

Detailed Description

+

Test program for the NEORV32 'A' ISA extension - check the emulation of the AMO (read-modify-write) operations.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   (19200)
+
+

UART BAUD rate

+ +
+
+ +

◆ NUM_TEST_CASES

+ +
+
+ + + + +
#define NUM_TEST_CASES   (1000)
+
+

UART BAUD rate

+ +
+
+ +

◆ SILENT_MODE

+ +
+
+ + + + +
#define SILENT_MODE   (1)
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ check_result()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
uint32_t check_result (uint32_t num,
uint32_t amo_var_old,
uint32_t amo_var_pre,
uint32_t amo_var_new,
uint32_t amo_var )
+
+

Check results (reference (SW) vs actual hardware).

+
Parameters
+ + + + + + +
[in]numTest case number
[in]amo_var_oldInitial value of atomic variable.
[in]amo_var_preValue of atomic variable read from memory (before operation).
[in]amo_var_newExpected new value of atomic variable.
[in]amo_varActual new value of atomic variable.
+
+
+
Returns
zero if results are correct.
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function; test all provided AMO emulation functions.

+
Note
This program requires the RISC-V A CPU extension.
+
Returns
Irrelevant.
+ +
+
+ +

◆ print_report()

+ +
+
+ + + + + + + + + + + +
void print_report (int num_err,
int num_tests )
+
+

Print test report.

+
Parameters
+ + + +
[in]num_errNumber or errors in this test.
[in]num_testsTotal number of conducted tests.
+
+
+ +
+
+ +

◆ trap_handler_emulate_amo()

+ +
+
+ + + + + + + +
void trap_handler_emulate_amo (void )
+
+

Emulate atomic memory operation.

+
Note
This is a RTE "second-level" trap handler.
+ +
+
+

Variable Documentation

+ +

◆ amo_var

+ +
+
+ + + + +
volatile uint32_t amo_var
+
+

UART BAUD rate

+ +
+
+
+ + +
+ + diff --git a/sw/bc_s.png b/sw/bc_s.png new file mode 100644 index 0000000000..224b29aa98 Binary files /dev/null and b/sw/bc_s.png differ diff --git a/sw/bc_sd.png b/sw/bc_sd.png new file mode 100644 index 0000000000..31ca888dc7 Binary files /dev/null and b/sw/bc_sd.png differ diff --git a/sw/bootloader_8c.html b/sw/bootloader_8c.html new file mode 100644 index 0000000000..27a8ecdd00 --- /dev/null +++ b/sw/bootloader_8c.html @@ -0,0 +1,1184 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/bootloader/bootloader.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
bootloader.c File Reference
+
+
+ +

Default NEORV32 bootloader. +More...

+
#include <stdint.h>
+#include <neorv32.h>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define EXE_SIGNATURE   0x4788CAFE
 
Bootloader configuration (override via console to customize);

default values are used if not explicitly customized

+
#define EXE_BASE_ADDR   0x00000000UL
 
#define UART_EN   1
 
#define UART_BAUD   19200
 
#define UART_HW_HANDSHAKE_EN   0
 
#define STATUS_LED_EN   1
 
#define STATUS_LED_PIN   0
 
#define AUTO_BOOT_TIMEOUT   10
 
#define SPI_EN   1
 
#define SPI_FLASH_CS   0
 
#define SPI_FLASH_ADDR_BYTES   3
 
#define SPI_FLASH_SECTOR_SIZE   65536
 
#define SPI_FLASH_CLK_PRSC   CLK_PRSC_8
 
#define SPI_BOOT_BASE_ADDR   0x00400000UL
 
#define XIP_EN   1
 
#define xstr(a)   str(a)
 
#define str(a)   #a
 
#define PRINT_TEXT(...)
 
#define PRINT_XNUM(a)
 
#define PRINT_GETC(a)   0
 
#define PRINT_PUTC(a)
 
+ + + + + + + + + + + +

+Enumerations

enum  EXE_STREAM_SOURCE_enum { EXE_STREAM_UART = 0 +, EXE_STREAM_FLASH = 1 + }
 
enum  ERROR_CODES_enum { ERROR_SIGNATURE = 0 +, ERROR_SIZE = 1 +, ERROR_CHECKSUM = 2 +, ERROR_FLASH = 3 + }
 
enum  SPI_FLASH_CMD_enum {
+  SPI_FLASH_CMD_PAGE_PROGRAM = 0x02 +, SPI_FLASH_CMD_READ = 0x03 +, SPI_FLASH_CMD_WRITE_DISABLE = 0x04 +, SPI_FLASH_CMD_READ_STATUS = 0x05 +,
+  SPI_FLASH_CMD_WRITE_ENABLE = 0x06 +, SPI_FLASH_CMD_WAKE = 0xAB +, SPI_FLASH_CMD_SECTOR_ERASE = 0xD8 +
+ }
 
enum  SPI_FLASH_SREG_enum { FLASH_SREG_BUSY = 0 +, FLASH_SREG_WEL = 1 + }
 
enum  NEORV32_EXECUTABLE_enum { EXE_OFFSET_SIGNATURE = 0 +, EXE_OFFSET_SIZE = 4 +, EXE_OFFSET_CHECKSUM = 8 +, EXE_OFFSET_DATA = 12 + }
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void bootloader_trap_handler (void)
 
void print_help (void)
 
void start_app (int boot_xip)
 
void get_exe (int src)
 
void save_exe (void)
 
uint32_t get_exe_word (int src, uint32_t addr)
 
void system_error (uint8_t err_code)
 
void print_hex_word (uint32_t num)
 
void spi_flash_wakeup (void)
 
int spi_flash_check (void)
 
uint8_t spi_flash_read_byte (uint32_t addr)
 
void spi_flash_write_byte (uint32_t addr, uint8_t wdata)
 
void spi_flash_write_word (uint32_t addr, uint32_t wdata)
 
void spi_flash_erase_sector (uint32_t addr)
 
void spi_flash_write_enable (void)
 
void spi_flash_write_disable (void)
 
uint8_t spi_flash_read_status (void)
 
void spi_flash_write_addr (uint32_t addr)
 
int main (void)
 
+ + + + + + + +

+Variables

const char error_message [4][5]
 
volatile uint32_t exe_available
 
volatile uint32_t getting_exe
 
+

Detailed Description

+

Default NEORV32 bootloader.

+

Macro Definition Documentation

+ +

◆ AUTO_BOOT_TIMEOUT

+ +
+
+ + + + +
#define AUTO_BOOT_TIMEOUT   10
+
+

Time until the auto-boot sequence starts (in seconds); 0 = disabled

+ +
+
+ +

◆ EXE_BASE_ADDR

+ +
+
+ + + + +
#define EXE_BASE_ADDR   0x00000000UL
+
+

Memory base address for the executable

+ +
+
+ +

◆ EXE_SIGNATURE

+ +
+
+ + + + +
#define EXE_SIGNATURE   0x4788CAFE
+
+

Valid executable identification signature

+ +
+
+ +

◆ PRINT_GETC

+ +
+
+ + + + + + + +
#define PRINT_GETC( a)   0
+
+

Helper macros Actual define-to-string helper

+ +
+
+ +

◆ PRINT_PUTC

+ +
+
+ + + + + + + +
#define PRINT_PUTC( a)
+
+

Helper macros Actual define-to-string helper

+ +
+
+ +

◆ PRINT_TEXT

+ +
+
+ + + + + + + +
#define PRINT_TEXT( ...)
+
+

Print to UART 0

+ +
+
+ +

◆ PRINT_XNUM

+ +
+
+ + + + + + + +
#define PRINT_XNUM( a)
+
+

Helper macros Actual define-to-string helper

+ +
+
+ +

◆ SPI_BOOT_BASE_ADDR

+ +
+
+ + + + +
#define SPI_BOOT_BASE_ADDR   0x00400000UL
+
+

SPI flash boot base address

+ +
+
+ +

◆ SPI_EN

+ +
+
+ + + + +
#define SPI_EN   1
+
+

Enable SPI (default) including SPI flash boot options

+ +
+
+ +

◆ SPI_FLASH_ADDR_BYTES

+ +
+
+ + + + +
#define SPI_FLASH_ADDR_BYTES   3
+
+

SPI flash address width (in numbers of bytes; 2,3,4)

+ +
+
+ +

◆ SPI_FLASH_CLK_PRSC

+ +
+
+ + + + +
#define SPI_FLASH_CLK_PRSC   CLK_PRSC_8
+
+

SPI flash clock pre-scaler; see NEORV32_SPI_CTRL_enum

+ +
+
+ +

◆ SPI_FLASH_CS

+ +
+
+ + + + +
#define SPI_FLASH_CS   0
+
+

SPI flash chip select (low-active) at SPI.spi_csn_o(SPI_FLASH_CS)

+ +
+
+ +

◆ SPI_FLASH_SECTOR_SIZE

+ +
+
+ + + + +
#define SPI_FLASH_SECTOR_SIZE   65536
+
+

SPI flash sector size in bytes

+ +
+
+ +

◆ STATUS_LED_EN

+ +
+
+ + + + +
#define STATUS_LED_EN   1
+
+

Set to 0 to disable bootloader status LED (heart beat) at GPIO.gpio_o(STATUS_LED_PIN)

+ +
+
+ +

◆ STATUS_LED_PIN

+ +
+
+ + + + +
#define STATUS_LED_PIN   0
+
+

GPIO output pin for high-active bootloader status LED (heart beat)

+ +
+
+ +

◆ str

+ +
+
+ + + + + + + +
#define str( a)   #a
+
+

Internal helper macro

+ +
+
+ +

◆ UART_BAUD

+ +
+
+ + + + +
#define UART_BAUD   19200
+
+

UART BAUD rate for serial interface

+ +
+
+ +

◆ UART_EN

+ +
+
+ + + + +
#define UART_EN   1
+
+

Set to 0 to disable UART interface

+ +
+
+ +

◆ UART_HW_HANDSHAKE_EN

+ +
+
+ + + + +
#define UART_HW_HANDSHAKE_EN   0
+
+

Set to 1 to enable UART HW handshaking

+ +
+
+ +

◆ XIP_EN

+ +
+
+ + + + +
#define XIP_EN   1
+
+

Enable XIP boot options

+ +
+
+ +

◆ xstr

+ +
+
+ + + + + + + +
#define xstr( a)   str(a)
+
+

Helper macros Actual define-to-string helper

+ +
+
+

Enumeration Type Documentation

+ +

◆ ERROR_CODES_enum

+ +
+
+ + + + +
enum ERROR_CODES_enum
+
+

Error codes

+ + + + + +
Enumerator
ERROR_SIGNATURE 

0: Wrong signature in executable

+
ERROR_SIZE 

1: Insufficient instruction memory capacity

+
ERROR_CHECKSUM 

2: Checksum error in executable

+
ERROR_FLASH 

3: SPI flash access error

+
+ +
+
+ +

◆ EXE_STREAM_SOURCE_enum

+ +
+
+ + + + +
enum EXE_STREAM_SOURCE_enum
+
+

Executable stream source select (for copying into IMEM)

+ + + +
Enumerator
EXE_STREAM_UART 

Get executable via UART

+
EXE_STREAM_FLASH 

Get executable via SPI flash

+
+ +
+
+ +

◆ NEORV32_EXECUTABLE_enum

+ +
+
+ + + + +
enum NEORV32_EXECUTABLE_enum
+
+

NEORV32 executable

+ + + + + +
Enumerator
EXE_OFFSET_SIGNATURE 

Offset in bytes from start to signature (32-bit)

+
EXE_OFFSET_SIZE 

Offset in bytes from start to size (32-bit)

+
EXE_OFFSET_CHECKSUM 

Offset in bytes from start to checksum (32-bit)

+
EXE_OFFSET_DATA 

Offset in bytes from start to data (32-bit)

+
+ +
+
+ +

◆ SPI_FLASH_CMD_enum

+ +
+
+ + + + +
enum SPI_FLASH_CMD_enum
+
+

SPI flash commands

+ + + + + + + + +
Enumerator
SPI_FLASH_CMD_PAGE_PROGRAM 

Program page

+
SPI_FLASH_CMD_READ 

Read data

+
SPI_FLASH_CMD_WRITE_DISABLE 

Disallow write access

+
SPI_FLASH_CMD_READ_STATUS 

Get status register

+
SPI_FLASH_CMD_WRITE_ENABLE 

Allow write access

+
SPI_FLASH_CMD_WAKE 

Wake up from sleep mode

+
SPI_FLASH_CMD_SECTOR_ERASE 

Erase complete sector

+
+ +
+
+ +

◆ SPI_FLASH_SREG_enum

+ +
+
+ + + + +
enum SPI_FLASH_SREG_enum
+
+

SPI flash status register bits

+ + + +
Enumerator
FLASH_SREG_BUSY 

Busy, write/erase in progress when set, read-only

+
FLASH_SREG_WEL 

Write access enabled when set, read-only

+
+ +
+
+

Function Documentation

+ +

◆ bootloader_trap_handler()

+ +
+
+ + + + + + + +
void bootloader_trap_handler (void )
+
+

Function prototypes

+

Bootloader trap handler. Used for the MTIME tick and to capture any other traps.

+
Note
Since we have no runtime environment we have to use the interrupt attribute here.
+ +
+
+ +

◆ get_exe()

+ +
+
+ + + + + + + +
void get_exe (int src)
+
+

Get executable stream.

+
Parameters
+ + +
srcSource of executable stream data. See EXE_STREAM_SOURCE_enum.
+
+
+ +
+
+ +

◆ get_exe_word()

+ +
+
+ + + + + + + + + + + +
uint32_t get_exe_word (int src,
uint32_t addr )
+
+

Get word from executable stream

+
Parameters
+ + + +
srcSource of executable stream data. See EXE_STREAM_SOURCE_enum.
addrAddress when accessing SPI flash.
+
+
+
Returns
32-bit data word from stream.
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Sanity check: Base RV32I ISA only! Bootloader main.

+ +
+
+ +

◆ print_help()

+ +
+
+ + + + + + + +
void print_help (void )
+
+

Print help menu.

+ +
+
+ +

◆ print_hex_word()

+ +
+
+ + + + + + + +
void print_hex_word (uint32_t num)
+
+

Print 32-bit number as 8-digit hexadecimal value (with "0x" suffix).

+
Parameters
+ + +
[in]numNumber to print as hexadecimal.
+
+
+ +
+
+ +

◆ save_exe()

+ +
+
+ + + + + + + +
void save_exe (void )
+
+

Store content of instruction memory to SPI flash.

+ +
+
+ +

◆ spi_flash_check()

+ +
+
+ + + + + + + +
int spi_flash_check (void )
+
+

Check if SPI and flash are available/working by making sure the WEL flag of the flash status register can be set and cleared again.

+
Returns
0 if success, -1 if error
+ +
+
+ +

◆ spi_flash_erase_sector()

+ +
+
+ + + + + + + +
void spi_flash_erase_sector (uint32_t addr)
+
+

Erase sector (64kB) at base address.

+
Parameters
+ + +
[in]addrBase address of sector to erase.
+
+
+ +
+
+ +

◆ spi_flash_read_byte()

+ +
+
+ + + + + + + +
uint8_t spi_flash_read_byte (uint32_t addr)
+
+

Read byte from SPI flash.

+
Parameters
+ + +
[in]addrFlash read address.
+
+
+
Returns
Read byte from SPI flash.
+ +
+
+ +

◆ spi_flash_read_status()

+ +
+
+ + + + + + + +
uint8_t spi_flash_read_status (void )
+
+

Read flash status register.

+
Returns
SPI flash status register (32-bit zero-extended).
+ +
+
+ +

◆ spi_flash_wakeup()

+ +
+
+ + + + + + + +
void spi_flash_wakeup (void )
+
+

Wake up flash from deep sleep state

+ +
+
+ +

◆ spi_flash_write_addr()

+ +
+
+ + + + + + + +
void spi_flash_write_addr (uint32_t addr)
+
+

Send address word to flash (MSB-first, 16-bit, 24-bit or 32-bit address size).

+
Parameters
+ + +
[in]addrAddress word.
+
+
+ +
+
+ +

◆ spi_flash_write_byte()

+ +
+
+ + + + + + + + + + + +
void spi_flash_write_byte (uint32_t addr,
uint8_t wdata )
+
+

Write byte to SPI flash.

+
Parameters
+ + + +
[in]addrSPI flash read address.
[in]wdataSPI flash read data.
+
+
+ +
+
+ +

◆ spi_flash_write_disable()

+ +
+
+ + + + + + + +
void spi_flash_write_disable (void )
+
+

Disable flash write access.

+ +
+
+ +

◆ spi_flash_write_enable()

+ +
+
+ + + + + + + +
void spi_flash_write_enable (void )
+
+

Enable flash write access.

+ +
+
+ +

◆ spi_flash_write_word()

+ +
+
+ + + + + + + + + + + +
void spi_flash_write_word (uint32_t addr,
uint32_t wdata )
+
+

Write word to SPI flash.

+
Parameters
+ + + +
addrSPI flash write address.
wdataSPI flash write data.
+
+
+ +
+
+ +

◆ start_app()

+ +
+
+ + + + + + + +
void start_app (int boot_xip)
+
+

Start application program.

+
Parameters
+ + +
boot_xipSet to boot via XIP.
+
+
+ +
+
+ +

◆ system_error()

+ +
+
+ + + + + + + +
void system_error (uint8_t err_code)
+
+

Output system error ID and halt.

+
Parameters
+ + +
[in]err_codeError code. See #ERROR_CODES and error_message.
+
+
+ +
+
+

Variable Documentation

+ +

◆ error_message

+ +
+
+ + + + +
const char error_message[4][5]
+
+Initial value:
= {
+
"EXE",
+
"SIZE",
+
"CHKS",
+
"FLSH"
+
}
+

Error messages

+ +
+
+ +

◆ exe_available

+ +
+
+ + + + +
volatile uint32_t exe_available
+
+

This global variable keeps the size of the available executable in bytes. If =0 no executable is available (yet).

+ +
+
+ +

◆ getting_exe

+ +
+
+ + + + +
volatile uint32_t getting_exe
+
+

Only set during executable fetch (required for capturing STORE BUS-TIMOUT exception).

+ +
+
+
+ + +
+ + diff --git a/sw/bus__explorer_2main_8c.html b/sw/bus__explorer_2main_8c.html new file mode 100644 index 0000000000..bec35287d1 --- /dev/null +++ b/sw/bus__explorer_2main_8c.html @@ -0,0 +1,299 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/bus_explorer/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Interactive memory inspector. +More...

+
#include <neorv32.h>
+#include <string.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + + + + + + + + + +

+Functions

void read_memory (uint32_t address)
 
void setup_access (void)
 
void write_memory (uint32_t address, uint32_t data)
 
void dump_memory (uint32_t address)
 
void hexdump (uint32_t address)
 
void aux_print_hex_byte (uint8_t byte)
 
int main ()
 
+ + + +

+Variables

+char access_size
 
+

Detailed Description

+

Interactive memory inspector.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ aux_print_hex_byte()

+ +
+
+ + + + + + + +
void aux_print_hex_byte (uint8_t byte)
+
+

Print HEX byte.

+
Parameters
+ + +
[in]byteByte to be printed as 2-cahr hex value.
+
+
+ +
+
+ +

◆ dump_memory()

+ +
+
+ + + + + + + +
void dump_memory (uint32_t address)
+
+

Read several bytes/halfs/word from memory base address

+ +
+
+ +

◆ hexdump()

+ +
+
+ + + + + + + +
void hexdump (uint32_t address)
+
+

Make pretty hexadecimal + ASCII dump (byte-wise)

+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program provides an interactive console to read/write memory.

+
Note
This program requires the UART to be synthesized.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ read_memory()

+ +
+
+ + + + + + + +
void read_memory (uint32_t address)
+
+

Read from memory address

+ +
+
+ +

◆ setup_access()

+ +
+
+ + + + + + + +
void setup_access (void )
+
+

Configure memory access size

+ +
+
+ +

◆ write_memory()

+ +
+
+ + + + + + + + + + + +
void write_memory (uint32_t address,
uint32_t data )
+
+

Write to memory address

+ +
+
+
+ + +
+ + diff --git a/sw/classes.html b/sw/classes.html new file mode 100644 index 0000000000..61381d9d4c --- /dev/null +++ b/sw/classes.html @@ -0,0 +1,120 @@ + + + + + + + +NEORV32 Software Framework Documentation: Data Structure Index + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Data Structure Index
+
+
+
D | F | N | R | S | T
+ +
+ + +
+ + diff --git a/sw/clipboard.js b/sw/clipboard.js new file mode 100644 index 0000000000..42c1fb0e02 --- /dev/null +++ b/sw/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/sw/closed.png b/sw/closed.png new file mode 100644 index 0000000000..98cc2c909d Binary files /dev/null and b/sw/closed.png differ diff --git a/sw/cookie.js b/sw/cookie.js new file mode 100644 index 0000000000..53ad21d981 --- /dev/null +++ b/sw/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/sw/demo__blink__led_2main_8c.html b/sw/demo__blink__led_2main_8c.html new file mode 100644 index 0000000000..c29432b83a --- /dev/null +++ b/sw/demo__blink__led_2main_8c.html @@ -0,0 +1,139 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_blink_led/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Minimal blinking LED demo program using the lowest 8 bits of the GPIO.output port. +More...

+
#include <neorv32.h>
+
+ + + +

+Functions

int main ()
 
+

Detailed Description

+

Minimal blinking LED demo program using the lowest 8 bits of the GPIO.output port.

+
Author
Stephan Nolting
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function; shows an incrementing 8-bit counter on GPIO.output(7:0).

+
Note
This program requires the GPIO controller to be synthesized.
+
Returns
Will never return.
+ +
+
+
+ + +
+ + diff --git a/sw/demo__cfs_2main_8c.html b/sw/demo__cfs_2main_8c.html new file mode 100644 index 0000000000..57bde1f8ea --- /dev/null +++ b/sw/demo__cfs_2main_8c.html @@ -0,0 +1,178 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_cfs/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Simple demo program for the default custom functions subsystem (CFS) module. +More...

+
#include <neorv32.h>
+
+ + + + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
#define TESTCASES   4
 
+ + + +

+Functions

int main ()
 
+

Detailed Description

+

Simple demo program for the default custom functions subsystem (CFS) module.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ TESTCASES

+ +
+
+ + + + +
#define TESTCASES   4
+
+

Number of test cases per CFS function

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function

+
Note
This program requires the CFS and UART0.
+
Returns
0 if execution was successful
+ +
+
+
+ + +
+ + diff --git a/sw/demo__cfu_2main_8c.html b/sw/demo__cfu_2main_8c.html new file mode 100644 index 0000000000..8959480374 --- /dev/null +++ b/sw/demo__cfu_2main_8c.html @@ -0,0 +1,483 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_cfu/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Example program showing how to use the CFU's custom instructions (XTEA example). +More...

+
#include <neorv32.h>
+
+ + + + + + + + + + + + + + + + + + + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
#define XTEA_CYCLES   20
 
#define DATA_NUM   64
 
Define macros for easy CFU instruction wrapping
+#define xtea_hw_init(sum)   neorv32_cfu_r3_instr(0b0000000, 0b100, sum, 0 )
 
+#define xtea_hw_enc_v0_step(v0, v1)   neorv32_cfu_r3_instr(0b0000000, 0b000, v0, v1)
 
+#define xtea_hw_enc_v1_step(v0, v1)   neorv32_cfu_r3_instr(0b0000000, 0b001, v0, v1)
 
+#define xtea_hw_dec_v0_step(v0, v1)   neorv32_cfu_r3_instr(0b0000000, 0b010, v0, v1)
 
+#define xtea_hw_dec_v1_step(v0, v1)   neorv32_cfu_r3_instr(0b0000000, 0b011, v0, v1)
 
+#define xtea_hw_illegal_inst()   neorv32_cfu_r3_instr(0b0000000, 0b111, 0, 0 )
 
+ + + + + + + +

+Functions

void xtea_sw_encipher (uint32_t num_cycles, uint32_t *v, const uint32_t k[4])
 
void xtea_sw_decipher (unsigned int num_cycles, uint32_t *v, const uint32_t k[4])
 
int main ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

Global variables
const uint32_t xtea_delta = 0x9e3779b9
 
const uint32_t key [4] = {0x207230ba, 0x1ffba710, 0xc45271ef, 0xdd01768a}
 
uint32_t input_data [DATA_NUM]
 
uint32_t cypher_data_sw [DATA_NUM]
 
uint32_t cypher_data_hw [DATA_NUM]
 
uint32_t plain_data_sw [DATA_NUM]
 
uint32_t plain_data_hw [DATA_NUM]
 
uint32_t time_enc_sw
 
uint32_t time_enc_hw
 
uint32_t time_dec_sw
 
uint32_t time_dec_hw
 
+

Detailed Description

+

Example program showing how to use the CFU's custom instructions (XTEA example).

+
Author
Stephan Nolting
+
Note
Take a look at the highly-commented "hardware-counterpart" of this CFU example in 'rtl/core/neorv32_cpu_cp_cfu.vhd'.
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ DATA_NUM

+ +
+
+ + + + +
#define DATA_NUM   64
+
+

Input data size (in number of 32-bit words), has to be even

+ +
+
+ +

◆ XTEA_CYCLES

+ +
+
+ + + + +
#define XTEA_CYCLES   20
+
+

Number XTEA cycles

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function: run pure-SW XTEA and compare with HW-XTEA

+
Note
This program requires the CFU, UART0 and the Zicntr ISA extension.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ xtea_sw_decipher()

+ +
+
+ + + + + + + + + + + + + + + + +
void xtea_sw_decipher (unsigned int num_cycles,
uint32_t * v,
const uint32_t k[4] )
+
+

XTEA decryption - software reference

+

Source: https://de.wikipedia.org/wiki/Extended_Tiny_Encryption_Algorithm

+
Parameters
+ + + + +
[in]num_cyclesNumber of encryption cycles.
[in,out]vDecryption data/result array (2x32-bit).
[in]kDecryption key array (4x32-bit).
+
+
+ +
+
+ +

◆ xtea_sw_encipher()

+ +
+
+ + + + + + + + + + + + + + + + +
void xtea_sw_encipher (uint32_t num_cycles,
uint32_t * v,
const uint32_t k[4] )
+
+

XTEA encryption - software reference

+

Source: https://de.wikipedia.org/wiki/Extended_Tiny_Encryption_Algorithm

+
Parameters
+ + + + +
[in]num_cyclesNumber of encryption cycles.
[in,out]vEncryption data/result array (2x32-bit).
[in]kEncryption key array (4x32-bit).
+
+
+ +
+
+

Variable Documentation

+ +

◆ cypher_data_hw

+ +
+
+ + + + +
uint32_t cypher_data_hw[DATA_NUM]
+
+

XTEA delta (round-key update)

+ +
+
+ +

◆ cypher_data_sw

+ +
+
+ + + + +
uint32_t cypher_data_sw[DATA_NUM]
+
+

Encryption results

+ +
+
+ +

◆ input_data

+ +
+
+ + + + +
uint32_t input_data[DATA_NUM]
+
+

Encryption input data

+ +
+
+ +

◆ key

+ +
+
+ + + + +
const uint32_t key[4] = {0x207230ba, 0x1ffba710, 0xc45271ef, 0xdd01768a}
+
+

Encryption/decryption key (128-bit)

+ +
+
+ +

◆ plain_data_hw

+ +
+
+ + + + +
uint32_t plain_data_hw[DATA_NUM]
+
+

XTEA delta (round-key update)

+ +
+
+ +

◆ plain_data_sw

+ +
+
+ + + + +
uint32_t plain_data_sw[DATA_NUM]
+
+

Decryption results

+ +
+
+ +

◆ time_dec_hw

+ +
+
+ + + + +
uint32_t time_dec_hw
+
+

XTEA delta (round-key update)

+ +
+
+ +

◆ time_dec_sw

+ +
+
+ + + + +
uint32_t time_dec_sw
+
+

XTEA delta (round-key update)

+ +
+
+ +

◆ time_enc_hw

+ +
+
+ + + + +
uint32_t time_enc_hw
+
+

XTEA delta (round-key update)

+ +
+
+ +

◆ time_enc_sw

+ +
+
+ + + + +
uint32_t time_enc_sw
+
+

Timing data

+ +
+
+ +

◆ xtea_delta

+ +
+
+ + + + +
const uint32_t xtea_delta = 0x9e3779b9
+
+

XTEA delta (round-key update)

+ +
+
+
+ + +
+ + diff --git a/sw/demo__crc_2main_8c.html b/sw/demo__crc_2main_8c.html new file mode 100644 index 0000000000..645259d13f --- /dev/null +++ b/sw/demo__crc_2main_8c.html @@ -0,0 +1,168 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_crc/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

CRC demo program. +More...

+
#include <neorv32.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + +

+Functions

int main ()
 
+ + + +

+Variables

+const uint8_t test_string [] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x00}
 
+

Detailed Description

+

CRC demo program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Simple demo program to showcase the NEORV32 CRC unit.

+
Note
This program requires UART0 and the CRC unit to be synthesized. The DMA controller is optional.
+
Returns
Irrelevant.
+ +
+
+
+ + +
+ + diff --git a/sw/demo__dma_2main_8c.html b/sw/demo__dma_2main_8c.html new file mode 100644 index 0000000000..849c59514b --- /dev/null +++ b/sw/demo__dma_2main_8c.html @@ -0,0 +1,212 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_dma/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

DMA demo program. +More...

+
#include <neorv32.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + +

+Functions

void show_arrays (void)
 
void dma_firq_handler (void)
 
int main ()
 
+ + + + + +

+Variables

+volatile uint32_t dma_src [4]
 
+volatile uint32_t dma_dst [4]
 
+

Detailed Description

+

DMA demo program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ dma_firq_handler()

+ +
+
+ + + + + + + +
void dma_firq_handler (void )
+
+

DMA FIRQ handler.

+
Warning
This function has to be of type "void xyz(void)" and must not use any interrupt attributes!
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Simple demo program to showcase the NEORV32 DMA controller.

+
Note
This program requires UART0 and the DMA controller to be synthesized.
+
Returns
Irrelevant.
+ +
+
+ +

◆ show_arrays()

+ +
+
+ + + + + + + +
void show_arrays (void )
+
+

Print test data arrays

+ +
+
+
+ + +
+ + diff --git a/sw/demo__emulate__unaligned_2main_8c.html b/sw/demo__emulate__unaligned_2main_8c.html new file mode 100644 index 0000000000..af8c6f5855 --- /dev/null +++ b/sw/demo__emulate__unaligned_2main_8c.html @@ -0,0 +1,216 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_emulate_unaligned/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
main.c File Reference
+
+
+ +

Demo program for emulating unaligned memory accesses using the NEORV32 run-time environment (RTE). +More...

+
#include <neorv32.h>
+
+ + + + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
#define DEBUG_INFO   0
 
+ + + + + + + +

Global variables

volatile uint32_t data_block [2]
 
void trap_handler_emulate_unaligned_lw (void)
 
int main ()
 
+

Detailed Description

+

Demo program for emulating unaligned memory accesses using the NEORV32 run-time environment (RTE).

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ DEBUG_INFO

+ +
+
+ + + + +
#define DEBUG_INFO   0
+
+

Show debug info when 1

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Demo program to showcase RTE-based emulation of unaligned memory accesses.

+
Returns
Irrelevant.
+ +
+
+ +

◆ trap_handler_emulate_unaligned_lw()

+ +
+
+ + + + + + + +
void trap_handler_emulate_unaligned_lw (void )
+
+

Emulate unaligned load-word operation

+
Note
This is a RTE "second-level" trap handler.
+
Warning
Compressed load instructions are not supported here!
+ +
+
+

Variable Documentation

+ +

◆ data_block

+ +
+
+ + + + +
volatile uint32_t data_block[2]
+
+

Emulate unaligned load-word operation

+
Note
This is a RTE "second-level" trap handler.
+
Warning
Compressed load instructions are not supported here!
+ +
+
+
+ + +
+ + diff --git a/sw/demo__gptmr_2main_8c.html b/sw/demo__gptmr_2main_8c.html new file mode 100644 index 0000000000..fbdac7f3a7 --- /dev/null +++ b/sw/demo__gptmr_2main_8c.html @@ -0,0 +1,182 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_gptmr/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Simple GPTMR timer-match interrupt example. +More...

+
#include <neorv32.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + +

+Functions

void gptmr_firq_handler (void)
 
int main ()
 
+

Detailed Description

+

Simple GPTMR timer-match interrupt example.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ gptmr_firq_handler()

+ +
+
+ + + + + + + +
void gptmr_firq_handler (void )
+
+

GPTMR FIRQ handler.

+
Warning
This function has to be of type "void xyz(void)" and must not use any interrupt attributes!
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program blinks an LED at GPIO.output(0) at 1Hz using the general purpose timer interrupt.

+
Note
This program requires the GPTMR unit to be synthesized (and UART0 and GPIO).
+
Returns
Should not return.
+ +
+
+
+ + +
+ + diff --git a/sw/demo__hpm_2main_8c.html b/sw/demo__hpm_2main_8c.html new file mode 100644 index 0000000000..4eb7c4794c --- /dev/null +++ b/sw/demo__hpm_2main_8c.html @@ -0,0 +1,161 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_hpm/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Hardware performance monitor (HPM) example program. +More...

+
#include <neorv32.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + +

+Functions

int main ()
 
+

Detailed Description

+

Hardware performance monitor (HPM) example program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function

+
Note
This program requires the CPU Zihpm extension (with at least 2 regions) and UART0.
+
Returns
0 if execution was successful
+ +
+
+
+ + +
+ + diff --git a/sw/demo__mtime_2main_8c.html b/sw/demo__mtime_2main_8c.html new file mode 100644 index 0000000000..1cdc157e46 --- /dev/null +++ b/sw/demo__mtime_2main_8c.html @@ -0,0 +1,174 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_mtime/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Simple machine timer (MTIME) usage example. +More...

+
#include <neorv32.h>
+
+ + + +

+Macros

+#define BAUD_RATE   19200
 
+ + + + + +

+Functions

void mtime_irq_handler (void)
 
int main ()
 
+ + + +

+Variables

+const char weekdays [7][4] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
 
+

Detailed Description

+

Simple machine timer (MTIME) usage example.

+
Author
Stephan Nolting
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program toggles an LED at GPIO.output(0) at 1Hz and also prints and updates the Unix time in human-readable format using the machine timer interrupt.

+
Note
This program requires the MTIME unit to be synthesized (and UART0 and GPIO).
+
Returns
Should not return.
+ +
+
+ +

◆ mtime_irq_handler()

+ +
+
+ + + + + + + +
void mtime_irq_handler (void )
+
+

MTIME IRQ handler.

+
Warning
This function has to be of type "void xyz(void)" and must not use any interrupt attributes!
+ +
+
+
+ + +
+ + diff --git a/sw/demo__neopixel_2main_8c.html b/sw/demo__neopixel_2main_8c.html new file mode 100644 index 0000000000..0fbec26b4b --- /dev/null +++ b/sw/demo__neopixel_2main_8c.html @@ -0,0 +1,228 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_neopixel/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

NeoPixel (WS2812) interface demo using the processor's smart LED interface (NEOLED). +More...

+
#include <neorv32.h>
+
+ + + + + + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
#define NUM_LEDS_24BIT   (12)
 
#define MAX_INTENSITY   (16)
 
+ + + + + +

+Functions

uint32_t hsv2rgb (int h, int v)
 
int main ()
 
+

Detailed Description

+

NeoPixel (WS2812) interface demo using the processor's smart LED interface (NEOLED).

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ MAX_INTENSITY

+ +
+
+ + + + +
#define MAX_INTENSITY   (16)
+
+

Max intensity (0..255)

+ +
+
+ +

◆ NUM_LEDS_24BIT

+ +
+
+ + + + +
#define NUM_LEDS_24BIT   (12)
+
+

Number of RGB LEDs in stripe (24-bit data)

+ +
+
+

Function Documentation

+ +

◆ hsv2rgb()

+ +
+
+ + + + + + + + + + + +
uint32_t hsv2rgb (int h,
int v )
+
+

Convert HSV color to RGB.

+
Note
Very simple version: using integer arithmetic and ignoring saturation (saturation is always MAX).
+
Parameters
+ + + +
[in]hHue (color angle), 0..359
[in]vValue (intensity), 0..255
+
+
+
Returns
LSB-aligned 24-bit RGB data [G,R,B]
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function This demo uses a 12-LED RGB ring

+
Note
This program requires the NEOLED controller to be synthesized (UART0 is optional).
+
Returns
0 if execution was successful
+ +
+
+
+ + +
+ + diff --git a/sw/demo__newlib_2main_8c.html b/sw/demo__newlib_2main_8c.html new file mode 100644 index 0000000000..31c57b8efb --- /dev/null +++ b/sw/demo__newlib_2main_8c.html @@ -0,0 +1,185 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_newlib/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
main.c File Reference
+
+
+ +

Demo/test program for NEORV32's newlib C standard library support. +More...

+
#include <neorv32.h>
+#include <unistd.h>
+#include <time.h>
+#include <stdlib.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + +

+Functions

Print main's return code using a destructor
void main_destructor_test (void)
 
int main ()
 
+

Detailed Description

+

Demo/test program for NEORV32's newlib C standard library support.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function: Check some of newlib's core functions.

+
Note
This program requires UART0.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ main_destructor_test()

+ +
+
+ + + + + + + +
void main_destructor_test (void )
+
+

Main function: Check some of newlib's core functions.

+
Note
This program requires UART0.
+
Returns
0 if execution was successful
+ +
+
+
+ + +
+ + diff --git a/sw/demo__onewire_2main_8c.html b/sw/demo__onewire_2main_8c.html new file mode 100644 index 0000000000..25af896062 --- /dev/null +++ b/sw/demo__onewire_2main_8c.html @@ -0,0 +1,270 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_onewire/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Demo program for the NEORV32 1-Wire interface controller (ONEWIRE). +More...

+
#include <neorv32.h>
+#include <string.h>
+#include "onewire_aux.h"
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + + + + + + + +

+Functions

void show_help (void)
 
void show_1wire_commands (void)
 
void read_byte (void)
 
void write_byte (void)
 
void scan_bus (void)
 
int main ()
 
+ + + +

+Variables

+const char hex_c [16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}
 
+

Detailed Description

+

Demo program for the NEORV32 1-Wire interface controller (ONEWIRE).

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function

+
Note
This program requires the ONEWIRE and UART0 modules. Only non-blocking ONEWIRE functions are used.
+
Returns
!=0 if setup error
+ +
+
+ +

◆ read_byte()

+ +
+
+ + + + + + + +
void read_byte (void )
+
+

Read full byte from bus.

+ +
+
+ +

◆ scan_bus()

+ +
+
+ + + + + + + +
void scan_bus (void )
+
+

Scan bus for devices and print IDs.

+ +
+
+ +

◆ show_1wire_commands()

+ +
+
+ + + + + + + +
void show_1wire_commands (void )
+
+

Show standard 1-wire commands.

+ +
+
+ +

◆ show_help()

+ +
+
+ + + + + + + +
void show_help (void )
+
+

Show help menu.

+ +
+
+ +

◆ write_byte()

+ +
+
+ + + + + + + +
void write_byte (void )
+
+

Write full byte to bus.

+ +
+
+
+ + +
+ + diff --git a/sw/demo__pwm_2main_8c.html b/sw/demo__pwm_2main_8c.html new file mode 100644 index 0000000000..dd60ce236f --- /dev/null +++ b/sw/demo__pwm_2main_8c.html @@ -0,0 +1,178 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_pwm/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Simple PWM demo program. +More...

+
#include <neorv32.h>
+
+ + + + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
#define PWM_MAX   200
 
+ + + +

+Functions

int main ()
 
+

Detailed Description

+

Simple PWM demo program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ PWM_MAX

+ +
+
+ + + + +
#define PWM_MAX   200
+
+

Maximum PWM output intensity (8-bit)

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program generates a simple dimming sequence for PWM channels 0 to 3.

+
Note
This program requires the PWM controller to be synthesized (the UART is optional).
+
Returns
!=0 if error.
+ +
+
+
+ + +
+ + diff --git a/sw/demo__sdi_2main_8c.html b/sw/demo__sdi_2main_8c.html new file mode 100644 index 0000000000..bbb4d60fd3 --- /dev/null +++ b/sw/demo__sdi_2main_8c.html @@ -0,0 +1,202 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_sdi/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

SDI test program (direct access to the SDI module). +More...

+
#include <neorv32.h>
+#include <string.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + +

+Functions

void sdi_put (void)
 
void sdi_get (void)
 
int main ()
 
+

Detailed Description

+

SDI test program (direct access to the SDI module).

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program provides an interactive console for the SDI module.

+
Note
This program requires UART0 and the SDI to be synthesized.
+
Returns
Irrelevant.
+ +
+
+ +

◆ sdi_get()

+ +
+
+ + + + + + + +
void sdi_get (void )
+
+

Read data from SDI RX buffer.

+ +
+
+ +

◆ sdi_put()

+ +
+
+ + + + + + + +
void sdi_put (void )
+
+

Write data to SDI TX buffer.

+ +
+
+
+ + +
+ + diff --git a/sw/demo__slink_2main_8c.html b/sw/demo__slink_2main_8c.html new file mode 100644 index 0000000000..ec62fe9e43 --- /dev/null +++ b/sw/demo__slink_2main_8c.html @@ -0,0 +1,182 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_slink/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

SLINK demo program. +More...

+
#include <neorv32.h>
+#include <string.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + +

+Functions

void slink_firq_handler (void)
 
int main ()
 
+

Detailed Description

+

SLINK demo program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Simple SLINK demo program.

+
Note
This program requires the UART0 and the SLINK to be synthesized.
+
Returns
=! 0 if execution failed.
+ +
+
+ +

◆ slink_firq_handler()

+ +
+
+ + + + + + + +
void slink_firq_handler (void )
+
+

SLINK interrupt handler.

+ +
+
+
+ + +
+ + diff --git a/sw/demo__spi_2main_8c.html b/sw/demo__spi_2main_8c.html new file mode 100644 index 0000000000..c3ef10e400 --- /dev/null +++ b/sw/demo__spi_2main_8c.html @@ -0,0 +1,261 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

SPI bus explorer (execute SPI transactions by hand). +More...

+
#include <neorv32.h>
+#include <string.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + + + + + +

+Functions

void spi_cs (uint32_t type)
 
void spi_trans (void)
 
void spi_setup (void)
 
void aux_print_hex_byte (uint8_t byte)
 
int main ()
 
+ + + +

+Variables

+uint32_t spi_configured
 
+

Detailed Description

+

SPI bus explorer (execute SPI transactions by hand).

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ aux_print_hex_byte()

+ +
+
+ + + + + + + +
void aux_print_hex_byte (uint8_t byte)
+
+

Print HEX byte.

+
Parameters
+ + +
[in]byteByte to be printed as 2-cahr hex value.
+
+
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program provides an interactive console to communicate with SPI devices.

+
Note
This program requires the UART and the SPI to be synthesized.
+
Returns
Irrelevant.
+ +
+
+ +

◆ spi_cs()

+ +
+
+ + + + + + + +
void spi_cs (uint32_t type)
+
+

Enable or disable chip-select line

+
Parameters
+ + +
[in]type0=disable, 1=enable
+
+
+ +
+
+ +

◆ spi_setup()

+ +
+
+ + + + + + + +
void spi_setup (void )
+
+

Configure SPI module

+ +
+
+ +

◆ spi_trans()

+ +
+
+ + + + + + + +
void spi_trans (void )
+
+

SPI data transfer

+ +
+
+
+ + +
+ + diff --git a/sw/demo__spi__irq_2main_8c.html b/sw/demo__spi__irq_2main_8c.html new file mode 100644 index 0000000000..e5b87d0d88 --- /dev/null +++ b/sw/demo__spi__irq_2main_8c.html @@ -0,0 +1,192 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Example of an ISR driven SPI transfer. +More...

+
#include <neorv32.h>
+#include <string.h>
+#include "neorv32_spi_irq.h"
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + +

+Functions

void spi_irq_handler (void)
 
int main ()
 
+ + + +

+Variables

+t_neorv32_spi g_neorv32_spi
 
+

Detailed Description

+

Example of an ISR driven SPI transfer.

+
Author
Andreas Kaeberlein
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program demonstrates the usage of an ISR driven SPI transfer

+
Note
This program requires the UART and the SPI to be synthesized.
+
Returns
Irrelevant.
+ +
+
+ +

◆ spi_irq_handler()

+ +
+
+ + + + + + + +
void spi_irq_handler (void )
+
+

SPI Interrupt Handler

+
Note
Captures/Transmits the data to the SPI core
+
Returns
void.
+ +
+
+
+ + +
+ + diff --git a/sw/demo__trng_2main_8c.html b/sw/demo__trng_2main_8c.html new file mode 100644 index 0000000000..148192316e --- /dev/null +++ b/sw/demo__trng_2main_8c.html @@ -0,0 +1,261 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_trng/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

True random number generator demo program. +More...

+
#include <neorv32.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + + + + + + + +

+Functions

void print_random_data (void)
 
void repetition_count_test (void)
 
void adaptive_proportion_test (void)
 
void generate_histogram (void)
 
void compute_rate (void)
 
int main (void)
 
+

Detailed Description

+

True random number generator demo program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ adaptive_proportion_test()

+ +
+
+ + + + + + + +
void adaptive_proportion_test (void )
+
+

Run adaptive proportion test (NIST SP 800-90B)

+ +
+
+ +

◆ compute_rate()

+ +
+
+ + + + + + + +
void compute_rate (void )
+
+

Compute average random generation rate

+ +
+
+ +

◆ generate_histogram()

+ +
+
+ + + + + + + +
void generate_histogram (void )
+
+

Generate and print histogram. Samples random data until a key is pressed.

+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Simple true random number test/demo program.

+
Note
This program requires the UART and the TRNG to be synthesized.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ print_random_data()

+ +
+
+ + + + + + + +
void print_random_data (void )
+
+

Print random numbers until a key is pressed.

+ +
+
+ +

◆ repetition_count_test()

+ +
+
+ + + + + + + +
void repetition_count_test (void )
+
+

Run repetition count test (NIST SP 800-90B)

+ +
+
+
+ + +
+ + diff --git a/sw/demo__twi_2main_8c.html b/sw/demo__twi_2main_8c.html new file mode 100644 index 0000000000..cd983ae326 --- /dev/null +++ b/sw/demo__twi_2main_8c.html @@ -0,0 +1,248 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_twi/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

TWI bus explorer. +More...

+
#include <neorv32.h>
+#include <string.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + + + + + +

+Functions

void scan_twi (void)
 
void set_clock (void)
 
void send_twi (void)
 
void print_hex_byte (uint8_t data)
 
int main ()
 
+

Detailed Description

+

TWI bus explorer.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

This program provides an interactive console to communicate with TWI devices.

+
Note
This program requires the UART to be synthesized.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ print_hex_byte()

+ +
+
+ + + + + + + +
void print_hex_byte (uint8_t data)
+
+

Print byte as hex chars via UART0.

+
Parameters
+ + +
data8-bit data to be printed as two hex chars.
+
+
+ +
+
+ +

◆ scan_twi()

+ +
+
+ + + + + + + +
void scan_twi (void )
+
+

Scan 7-bit TWI address space and print results

+ +
+
+ +

◆ send_twi()

+ +
+
+ + + + + + + +
void send_twi (void )
+
+

Read/write menu to transfer 1 byte from/to bus

+ +
+
+ +

◆ set_clock()

+ +
+
+ + + + + + + +
void set_clock (void )
+
+

TWI clock setup

+ +
+
+
+ + +
+ + diff --git a/sw/demo__wdt_2main_8c.html b/sw/demo__wdt_2main_8c.html new file mode 100644 index 0000000000..7aa5f7f1d6 --- /dev/null +++ b/sw/demo__wdt_2main_8c.html @@ -0,0 +1,178 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_wdt/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Watchdog demo program. +More...

+
#include <neorv32.h>
+
+ + + + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
#define WDT_TIMEOUT_S   8
 
+ + + +

+Functions

int main ()
 
+

Detailed Description

+

Watchdog demo program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ WDT_TIMEOUT_S

+ +
+
+ + + + +
#define WDT_TIMEOUT_S   8
+
+

WDT timeout (until system reset) in seconds

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function

+
Note
This program requires the WDT and UART0 to be synthesized.
+
Returns
0 if execution was successful
+ +
+
+
+ + +
+ + diff --git a/sw/demo__xip_2main_8c.html b/sw/demo__xip_2main_8c.html new file mode 100644 index 0000000000..41f3cbaa30 --- /dev/null +++ b/sw/demo__xip_2main_8c.html @@ -0,0 +1,479 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_xip/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Interactive console program to upload and execute a XIP program. +More...

+
#include <neorv32.h>
+
+ + + + + + + + + + + + + + +

+Macros

#define EXE_SIGNATURE   0x4788CAFE
 
User configuration
#define BAUD_RATE   19200
 
#define FLASH_BASE   0x00400000
 
#define FLASH_ABYTES   3
 
#define XIP_CLK_PRSC   CLK_PRSC_128
 
#define BUFFER_SIZE   (7*1024)
 
+ + + + + +

+Enumerations

enum  SPI_FLASH_CMD {
+  SPI_FLASH_CMD_WRITE = 0x02 +, SPI_FLASH_CMD_READ = 0x03 +, SPI_FLASH_CMD_WRITE_DISABLE = 0x04 +, SPI_FLASH_CMD_READ_STATUS = 0x05 +,
+  SPI_FLASH_CMD_WRITE_ENABLE = 0x06 +, SPI_FLASH_CMD_SECTOR_ERASE = 0xD8 +
+ }
 
enum  SPI_FLASH_SREG { SPI_FLASH_SREG_WIP = 0 +, SPI_FLASH_SREG_WEL = 1 + }
 
+ + + + + + + + + + + + +

+Functions

Function prototypes
int xip_flash_access_check (void)
 
void xip_flash_erase_sector (uint32_t base_addr)
 
void xip_flash_program (uint32_t *src, uint32_t base_addr, uint32_t size)
 
int uart_get_executable (uint32_t *dst, uint32_t *size)
 
uint32_t uart_get_word (void)
 
+ + + + + +

RAM storage for executable

uint32_t ram_buffer [BUFFER_SIZE/4]
 
int main ()
 
+

Detailed Description

+

Interactive console program to upload and execute a XIP program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ BUFFER_SIZE

+ +
+
+ + + + +
#define BUFFER_SIZE   (7*1024)
+
+

Executable RAM buffer size in bytes

+ +
+
+ +

◆ EXE_SIGNATURE

+ +
+
+ + + + +
#define EXE_SIGNATURE   0x4788CAFE
+
+

Valid executable identification signature

+ +
+
+ +

◆ FLASH_ABYTES

+ +
+
+ + + + +
#define FLASH_ABYTES   3
+
+

Flash address bytes

+ +
+
+ +

◆ FLASH_BASE

+ +
+
+ + + + +
#define FLASH_BASE   0x00400000
+
+

Flash base address (32-bit)

+ +
+
+ +

◆ XIP_CLK_PRSC

+ +
+
+ + + + +
#define XIP_CLK_PRSC   CLK_PRSC_128
+
+

XIP SPI clock prescaler select

+ +
+
+

Enumeration Type Documentation

+ +

◆ SPI_FLASH_CMD

+ +
+
+ + + + +
enum SPI_FLASH_CMD
+
+

SPI flash commands

+ + + + + + + +
Enumerator
SPI_FLASH_CMD_WRITE 

Write data

+
SPI_FLASH_CMD_READ 

Read data

+
SPI_FLASH_CMD_WRITE_DISABLE 

Disable write access

+
SPI_FLASH_CMD_READ_STATUS 

Get status register

+
SPI_FLASH_CMD_WRITE_ENABLE 

Enable write access

+
SPI_FLASH_CMD_SECTOR_ERASE 

Erase complete sector

+
+ +
+
+ +

◆ SPI_FLASH_SREG

+ +
+
+ + + + +
enum SPI_FLASH_SREG
+
+

SPI flash status register

+ + + +
Enumerator
SPI_FLASH_SREG_WIP 

Write-in-progress data

+
SPI_FLASH_SREG_WEL 

Write-enable latch

+
+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function

+
Note
This program requires the XIP module and UART0.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ uart_get_executable()

+ +
+
+ + + + + + + + + + + +
int uart_get_executable (uint32_t * dst,
uint32_t * length )
+
+

Get NEORV32 executable via UART.

+
Parameters
+ + + +
[in]dstPointer to uin32_t data array where the executable will be stored.
[out]lengthPointer to a uin32_t to store the executable size in bytes.
+
+
+
Returns
Returns 0 on success.
+ +
+
+ +

◆ uart_get_word()

+ +
+
+ + + + + + + +
uint32_t uart_get_word (void )
+
+

Get 32-bit word from UART.

+
Returns
32-bit data word.
+ +
+
+ +

◆ xip_flash_access_check()

+ +
+
+ + + + + + + +
int xip_flash_access_check (void )
+
+

Check SPI flash connection by toggling the status register's write enable latch.

+
Returns
Returns 0 on success.
+ +
+
+ +

◆ xip_flash_erase_sector()

+ +
+
+ + + + + + + +
void xip_flash_erase_sector (uint32_t base_addr)
+
+

Erase sector starting at base address.

+
Parameters
+ + +
[in]base_addrBase address of sector to erase.
+
+
+ +
+
+ +

◆ xip_flash_program()

+ +
+
+ + + + + + + + + + + + + + + + +
void xip_flash_program (uint32_t * src,
uint32_t base_addr,
uint32_t size )
+
+

Helper function to program the XIP flash via the direct SPI access feature of the XIP module.

+
Warning
This function can only be used BEFORE the XIP-mode is activated!
+
Note
This function is blocking and performs individual writes for each byte (little-endian byte order!).
+
Parameters
+ + + + +
[in]srcPointer to data that will be copied to flash (32-bit).
[in]base_addrImage base address (in flash).
[in]sizeImage size in bytes.
+
+
+
Returns
Returns 0 if write was successful.
+ +
+
+

Variable Documentation

+ +

◆ ram_buffer

+ +
+
+ + + + +
uint32_t ram_buffer[BUFFER_SIZE/4]
+
+

Main function

+
Note
This program requires the XIP module and UART0.
+
Returns
0 if execution was successful
+ +
+
+
+ + +
+ + diff --git a/sw/demo__xirq_2main_8c.html b/sw/demo__xirq_2main_8c.html new file mode 100644 index 0000000000..2e3ace68f9 --- /dev/null +++ b/sw/demo__xirq_2main_8c.html @@ -0,0 +1,241 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_xirq/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

External interrupt controller (XIRQ) demo program (using hardware-assisted prioritization). +More...

+
#include <neorv32.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + + + + + + + + + +

+Functions

void xirq_handler_ch0 (void)
 
void xirq_handler_ch1 (void)
 
void xirq_handler_ch2 (void)
 
void xirq_handler_ch3 (void)
 
int main ()
 
+

Detailed Description

+

External interrupt controller (XIRQ) demo program (using hardware-assisted prioritization).

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function

+
Note
This program requires the XIRQ and the UART to be synthesized.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ xirq_handler_ch0()

+ +
+
+ + + + + + + +
void xirq_handler_ch0 (void )
+
+

XIRQ handler channel 0.

Warning
This function has to be of type "void xyz(void)" and must not use any interrupt attributes!
+ +
+
+ +

◆ xirq_handler_ch1()

+ +
+
+ + + + + + + +
void xirq_handler_ch1 (void )
+
+

XIRQ handler channel 1.

Warning
This function has to be of type "void xyz(void)" and must not use any interrupt attributes!
+ +
+
+ +

◆ xirq_handler_ch2()

+ +
+
+ + + + + + + +
void xirq_handler_ch2 (void )
+
+

XIRQ handler channel 2.

Warning
This function has to be of type "void xyz(void)" and must not use any interrupt attributes!
+ +
+
+ +

◆ xirq_handler_ch3()

+ +
+
+ + + + + + + +
void xirq_handler_ch3 (void )
+
+

XIRQ handler channel 3.

Warning
This function has to be of type "void xyz(void)" and must not use any interrupt attributes!
+ +
+
+
+ + +
+ + diff --git a/sw/dhry_8h_source.html b/sw/dhry_8h_source.html new file mode 100644 index 0000000000..f99f43ac20 --- /dev/null +++ b/sw/dhry_8h_source.html @@ -0,0 +1,557 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/dhrystone/dhry.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
dhry.h
+
+
+
1/*
+
2 ****************************************************************************
+
3 *
+
4 * "DHRYSTONE" Benchmark Program
+
5 * -----------------------------
+
6 *
+
7 * Version: C, Version 2.1
+
8 *
+
9 * File: dhry.h (part 1 of 3)
+
10 *
+
11 * Date: May 25, 1988
+
12 *
+
13 * Author: Reinhold P. Weicker
+
14 * Siemens AG, E STE 35
+
15 * Postfach 3240
+
16 * 8520 Erlangen
+
17 * Germany (West)
+
18 * Phone: [xxx-49]-9131-7-20330
+
19 * (8-17 Central European Time)
+
20 * Usenet: ..!mcvax!unido!estevax!weicker
+
21 *
+
22 * Original Version (in Ada) published in
+
23 * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
+
24 * pp. 1013 - 1030, together with the statistics
+
25 * on which the distribution of statements etc. is based.
+
26 *
+
27 * In this C version, the following C library functions are used:
+
28 * - strcpy, strcmp (inside the measurement loop)
+
29 * - printf, scanf (outside the measurement loop)
+
30 * In addition, Berkeley UNIX system calls "times ()" or "time ()"
+
31 * are used for execution time measurement. For measurements
+
32 * on other systems, these calls have to be changed.
+
33 *
+
34 * Collection of Results:
+
35 * Reinhold Weicker (address see above) and
+
36 *
+
37 * Rick Richardson
+
38 * PC Research. Inc.
+
39 * 94 Apple Orchard Drive
+
40 * Tinton Falls, NJ 07724
+
41 * Phone: (201) 389-8963 (9-17 EST)
+
42 * Usenet: ...!uunet!pcrat!rick
+
43 *
+
44 * Please send results to Rick Richardson and/or Reinhold Weicker.
+
45 * Complete information should be given on hardware and software used.
+
46 * Hardware information includes: Machine type, CPU, type and size
+
47 * of caches; for microprocessors: clock frequency, memory speed
+
48 * (number of wait states).
+
49 * Software information includes: Compiler (and runtime library)
+
50 * manufacturer and version, compilation switches, OS version.
+
51 * The Operating System version may give an indication about the
+
52 * compiler; Dhrystone itself performs no OS calls in the measurement loop.
+
53 *
+
54 * The complete output generated by the program should be mailed
+
55 * such that at least some checks for correctness can be made.
+
56 *
+
57 ***************************************************************************
+
58 *
+
59 * History: This version C/2.1 has been made for two reasons:
+
60 *
+
61 * 1) There is an obvious need for a common C version of
+
62 * Dhrystone, since C is at present the most popular system
+
63 * programming language for the class of processors
+
64 * (microcomputers, minicomputers) where Dhrystone is used most.
+
65 * There should be, as far as possible, only one C version of
+
66 * Dhrystone such that results can be compared without
+
67 * restrictions. In the past, the C versions distributed
+
68 * by Rick Richardson (Version 1.1) and by Reinhold Weicker
+
69 * had small (though not significant) differences.
+
70 *
+
71 * 2) As far as it is possible without changes to the Dhrystone
+
72 * statistics, optimizing compilers should be prevented from
+
73 * removing significant statements.
+
74 *
+
75 * This C version has been developed in cooperation with
+
76 * Rick Richardson (Tinton Falls, NJ), it incorporates many
+
77 * ideas from the "Version 1.1" distributed previously by
+
78 * him over the UNIX network Usenet.
+
79 * I also thank Chaim Benedelac (National Semiconductor),
+
80 * David Ditzel (SUN), Earl Killian and John Mashey (MIPS),
+
81 * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley)
+
82 * for their help with comments on earlier versions of the
+
83 * benchmark.
+
84 *
+
85 * Changes: In the initialization part, this version follows mostly
+
86 * Rick Richardson's version distributed via Usenet, not the
+
87 * version distributed earlier via floppy disk by Reinhold Weicker.
+
88 * As a concession to older compilers, names have been made
+
89 * unique within the first 8 characters.
+
90 * Inside the measurement loop, this version follows the
+
91 * version previously distributed by Reinhold Weicker.
+
92 *
+
93 * At several places in the benchmark, code has been added,
+
94 * but within the measurement loop only in branches that
+
95 * are not executed. The intention is that optimizing compilers
+
96 * should be prevented from moving code out of the measurement
+
97 * loop, or from removing code altogether. Since the statements
+
98 * that are executed within the measurement loop have NOT been
+
99 * changed, the numbers defining the "Dhrystone distribution"
+
100 * (distribution of statements, operand types and locality)
+
101 * still hold. Except for sophisticated optimizing compilers,
+
102 * execution times for this version should be the same as
+
103 * for previous versions.
+
104 *
+
105 * Since it has proven difficult to subtract the time for the
+
106 * measurement loop overhead in a correct way, the loop check
+
107 * has been made a part of the benchmark. This does have
+
108 * an impact - though a very minor one - on the distribution
+
109 * statistics which have been updated for this version.
+
110 *
+
111 * All changes within the measurement loop are described
+
112 * and discussed in the companion paper "Rationale for
+
113 * Dhrystone version 2".
+
114 *
+
115 * Because of the self-imposed limitation that the order and
+
116 * distribution of the executed statements should not be
+
117 * changed, there are still cases where optimizing compilers
+
118 * may not generate code for some statements. To a certain
+
119 * degree, this is unavoidable for small synthetic benchmarks.
+
120 * Users of the benchmark are advised to check code listings
+
121 * whether code is generated for all statements of Dhrystone.
+
122 *
+
123 * Version 2.1 is identical to version 2.0 distributed via
+
124 * the UNIX network Usenet in March 1988 except that it corrects
+
125 * some minor deficiencies that were found by users of version 2.0.
+
126 * The only change within the measurement loop is that a
+
127 * non-executed "else" part was added to the "if" statement in
+
128 * Func_3, and a non-executed "else" part removed from Proc_3.
+
129 *
+
130 ***************************************************************************
+
131 *
+
132 * Defines: The following "Defines" are possible:
+
133 * -DREG=register (default: Not defined)
+
134 * As an approximation to what an average C programmer
+
135 * might do, the "register" storage class is applied
+
136 * (if enabled by -DREG=register)
+
137 * - for local variables, if they are used (dynamically)
+
138 * five or more times
+
139 * - for parameters if they are used (dynamically)
+
140 * six or more times
+
141 * Note that an optimal "register" strategy is
+
142 * compiler-dependent, and that "register" declarations
+
143 * do not necessarily lead to faster execution.
+
144 * -DNOSTRUCTASSIGN (default: Not defined)
+
145 * Define if the C compiler does not support
+
146 * assignment of structures.
+
147 * -DNOENUMS (default: Not defined)
+
148 * Define if the C compiler does not support
+
149 * enumeration types.
+
150 * -DTIMES (default)
+
151 * -DTIME
+
152 * The "times" function of UNIX (returning process times)
+
153 * or the "time" function (returning wallclock time)
+
154 * is used for measurement.
+
155 * For single user machines, "time ()" is adequate. For
+
156 * multi-user machines where you cannot get single-user
+
157 * access, use the "times ()" function. If you have
+
158 * neither, use a stopwatch in the dead of night.
+
159 * "printf"s are provided marking the points "Start Timer"
+
160 * and "Stop Timer". DO NOT use the UNIX "time(1)"
+
161 * command, as this will measure the total time to
+
162 * run this program, which will (erroneously) include
+
163 * the time to allocate storage (malloc) and to perform
+
164 * the initialization.
+
165 * -DHZ=nnn
+
166 * In Berkeley UNIX, the function "times" returns process
+
167 * time in 1/HZ seconds, with HZ = 60 for most systems.
+
168 * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY
+
169 * A VALUE.
+
170 *
+
171 ***************************************************************************
+
172 *
+
173 * Compilation model and measurement (IMPORTANT):
+
174 *
+
175 * This C version of Dhrystone consists of three files:
+
176 * - dhry.h (this file, containing global definitions and comments)
+
177 * - dhry_1.c (containing the code corresponding to Ada package Pack_1)
+
178 * - dhry_2.c (containing the code corresponding to Ada package Pack_2)
+
179 *
+
180 * The following "ground rules" apply for measurements:
+
181 * - Separate compilation
+
182 * - No procedure merging
+
183 * - Otherwise, compiler optimizations are allowed but should be indicated
+
184 * - Default results are those without register declarations
+
185 * See the companion paper "Rationale for Dhrystone Version 2" for a more
+
186 * detailed discussion of these ground rules.
+
187 *
+
188 * For 16-Bit processors (e.g. 80186, 80286), times for all compilation
+
189 * models ("small", "medium", "large" etc.) should be given if possible,
+
190 * together with a definition of these models for the compiler system used.
+
191 *
+
192 **************************************************************************
+
193 *
+
194 * Dhrystone (C version) statistics:
+
195 *
+
196 * [Comment from the first distribution, updated for version 2.
+
197 * Note that because of language differences, the numbers are slightly
+
198 * different from the Ada version.]
+
199 *
+
200 * The following program contains statements of a high level programming
+
201 * language (here: C) in a distribution considered representative:
+
202 *
+
203 * assignments 52 (51.0 %)
+
204 * control statements 33 (32.4 %)
+
205 * procedure, function calls 17 (16.7 %)
+
206 *
+
207 * 103 statements are dynamically executed. The program is balanced with
+
208 * respect to the three aspects:
+
209 *
+
210 * - statement type
+
211 * - operand type
+
212 * - operand locality
+
213 * operand global, local, parameter, or constant.
+
214 *
+
215 * The combination of these three aspects is balanced only approximately.
+
216 *
+
217 * 1. Statement Type:
+
218 * ----------------- number
+
219 *
+
220 * V1 = V2 9
+
221 * (incl. V1 = F(..)
+
222 * V = Constant 12
+
223 * Assignment, 7
+
224 * with array element
+
225 * Assignment, 6
+
226 * with record component
+
227 * --
+
228 * 34 34
+
229 *
+
230 * X = Y +|-|"&&"|"|" Z 5
+
231 * X = Y +|-|"==" Constant 6
+
232 * X = X +|- 1 3
+
233 * X = Y *|/ Z 2
+
234 * X = Expression, 1
+
235 * two operators
+
236 * X = Expression, 1
+
237 * three operators
+
238 * --
+
239 * 18 18
+
240 *
+
241 * if .... 14
+
242 * with "else" 7
+
243 * without "else" 7
+
244 * executed 3
+
245 * not executed 4
+
246 * for ... 7 | counted every time
+
247 * while ... 4 | the loop condition
+
248 * do ... while 1 | is evaluated
+
249 * switch ... 1
+
250 * break 1
+
251 * declaration with 1
+
252 * initialization
+
253 * --
+
254 * 34 34
+
255 *
+
256 * P (...) procedure call 11
+
257 * user procedure 10
+
258 * library procedure 1
+
259 * X = F (...)
+
260 * function call 6
+
261 * user function 5
+
262 * library function 1
+
263 * --
+
264 * 17 17
+
265 * ---
+
266 * 103
+
267 *
+
268 * The average number of parameters in procedure or function calls
+
269 * is 1.82 (not counting the function values aX *
+
270 *
+
271 * 2. Operators
+
272 * ------------
+
273 * number approximate
+
274 * percentage
+
275 *
+
276 * Arithmetic 32 50.8
+
277 *
+
278 * + 21 33.3
+
279 * - 7 11.1
+
280 * * 3 4.8
+
281 * / (int div) 1 1.6
+
282 *
+
283 * Comparison 27 42.8
+
284 *
+
285 * == 9 14.3
+
286 * /= 4 6.3
+
287 * > 1 1.6
+
288 * < 3 4.8
+
289 * >= 1 1.6
+
290 * <= 9 14.3
+
291 *
+
292 * Logic 4 6.3
+
293 *
+
294 * && (AND-THEN) 1 1.6
+
295 * | (OR) 1 1.6
+
296 * ! (NOT) 2 3.2
+
297 *
+
298 * -- -----
+
299 * 63 100.1
+
300 *
+
301 *
+
302 * 3. Operand Type (counted once per operand reference):
+
303 * ---------------
+
304 * number approximate
+
305 * percentage
+
306 *
+
307 * Integer 175 72.3 %
+
308 * Character 45 18.6 %
+
309 * Pointer 12 5.0 %
+
310 * String30 6 2.5 %
+
311 * Array 2 0.8 %
+
312 * Record 2 0.8 %
+
313 * --- -------
+
314 * 242 100.0 %
+
315 *
+
316 * When there is an access path leading to the final operand (e.g. a record
+
317 * component), only the final data type on the access path is counted.
+
318 *
+
319 *
+
320 * 4. Operand Locality:
+
321 * -------------------
+
322 * number approximate
+
323 * percentage
+
324 *
+
325 * local variable 114 47.1 %
+
326 * global variable 22 9.1 %
+
327 * parameter 45 18.6 %
+
328 * value 23 9.5 %
+
329 * reference 22 9.1 %
+
330 * function result 6 2.5 %
+
331 * constant 55 22.7 %
+
332 * --- -------
+
333 * 242 100.0 %
+
334 *
+
335 *
+
336 * The program does not compute anything meaningful, but it is syntactically
+
337 * and semantically correct. All variables have a value assigned to them
+
338 * before they are used as a source operand.
+
339 *
+
340 * There has been no explicit effort to account for the effects of a
+
341 * cache, or to balance the use of long or short displacements for code or
+
342 * data.
+
343 *
+
344 ***************************************************************************
+
345 */
+
346
+
347#ifndef dhrystone_h
+
348#define dhrystone_h
+
349
+
350/* Compiler and system dependent definitions: */
+
351
+
352#ifndef TIME
+
353#undef TIMES
+
354#define TIMES
+
355#endif
+
356 /* Use times(2) time function unless */
+
357 /* explicitly defined otherwise */
+
358
+
359//#ifdef MSC_CLOCK
+
360//#undef HZ
+
361//#undef TIMES
+
362//#include <time.h>
+
363//#define HZ CLK_TCK
+
364//#endif
+
365// /* Use Microsoft C hi-res clock */
+
366
+
367#define HZ SYSINFO_CLK
+
368
+
369#ifdef TIMES
+
370#include <sys/types.h>
+
371#include <sys/times.h>
+
372 /* for "times" */
+
373#endif
+
374
+
375#define Mic_secs_Per_Second 1000000
+
376 /* Berkeley UNIX C returns process times in seconds/HZ */
+
377
+
378#ifdef NOSTRUCTASSIGN
+
379#define structassign(d, s) memcpy(&(d), &(s), sizeof(d))
+
380#else
+
381#define structassign(d, s) d = s
+
382#endif
+
383
+
384#ifdef NOENUM
+
385#define Ident_1 0
+
386#define Ident_2 1
+
387#define Ident_3 2
+
388#define Ident_4 3
+
389#define Ident_5 4
+
390 typedef int Enumeration;
+
391#else
+
392 typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
+
393 Enumeration;
+
394#endif
+
395 /* for boolean and enumeration types in Ada, Pascal */
+
396
+
397/* General definitions: */
+
398
+
399#include <stdio.h>
+
400 /* for strcpy, strcmp */
+
401
+
402#define Null 0
+
403 /* Value of a Null pointer */
+
404#define true 1
+
405#define false 0
+
406
+
407typedef int One_Thirty;
+
408typedef int One_Fifty;
+
409typedef char Capital_Letter;
+
410typedef int Boolean;
+
411typedef char Str_30 [31];
+
412typedef int Arr_1_Dim [50];
+
413typedef int Arr_2_Dim [50] [50];
+
414
+
+
415typedef struct record
+
416 {
+
417 struct record *Ptr_Comp;
+
418 Enumeration Discr;
+
419 union {
+
420 struct {
+
421 Enumeration Enum_Comp;
+
422 int Int_Comp;
+
423 char Str_Comp [31];
+
424 } var_1;
+
425 struct {
+
426 Enumeration E_Comp_2;
+
427 char Str_2_Comp [31];
+
428 } var_2;
+
429 struct {
+
430 char Ch_1_Comp;
+
431 char Ch_2_Comp;
+
432 } var_3;
+
433 } variant;
+ +
+
435
+
436
+
437// function prototypes
+
438Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val);
+
439Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref);
+
440Boolean Func_3 (Enum_Par_Val);
+
441void Proc_1 (Ptr_Val_Par);
+
442void Proc_2 (Int_Par_Ref);
+
443void Proc_3 (Ptr_Ref_Par);
+
444void Proc_4 (void);
+
445void Proc_5 (void);
+
446void Proc_6 (Enum_Val_Par, Enum_Ref_Par);
+
447void Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref);
+
448void Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val);
+
449int strcmp(const char *p1, const char *p2);
+
450
+
451#endif // dhrystone_h
+
Definition dhry.h:416
+
+ + +
+ + diff --git a/sw/dir_01cde3d98944a579dc3b5e43a5311a79.html b/sw/dir_01cde3d98944a579dc3b5e43a5311a79.html new file mode 100644 index 0000000000..5d2df6a673 --- /dev/null +++ b/sw/dir_01cde3d98944a579dc3b5e43a5311a79.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_cfs Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_cfs Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Simple demo program for the default custom functions subsystem (CFS) module.
 
+
+ + +
+ + diff --git a/sw/dir_01fcd3835fb4e7d9331b722d86291b65.html b/sw/dir_01fcd3835fb4e7d9331b722d86291b65.html new file mode 100644 index 0000000000..1a28ecd087 --- /dev/null +++ b/sw/dir_01fcd3835fb4e7d9331b722d86291b65.html @@ -0,0 +1,109 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
sw Directory Reference
+
+
+ + + + +

+Directories

 bootloader
 
+
+ + +
+ + diff --git a/sw/dir_09a89dfa1596b6613cf2c29528a32844.html b/sw/dir_09a89dfa1596b6613cf2c29528a32844.html new file mode 100644 index 0000000000..6d18d9a268 --- /dev/null +++ b/sw/dir_09a89dfa1596b6613cf2c29528a32844.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_cfu Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_cfu Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Example program showing how to use the CFU's custom instructions (XTEA example).
 
+
+ + +
+ + diff --git a/sw/dir_0c6ac14e2254a316d41123f98feeb67b.html b/sw/dir_0c6ac14e2254a316d41123f98feeb67b.html new file mode 100644 index 0000000000..b027c5cd1c --- /dev/null +++ b/sw/dir_0c6ac14e2254a316d41123f98feeb67b.html @@ -0,0 +1,176 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
source Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 neorv32_aux.c
 General auxiliary functions source file.
 
 neorv32_cfs.c
 Custom Functions Subsystem (CFS) HW driver source file.
 
 neorv32_cpu.c
 CPU Core Functions HW driver source file.
 
 neorv32_cpu_amo.c
 Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - source file.
 
 neorv32_cpu_cfu.c
 CPU Core custom functions unit HW driver source file.
 
 neorv32_crc.c
 Cyclic redundancy check unit (CRC) HW driver source file.
 
 neorv32_gpio.c
 General purpose input/output port unit (GPIO) HW driver source file.
 
 neorv32_gptmr.c
 General purpose timer (GPTMR) HW driver source file.
 
 neorv32_mtime.c
 Machine System Timer (MTIME) HW driver source file.
 
 neorv32_neoled.c
 Smart LED Interface (NEOLED) HW driver source file.
 
 neorv32_onewire.c
 1-Wire Interface Controller (ONEWIRE) HW driver source file.
 
 neorv32_pwm.c
 Pulse-Width Modulation Controller (PWM) HW driver source file.
 
 neorv32_rte.c
 NEORV32 Runtime Environment.
 
 neorv32_sdi.c
 Serial data interface controller (SDI) HW driver source file.
 
 neorv32_slink.c
 
 neorv32_spi.c
 Serial peripheral interface controller (SPI) HW driver source file.
 
 neorv32_trng.c
 True Random Number Generator (TRNG) HW driver source file.
 
 neorv32_twi.c
 Two-Wire Interface Controller (TWI) HW driver source file.
 
 neorv32_uart.c
 Universal asynchronous receiver/transmitter (UART0/UART1) HW driver source file.
 
 neorv32_wdt.c
 Direct Memory Access Controller (DMA) HW driver source file.
 
 neorv32_xip.c
 Execute in place module (XIP) HW driver source file.
 
 neorv32_xirq.c
 External Interrupt controller HW driver source file.
 
 syscalls.c
 Newlib system calls.
 
+
+ + +
+ + diff --git a/sw/dir_0d2921e55a1172a4726516961ee96ab5.html b/sw/dir_0d2921e55a1172a4726516961ee96ab5.html new file mode 100644 index 0000000000..09a20bb469 --- /dev/null +++ b/sw/dir_0d2921e55a1172a4726516961ee96ab5.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/bus_explorer Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
bus_explorer Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Interactive memory inspector.
 
+
+ + +
+ + diff --git a/sw/dir_0f35fd52d2216117815d19d974239550.html b/sw/dir_0f35fd52d2216117815d19d974239550.html new file mode 100644 index 0000000000..df8c99c4bf --- /dev/null +++ b/sw/dir_0f35fd52d2216117815d19d974239550.html @@ -0,0 +1,113 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/performance_tests Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
performance_tests Directory Reference
+
+
+ + + + + + + + +

+Directories

 I
 
 M
 
 Zfinx
 
+
+ + +
+ + diff --git a/sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html b/sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html new file mode 100644 index 0000000000..df2d9d098b --- /dev/null +++ b/sw/dir_23212395b5ee0866d2fdd629e0ddeae8.html @@ -0,0 +1,112 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/float_corner_test Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
float_corner_test Directory Reference
+
+
+ + + + + + + +

+Files

 main.c
 Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions.
 
 neorv32_zfinx_extension_intrinsics.h
 
+
+ + +
+ + diff --git a/sw/dir_23717ebbabf7a51c0558262947e0fe3b.html b/sw/dir_23717ebbabf7a51c0558262947e0fe3b.html new file mode 100644 index 0000000000..a952412ff4 --- /dev/null +++ b/sw/dir_23717ebbabf7a51c0558262947e0fe3b.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_newlib Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_newlib Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Demo/test program for NEORV32's newlib C standard library support.
 
+
+ + +
+ + diff --git a/sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html b/sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html new file mode 100644 index 0000000000..65ad820793 --- /dev/null +++ b/sw/dir_237db5b95db643499d4c20f0bc5f6a7d.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_trng Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_trng Directory Reference
+
+
+ + + + + +

+Files

 main.c
 True random number generator demo program.
 
+
+ + +
+ + diff --git a/sw/dir_2ba96d3140b089dada6fb9f817b7975f.html b/sw/dir_2ba96d3140b089dada6fb9f817b7975f.html new file mode 100644 index 0000000000..bb5336fc67 --- /dev/null +++ b/sw/dir_2ba96d3140b089dada6fb9f817b7975f.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_emulate_unaligned Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_emulate_unaligned Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Demo program for emulating unaligned memory accesses using the NEORV32 run-time environment (RTE).
 
+
+ + +
+ + diff --git a/sw/dir_3b3bafc48b460f797485cc75b94aa81c.html b/sw/dir_3b3bafc48b460f797485cc75b94aa81c.html new file mode 100644 index 0000000000..2cae6d1e14 --- /dev/null +++ b/sw/dir_3b3bafc48b460f797485cc75b94aa81c.html @@ -0,0 +1,112 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_onewire Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_onewire Directory Reference
+
+
+ + + + + + + +

+Files

 main.c
 Demo program for the NEORV32 1-Wire interface controller (ONEWIRE).
 
 onewire_aux.h
 
+
+ + +
+ + diff --git a/sw/dir_4316bb0e553b51b8b65560981547ce0f.html b/sw/dir_4316bb0e553b51b8b65560981547ce0f.html new file mode 100644 index 0000000000..6554562fc4 --- /dev/null +++ b/sw/dir_4316bb0e553b51b8b65560981547ce0f.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/bootloader Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
bootloader Directory Reference
+
+
+ + + + + +

+Files

 bootloader.c
 Default NEORV32 bootloader.
 
+
+ + +
+ + diff --git a/sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html b/sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html new file mode 100644 index 0000000000..48313c669b --- /dev/null +++ b/sw/dir_449d8ba5f8b78dc90092f20d15a2386a.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/atomic_test Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
atomic_test Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Test program for the NEORV32 'A' ISA extension - check the emulation of the AMO (read-modify-write) operations.
 
+
+ + +
+ + diff --git a/sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html b/sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html new file mode 100644 index 0000000000..0d7221f481 --- /dev/null +++ b/sw/dir_46981071cfd8ec44311b09fdcf6c06a8.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/game_of_life Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
game_of_life Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Conway's game of life in a UART terminal.
 
+
+ + +
+ + diff --git a/sw/dir_4bd1267d34feeec0f679c16f884588e7.html b/sw/dir_4bd1267d34feeec0f679c16f884588e7.html new file mode 100644 index 0000000000..e8733265d9 --- /dev/null +++ b/sw/dir_4bd1267d34feeec0f679c16f884588e7.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/performance_tests/Zfinx Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
Zfinx Directory Reference
+
+
+
+ + +
+ + diff --git a/sw/dir_4c113257314015688a865e1bb8429184.html b/sw/dir_4c113257314015688a865e1bb8429184.html new file mode 100644 index 0000000000..82d07d2cd7 --- /dev/null +++ b/sw/dir_4c113257314015688a865e1bb8429184.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_spi Directory Reference
+
+
+ + + + + +

+Files

 main.c
 SPI bus explorer (execute SPI transactions by hand).
 
+
+ + +
+ + diff --git a/sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html b/sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html new file mode 100644 index 0000000000..6802e437ff --- /dev/null +++ b/sw/dir_5534fa9035f54ab438a41c43d6f7fc7a.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_xirq Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_xirq Directory Reference
+
+
+ + + + + +

+Files

 main.c
 External interrupt controller (XIRQ) demo program (using hardware-assisted prioritization).
 
+
+ + +
+ + diff --git a/sw/dir_6a888d76b0f727dc821f77838927e542.html b/sw/dir_6a888d76b0f727dc821f77838927e542.html new file mode 100644 index 0000000000..52f2ec38a6 --- /dev/null +++ b/sw/dir_6a888d76b0f727dc821f77838927e542.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/performance_tests/M Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
M Directory Reference
+
+
+
+ + +
+ + diff --git a/sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html b/sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html new file mode 100644 index 0000000000..9c6d66a3a2 --- /dev/null +++ b/sw/dir_752b1e5d3973bf735fa78bf6b4727df9.html @@ -0,0 +1,190 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
include Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 neorv32.h
 Main NEORV32 core library / driver / HAL include file.
 
 neorv32_aux.h
 General auxiliary functions header file.
 
 neorv32_cfs.h
 Custom Functions Subsystem (CFS) HW driver header file.
 
 neorv32_cpu.h
 CPU Core Functions HW driver header file.
 
 neorv32_cpu_amo.h
 Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file.
 
 neorv32_cpu_cfu.h
 CPU Core custom functions unit HW driver header file.
 
 neorv32_cpu_csr.h
 Control and Status Registers (CSR) definitions.
 
 neorv32_crc.h
 Cyclic redundancy check unit (CRC) HW driver header file.
 
 neorv32_dma.h
 Direct Memory Access Controller (DMA) HW driver header file.
 
 neorv32_gpio.h
 General purpose input/output port unit (GPIO) HW driver header file.
 
 neorv32_gptmr.h
 General purpose timer (GPTMR) HW driver header file.
 
 neorv32_intrinsics.h
 Helper functions and macros for custom "intrinsics" / instructions.
 
 neorv32_legacy.h
 Legacy compatibility layer.
 
 neorv32_mtime.h
 Machine System Timer (MTIME) HW driver header file.
 
 neorv32_neoled.h
 Smart LED Interface (NEOLED) HW driver header file.
 
 neorv32_onewire.h
 1-Wire Interface Controller (ONEWIRE) HW driver header file.
 
 neorv32_pwm.h
 Pulse-Width Modulation Controller (PWM) HW driver header file.
 
 neorv32_rte.h
 NEORV32 Runtime Environment.
 
 neorv32_sdi.h
 Serial data interface controller (SPPI) HW driver header file.
 
 neorv32_slink.h
 
 neorv32_spi.h
 Serial peripheral interface controller (SPI) HW driver header file.
 
 neorv32_sysinfo.h
 
 neorv32_trng.h
 True Random Number Generator (TRNG) HW driver header file.
 
 neorv32_twi.h
 Two-Wire Interface Controller (TWI) HW driver header file.
 
 neorv32_uart.h
 Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file.
 
 neorv32_wdt.h
 Watchdog Timer (WDT) HW driver header file.
 
 neorv32_xip.h
 Execute in place module (XIP) HW driver header file.
 
 neorv32_xirq.h
 External Interrupt controller HW driver header file.
 
+
+ + +
+ + diff --git a/sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html b/sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html new file mode 100644 index 0000000000..3a998d58fc --- /dev/null +++ b/sw/dir_78d7bfa405ff3a31fa7539cfd8bc8262.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_wdt Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_wdt Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Watchdog demo program.
 
+
+ + +
+ + diff --git a/sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html b/sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html new file mode 100644 index 0000000000..c1f1440dd1 --- /dev/null +++ b/sw/dir_7a2c74f70a4cdf2e836a07048e2f71dd.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/processor_check Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
processor_check Directory Reference
+
+
+ + + + + +

+Files

 main.c
 CPU/Processor test/verification program.
 
+
+ + +
+ + diff --git a/sw/dir_7d04193005ada6f9450f847f4adb6b5b.html b/sw/dir_7d04193005ada6f9450f847f4adb6b5b.html new file mode 100644 index 0000000000..2a9507455a --- /dev/null +++ b/sw/dir_7d04193005ada6f9450f847f4adb6b5b.html @@ -0,0 +1,111 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
lib Directory Reference
+
+
+ + + + + + +

+Directories

 include
 
 source
 
+
+ + +
+ + diff --git a/sw/dir_8c514361e1f16692c783b23503f30f16.html b/sw/dir_8c514361e1f16692c783b23503f30f16.html new file mode 100644 index 0000000000..cb07b13c95 --- /dev/null +++ b/sw/dir_8c514361e1f16692c783b23503f30f16.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_dma Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_dma Directory Reference
+
+
+ + + + + +

+Files

 main.c
 DMA demo program.
 
+
+ + +
+ + diff --git a/sw/dir_8d341cbe0581f44e1ae95d82d74e8bc8.html b/sw/dir_8d341cbe0581f44e1ae95d82d74e8bc8.html new file mode 100644 index 0000000000..19ca05c1c6 --- /dev/null +++ b/sw/dir_8d341cbe0581f44e1ae95d82d74e8bc8.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_mtime Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_mtime Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Simple machine timer (MTIME) usage example.
 
+
+ + +
+ + diff --git a/sw/dir_8f848e36ac87ced1c361afcc0549ca32.html b/sw/dir_8f848e36ac87ced1c361afcc0549ca32.html new file mode 100644 index 0000000000..2f962a50a2 --- /dev/null +++ b/sw/dir_8f848e36ac87ced1c361afcc0549ca32.html @@ -0,0 +1,115 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi_irq Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_spi_irq Directory Reference
+
+
+ + + + +

+Directories

 drv
 
+ + + + +

+Files

 main.c
 Example of an ISR driven SPI transfer.
 
+
+ + +
+ + diff --git a/sw/dir_93967190e0d2e549ceca77007097849b.html b/sw/dir_93967190e0d2e549ceca77007097849b.html new file mode 100644 index 0000000000..1ce2cdd3e6 --- /dev/null +++ b/sw/dir_93967190e0d2e549ceca77007097849b.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_hpm Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_hpm Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Hardware performance monitor (HPM) example program.
 
+
+ + +
+ + diff --git a/sw/dir_9a1c128d67c35790e92af404beb936aa.html b/sw/dir_9a1c128d67c35790e92af404beb936aa.html new file mode 100644 index 0000000000..d9edba63c9 --- /dev/null +++ b/sw/dir_9a1c128d67c35790e92af404beb936aa.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_blink_led Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_blink_led Directory Reference
+
+
+ + + + + +

+Files

 main.c
 
+
+ + +
+ + diff --git a/sw/dir_9d04cdc586d6978be343bda7adcdc371.html b/sw/dir_9d04cdc586d6978be343bda7adcdc371.html new file mode 100644 index 0000000000..2f6bc33aed --- /dev/null +++ b/sw/dir_9d04cdc586d6978be343bda7adcdc371.html @@ -0,0 +1,113 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
drv Directory Reference
+
+
+ + + + + + + + +

+Files

 neorv32_spi_irq.c
 Addition to neorv32_spi.c, which provides an IRQ driven data flow.
 
 neorv32_spi_irq.h
 Addition to neorv32_spi.h, which provides an IRQ driven data flow.
 
+
+ + +
+ + diff --git a/sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html b/sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html new file mode 100644 index 0000000000..edfc89c876 --- /dev/null +++ b/sw/dir_b5eb9f7d151d147efb5dbda58439e4e7.html @@ -0,0 +1,109 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/dhrystone Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
dhrystone Directory Reference
+
+
+ + + + +

+Files

 dhry.h
 
+
+ + +
+ + diff --git a/sw/dir_b683da3a5fc966bff32ebf7cda721811.html b/sw/dir_b683da3a5fc966bff32ebf7cda721811.html new file mode 100644 index 0000000000..ac1a0c846d --- /dev/null +++ b/sw/dir_b683da3a5fc966bff32ebf7cda721811.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_pwm Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_pwm Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Simple PWM demo program.
 
+
+ + +
+ + diff --git a/sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html b/sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html new file mode 100644 index 0000000000..aa9733bd21 --- /dev/null +++ b/sw/dir_b68ac2efc0c6ed3018151f7bb6c45670.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_gptmr Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_gptmr Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Simple GPTMR timer-match interrupt example.
 
+
+ + +
+ + diff --git a/sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html b/sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html new file mode 100644 index 0000000000..e4140ee776 --- /dev/null +++ b/sw/dir_b6b50782b8271d07dffbc5f0cb9ff3f4.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_xip Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_xip Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Interactive console program to upload and execute a XIP program.
 
+
+ + +
+ + diff --git a/sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html b/sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html new file mode 100644 index 0000000000..8c80e76525 --- /dev/null +++ b/sw/dir_bf935196a1ea0ca9cb42aae56d70946a.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_crc Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_crc Directory Reference
+
+
+ + + + + +

+Files

 main.c
 CRC demo program.
 
+
+ + +
+ + diff --git a/sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html b/sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html new file mode 100644 index 0000000000..9f6cc628bb --- /dev/null +++ b/sw/dir_c2d46947bdd73c33f53326fc5ee3a272.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_slink Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_slink Directory Reference
+
+
+ + + + + +

+Files

 main.c
 
+
+ + +
+ + diff --git a/sw/dir_c413aba6cb5da07a571465ba333950af.html b/sw/dir_c413aba6cb5da07a571465ba333950af.html new file mode 100644 index 0000000000..78e39be988 --- /dev/null +++ b/sw/dir_c413aba6cb5da07a571465ba333950af.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_sdi Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_sdi Directory Reference
+
+
+ + + + + +

+Files

 main.c
 SDI test program (direct access to the SDI module).
 
+
+ + +
+ + diff --git a/sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html b/sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html new file mode 100644 index 0000000000..7b9f64872c --- /dev/null +++ b/sw/dir_d4640980cbf1943e4a4aee6e8b810c7a.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/hello_world Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
hello_world Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Classic 'hello world' demo program.
 
+
+ + +
+ + diff --git a/sw/dir_d68bb921df3f2482fe9ace49b286ab86.html b/sw/dir_d68bb921df3f2482fe9ace49b286ab86.html new file mode 100644 index 0000000000..9097286a45 --- /dev/null +++ b/sw/dir_d68bb921df3f2482fe9ace49b286ab86.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_neopixel Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_neopixel Directory Reference
+
+
+ + + + + +

+Files

 main.c
 NeoPixel (WS2812) interface demo using the processor's smart LED interface (NEOLED).
 
+
+ + +
+ + diff --git a/sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html b/sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html new file mode 100644 index 0000000000..377dee1055 --- /dev/null +++ b/sw/dir_e9ffd83269fb7f0c372f5ffbe8545008.html @@ -0,0 +1,113 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/floating_point_test Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
floating_point_test Directory Reference
+
+
+ + + + + + + + +

+Files

 main.c
 Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions.
 
 neorv32_zfinx_extension_intrinsics.h
 "Intrinsic" library for the NEORV32 single-precision floating-point in x registers (Zfinx) extension
 
+
+ + +
+ + diff --git a/sw/dir_ebeff77b922fbb914a1494857a82a38e.html b/sw/dir_ebeff77b922fbb914a1494857a82a38e.html new file mode 100644 index 0000000000..031d02f3e8 --- /dev/null +++ b/sw/dir_ebeff77b922fbb914a1494857a82a38e.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_twi Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
demo_twi Directory Reference
+
+
+ + + + + +

+Files

 main.c
 TWI bus explorer.
 
+
+ + +
+ + diff --git a/sw/dir_eea6eb9fd693422884580f70321908d2.html b/sw/dir_eea6eb9fd693422884580f70321908d2.html new file mode 100644 index 0000000000..5c046212bf --- /dev/null +++ b/sw/dir_eea6eb9fd693422884580f70321908d2.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/eclipse Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
eclipse Directory Reference
+
+
+
+ + +
+ + diff --git a/sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html b/sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html new file mode 100644 index 0000000000..98296c26d0 --- /dev/null +++ b/sw/dir_f05036e2ccd24a7119a5bbccebab20b2.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/performance_tests/I Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
I Directory Reference
+
+
+
+ + +
+ + diff --git a/sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html b/sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html new file mode 100644 index 0000000000..e7b483d72f --- /dev/null +++ b/sw/dir_f0f9b27afba2e8cc2da6e5fddcc1a8c9.html @@ -0,0 +1,169 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
example Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Directories

 atomic_test
 
 bus_explorer
 
 demo_blink_led
 
 demo_cfs
 
 demo_cfu
 
 demo_crc
 
 demo_dma
 
 demo_emulate_unaligned
 
 demo_gptmr
 
 demo_hpm
 
 demo_mtime
 
 demo_neopixel
 
 demo_newlib
 
 demo_onewire
 
 demo_pwm
 
 demo_sdi
 
 demo_slink
 
 demo_spi
 
 demo_spi_irq
 
 demo_trng
 
 demo_twi
 
 demo_wdt
 
 demo_xip
 
 demo_xirq
 
 dhrystone
 
 eclipse
 
 float_corner_test
 
 floating_point_test
 
 game_of_life
 
 hello_world
 
 processor_check
 
+
+ + +
+ + diff --git a/sw/doc.svg b/sw/doc.svg new file mode 100644 index 0000000000..0b928a5317 --- /dev/null +++ b/sw/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/sw/docd.svg b/sw/docd.svg new file mode 100644 index 0000000000..ac18b27552 --- /dev/null +++ b/sw/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/sw/doxygen.css b/sw/doxygen.css new file mode 100644 index 0000000000..209912c711 --- /dev/null +++ b/sw/doxygen.css @@ -0,0 +1,2244 @@ +/* The standard CSS for doxygen 1.11.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/sw/doxygen.svg b/sw/doxygen.svg new file mode 100644 index 0000000000..79a7635407 --- /dev/null +++ b/sw/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/doxygen_crawl.html b/sw/doxygen_crawl.html new file mode 100644 index 0000000000..af5635a074 --- /dev/null +++ b/sw/doxygen_crawl.html @@ -0,0 +1,2148 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sw/dynsections.js b/sw/dynsections.js new file mode 100644 index 0000000000..b05f4c8d70 --- /dev/null +++ b/sw/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/sw/files.html b/sw/files.html new file mode 100644 index 0000000000..378558d808 --- /dev/null +++ b/sw/files.html @@ -0,0 +1,227 @@ + + + + + + + +NEORV32 Software Framework Documentation: File List + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  sw
  bootloader
 bootloader.cDefault NEORV32 bootloader
  example
  atomic_test
  bus_explorer
  demo_blink_led
  demo_cfs
  demo_cfu
  demo_crc
  demo_dma
  demo_emulate_unaligned
  demo_gptmr
  demo_hpm
  demo_mtime
  demo_neopixel
  demo_newlib
  demo_onewire
  demo_pwm
  demo_sdi
  demo_slink
  demo_spi
  demo_spi_irq
  demo_trng
  demo_twi
  demo_wdt
  demo_xip
  demo_xirq
  dhrystone
  float_corner_test
  floating_point_test
  game_of_life
  hello_world
  processor_check
  lib
  include
  source
+
+
+ + +
+ + diff --git a/sw/float__corner__test_2main_8c.html b/sw/float__corner__test_2main_8c.html new file mode 100644 index 0000000000..5fd8066d8c --- /dev/null +++ b/sw/float__corner__test_2main_8c.html @@ -0,0 +1,448 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/float_corner_test/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. +More...

+
#include <neorv32.h>
+#include <float.h>
+#include <math.h>
+#include "neorv32_zfinx_extension_intrinsics.h"
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

User configuration
#define BAUD_RATE   (19200)
 
#define NUM_TEST_CASES   (1000000)
 
#define SILENT_MODE   (1)
 
#define RUN_CONV_TESTS   (1)
 
#define RUN_ADDSUB_TESTS   (1)
 
#define RUN_MUL_TESTS   (1)
 
#define RUN_MINMAX_TESTS   (1)
 
#define RUN_COMPARE_TESTS   (1)
 
#define RUN_SGNINJ_TESTS   (1)
 
#define RUN_CLASSIFY_TESTS   (1)
 
#define RUN_UNAVAIL_TESTS   (1)
 
#define RUN_TIMING_TESTS   (0)
 
+ + + + + + + + + +

+Functions

uint32_t get_test_vector (void)
 
uint32_t verify_result (uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res)
 
void print_report (uint32_t num_err)
 
int main ()
 
+

Detailed Description

+

Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions.

+
Author
Mikael Mortensen
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   (19200)
+
+

UART BAUD rate

+ +
+
+ +

◆ NUM_TEST_CASES

+ +
+
+ + + + +
#define NUM_TEST_CASES   (1000000)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_ADDSUB_TESTS

+ +
+
+ + + + +
#define RUN_ADDSUB_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_CLASSIFY_TESTS

+ +
+
+ + + + +
#define RUN_CLASSIFY_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_COMPARE_TESTS

+ +
+
+ + + + +
#define RUN_COMPARE_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_CONV_TESTS

+ +
+
+ + + + +
#define RUN_CONV_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_MINMAX_TESTS

+ +
+
+ + + + +
#define RUN_MINMAX_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_MUL_TESTS

+ +
+
+ + + + +
#define RUN_MUL_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_SGNINJ_TESTS

+ +
+
+ + + + +
#define RUN_SGNINJ_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_TIMING_TESTS

+ +
+
+ + + + +
#define RUN_TIMING_TESTS   (0)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_UNAVAIL_TESTS

+ +
+
+ + + + +
#define RUN_UNAVAIL_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ SILENT_MODE

+ +
+
+ + + + +
#define SILENT_MODE   (1)
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ get_test_vector()

+ +
+
+ + + + + + + +
uint32_t get_test_vector (void )
+
+

Generate 32-bit test data (including special values like INFINITY every now and then).

+
Returns
Test data (32-bit).
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function; test all available operations of the NEORV32 'Zfinx' extensions using bit floating-point hardware intrinsics and software-only reference functions (emulation).

+
Note
This program requires the Zfinx CPU extension.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ print_report()

+ +
+
+ + + + + + + +
void print_report (uint32_t num_err)
+
+

Print test report.

+
Parameters
+ + +
[in]num_errNumber or errors in this test.
+
+
+ +
+
+ +

◆ verify_result()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
uint32_t verify_result (uint32_t num,
uint32_t opa,
uint32_t opb,
uint32_t ref,
uint32_t res )
+
+

Verify results (software reference vs. actual hardware).

+
Parameters
+ + + + + + +
[in]numTest case number
[in]opaOperand 1
[in]opbOperand 2
[in]refSoftware reference
[in]resActual results from hardware
+
+
+
Returns
zero if results are equal.
+ +
+
+
+ + +
+ + diff --git a/sw/float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html b/sw/float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html new file mode 100644 index 0000000000..a7ccc7d0e7 --- /dev/null +++ b/sw/float__corner__test_2neorv32__zfinx__extension__intrinsics_8h_source.html @@ -0,0 +1,945 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/float_corner_test/neorv32_zfinx_extension_intrinsics.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
neorv32_zfinx_extension_intrinsics.h
+
+
+
1// #################################################################################################
+
2// # << NEORV32 - Intrinsics + Emulation Functions for the RISC-V "Zfinx" CPU extension >> #
+
3// # ********************************************************************************************* #
+
4// # The intrinsics provided by this library allow to use the hardware floating-point unit of the #
+
5// # RISC-V Zfinx CPU extension without the need for Zfinx support by the compiler / toolchain. #
+
6// # ********************************************************************************************* #
+
7// # BSD 3-Clause License #
+
8// # #
+
9// # Copyright (c) 2022, Stephan Nolting. All rights reserved. #
+
10// # #
+
11// # Redistribution and use in source and binary forms, with or without modification, are #
+
12// # permitted provided that the following conditions are met: #
+
13// # #
+
14// # 1. Redistributions of source code must retain the above copyright notice, this list of #
+
15// # conditions and the following disclaimer. #
+
16// # #
+
17// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
+
18// # conditions and the following disclaimer in the documentation and/or other materials #
+
19// # provided with the distribution. #
+
20// # #
+
21// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
+
22// # endorse or promote products derived from this software without specific prior written #
+
23// # permission. #
+
24// # #
+
25// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
+
26// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
+
27// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
+
28// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
+
29// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
+
30// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
+
31// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
+
32// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
+
33// # OF THE POSSIBILITY OF SUCH DAMAGE. #
+
34// # ********************************************************************************************* #
+
35// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
+
36// #################################################################################################
+
37
+
38
+
39/**********************************************************************/
+
52#ifndef neorv32_zfinx_extension_intrinsics_h
+
53#define neorv32_zfinx_extension_intrinsics_h
+
54
+
55#define __USE_GNU
+
56
+
57#include <fenv.h>
+
58//#pragma STDC FENV_ACCESS ON
+
59
+
60#define _GNU_SOURCE
+
61
+
62#include <float.h>
+
63#include <math.h>
+
64
+
65
+
66/**********************************************************************/
+
69#if defined __riscv_f || (__riscv_flen == 32)
+
70 #error Application programs using the Zfinx intrinsic library have to be compiled WITHOUT the <F> MARCH ISA attribute!
+
71#endif
+
72
+
73
+
74/**********************************************************************/
+
+
77typedef union
+
78{
+
79 uint32_t binary_value;
+ + +
+
82
+
83
+
84// ################################################################################################
+
85// Helper functions
+
86// ################################################################################################
+
87
+
88/**********************************************************************/
+
96float subnormal_flush(float tmp) {
+
97
+
98 float res = tmp;
+
99
+
100 // flush to zero if subnormal
+
101 if (fpclassify(tmp) == FP_SUBNORMAL) {
+
102 if (signbit(tmp) != 0) {
+
103 res = -0.0f;
+
104 }
+
105 else {
+
106 res = +0.0f;
+
107 }
+
108 }
+
109
+
110 return res;
+
111}
+
112
+
113
+
114// ################################################################################################
+
115// Exception access
+
116// ################################################################################################
+
117
+
118/**********************************************************************/
+
123uint32_t get_hw_exceptions(void) {
+
124
+
125 uint32_t res = neorv32_cpu_csr_read(CSR_FFLAGS);
+
126
+
127 neorv32_cpu_csr_write(CSR_FFLAGS, 0); // clear status word
+
128
+
129 return res;
+
130}
+
131
+
132
+
133/**********************************************************************/
+
140uint32_t get_sw_exceptions(void) {
+
141
+
142 const uint32_t FP_EXC_NV_C = 1 << 0; // invalid operation
+
143 const uint32_t FP_EXC_DZ_C = 1 << 1; // divide by zero
+
144 const uint32_t FP_EXC_OF_C = 1 << 2; // overflow
+
145 const uint32_t FP_EXC_UF_C = 1 << 3; // underflow
+
146 const uint32_t FP_EXC_NX_C = 1 << 4; // inexact
+
147
+
148 int fpeRaised = fetestexcept(FE_ALL_EXCEPT);
+
149
+
150 uint32_t res = 0;
+
151
+
152 if (fpeRaised & FE_INVALID) { res |= FP_EXC_NV_C; }
+
153 if (fpeRaised & FE_DIVBYZERO) { res |= FP_EXC_DZ_C; }
+
154 if (fpeRaised & FE_OVERFLOW) { res |= FP_EXC_OF_C; }
+
155 if (fpeRaised & FE_UNDERFLOW) { res |= FP_EXC_UF_C; }
+
156 if (fpeRaised & FE_INEXACT) { res |= FP_EXC_NX_C; }
+
157
+
158 feclearexcept(FE_ALL_EXCEPT);
+
159
+
160 return res;
+
161}
+
162
+
163
+
164// ################################################################################################
+
165// "Intrinsics"
+
166// ################################################################################################
+
167
+
168/**********************************************************************/
+
175inline float __attribute__ ((always_inline)) riscv_intrinsic_fadds(float rs1, float rs2) {
+
176
+
177 float_conv_t opa, opb, res;
+
178 opa.float_value = rs1;
+
179 opb.float_value = rs2;
+
180
+
181 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0000000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
182 return res.float_value;
+
183}
+
184
+
185
+
186/**********************************************************************/
+
193inline float __attribute__ ((always_inline)) riscv_intrinsic_fsubs(float rs1, float rs2) {
+
194
+
195 float_conv_t opa, opb, res;
+
196 opa.float_value = rs1;
+
197 opb.float_value = rs2;
+
198
+
199 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0000100, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
200 return res.float_value;
+
201}
+
202
+
203
+
204/**********************************************************************/
+
211inline float __attribute__ ((always_inline)) riscv_intrinsic_fmuls(float rs1, float rs2) {
+
212
+
213 float_conv_t opa, opb, res;
+
214 opa.float_value = rs1;
+
215 opb.float_value = rs2;
+
216
+
217 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0001000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
218 return res.float_value;
+
219}
+
220
+
221
+
222/**********************************************************************/
+
229inline float __attribute__ ((always_inline)) riscv_intrinsic_fmins(float rs1, float rs2) {
+
230
+
231 float_conv_t opa, opb, res;
+
232 opa.float_value = rs1;
+
233 opb.float_value = rs2;
+
234
+
235 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
236 return res.float_value;
+
237}
+
238
+
239
+
240/**********************************************************************/
+
247inline float __attribute__ ((always_inline)) riscv_intrinsic_fmaxs(float rs1, float rs2) {
+
248
+
249 float_conv_t opa, opb, res;
+
250 opa.float_value = rs1;
+
251 opb.float_value = rs2;
+
252
+
253 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.binary_value, opa.binary_value, 0b001, 0b1010011);
+
254 return res.float_value;
+
255}
+
256
+
257
+
258/**********************************************************************/
+
264inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_wus(float rs1) {
+
265
+
266 float_conv_t opa;
+
267 opa.float_value = rs1;
+
268
+
269 return CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00001, opa.binary_value, 0b000, 0b1010011);
+
270}
+
271
+
272
+
273/**********************************************************************/
+
279inline int32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_ws(float rs1) {
+
280
+
281 float_conv_t opa;
+
282 opa.float_value = rs1;
+
283
+
284 return (int32_t)CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00000, opa.binary_value, 0b000, 0b1010011);
+
285}
+
286
+
287
+
288/**********************************************************************/
+
294inline float __attribute__ ((always_inline)) riscv_intrinsic_fcvt_swu(uint32_t rs1) {
+
295
+
296 float_conv_t res;
+
297
+
298 res.binary_value = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00001, rs1, 0b000, 0b1010011);
+
299 return res.float_value;
+
300}
+
301
+
302
+
303/**********************************************************************/
+
309inline float __attribute__ ((always_inline)) riscv_intrinsic_fcvt_sw(int32_t rs1) {
+
310
+
311 float_conv_t res;
+
312
+
313 res.binary_value = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00000, rs1, 0b000, 0b1010011);
+
314 return res.float_value;
+
315}
+
316
+
317
+
318/**********************************************************************/
+
325inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_feqs(float rs1, float rs2) {
+
326
+
327 float_conv_t opa, opb;
+
328 opa.float_value = rs1;
+
329 opb.float_value = rs2;
+
330
+
331 return CUSTOM_INSTR_R3_TYPE(0b1010000, opb.binary_value, opa.binary_value, 0b010, 0b1010011);
+
332}
+
333
+
334
+
335/**********************************************************************/
+
342inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_flts(float rs1, float rs2) {
+
343
+
344 float_conv_t opa, opb;
+
345 opa.float_value = rs1;
+
346 opb.float_value = rs2;
+
347
+
348 return CUSTOM_INSTR_R3_TYPE(0b1010000, opb.binary_value, opa.binary_value, 0b001, 0b1010011);
+
349}
+
350
+
351
+
352/**********************************************************************/
+
359inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fles(float rs1, float rs2) {
+
360
+
361 float_conv_t opa, opb;
+
362 opa.float_value = rs1;
+
363 opb.float_value = rs2;
+
364
+
365 return CUSTOM_INSTR_R3_TYPE(0b1010000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
366}
+
367
+
368
+
369/**********************************************************************/
+
376inline float __attribute__ ((always_inline)) riscv_intrinsic_fsgnjs(float rs1, float rs2) {
+
377
+
378 float_conv_t opa, opb, res;
+
379 opa.float_value = rs1;
+
380 opb.float_value = rs2;
+
381
+
382 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
383 return res.float_value;
+
384}
+
385
+
386
+
387/**********************************************************************/
+
394inline float __attribute__ ((always_inline)) riscv_intrinsic_fsgnjns(float rs1, float rs2) {
+
395
+
396 float_conv_t opa, opb, res;
+
397 opa.float_value = rs1;
+
398 opb.float_value = rs2;
+
399
+
400 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.binary_value, opa.binary_value, 0b001, 0b1010011);
+
401 return res.float_value;
+
402}
+
403
+
404
+
405/**********************************************************************/
+
412inline float __attribute__ ((always_inline)) riscv_intrinsic_fsgnjxs(float rs1, float rs2) {
+
413
+
414 float_conv_t opa, opb, res;
+
415 opa.float_value = rs1;
+
416 opb.float_value = rs2;
+
417
+
418 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.binary_value, opa.binary_value, 0b010, 0b1010011);
+
419 return res.float_value;
+
420}
+
421
+
422
+
423/**********************************************************************/
+
429inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fclasss(float rs1) {
+
430
+
431 float_conv_t opa;
+
432 opa.float_value = rs1;
+
433
+
434 return CUSTOM_INSTR_R2_TYPE(0b1110000, 0b00000, opa.binary_value, 0b001, 0b1010011);
+
435}
+
436
+
437
+
438// ################################################################################################
+
439// !!! UNSUPPORTED instructions !!!
+
440// ################################################################################################
+
441
+
442/**********************************************************************/
+
451inline float __attribute__ ((always_inline)) riscv_intrinsic_fdivs(float rs1, float rs2) {
+
452
+
453 float_conv_t opa, opb, res;
+
454 opa.float_value = rs1;
+
455 opb.float_value = rs2;
+
456
+
457 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0001100, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
458 return res.float_value;
+
459}
+
460
+
461
+
462/**********************************************************************/
+
470inline float __attribute__ ((always_inline)) riscv_intrinsic_fsqrts(float rs1) {
+
471
+
472 float_conv_t opa, res;
+
473 opa.float_value = rs1;
+
474
+
475 res.binary_value = CUSTOM_INSTR_R2_TYPE(0b0101100, 0b00000, opa.binary_value, 0b000, 0b1010011);
+
476 return res.float_value;
+
477}
+
478
+
479
+
480/**********************************************************************/
+
490inline float __attribute__ ((always_inline)) riscv_intrinsic_fmadds(float rs1, float rs2, float rs3) {
+
491
+
492 float_conv_t opa, opb, opc, res;
+
493 opa.float_value = rs1;
+
494 opb.float_value = rs2;
+
495 opc.float_value = rs3;
+
496
+
497 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1000011);
+
498 return res.float_value;
+
499}
+
500
+
501
+
502/**********************************************************************/
+
512inline float __attribute__ ((always_inline)) riscv_intrinsic_fmsubs(float rs1, float rs2, float rs3) {
+
513
+
514 float_conv_t opa, opb, opc, res;
+
515 opa.float_value = rs1;
+
516 opb.float_value = rs2;
+
517 opc.float_value = rs3;
+
518
+
519 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1000111);
+
520 return res.float_value;
+
521}
+
522
+
523
+
524/**********************************************************************/
+
534inline float __attribute__ ((always_inline)) riscv_intrinsic_fnmsubs(float rs1, float rs2, float rs3) {
+
535
+
536 float_conv_t opa, opb, opc, res;
+
537 opa.float_value = rs1;
+
538 opb.float_value = rs2;
+
539 opc.float_value = rs3;
+
540
+
541 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1001011);
+
542 return res.float_value;
+
543}
+
544
+
545
+
546/**********************************************************************/
+
556inline float __attribute__ ((always_inline)) riscv_intrinsic_fnmadds(float rs1, float rs2, float rs3) {
+
557
+
558 float_conv_t opa, opb, opc, res;
+
559 opa.float_value = rs1;
+
560 opb.float_value = rs2;
+
561 opc.float_value = rs3;
+
562
+
563 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1001111);
+
564 return res.float_value;
+
565}
+
566
+
567
+
568// ################################################################################################
+
569// Emulation functions
+
570// ################################################################################################
+
571
+
572/**********************************************************************/
+
579float __attribute__ ((noinline)) riscv_emulate_fadds(float rs1, float rs2) {
+
580
+
581 float opa = subnormal_flush(rs1);
+
582 float opb = subnormal_flush(rs2);
+
583
+
584 float res = opa + opb;
+
585
+
586 // make NAN canonical
+
587 if (fpclassify(res) == FP_NAN) {
+
588 res = NAN;
+
589 }
+
590
+
591 return subnormal_flush(res);
+
592}
+
593
+
594
+
595/**********************************************************************/
+
602float __attribute__ ((noinline)) riscv_emulate_fsubs(float rs1, float rs2) {
+
603
+
604 float opa = subnormal_flush(rs1);
+
605 float opb = subnormal_flush(rs2);
+
606
+
607 float res = opa - opb;
+
608
+
609 // make NAN canonical
+
610 if (fpclassify(res) == FP_NAN) {
+
611 res = NAN;
+
612 }
+
613
+
614 return subnormal_flush(res);
+
615}
+
616
+
617
+
618/**********************************************************************/
+
625float __attribute__ ((noinline)) riscv_emulate_fmuls(float rs1, float rs2) {
+
626
+
627 float opa = subnormal_flush(rs1);
+
628 float opb = subnormal_flush(rs2);
+
629
+
630 float res = opa * opb;
+
631 return subnormal_flush(res);
+
632}
+
633
+
634
+
635/**********************************************************************/
+
642float __attribute__ ((noinline)) riscv_emulate_fmins(float rs1, float rs2) {
+
643
+
644 float opa = subnormal_flush(rs1);
+
645 float opb = subnormal_flush(rs2);
+
646
+
647 union {
+
648 uint32_t binary_value;
+
649 float float_value;
+
650 } tmp_a, tmp_b;
+
651
+
652 if ((fpclassify(opa) == FP_NAN) && (fpclassify(opb) == FP_NAN)) {
+
653 return nanf("");
+
654 }
+
655
+
656 if (fpclassify(opa) == FP_NAN) {
+
657 return opb;
+
658 }
+
659
+
660 if (fpclassify(opb) == FP_NAN) {
+
661 return opa;
+
662 }
+
663
+
664 // RISC-V spec: -0 < +0
+
665 tmp_a.float_value = opa;
+
666 tmp_b.float_value = opb;
+
667 if (((tmp_a.binary_value == 0x80000000) && (tmp_b.binary_value == 0x00000000)) ||
+
668 ((tmp_a.binary_value == 0x00000000) && (tmp_b.binary_value == 0x80000000))) {
+
669 return -0.0f;
+
670 }
+
671
+
672 return fmin(opa, opb);
+
673}
+
674
+
675
+
676/**********************************************************************/
+
683float __attribute__ ((noinline)) riscv_emulate_fmaxs(float rs1, float rs2) {
+
684
+
685 float opa = subnormal_flush(rs1);
+
686 float opb = subnormal_flush(rs2);
+
687
+
688 union {
+
689 uint32_t binary_value;
+
690 float float_value;
+
691 } tmp_a, tmp_b;
+
692
+
693
+
694 if ((fpclassify(opa) == FP_NAN) && (fpclassify(opb) == FP_NAN)) {
+
695 return nanf("");
+
696 }
+
697
+
698 if (fpclassify(opa) == FP_NAN) {
+
699 return opb;
+
700 }
+
701
+
702 if (fpclassify(opb) == FP_NAN) {
+
703 return opa;
+
704 }
+
705
+
706 // RISC-V spec: -0 < +0
+
707 tmp_a.float_value = opa;
+
708 tmp_b.float_value = opb;
+
709 if (((tmp_a.binary_value == 0x80000000) && (tmp_b.binary_value == 0x00000000)) ||
+
710 ((tmp_a.binary_value == 0x00000000) && (tmp_b.binary_value == 0x80000000))) {
+
711 return +0.0f;
+
712 }
+
713
+
714 return fmax(opa, opb);
+
715}
+
716
+
717
+
718/**********************************************************************/
+
724uint32_t __attribute__ ((noinline)) riscv_emulate_fcvt_wus(float rs1) {
+
725
+
726 float opa = subnormal_flush(rs1);
+
727
+
728 return (uint32_t)roundf(opa);
+
729}
+
730
+
731
+
732/**********************************************************************/
+
738int32_t __attribute__ ((noinline)) riscv_emulate_fcvt_ws(float rs1) {
+
739
+
740 float opa = subnormal_flush(rs1);
+
741
+
742 return (int32_t)roundf(opa);
+
743}
+
744
+
745
+
746/**********************************************************************/
+
752float __attribute__ ((noinline)) riscv_emulate_fcvt_swu(uint32_t rs1) {
+
753
+
754 return (float)rs1;
+
755}
+
756
+
757
+
758/**********************************************************************/
+
764float __attribute__ ((noinline)) riscv_emulate_fcvt_sw(int32_t rs1) {
+
765
+
766 return (float)rs1;
+
767}
+
768
+
769
+
770/**********************************************************************/
+
777uint32_t __attribute__ ((noinline)) riscv_emulate_feqs(float rs1, float rs2) {
+
778
+
779 float opa = subnormal_flush(rs1);
+
780 float opb = subnormal_flush(rs2);
+
781
+
782 if ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {
+
783 return 0;
+
784 }
+
785
+
786 if isless(opa, opb) {
+
787 return 0;
+
788 }
+
789 else if isgreater(opa, opb) {
+
790 return 0;
+
791 }
+
792 else {
+
793 return 1;
+
794 }
+
795}
+
796
+
797
+
798/**********************************************************************/
+
805uint32_t __attribute__ ((noinline)) riscv_emulate_flts(float rs1, float rs2) {
+
806
+
807 float opa = subnormal_flush(rs1);
+
808 float opb = subnormal_flush(rs2);
+
809
+
810 if ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {
+
811 return 0;
+
812 }
+
813
+
814 if isless(opa, opb) {
+
815 return 1;
+
816 }
+
817 else {
+
818 return 0;
+
819 }
+
820}
+
821
+
822
+
823/**********************************************************************/
+
830uint32_t __attribute__ ((noinline)) riscv_emulate_fles(float rs1, float rs2) {
+
831
+
832 float opa = subnormal_flush(rs1);
+
833 float opb = subnormal_flush(rs2);
+
834
+
835 if ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {
+
836 return 0;
+
837 }
+
838
+
839 if islessequal(opa, opb) {
+
840 return 1;
+
841 }
+
842 else {
+
843 return 0;
+
844 }
+
845}
+
846
+
847
+
848/**********************************************************************/
+
855float __attribute__ ((noinline)) riscv_emulate_fsgnjs(float rs1, float rs2) {
+
856
+
857 float opa = subnormal_flush(rs1);
+
858 float opb = subnormal_flush(rs2);
+
859
+
860 int sign_1 = (int)signbit(opa);
+
861 int sign_2 = (int)signbit(opb);
+
862 float res = 0;
+
863
+
864 if (sign_2 != 0) { // opb is negative
+
865 if (sign_1 == 0) {
+
866 res = -opa;
+
867 }
+
868 else {
+
869 res = opa;
+
870 }
+
871 }
+
872 else { // opb is positive
+
873 if (sign_1 == 0) {
+
874 res = opa;
+
875 }
+
876 else {
+
877 res = -opa;
+
878 }
+
879 }
+
880
+
881 return res;
+
882}
+
883
+
884
+
885/**********************************************************************/
+
892float __attribute__ ((noinline)) riscv_emulate_fsgnjns(float rs1, float rs2) {
+
893
+
894 float opa = subnormal_flush(rs1);
+
895 float opb = subnormal_flush(rs2);
+
896
+
897 int sign_1 = (int)signbit(opa);
+
898 int sign_2 = (int)signbit(opb);
+
899 float res = 0;
+
900
+
901 if (sign_2 != 0) { // opb is negative
+
902 if (sign_1 == 0) {
+
903 res = opa;
+
904 }
+
905 else {
+
906 res = -opa;
+
907 }
+
908 }
+
909 else { // opb is positive
+
910 if (sign_1 == 0) {
+
911 res = -opa;
+
912 }
+
913 else {
+
914 res = opa;
+
915 }
+
916 }
+
917
+
918 return res;
+
919}
+
920
+
921
+
922/**********************************************************************/
+
929float __attribute__ ((noinline)) riscv_emulate_fsgnjxs(float rs1, float rs2) {
+
930
+
931 float opa = subnormal_flush(rs1);
+
932 float opb = subnormal_flush(rs2);
+
933
+
934 int sign_1 = (int)signbit(opa);
+
935 int sign_2 = (int)signbit(opb);
+
936 float res = 0;
+
937
+
938 if (((sign_1 == 0) && (sign_2 != 0)) || ((sign_1 != 0) && (sign_2 == 0))) {
+
939 if (sign_1 == 0) {
+
940 res = -opa;
+
941 }
+
942 else {
+
943 res = opa;
+
944 }
+
945 }
+
946 else {
+
947 if (sign_1 == 0) {
+
948 res = opa;
+
949 }
+
950 else {
+
951 res = -opa;
+
952 }
+
953 }
+
954
+
955 return res;
+
956}
+
957
+
958
+
959/**********************************************************************/
+
965uint32_t __attribute__ ((noinline)) riscv_emulate_fclasss(float rs1) {
+
966
+
967 float opa = subnormal_flush(rs1);
+
968
+
969 union {
+
970 uint32_t binary_value;
+
971 float float_value;
+
972 } aux;
+
973
+
974 // RISC-V classify result layout
+
975 const uint32_t CLASS_NEG_INF = 1 << 0; // negative infinity
+
976 const uint32_t CLASS_NEG_NORM = 1 << 1; // negative normal number
+
977 const uint32_t CLASS_NEG_DENORM = 1 << 2; // negative subnormal number
+
978 const uint32_t CLASS_NEG_ZERO = 1 << 3; // negative zero
+
979 const uint32_t CLASS_POS_ZERO = 1 << 4; // positive zero
+
980 const uint32_t CLASS_POS_DENORM = 1 << 5; // positive subnormal number
+
981 const uint32_t CLASS_POS_NORM = 1 << 6; // positive normal number
+
982 const uint32_t CLASS_POS_INF = 1 << 7; // positive infinity
+
983 const uint32_t CLASS_SNAN = 1 << 8; // signaling NaN (sNaN)
+
984 const uint32_t CLASS_QNAN = 1 << 9; // quiet NaN (qNaN)
+
985
+
986 int tmp = fpclassify(opa);
+
987 int sgn = (int)signbit(opa);
+
988
+
989 uint32_t res = 0;
+
990
+
991 // infinity
+
992 if (tmp == FP_INFINITE) {
+
993 if (sgn) { res |= CLASS_NEG_INF; }
+
994 else { res |= CLASS_POS_INF; }
+
995 }
+
996
+
997 // zero
+
998 if (tmp == FP_ZERO) {
+
999 if (sgn) { res |= CLASS_NEG_ZERO; }
+
1000 else { res |= CLASS_POS_ZERO; }
+
1001 }
+
1002
+
1003 // normal
+
1004 if (tmp == FP_NORMAL) {
+
1005 if (sgn) { res |= CLASS_NEG_NORM; }
+
1006 else { res |= CLASS_POS_NORM; }
+
1007 }
+
1008
+
1009 // subnormal
+
1010 if (tmp == FP_SUBNORMAL) {
+
1011 if (sgn) { res |= CLASS_NEG_DENORM; }
+
1012 else { res |= CLASS_POS_DENORM; }
+
1013 }
+
1014
+
1015 // NaN
+
1016 if (tmp == FP_NAN) {
+
1017 aux.float_value = opa;
+
1018 if ((aux.binary_value >> 22) & 0b1) { // bit 22 (mantissa's MSB) is set -> canonical (quiet) NAN
+
1019 res |= CLASS_QNAN;
+
1020 }
+
1021 else {
+
1022 res |= CLASS_SNAN;
+
1023 }
+
1024 }
+
1025
+
1026 return res;
+
1027}
+
1028
+
1029
+
1030/**********************************************************************/
+
1037float __attribute__ ((noinline)) riscv_emulate_fdivs(float rs1, float rs2) {
+
1038
+
1039 float opa = subnormal_flush(rs1);
+
1040 float opb = subnormal_flush(rs2);
+
1041
+
1042 float res = opa / opb;
+
1043 return subnormal_flush(res);
+
1044}
+
1045
+
1046
+
1047/**********************************************************************/
+
1053float __attribute__ ((noinline)) riscv_emulate_fsqrts(float rs1) {
+
1054
+
1055 float opa = subnormal_flush(rs1);
+
1056
+
1057 float res = sqrtf(opa);
+
1058 return subnormal_flush(res);
+
1059}
+
1060
+
1061
+
1062/**********************************************************************/
+
1072float __attribute__ ((noinline)) riscv_emulate_fmadds(float rs1, float rs2, float rs3) {
+
1073
+
1074 float opa = subnormal_flush(rs1);
+
1075 float opb = subnormal_flush(rs2);
+
1076 float opc = subnormal_flush(rs3);
+
1077
+
1078 float res = (opa * opb) + opc;
+
1079 return subnormal_flush(res);
+
1080}
+
1081
+
1082
+
1083/**********************************************************************/
+
1091float __attribute__ ((noinline)) riscv_emulate_fmsubs(float rs1, float rs2, float rs3) {
+
1092
+
1093 float opa = subnormal_flush(rs1);
+
1094 float opb = subnormal_flush(rs2);
+
1095 float opc = subnormal_flush(rs3);
+
1096
+
1097 float res = (opa * opb) - opc;
+
1098 return subnormal_flush(res);
+
1099}
+
1100
+
1101
+
1102/**********************************************************************/
+
1110float __attribute__ ((noinline)) riscv_emulate_fnmsubs(float rs1, float rs2, float rs3) {
+
1111
+
1112 float opa = subnormal_flush(rs1);
+
1113 float opb = subnormal_flush(rs2);
+
1114 float opc = subnormal_flush(rs3);
+
1115
+
1116 float res = -(opa * opb) + opc;
+
1117 return subnormal_flush(res);
+
1118}
+
1119
+
1120
+
1121/**********************************************************************/
+
1129float __attribute__ ((noinline)) riscv_emulate_fnmadds(float rs1, float rs2, float rs3) {
+
1130
+
1131 float opa = subnormal_flush(rs1);
+
1132 float opb = subnormal_flush(rs2);
+
1133 float opc = subnormal_flush(rs3);
+
1134
+
1135 float res = -(opa * opb) - opc;
+
1136 return subnormal_flush(res);
+
1137}
+
1138
+
1139
+
1140#endif // neorv32_zfinx_extension_intrinsics_h
+
1141
+
uint32_t neorv32_cpu_csr_read(const int csr_id)
Definition neorv32_cpu.h:174
+
void neorv32_cpu_csr_write(const int csr_id, uint32_t data)
Definition neorv32_cpu.h:188
+
@ CSR_FFLAGS
Definition neorv32_cpu_csr.h:27
+
Definition neorv32_zfinx_extension_intrinsics.h:78
+
uint32_t binary_value
Definition neorv32_zfinx_extension_intrinsics.h:79
+
float float_value
Definition neorv32_zfinx_extension_intrinsics.h:80
+
+ + +
+ + diff --git a/sw/floating__point__test_2main_8c.html b/sw/floating__point__test_2main_8c.html new file mode 100644 index 0000000000..e3290ca57d --- /dev/null +++ b/sw/floating__point__test_2main_8c.html @@ -0,0 +1,492 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/floating_point_test/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions. +More...

+
#include <neorv32.h>
+#include <float.h>
+#include <math.h>
+#include "neorv32_zfinx_extension_intrinsics.h"
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

User configuration
#define BAUD_RATE   (19200)
 
#define NUM_TEST_CASES   (1000000)
 
#define SILENT_MODE   (1)
 
#define RUN_CSR_TESTS   (1)
 
#define RUN_EXC_TESTS   (1)
 
#define RUN_CONV_TESTS   (1)
 
#define RUN_ADDSUB_TESTS   (1)
 
#define RUN_MUL_TESTS   (1)
 
#define RUN_MINMAX_TESTS   (1)
 
#define RUN_COMPARE_TESTS   (1)
 
#define RUN_SGNINJ_TESTS   (1)
 
#define RUN_CLASSIFY_TESTS   (1)
 
#define RUN_UNAVAIL_TESTS   (1)
 
#define RUN_TIMING_TESTS   (0)
 
Special floating-point encodings
+#define FLOAT32_SNAN   ( (uint32_t)(0x7fa00000U) )
 
+#define FLOAT32_PMIN   ( (uint32_t)(0x00800000U) )
 
+#define FLOAT32_PMAX   ( (uint32_t)(0x7f7fffffU) )
 
+ + + + + + + + + +

+Functions

uint32_t get_test_vector (void)
 
uint32_t verify_result (uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res)
 
void print_report (uint32_t num_err)
 
int main ()
 
+

Detailed Description

+

Verification program for the NEORV32 'Zfinx' extension (floating-point in x registers) using pseudo-random data as input; compares results from hardware against pure-sw reference functions.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   (19200)
+
+

UART BAUD rate

+ +
+
+ +

◆ NUM_TEST_CASES

+ +
+
+ + + + +
#define NUM_TEST_CASES   (1000000)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_ADDSUB_TESTS

+ +
+
+ + + + +
#define RUN_ADDSUB_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_CLASSIFY_TESTS

+ +
+
+ + + + +
#define RUN_CLASSIFY_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_COMPARE_TESTS

+ +
+
+ + + + +
#define RUN_COMPARE_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_CONV_TESTS

+ +
+
+ + + + +
#define RUN_CONV_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_CSR_TESTS

+ +
+
+ + + + +
#define RUN_CSR_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_EXC_TESTS

+ +
+
+ + + + +
#define RUN_EXC_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_MINMAX_TESTS

+ +
+
+ + + + +
#define RUN_MINMAX_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_MUL_TESTS

+ +
+
+ + + + +
#define RUN_MUL_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_SGNINJ_TESTS

+ +
+
+ + + + +
#define RUN_SGNINJ_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_TIMING_TESTS

+ +
+
+ + + + +
#define RUN_TIMING_TESTS   (0)
+
+

UART BAUD rate

+ +
+
+ +

◆ RUN_UNAVAIL_TESTS

+ +
+
+ + + + +
#define RUN_UNAVAIL_TESTS   (1)
+
+

UART BAUD rate

+ +
+
+ +

◆ SILENT_MODE

+ +
+
+ + + + +
#define SILENT_MODE   (1)
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ get_test_vector()

+ +
+
+ + + + + + + +
uint32_t get_test_vector (void )
+
+

Generate 32-bit test data (including special values like INFINITY every now and then).

+
Returns
Test data (32-bit).
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function; test all available operations of the NEORV32 'Zfinx' extensions using floating-point * hardware intrinsics and software-only reference functions (emulation).

+
Note
This program requires the Zfinx CPU extension.
+
Returns
0 if execution was successful
+ +
+
+ +

◆ print_report()

+ +
+
+ + + + + + + +
void print_report (uint32_t num_err)
+
+

Print test report.

+
Parameters
+ + +
[in]num_errNumber or errors in this test.
+
+
+ +
+
+ +

◆ verify_result()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
uint32_t verify_result (uint32_t num,
uint32_t opa,
uint32_t opb,
uint32_t ref,
uint32_t res )
+
+

Verify results (software reference vs. actual hardware).

+
Parameters
+ + + + + + +
[in]numTest case number
[in]opaOperand 1
[in]opbOperand 2
[in]refSoftware reference
[in]resActual results from hardware
+
+
+
Returns
zero if results are equal.
+ +
+
+
+ + +
+ + diff --git a/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html new file mode 100644 index 0000000000..e74af0d520 --- /dev/null +++ b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html @@ -0,0 +1,1744 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/floating_point_test/neorv32_zfinx_extension_intrinsics.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
neorv32_zfinx_extension_intrinsics.h File Reference
+
+
+ +

"Intrinsic" library for the NEORV32 single-precision floating-point in x registers (Zfinx) extension +More...

+
#include <float.h>
+#include <math.h>
+
+

Go to the source code of this file.

+ + + + +

+Data Structures

union  float_conv_t
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

float subnormal_flush (float tmp)
 
float riscv_intrinsic_fadds (float rs1, float rs2)
 
float riscv_intrinsic_fsubs (float rs1, float rs2)
 
float riscv_intrinsic_fmuls (float rs1, float rs2)
 
float riscv_intrinsic_fmins (float rs1, float rs2)
 
float riscv_intrinsic_fmaxs (float rs1, float rs2)
 
uint32_t riscv_intrinsic_fcvt_wus (float rs1)
 
int32_t riscv_intrinsic_fcvt_ws (float rs1)
 
float riscv_intrinsic_fcvt_swu (uint32_t rs1)
 
float riscv_intrinsic_fcvt_sw (int32_t rs1)
 
uint32_t riscv_intrinsic_feqs (float rs1, float rs2)
 
uint32_t riscv_intrinsic_flts (float rs1, float rs2)
 
uint32_t riscv_intrinsic_fles (float rs1, float rs2)
 
float riscv_intrinsic_fsgnjs (float rs1, float rs2)
 
float riscv_intrinsic_fsgnjns (float rs1, float rs2)
 
float riscv_intrinsic_fsgnjxs (float rs1, float rs2)
 
uint32_t riscv_intrinsic_fclasss (float rs1)
 
float riscv_intrinsic_fdivs (float rs1, float rs2)
 
float riscv_intrinsic_fsqrts (float rs1)
 
float riscv_intrinsic_fmadds (float rs1, float rs2, float rs3)
 
float riscv_intrinsic_fmsubs (float rs1, float rs2, float rs3)
 
float riscv_intrinsic_fnmsubs (float rs1, float rs2, float rs3)
 
float riscv_intrinsic_fnmadds (float rs1, float rs2, float rs3)
 
float riscv_emulate_fadds (float rs1, float rs2)
 
float riscv_emulate_fsubs (float rs1, float rs2)
 
float riscv_emulate_fmuls (float rs1, float rs2)
 
float riscv_emulate_fmins (float rs1, float rs2)
 
float riscv_emulate_fmaxs (float rs1, float rs2)
 
uint32_t riscv_emulate_fcvt_wus (float rs1)
 
int32_t riscv_emulate_fcvt_ws (float rs1)
 
float riscv_emulate_fcvt_swu (uint32_t rs1)
 
float riscv_emulate_fcvt_sw (int32_t rs1)
 
uint32_t riscv_emulate_feqs (float rs1, float rs2)
 
uint32_t riscv_emulate_flts (float rs1, float rs2)
 
uint32_t riscv_emulate_fles (float rs1, float rs2)
 
float riscv_emulate_fsgnjs (float rs1, float rs2)
 
float riscv_emulate_fsgnjns (float rs1, float rs2)
 
float riscv_emulate_fsgnjxs (float rs1, float rs2)
 
uint32_t riscv_emulate_fclasss (float rs1)
 
float riscv_emulate_fdivs (float rs1, float rs2)
 
float riscv_emulate_fsqrts (float rs1)
 
float riscv_emulate_fmadds (float rs1, float rs2, float rs3)
 
float riscv_emulate_fmsubs (float rs1, float rs2, float rs3)
 
float riscv_emulate_fnmsubs (float rs1, float rs2, float rs3)
 
float riscv_emulate_fnmadds (float rs1, float rs2, float rs3)
 
+

Detailed Description

+

"Intrinsic" library for the NEORV32 single-precision floating-point in x registers (Zfinx) extension

+
Author
Stephan Nolting
+

Also provides emulation functions for all intrinsics (functionality re-built in pure software). The functionality of the emulation

+

functions is based on the RISC-V floating-point spec.

+
Note
All operations from this library use the default GCC "round to nearest, ties to even" rounding mode.
+
Warning
This library is just a temporary fall-back until the Zfinx extensions are supported by the upstream RISC-V GCC port.
+

Function Documentation

+ +

◆ riscv_emulate_fadds()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fadds (float rs1,
float rs2 )
+
+

Single-precision floating-point addition

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fclasss()

+ +
+
+ + + + + + + +
uint32_t riscv_emulate_fclasss (float rs1)
+
+

Single-precision floating-point number classification

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+

< Access as native float

+

< Access in binary representation

+ +
+
+ +

◆ riscv_emulate_fcvt_sw()

+ +
+
+ + + + + + + +
float riscv_emulate_fcvt_sw (int32_t rs1)
+
+

Single-precision floating-point signed integer to float

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fcvt_swu()

+ +
+
+ + + + + + + +
float riscv_emulate_fcvt_swu (uint32_t rs1)
+
+

Single-precision floating-point unsigned integer to float

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fcvt_ws()

+ +
+
+ + + + + + + +
int32_t riscv_emulate_fcvt_ws (float rs1)
+
+

Single-precision floating-point float to signed integer

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fcvt_wus()

+ +
+
+ + + + + + + +
uint32_t riscv_emulate_fcvt_wus (float rs1)
+
+

Single-precision floating-point float to unsigned integer

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fdivs()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fdivs (float rs1,
float rs2 )
+
+

Single-precision floating-point division

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_feqs()

+ +
+
+ + + + + + + + + + + +
uint32_t riscv_emulate_feqs (float rs1,
float rs2 )
+
+

Single-precision floating-point equal comparison

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fles()

+ +
+
+ + + + + + + + + + + +
uint32_t riscv_emulate_fles (float rs1,
float rs2 )
+
+

Single-precision floating-point less-than-or-equal comparison

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_flts()

+ +
+
+ + + + + + + + + + + +
uint32_t riscv_emulate_flts (float rs1,
float rs2 )
+
+

Single-precision floating-point less-than comparison

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fmadds()

+ +
+
+ + + + + + + + + + + + + + + + +
float riscv_emulate_fmadds (float rs1,
float rs2,
float rs3 )
+
+

Single-precision floating-point fused multiply-add

+
Warning
This instruction is not supported!
+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fmaxs()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fmaxs (float rs1,
float rs2 )
+
+

Single-precision floating-point maximum

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+

< Access as native float

+

< Access in binary representation

+ +
+
+ +

◆ riscv_emulate_fmins()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fmins (float rs1,
float rs2 )
+
+

Single-precision floating-point minimum

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+

< Access as native float

+

< Access in binary representation

+ +
+
+ +

◆ riscv_emulate_fmsubs()

+ +
+
+ + + + + + + + + + + + + + + + +
float riscv_emulate_fmsubs (float rs1,
float rs2,
float rs3 )
+
+

Single-precision floating-point fused multiply-sub

+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fmuls()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fmuls (float rs1,
float rs2 )
+
+

Single-precision floating-point multiplication

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fnmadds()

+ +
+
+ + + + + + + + + + + + + + + + +
float riscv_emulate_fnmadds (float rs1,
float rs2,
float rs3 )
+
+

Single-precision floating-point fused negated multiply-add

+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fnmsubs()

+ +
+
+ + + + + + + + + + + + + + + + +
float riscv_emulate_fnmsubs (float rs1,
float rs2,
float rs3 )
+
+

Single-precision floating-point fused negated multiply-sub

+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fsgnjns()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fsgnjns (float rs1,
float rs2 )
+
+

Single-precision floating-point sign-injection NOT

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fsgnjs()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fsgnjs (float rs1,
float rs2 )
+
+

Single-precision floating-point sign-injection

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fsgnjxs()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fsgnjxs (float rs1,
float rs2 )
+
+

Single-precision floating-point sign-injection XOR

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fsqrts()

+ +
+
+ + + + + + + +
float riscv_emulate_fsqrts (float rs1)
+
+

Single-precision floating-point square root

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_emulate_fsubs()

+ +
+
+ + + + + + + + + + + +
float riscv_emulate_fsubs (float rs1,
float rs2 )
+
+

Single-precision floating-point subtraction

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fadds()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fadds (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point addition

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fclasss()

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t riscv_intrinsic_fclasss (float rs1)
+
+inline
+
+

Single-precision floating-point number classification

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fcvt_sw()

+ +
+
+ + + + + +
+ + + + + + + +
float riscv_intrinsic_fcvt_sw (int32_t rs1)
+
+inline
+
+

Single-precision floating-point convert signed integer to float

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fcvt_swu()

+ +
+
+ + + + + +
+ + + + + + + +
float riscv_intrinsic_fcvt_swu (uint32_t rs1)
+
+inline
+
+

Single-precision floating-point convert unsigned integer to float

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fcvt_ws()

+ +
+
+ + + + + +
+ + + + + + + +
int32_t riscv_intrinsic_fcvt_ws (float rs1)
+
+inline
+
+

Single-precision floating-point convert float to signed integer

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fcvt_wus()

+ +
+
+ + + + + +
+ + + + + + + +
uint32_t riscv_intrinsic_fcvt_wus (float rs1)
+
+inline
+
+

Single-precision floating-point convert float to unsigned integer

+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fdivs()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fdivs (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point division

+
Warning
This instruction is not supported and should raise an illegal instruction exception when executed.
+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_feqs()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
uint32_t riscv_intrinsic_feqs (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point equal comparison

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fles()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
uint32_t riscv_intrinsic_fles (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point less-than-or-equal comparison

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_flts()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
uint32_t riscv_intrinsic_flts (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point less-than comparison

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fmadds()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
float riscv_intrinsic_fmadds (float rs1,
float rs2,
float rs3 )
+
+inline
+
+

Single-precision floating-point fused multiply-add

+
Warning
This instruction is not supported and should raise an illegal instruction exception when executed.
+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fmaxs()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fmaxs (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point maximum

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fmins()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fmins (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point minimum

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fmsubs()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
float riscv_intrinsic_fmsubs (float rs1,
float rs2,
float rs3 )
+
+inline
+
+

Single-precision floating-point fused multiply-sub

+
Warning
This instruction is not supported and should raise an illegal instruction exception when executed.
+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fmuls()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fmuls (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point multiplication

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fnmadds()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
float riscv_intrinsic_fnmadds (float rs1,
float rs2,
float rs3 )
+
+inline
+
+

Single-precision floating-point fused negated multiply-add

+
Warning
This instruction is not supported and should raise an illegal instruction exception when executed.
+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fnmsubs()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
float riscv_intrinsic_fnmsubs (float rs1,
float rs2,
float rs3 )
+
+inline
+
+

Single-precision floating-point fused negated multiply-sub

+
Warning
This instruction is not supported and should raise an illegal instruction exception when executed.
+
Parameters
+ + + + +
[in]rs1Source operand 1
[in]rs2Source operand 2
[in]rs3Source operand 3
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fsgnjns()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fsgnjns (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point sign-injection NOT

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fsgnjs()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fsgnjs (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point sign-injection

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fsgnjxs()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fsgnjxs (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point sign-injection XOR

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fsqrts()

+ +
+
+ + + + + +
+ + + + + + + +
float riscv_intrinsic_fsqrts (float rs1)
+
+inline
+
+

Single-precision floating-point square root

+
Warning
This instruction is not supported and should raise an illegal instruction exception when executed.
+
Parameters
+ + +
[in]rs1Source operand 1.
+
+
+
Returns
Result.
+ +
+
+ +

◆ riscv_intrinsic_fsubs()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
float riscv_intrinsic_fsubs (float rs1,
float rs2 )
+
+inline
+
+

Single-precision floating-point subtraction

+
Parameters
+ + + +
[in]rs1Source operand 1.
[in]rs2Source operand 2.
+
+
+
Returns
Result.
+ +
+
+ +

◆ subnormal_flush()

+ +
+
+ + + + + + + +
float subnormal_flush (float tmp)
+
+

Flush to zero if de-normal number.

+
Warning
Subnormal numbers are not supported yet! Flush them to zero.
+
Parameters
+ + +
[in]tmpSource operand.
+
+
+
Returns
Result.
+ +
+
+
+ + +
+ + diff --git a/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html new file mode 100644 index 0000000000..fa12d3a55d --- /dev/null +++ b/sw/floating__point__test_2neorv32__zfinx__extension__intrinsics_8h_source.html @@ -0,0 +1,985 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/floating_point_test/neorv32_zfinx_extension_intrinsics.h Source File + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
neorv32_zfinx_extension_intrinsics.h
+
+
+Go to the documentation of this file.
1// #################################################################################################
+
2// # << NEORV32 - Intrinsics + Emulation Functions for the RISC-V "Zfinx" CPU extension >> #
+
3// # ********************************************************************************************* #
+
4// # The intrinsics provided by this library allow to use the hardware floating-point unit of the #
+
5// # RISC-V Zfinx CPU extension without the need for Zfinx support by the compiler / toolchain. #
+
6// # ********************************************************************************************* #
+
7// # BSD 3-Clause License #
+
8// # #
+
9// # Copyright (c) 2024, Stephan Nolting. All rights reserved. #
+
10// # #
+
11// # Redistribution and use in source and binary forms, with or without modification, are #
+
12// # permitted provided that the following conditions are met: #
+
13// # #
+
14// # 1. Redistributions of source code must retain the above copyright notice, this list of #
+
15// # conditions and the following disclaimer. #
+
16// # #
+
17// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
+
18// # conditions and the following disclaimer in the documentation and/or other materials #
+
19// # provided with the distribution. #
+
20// # #
+
21// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
+
22// # endorse or promote products derived from this software without specific prior written #
+
23// # permission. #
+
24// # #
+
25// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
+
26// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
+
27// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
+
28// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
+
29// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
+
30// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
+
31// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
+
32// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
+
33// # OF THE POSSIBILITY OF SUCH DAMAGE. #
+
34// # ********************************************************************************************* #
+
35// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
+
36// #################################################################################################
+
37
+
38
+
39/**********************************************************************/
+
52#ifndef neorv32_zfinx_extension_intrinsics_h
+
53#define neorv32_zfinx_extension_intrinsics_h
+
54
+
55#define __USE_GNU
+
56#define _GNU_SOURCE
+
57#include <float.h>
+
58#include <math.h>
+
59
+
60
+
61/**********************************************************************/
+
64#if defined __riscv_f || (__riscv_flen == 32)
+
65 #error Application programs using the Zfinx intrinsic library have to be compiled WITHOUT the <F> MARCH ISA attribute!
+
66#endif
+
67
+
68
+
69/**********************************************************************/
+
72typedef union
+
73{
+
74 uint32_t binary_value;
+
75 float float_value;
+ +
77
+
78
+
79// ################################################################################################
+
80// Helper functions
+
81// ################################################################################################
+
82
+
83/**********************************************************************/
+
+
91float subnormal_flush(float tmp) {
+
92
+
93 float res = tmp;
+
94
+
95 // flush to zero if subnormal
+
96 if (fpclassify(tmp) == FP_SUBNORMAL) {
+
97 if (signbit(tmp) != 0) {
+
98 res = -0.0f;
+
99 }
+
100 else {
+
101 res = +0.0f;
+
102 }
+
103 }
+
104
+
105 return res;
+
106}
+
+
107
+
108
+
109// ################################################################################################
+
110// "Intrinsics"
+
111// ################################################################################################
+
112
+
113/**********************************************************************/
+
+
120inline float __attribute__ ((always_inline)) riscv_intrinsic_fadds(float rs1, float rs2) {
+
121
+
122 float_conv_t opa, opb, res;
+
123 opa.float_value = rs1;
+
124 opb.float_value = rs2;
+
125
+
126 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0000000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
127 return res.float_value;
+
128}
+
+
129
+
130
+
131/**********************************************************************/
+
+
138inline float __attribute__ ((always_inline)) riscv_intrinsic_fsubs(float rs1, float rs2) {
+
139
+
140 float_conv_t opa, opb, res;
+
141 opa.float_value = rs1;
+
142 opb.float_value = rs2;
+
143
+
144 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0000100, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
145 return res.float_value;
+
146}
+
+
147
+
148
+
149/**********************************************************************/
+
+
156inline float __attribute__ ((always_inline)) riscv_intrinsic_fmuls(float rs1, float rs2) {
+
157
+
158 float_conv_t opa, opb, res;
+
159 opa.float_value = rs1;
+
160 opb.float_value = rs2;
+
161
+
162 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0001000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
163 return res.float_value;
+
164}
+
+
165
+
166
+
167/**********************************************************************/
+
+
174inline float __attribute__ ((always_inline)) riscv_intrinsic_fmins(float rs1, float rs2) {
+
175
+
176 float_conv_t opa, opb, res;
+
177 opa.float_value = rs1;
+
178 opb.float_value = rs2;
+
179
+
180 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
181 return res.float_value;
+
182}
+
+
183
+
184
+
185/**********************************************************************/
+
+
192inline float __attribute__ ((always_inline)) riscv_intrinsic_fmaxs(float rs1, float rs2) {
+
193
+
194 float_conv_t opa, opb, res;
+
195 opa.float_value = rs1;
+
196 opb.float_value = rs2;
+
197
+
198 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010100, opb.binary_value, opa.binary_value, 0b001, 0b1010011);
+
199 return res.float_value;
+
200}
+
+
201
+
202
+
203/**********************************************************************/
+
+
209inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_wus(float rs1) {
+
210
+
211 float_conv_t opa;
+
212 opa.float_value = rs1;
+
213
+
214 return CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00001, opa.binary_value, 0b000, 0b1010011);
+
215}
+
+
216
+
217
+
218/**********************************************************************/
+
+
224inline int32_t __attribute__ ((always_inline)) riscv_intrinsic_fcvt_ws(float rs1) {
+
225
+
226 float_conv_t opa;
+
227 opa.float_value = rs1;
+
228
+
229 return (int32_t)CUSTOM_INSTR_R2_TYPE(0b1100000, 0b00000, opa.binary_value, 0b000, 0b1010011);
+
230}
+
+
231
+
232
+
233/**********************************************************************/
+
+
239inline float __attribute__ ((always_inline)) riscv_intrinsic_fcvt_swu(uint32_t rs1) {
+
240
+
241 float_conv_t res;
+
242
+
243 res.binary_value = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00001, rs1, 0b000, 0b1010011);
+
244 return res.float_value;
+
245}
+
+
246
+
247
+
248/**********************************************************************/
+
+
254inline float __attribute__ ((always_inline)) riscv_intrinsic_fcvt_sw(int32_t rs1) {
+
255
+
256 float_conv_t res;
+
257
+
258 res.binary_value = CUSTOM_INSTR_R2_TYPE(0b1101000, 0b00000, rs1, 0b000, 0b1010011);
+
259 return res.float_value;
+
260}
+
+
261
+
262
+
263/**********************************************************************/
+
+
270inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_feqs(float rs1, float rs2) {
+
271
+
272 float_conv_t opa, opb;
+
273 opa.float_value = rs1;
+
274 opb.float_value = rs2;
+
275
+
276 return CUSTOM_INSTR_R3_TYPE(0b1010000, opb.binary_value, opa.binary_value, 0b010, 0b1010011);
+
277}
+
+
278
+
279
+
280/**********************************************************************/
+
+
287inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_flts(float rs1, float rs2) {
+
288
+
289 float_conv_t opa, opb;
+
290 opa.float_value = rs1;
+
291 opb.float_value = rs2;
+
292
+
293 return CUSTOM_INSTR_R3_TYPE(0b1010000, opb.binary_value, opa.binary_value, 0b001, 0b1010011);
+
294}
+
+
295
+
296
+
297/**********************************************************************/
+
+
304inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fles(float rs1, float rs2) {
+
305
+
306 float_conv_t opa, opb;
+
307 opa.float_value = rs1;
+
308 opb.float_value = rs2;
+
309
+
310 return CUSTOM_INSTR_R3_TYPE(0b1010000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
311}
+
+
312
+
313
+
314/**********************************************************************/
+
+
321inline float __attribute__ ((always_inline)) riscv_intrinsic_fsgnjs(float rs1, float rs2) {
+
322
+
323 float_conv_t opa, opb, res;
+
324 opa.float_value = rs1;
+
325 opb.float_value = rs2;
+
326
+
327 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
328 return res.float_value;
+
329}
+
+
330
+
331
+
332/**********************************************************************/
+
+
339inline float __attribute__ ((always_inline)) riscv_intrinsic_fsgnjns(float rs1, float rs2) {
+
340
+
341 float_conv_t opa, opb, res;
+
342 opa.float_value = rs1;
+
343 opb.float_value = rs2;
+
344
+
345 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.binary_value, opa.binary_value, 0b001, 0b1010011);
+
346 return res.float_value;
+
347}
+
+
348
+
349
+
350/**********************************************************************/
+
+
357inline float __attribute__ ((always_inline)) riscv_intrinsic_fsgnjxs(float rs1, float rs2) {
+
358
+
359 float_conv_t opa, opb, res;
+
360 opa.float_value = rs1;
+
361 opb.float_value = rs2;
+
362
+
363 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0010000, opb.binary_value, opa.binary_value, 0b010, 0b1010011);
+
364 return res.float_value;
+
365}
+
+
366
+
367
+
368/**********************************************************************/
+
+
374inline uint32_t __attribute__ ((always_inline)) riscv_intrinsic_fclasss(float rs1) {
+
375
+
376 float_conv_t opa;
+
377 opa.float_value = rs1;
+
378
+
379 return CUSTOM_INSTR_R2_TYPE(0b1110000, 0b00000, opa.binary_value, 0b001, 0b1010011);
+
380}
+
+
381
+
382
+
383// ################################################################################################
+
384// !!! UNSUPPORTED instructions !!!
+
385// ################################################################################################
+
386
+
387/**********************************************************************/
+
+
396inline float __attribute__ ((always_inline)) riscv_intrinsic_fdivs(float rs1, float rs2) {
+
397
+
398 float_conv_t opa, opb, res;
+
399 opa.float_value = rs1;
+
400 opb.float_value = rs2;
+
401
+
402 res.binary_value = CUSTOM_INSTR_R3_TYPE(0b0001100, opb.binary_value, opa.binary_value, 0b000, 0b1010011);
+
403 return res.float_value;
+
404}
+
+
405
+
406
+
407/**********************************************************************/
+
+
415inline float __attribute__ ((always_inline)) riscv_intrinsic_fsqrts(float rs1) {
+
416
+
417 float_conv_t opa, res;
+
418 opa.float_value = rs1;
+
419
+
420 res.binary_value = CUSTOM_INSTR_R2_TYPE(0b0101100, 0b00000, opa.binary_value, 0b000, 0b1010011);
+
421 return res.float_value;
+
422}
+
+
423
+
424
+
425/**********************************************************************/
+
+
435inline float __attribute__ ((always_inline)) riscv_intrinsic_fmadds(float rs1, float rs2, float rs3) {
+
436
+
437 float_conv_t opa, opb, opc, res;
+
438 opa.float_value = rs1;
+
439 opb.float_value = rs2;
+
440 opc.float_value = rs3;
+
441
+
442 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1000011);
+
443 return res.float_value;
+
444}
+
+
445
+
446
+
447/**********************************************************************/
+
+
457inline float __attribute__ ((always_inline)) riscv_intrinsic_fmsubs(float rs1, float rs2, float rs3) {
+
458
+
459 float_conv_t opa, opb, opc, res;
+
460 opa.float_value = rs1;
+
461 opb.float_value = rs2;
+
462 opc.float_value = rs3;
+
463
+
464 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1000111);
+
465 return res.float_value;
+
466}
+
+
467
+
468
+
469/**********************************************************************/
+
+
479inline float __attribute__ ((always_inline)) riscv_intrinsic_fnmsubs(float rs1, float rs2, float rs3) {
+
480
+
481 float_conv_t opa, opb, opc, res;
+
482 opa.float_value = rs1;
+
483 opb.float_value = rs2;
+
484 opc.float_value = rs3;
+
485
+
486 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1001011);
+
487 return res.float_value;
+
488}
+
+
489
+
490
+
491/**********************************************************************/
+
+
501inline float __attribute__ ((always_inline)) riscv_intrinsic_fnmadds(float rs1, float rs2, float rs3) {
+
502
+
503 float_conv_t opa, opb, opc, res;
+
504 opa.float_value = rs1;
+
505 opb.float_value = rs2;
+
506 opc.float_value = rs3;
+
507
+
508 res.binary_value = CUSTOM_INSTR_R4_TYPE(opc.binary_value, opb.binary_value, opa.binary_value, 0b000, 0b1001111);
+
509 return res.float_value;
+
510}
+
+
511
+
512
+
513// ################################################################################################
+
514// Emulation functions
+
515// ################################################################################################
+
516
+
517/**********************************************************************/
+
+
524float __attribute__ ((noinline)) riscv_emulate_fadds(float rs1, float rs2) {
+
525
+
526 float opa = subnormal_flush(rs1);
+
527 float opb = subnormal_flush(rs2);
+
528
+
529 float res = opa + opb;
+
530
+
531 // make NAN canonical
+
532 if (fpclassify(res) == FP_NAN) {
+
533 res = NAN;
+
534 }
+
535
+
536 return subnormal_flush(res);
+
537}
+
+
538
+
539
+
540/**********************************************************************/
+
+
547float __attribute__ ((noinline)) riscv_emulate_fsubs(float rs1, float rs2) {
+
548
+
549 float opa = subnormal_flush(rs1);
+
550 float opb = subnormal_flush(rs2);
+
551
+
552 float res = opa - opb;
+
553
+
554 // make NAN canonical
+
555 if (fpclassify(res) == FP_NAN) {
+
556 res = NAN;
+
557 }
+
558
+
559 return subnormal_flush(res);
+
560}
+
+
561
+
562
+
563/**********************************************************************/
+
+
570float __attribute__ ((noinline)) riscv_emulate_fmuls(float rs1, float rs2) {
+
571
+
572 float opa = subnormal_flush(rs1);
+
573 float opb = subnormal_flush(rs2);
+
574
+
575 float res = opa * opb;
+
576 return subnormal_flush(res);
+
577}
+
+
578
+
579
+
580/**********************************************************************/
+
+
587float __attribute__ ((noinline)) riscv_emulate_fmins(float rs1, float rs2) {
+
588
+
589 float opa = subnormal_flush(rs1);
+
590 float opb = subnormal_flush(rs2);
+
591
+
592 union {
+
593 uint32_t binary_value;
+
594 float float_value;
+
595 } tmp_a, tmp_b;
+
596
+
597 if ((fpclassify(opa) == FP_NAN) && (fpclassify(opb) == FP_NAN)) {
+
598 return nanf("");
+
599 }
+
600
+
601 if (fpclassify(opa) == FP_NAN) {
+
602 return opb;
+
603 }
+
604
+
605 if (fpclassify(opb) == FP_NAN) {
+
606 return opa;
+
607 }
+
608
+
609 // RISC-V spec: -0 < +0
+
610 tmp_a.float_value = opa;
+
611 tmp_b.float_value = opb;
+
612 if (((tmp_a.binary_value == 0x80000000) && (tmp_b.binary_value == 0x00000000)) ||
+
613 ((tmp_a.binary_value == 0x00000000) && (tmp_b.binary_value == 0x80000000))) {
+
614 return -0.0f;
+
615 }
+
616
+
617 return fmin(opa, opb);
+
618}
+
+
619
+
620
+
621/**********************************************************************/
+
+
628float __attribute__ ((noinline)) riscv_emulate_fmaxs(float rs1, float rs2) {
+
629
+
630 float opa = subnormal_flush(rs1);
+
631 float opb = subnormal_flush(rs2);
+
632
+
633 union {
+
634 uint32_t binary_value;
+
635 float float_value;
+
636 } tmp_a, tmp_b;
+
637
+
638
+
639 if ((fpclassify(opa) == FP_NAN) && (fpclassify(opb) == FP_NAN)) {
+
640 return nanf("");
+
641 }
+
642
+
643 if (fpclassify(opa) == FP_NAN) {
+
644 return opb;
+
645 }
+
646
+
647 if (fpclassify(opb) == FP_NAN) {
+
648 return opa;
+
649 }
+
650
+
651 // RISC-V spec: -0 < +0
+
652 tmp_a.float_value = opa;
+
653 tmp_b.float_value = opb;
+
654 if (((tmp_a.binary_value == 0x80000000) && (tmp_b.binary_value == 0x00000000)) ||
+
655 ((tmp_a.binary_value == 0x00000000) && (tmp_b.binary_value == 0x80000000))) {
+
656 return +0.0f;
+
657 }
+
658
+
659 return fmax(opa, opb);
+
660}
+
+
661
+
662
+
663/**********************************************************************/
+
+
669uint32_t __attribute__ ((noinline)) riscv_emulate_fcvt_wus(float rs1) {
+
670
+
671 float opa = subnormal_flush(rs1);
+
672
+
673 return (uint32_t)rint(opa);
+
674}
+
+
675
+
676
+
677/**********************************************************************/
+
+
683int32_t __attribute__ ((noinline)) riscv_emulate_fcvt_ws(float rs1) {
+
684
+
685 float opa = subnormal_flush(rs1);
+
686
+
687 return (int32_t)rint(opa);
+
688}
+
+
689
+
690
+
691/**********************************************************************/
+
+
697float __attribute__ ((noinline)) riscv_emulate_fcvt_swu(uint32_t rs1) {
+
698
+
699 return (float)rs1;
+
700}
+
+
701
+
702
+
703/**********************************************************************/
+
+
709float __attribute__ ((noinline)) riscv_emulate_fcvt_sw(int32_t rs1) {
+
710
+
711 return (float)rs1;
+
712}
+
+
713
+
714
+
715/**********************************************************************/
+
+
722uint32_t __attribute__ ((noinline)) riscv_emulate_feqs(float rs1, float rs2) {
+
723
+
724 float opa = subnormal_flush(rs1);
+
725 float opb = subnormal_flush(rs2);
+
726
+
727 if ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {
+
728 return 0;
+
729 }
+
730
+
731 if isless(opa, opb) {
+
732 return 0;
+
733 }
+
734 else if isgreater(opa, opb) {
+
735 return 0;
+
736 }
+
737 else {
+
738 return 1;
+
739 }
+
740}
+
+
741
+
742
+
743/**********************************************************************/
+
+
750uint32_t __attribute__ ((noinline)) riscv_emulate_flts(float rs1, float rs2) {
+
751
+
752 float opa = subnormal_flush(rs1);
+
753 float opb = subnormal_flush(rs2);
+
754
+
755 if ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {
+
756 return 0;
+
757 }
+
758
+
759 if isless(opa, opb) {
+
760 return 1;
+
761 }
+
762 else {
+
763 return 0;
+
764 }
+
765}
+
+
766
+
767
+
768/**********************************************************************/
+
+
775uint32_t __attribute__ ((noinline)) riscv_emulate_fles(float rs1, float rs2) {
+
776
+
777 float opa = subnormal_flush(rs1);
+
778 float opb = subnormal_flush(rs2);
+
779
+
780 if ((fpclassify(opa) == FP_NAN) || (fpclassify(opb) == FP_NAN)) {
+
781 return 0;
+
782 }
+
783
+
784 if islessequal(opa, opb) {
+
785 return 1;
+
786 }
+
787 else {
+
788 return 0;
+
789 }
+
790}
+
+
791
+
792
+
793/**********************************************************************/
+
+
800float __attribute__ ((noinline)) riscv_emulate_fsgnjs(float rs1, float rs2) {
+
801
+
802 float opa = rs1;
+
803 float opb = rs2;
+
804
+
805 int sign_1 = (int)signbit(opa);
+
806 int sign_2 = (int)signbit(opb);
+
807 float res = 0;
+
808
+
809 if (sign_2 != 0) { // opb is negative
+
810 if (sign_1 == 0) {
+
811 res = -opa;
+
812 }
+
813 else {
+
814 res = opa;
+
815 }
+
816 }
+
817 else { // opb is positive
+
818 if (sign_1 == 0) {
+
819 res = opa;
+
820 }
+
821 else {
+
822 res = -opa;
+
823 }
+
824 }
+
825
+
826 return res;
+
827}
+
+
828
+
829
+
830/**********************************************************************/
+
+
837float __attribute__ ((noinline)) riscv_emulate_fsgnjns(float rs1, float rs2) {
+
838
+
839 float opa = rs1;
+
840 float opb = rs2;
+
841
+
842 int sign_1 = (int)signbit(opa);
+
843 int sign_2 = (int)signbit(opb);
+
844 float res = 0;
+
845
+
846 if (sign_2 != 0) { // opb is negative
+
847 if (sign_1 == 0) {
+
848 res = opa;
+
849 }
+
850 else {
+
851 res = -opa;
+
852 }
+
853 }
+
854 else { // opb is positive
+
855 if (sign_1 == 0) {
+
856 res = -opa;
+
857 }
+
858 else {
+
859 res = opa;
+
860 }
+
861 }
+
862
+
863 return res;
+
864}
+
+
865
+
866
+
867/**********************************************************************/
+
+
874float __attribute__ ((noinline)) riscv_emulate_fsgnjxs(float rs1, float rs2) {
+
875
+
876 float opa = rs1;
+
877 float opb = rs2;
+
878
+
879 int sign_1 = (int)signbit(opa);
+
880 int sign_2 = (int)signbit(opb);
+
881 float res = 0;
+
882
+
883 if (((sign_1 == 0) && (sign_2 != 0)) || ((sign_1 != 0) && (sign_2 == 0))) {
+
884 if (sign_1 == 0) {
+
885 res = -opa;
+
886 }
+
887 else {
+
888 res = opa;
+
889 }
+
890 }
+
891 else {
+
892 if (sign_1 == 0) {
+
893 res = opa;
+
894 }
+
895 else {
+
896 res = -opa;
+
897 }
+
898 }
+
899
+
900 return res;
+
901}
+
+
902
+
903
+
904/**********************************************************************/
+
+
910uint32_t __attribute__ ((noinline)) riscv_emulate_fclasss(float rs1) {
+
911
+
912 float opa = rs1;
+
913
+
914 union {
+
915 uint32_t binary_value;
+
916 float float_value;
+
917 } aux;
+
918
+
919 // RISC-V classify result layout
+
920 const uint32_t CLASS_NEG_INF = 1 << 0; // negative infinity
+
921 const uint32_t CLASS_NEG_NORM = 1 << 1; // negative normal number
+
922 const uint32_t CLASS_NEG_DENORM = 1 << 2; // negative subnormal number
+
923 const uint32_t CLASS_NEG_ZERO = 1 << 3; // negative zero
+
924 const uint32_t CLASS_POS_ZERO = 1 << 4; // positive zero
+
925 const uint32_t CLASS_POS_DENORM = 1 << 5; // positive subnormal number
+
926 const uint32_t CLASS_POS_NORM = 1 << 6; // positive normal number
+
927 const uint32_t CLASS_POS_INF = 1 << 7; // positive infinity
+
928 const uint32_t CLASS_SNAN = 1 << 8; // signaling NaN (sNaN)
+
929 const uint32_t CLASS_QNAN = 1 << 9; // quiet NaN (qNaN)
+
930
+
931 int tmp = fpclassify(opa);
+
932 int sgn = (int)signbit(opa);
+
933
+
934 uint32_t res = 0;
+
935
+
936 // infinity
+
937 if (tmp == FP_INFINITE) {
+
938 if (sgn) { res |= CLASS_NEG_INF; }
+
939 else { res |= CLASS_POS_INF; }
+
940 }
+
941
+
942 // zero
+
943 if (tmp == FP_ZERO) {
+
944 if (sgn) { res |= CLASS_NEG_ZERO; }
+
945 else { res |= CLASS_POS_ZERO; }
+
946 }
+
947
+
948 // normal
+
949 if (tmp == FP_NORMAL) {
+
950 if (sgn) { res |= CLASS_NEG_NORM; }
+
951 else { res |= CLASS_POS_NORM; }
+
952 }
+
953
+
954 // subnormal
+
955 if (tmp == FP_SUBNORMAL) {
+
956 if (sgn) { res |= CLASS_NEG_DENORM; }
+
957 else { res |= CLASS_POS_DENORM; }
+
958 }
+
959
+
960 // NaN
+
961 if (tmp == FP_NAN) {
+
962 aux.float_value = opa;
+
963 if ((aux.binary_value >> 22) & 0b1) { // bit 22 (mantissa's MSB) is set -> canonical (quiet) NAN
+
964 res |= CLASS_QNAN;
+
965 }
+
966 else {
+
967 res |= CLASS_SNAN;
+
968 }
+
969 }
+
970
+
971 return res;
+
972}
+
+
973
+
974
+
975/**********************************************************************/
+
+
982float __attribute__ ((noinline)) riscv_emulate_fdivs(float rs1, float rs2) {
+
983
+
984 float opa = subnormal_flush(rs1);
+
985 float opb = subnormal_flush(rs2);
+
986
+
987 float res = opa / opb;
+
988 return subnormal_flush(res);
+
989}
+
+
990
+
991
+
992/**********************************************************************/
+
+
998float __attribute__ ((noinline)) riscv_emulate_fsqrts(float rs1) {
+
999
+
1000 float opa = subnormal_flush(rs1);
+
1001
+
1002 float res = sqrtf(opa);
+
1003 return subnormal_flush(res);
+
1004}
+
+
1005
+
1006
+
1007/**********************************************************************/
+
+
1017float __attribute__ ((noinline)) riscv_emulate_fmadds(float rs1, float rs2, float rs3) {
+
1018
+
1019 float opa = subnormal_flush(rs1);
+
1020 float opb = subnormal_flush(rs2);
+
1021 float opc = subnormal_flush(rs3);
+
1022
+
1023 float res = (opa * opb) + opc;
+
1024 return subnormal_flush(res);
+
1025}
+
+
1026
+
1027
+
1028/**********************************************************************/
+
+
1036float __attribute__ ((noinline)) riscv_emulate_fmsubs(float rs1, float rs2, float rs3) {
+
1037
+
1038 float opa = subnormal_flush(rs1);
+
1039 float opb = subnormal_flush(rs2);
+
1040 float opc = subnormal_flush(rs3);
+
1041
+
1042 float res = (opa * opb) - opc;
+
1043 return subnormal_flush(res);
+
1044}
+
+
1045
+
1046
+
1047/**********************************************************************/
+
+
1055float __attribute__ ((noinline)) riscv_emulate_fnmsubs(float rs1, float rs2, float rs3) {
+
1056
+
1057 float opa = subnormal_flush(rs1);
+
1058 float opb = subnormal_flush(rs2);
+
1059 float opc = subnormal_flush(rs3);
+
1060
+
1061 float res = -(opa * opb) + opc;
+
1062 return subnormal_flush(res);
+
1063}
+
+
1064
+
1065
+
1066/**********************************************************************/
+
+
1074float __attribute__ ((noinline)) riscv_emulate_fnmadds(float rs1, float rs2, float rs3) {
+
1075
+
1076 float opa = subnormal_flush(rs1);
+
1077 float opb = subnormal_flush(rs2);
+
1078 float opc = subnormal_flush(rs3);
+
1079
+
1080 float res = -(opa * opb) - opc;
+
1081 return subnormal_flush(res);
+
1082}
+
+
1083
+
1084
+
1085#endif // neorv32_zfinx_extension_intrinsics_h
+
1086
+
Definition neorv32_zfinx_extension_intrinsics.h:78
+
uint32_t binary_value
Definition neorv32_zfinx_extension_intrinsics.h:79
+
float float_value
Definition neorv32_zfinx_extension_intrinsics.h:80
+
+ + +
+ + diff --git a/sw/folderclosed.svg b/sw/folderclosed.svg new file mode 100644 index 0000000000..b04bed2e72 --- /dev/null +++ b/sw/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/sw/folderclosedd.svg b/sw/folderclosedd.svg new file mode 100644 index 0000000000..52f0166a23 --- /dev/null +++ b/sw/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/sw/folderopen.svg b/sw/folderopen.svg new file mode 100644 index 0000000000..f6896dd254 --- /dev/null +++ b/sw/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/sw/folderopend.svg b/sw/folderopend.svg new file mode 100644 index 0000000000..2d1f06e7bc --- /dev/null +++ b/sw/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/sw/functions.html b/sw/functions.html new file mode 100644 index 0000000000..070514ef8c --- /dev/null +++ b/sw/functions.html @@ -0,0 +1,213 @@ + + + + + + + +NEORV32 Software Framework Documentation: Data Fields + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- y -

+
+ + +
+ + diff --git a/sw/functions_vars.html b/sw/functions_vars.html new file mode 100644 index 0000000000..b0f84700bf --- /dev/null +++ b/sw/functions_vars.html @@ -0,0 +1,213 @@ + + + + + + + +NEORV32 Software Framework Documentation: Data Fields - Variables + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the struct/union documentation for each field:
+ +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- y -

+
+ + +
+ + diff --git a/sw/game__of__life_2main_8c.html b/sw/game__of__life_2main_8c.html new file mode 100644 index 0000000000..d7c37e0aeb --- /dev/null +++ b/sw/game__of__life_2main_8c.html @@ -0,0 +1,460 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/game_of_life/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Conway's game of life in a UART terminal. +More...

+
#include <neorv32.h>
+
+ + + + + + + + + + + + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
#define NUM_CELLS_X   160
 
#define NUM_CELLS_Y   40
 
#define GEN_DELAY   500
 
#define CELL_DEAD   (' ')
 
#define CELL_ALIVE   ('#')
 
+ + + + + + + + + + + + + + + +

+Functions

void clear_universe (int u)
 
void set_cell (int u, int x, int y)
 
int get_cell (int u, int x, int y)
 
int get_neighborhood (int u, int x, int y)
 
void print_universe (int u)
 
int pop_count (int u)
 
int main (void)
 
+ + + +

+Variables

uint8_t universe [2][NUM_CELLS_X/8][NUM_CELLS_Y]
 
+

Detailed Description

+

Conway's game of life in a UART terminal.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+ +

◆ CELL_ALIVE

+ +
+
+ + + + +
#define CELL_ALIVE   ('#')
+
+

Symbol for alive cell

+ +
+
+ +

◆ CELL_DEAD

+ +
+
+ + + + +
#define CELL_DEAD   (' ')
+
+

Symbol for dead cell

+ +
+
+ +

◆ GEN_DELAY

+ +
+
+ + + + +
#define GEN_DELAY   500
+
+

Delay between generations in ms

+ +
+
+ +

◆ NUM_CELLS_X

+ +
+
+ + + + +
#define NUM_CELLS_X   160
+
+

Universe x size (has to be a multiple of 8)

+ +
+
+ +

◆ NUM_CELLS_Y

+ +
+
+ + + + +
#define NUM_CELLS_Y   40
+
+

Universe y size

+ +
+
+

Function Documentation

+ +

◆ clear_universe()

+ +
+
+ + + + + + + +
void clear_universe (int u)
+
+

Kill all cells in universe.

+
Parameters
+ + +
[in]uUniverse select (0 or 1).
+
+
+ +
+
+ +

◆ get_cell()

+ +
+
+ + + + + + + + + + + + + + + + +
int get_cell (int u,
int x,
int y )
+
+

Get state of cell.

+
Parameters
+ + + + +
[in]uUniverse select (0 or 1).
[in]xX coordinate of cell.
[in]yY coordinate of cell.
+
+
+
Returns
Cell is dead when 0, cell is alive when 1.
+ +
+
+ +

◆ get_neighborhood()

+ +
+
+ + + + + + + + + + + + + + + + +
int get_neighborhood (int u,
int x,
int y )
+
+

Get number of living cells in neighborhood.

+
Parameters
+ + + + +
[in]uUniverse select (0 or 1).
[in]xX coordinate of the neighborhood's center cell.
[in]yY coordinate of the neighborhood's center cell.
+
+
+
Returns
Number of living cells in neighborhood (0..9).
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Conway's Game of Life.

+
Note
This program requires the UART to be synthesized (the TRNG is optional).
+
Returns
0 if execution was successful
+ +
+
+ +

◆ pop_count()

+ +
+
+ + + + + + + +
int pop_count (int u)
+
+

Count living cells in universe.

+
Parameters
+ + +
[in]uUniverse select (0 or 1).
+
+
+
Returns
Number of living cells.
+ +
+
+ +

◆ print_universe()

+ +
+
+ + + + + + + +
void print_universe (int u)
+
+

Print universe via UARt.

+
Parameters
+ + +
[in]uUniverse select (0 or 1).
+
+
+ +
+
+ +

◆ set_cell()

+ +
+
+ + + + + + + + + + + + + + + + +
void set_cell (int u,
int x,
int y )
+
+

Make cell alive.

+
Parameters
+ + + + +
[in]uUniverse select (0 or 1).
[in]xX coordinate of cell.
[in]yY coordinate of cell.
+
+
+ +
+
+

Variable Documentation

+ +

◆ universe

+ +
+
+ + + + +
uint8_t universe[2][NUM_CELLS_X/8][NUM_CELLS_Y]
+
+

The universe

+ +
+
+
+ + +
+ + diff --git a/sw/globals.html b/sw/globals.html new file mode 100644 index 0000000000..3661f6601a --- /dev/null +++ b/sw/globals.html @@ -0,0 +1,119 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- _ -

+
+ + +
+ + diff --git a/sw/globals_a.html b/sw/globals_a.html new file mode 100644 index 0000000000..9de724d8d6 --- /dev/null +++ b/sw/globals_a.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- a -

+
+ + +
+ + diff --git a/sw/globals_b.html b/sw/globals_b.html new file mode 100644 index 0000000000..bbe4e6719c --- /dev/null +++ b/sw/globals_b.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- b -

+
+ + +
+ + diff --git a/sw/globals_c.html b/sw/globals_c.html new file mode 100644 index 0000000000..53c1db83a4 --- /dev/null +++ b/sw/globals_c.html @@ -0,0 +1,357 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- c -

+
+ + +
+ + diff --git a/sw/globals_d.html b/sw/globals_d.html new file mode 100644 index 0000000000..f116493d01 --- /dev/null +++ b/sw/globals_d.html @@ -0,0 +1,139 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- d -

+
+ + +
+ + diff --git a/sw/globals_defs.html b/sw/globals_defs.html new file mode 100644 index 0000000000..6f4785858d --- /dev/null +++ b/sw/globals_defs.html @@ -0,0 +1,101 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- a -

+
+ + +
+ + diff --git a/sw/globals_defs_b.html b/sw/globals_defs_b.html new file mode 100644 index 0000000000..fa58ba3344 --- /dev/null +++ b/sw/globals_defs_b.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- b -

+
+ + +
+ + diff --git a/sw/globals_defs_c.html b/sw/globals_defs_c.html new file mode 100644 index 0000000000..3d66e21a31 --- /dev/null +++ b/sw/globals_defs_c.html @@ -0,0 +1,106 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- c -

+
+ + +
+ + diff --git a/sw/globals_defs_d.html b/sw/globals_defs_d.html new file mode 100644 index 0000000000..e1ceabab1b --- /dev/null +++ b/sw/globals_defs_d.html @@ -0,0 +1,115 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- d -

+
+ + +
+ + diff --git a/sw/globals_defs_e.html b/sw/globals_defs_e.html new file mode 100644 index 0000000000..6724c854f3 --- /dev/null +++ b/sw/globals_defs_e.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- e -

+
+ + +
+ + diff --git a/sw/globals_defs_f.html b/sw/globals_defs_f.html new file mode 100644 index 0000000000..858e0985a9 --- /dev/null +++ b/sw/globals_defs_f.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- f -

+
+ + +
+ + diff --git a/sw/globals_defs_g.html b/sw/globals_defs_g.html new file mode 100644 index 0000000000..b2dab9bd11 --- /dev/null +++ b/sw/globals_defs_g.html @@ -0,0 +1,105 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- g -

+
+ + +
+ + diff --git a/sw/globals_defs_i.html b/sw/globals_defs_i.html new file mode 100644 index 0000000000..ca9679f61d --- /dev/null +++ b/sw/globals_defs_i.html @@ -0,0 +1,101 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- i -

+
+ + +
+ + diff --git a/sw/globals_defs_m.html b/sw/globals_defs_m.html new file mode 100644 index 0000000000..0dacf04755 --- /dev/null +++ b/sw/globals_defs_m.html @@ -0,0 +1,101 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- m -

+
+ + +
+ + diff --git a/sw/globals_defs_n.html b/sw/globals_defs_n.html new file mode 100644 index 0000000000..ebf53562a0 --- /dev/null +++ b/sw/globals_defs_n.html @@ -0,0 +1,163 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- n -

+
+ + +
+ + diff --git a/sw/globals_defs_o.html b/sw/globals_defs_o.html new file mode 100644 index 0000000000..65065395ec --- /dev/null +++ b/sw/globals_defs_o.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- o -

+
+ + +
+ + diff --git a/sw/globals_defs_p.html b/sw/globals_defs_p.html new file mode 100644 index 0000000000..7e47b67c2b --- /dev/null +++ b/sw/globals_defs_p.html @@ -0,0 +1,105 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- p -

+
+ + +
+ + diff --git a/sw/globals_defs_r.html b/sw/globals_defs_r.html new file mode 100644 index 0000000000..a3d67b4c52 --- /dev/null +++ b/sw/globals_defs_r.html @@ -0,0 +1,111 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- r -

+
+ + +
+ + diff --git a/sw/globals_defs_s.html b/sw/globals_defs_s.html new file mode 100644 index 0000000000..aa5072d4dc --- /dev/null +++ b/sw/globals_defs_s.html @@ -0,0 +1,126 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- s -

+
+ + +
+ + diff --git a/sw/globals_defs_t.html b/sw/globals_defs_t.html new file mode 100644 index 0000000000..1babbe483f --- /dev/null +++ b/sw/globals_defs_t.html @@ -0,0 +1,109 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- t -

+
+ + +
+ + diff --git a/sw/globals_defs_u.html b/sw/globals_defs_u.html new file mode 100644 index 0000000000..0041a9a4ff --- /dev/null +++ b/sw/globals_defs_u.html @@ -0,0 +1,119 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- u -

+
+ + +
+ + diff --git a/sw/globals_defs_w.html b/sw/globals_defs_w.html new file mode 100644 index 0000000000..e704b17d60 --- /dev/null +++ b/sw/globals_defs_w.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- w -

+
+ + +
+ + diff --git a/sw/globals_defs_x.html b/sw/globals_defs_x.html new file mode 100644 index 0000000000..3062eb6379 --- /dev/null +++ b/sw/globals_defs_x.html @@ -0,0 +1,113 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+ +

- x -

+
+ + +
+ + diff --git a/sw/globals_e.html b/sw/globals_e.html new file mode 100644 index 0000000000..b6e2ca45e3 --- /dev/null +++ b/sw/globals_e.html @@ -0,0 +1,116 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- e -

+
+ + +
+ + diff --git a/sw/globals_enum.html b/sw/globals_enum.html new file mode 100644 index 0000000000..3fdcb828f0 --- /dev/null +++ b/sw/globals_enum.html @@ -0,0 +1,152 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enums with links to the documentation:
+ +

- e -

+ + +

- n -

+ + +

- s -

+
+ + +
+ + diff --git a/sw/globals_eval.html b/sw/globals_eval.html new file mode 100644 index 0000000000..4f4003e996 --- /dev/null +++ b/sw/globals_eval.html @@ -0,0 +1,346 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- c -

+
+ + +
+ + diff --git a/sw/globals_eval_d.html b/sw/globals_eval_d.html new file mode 100644 index 0000000000..92a01fd90f --- /dev/null +++ b/sw/globals_eval_d.html @@ -0,0 +1,121 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- d -

+
+ + +
+ + diff --git a/sw/globals_eval_e.html b/sw/globals_eval_e.html new file mode 100644 index 0000000000..4f7d81c13b --- /dev/null +++ b/sw/globals_eval_e.html @@ -0,0 +1,110 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- e -

+
+ + +
+ + diff --git a/sw/globals_eval_f.html b/sw/globals_eval_f.html new file mode 100644 index 0000000000..76186ccc15 --- /dev/null +++ b/sw/globals_eval_f.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- f -

+
+ + +
+ + diff --git a/sw/globals_eval_g.html b/sw/globals_eval_g.html new file mode 100644 index 0000000000..7199f904d5 --- /dev/null +++ b/sw/globals_eval_g.html @@ -0,0 +1,107 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- g -

+
+ + +
+ + diff --git a/sw/globals_eval_h.html b/sw/globals_eval_h.html new file mode 100644 index 0000000000..82f7df6573 --- /dev/null +++ b/sw/globals_eval_h.html @@ -0,0 +1,112 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- h -

+
+ + +
+ + diff --git a/sw/globals_eval_n.html b/sw/globals_eval_n.html new file mode 100644 index 0000000000..278f165734 --- /dev/null +++ b/sw/globals_eval_n.html @@ -0,0 +1,130 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- n -

+
+ + +
+ + diff --git a/sw/globals_eval_o.html b/sw/globals_eval_o.html new file mode 100644 index 0000000000..8fa0f24397 --- /dev/null +++ b/sw/globals_eval_o.html @@ -0,0 +1,119 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- o -

+
+ + +
+ + diff --git a/sw/globals_eval_p.html b/sw/globals_eval_p.html new file mode 100644 index 0000000000..a0e1241c69 --- /dev/null +++ b/sw/globals_eval_p.html @@ -0,0 +1,114 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- p -

+
+ + +
+ + diff --git a/sw/globals_eval_r.html b/sw/globals_eval_r.html new file mode 100644 index 0000000000..7f8d66e010 --- /dev/null +++ b/sw/globals_eval_r.html @@ -0,0 +1,129 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- r -

+
+ + +
+ + diff --git a/sw/globals_eval_s.html b/sw/globals_eval_s.html new file mode 100644 index 0000000000..513ccce062 --- /dev/null +++ b/sw/globals_eval_s.html @@ -0,0 +1,179 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- s -

+
+ + +
+ + diff --git a/sw/globals_eval_t.html b/sw/globals_eval_t.html new file mode 100644 index 0000000000..f7f472f65d --- /dev/null +++ b/sw/globals_eval_t.html @@ -0,0 +1,157 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- t -

+
+ + +
+ + diff --git a/sw/globals_eval_u.html b/sw/globals_eval_u.html new file mode 100644 index 0000000000..12fb231234 --- /dev/null +++ b/sw/globals_eval_u.html @@ -0,0 +1,137 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- u -

+
+ + +
+ + diff --git a/sw/globals_eval_w.html b/sw/globals_eval_w.html new file mode 100644 index 0000000000..14d961c49f --- /dev/null +++ b/sw/globals_eval_w.html @@ -0,0 +1,112 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- w -

+
+ + +
+ + diff --git a/sw/globals_eval_x.html b/sw/globals_eval_x.html new file mode 100644 index 0000000000..afae555f85 --- /dev/null +++ b/sw/globals_eval_x.html @@ -0,0 +1,122 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+ +

- x -

+
+ + +
+ + diff --git a/sw/globals_f.html b/sw/globals_f.html new file mode 100644 index 0000000000..85800db8b6 --- /dev/null +++ b/sw/globals_f.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- f -

+
+ + +
+ + diff --git a/sw/globals_func.html b/sw/globals_func.html new file mode 100644 index 0000000000..0a300d21ee --- /dev/null +++ b/sw/globals_func.html @@ -0,0 +1,107 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- _ -

+
+ + +
+ + diff --git a/sw/globals_func_a.html b/sw/globals_func_a.html new file mode 100644 index 0000000000..df6b27957b --- /dev/null +++ b/sw/globals_func_a.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- a -

+
+ + +
+ + diff --git a/sw/globals_func_b.html b/sw/globals_func_b.html new file mode 100644 index 0000000000..42d8e22921 --- /dev/null +++ b/sw/globals_func_b.html @@ -0,0 +1,101 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- b -

+
+ + +
+ + diff --git a/sw/globals_func_c.html b/sw/globals_func_c.html new file mode 100644 index 0000000000..0a9d471f62 --- /dev/null +++ b/sw/globals_func_c.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- c -

+
+ + +
+ + diff --git a/sw/globals_func_d.html b/sw/globals_func_d.html new file mode 100644 index 0000000000..ca571c35b3 --- /dev/null +++ b/sw/globals_func_d.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- d -

+
+ + +
+ + diff --git a/sw/globals_func_g.html b/sw/globals_func_g.html new file mode 100644 index 0000000000..85a377c276 --- /dev/null +++ b/sw/globals_func_g.html @@ -0,0 +1,109 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- g -

+
+ + +
+ + diff --git a/sw/globals_func_h.html b/sw/globals_func_h.html new file mode 100644 index 0000000000..619664b16c --- /dev/null +++ b/sw/globals_func_h.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- h -

+
+ + +
+ + diff --git a/sw/globals_func_m.html b/sw/globals_func_m.html new file mode 100644 index 0000000000..438f34e7d7 --- /dev/null +++ b/sw/globals_func_m.html @@ -0,0 +1,103 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- m -

+
+ + +
+ + diff --git a/sw/globals_func_n.html b/sw/globals_func_n.html new file mode 100644 index 0000000000..1501b2568c --- /dev/null +++ b/sw/globals_func_n.html @@ -0,0 +1,328 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- n -

+
+ + +
+ + diff --git a/sw/globals_func_p.html b/sw/globals_func_p.html new file mode 100644 index 0000000000..bb30119504 --- /dev/null +++ b/sw/globals_func_p.html @@ -0,0 +1,108 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- p -

+
+ + +
+ + diff --git a/sw/globals_func_r.html b/sw/globals_func_r.html new file mode 100644 index 0000000000..15d8caa0a1 --- /dev/null +++ b/sw/globals_func_r.html @@ -0,0 +1,148 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- r -

+
+ + +
+ + diff --git a/sw/globals_func_s.html b/sw/globals_func_s.html new file mode 100644 index 0000000000..7880ada328 --- /dev/null +++ b/sw/globals_func_s.html @@ -0,0 +1,131 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- s -

+
+ + +
+ + diff --git a/sw/globals_func_t.html b/sw/globals_func_t.html new file mode 100644 index 0000000000..2fc2e5a9a2 --- /dev/null +++ b/sw/globals_func_t.html @@ -0,0 +1,105 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- t -

+
+ + +
+ + diff --git a/sw/globals_func_u.html b/sw/globals_func_u.html new file mode 100644 index 0000000000..385b93b531 --- /dev/null +++ b/sw/globals_func_u.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- u -

+
+ + +
+ + diff --git a/sw/globals_func_v.html b/sw/globals_func_v.html new file mode 100644 index 0000000000..7800c82c5a --- /dev/null +++ b/sw/globals_func_v.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- v -

+
+ + +
+ + diff --git a/sw/globals_func_w.html b/sw/globals_func_w.html new file mode 100644 index 0000000000..8e83fa08d5 --- /dev/null +++ b/sw/globals_func_w.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- w -

+
+ + +
+ + diff --git a/sw/globals_func_x.html b/sw/globals_func_x.html new file mode 100644 index 0000000000..7abf7fe85e --- /dev/null +++ b/sw/globals_func_x.html @@ -0,0 +1,111 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- x -

+
+ + +
+ + diff --git a/sw/globals_g.html b/sw/globals_g.html new file mode 100644 index 0000000000..96dda2e052 --- /dev/null +++ b/sw/globals_g.html @@ -0,0 +1,122 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- g -

+
+ + +
+ + diff --git a/sw/globals_h.html b/sw/globals_h.html new file mode 100644 index 0000000000..01cc8534df --- /dev/null +++ b/sw/globals_h.html @@ -0,0 +1,115 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- h -

+
+ + +
+ + diff --git a/sw/globals_i.html b/sw/globals_i.html new file mode 100644 index 0000000000..3bc3003292 --- /dev/null +++ b/sw/globals_i.html @@ -0,0 +1,102 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- i -

+
+ + +
+ + diff --git a/sw/globals_k.html b/sw/globals_k.html new file mode 100644 index 0000000000..8fb7a1752e --- /dev/null +++ b/sw/globals_k.html @@ -0,0 +1,101 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- k -

+
+ + +
+ + diff --git a/sw/globals_m.html b/sw/globals_m.html new file mode 100644 index 0000000000..8d66078848 --- /dev/null +++ b/sw/globals_m.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- m -

+
+ + +
+ + diff --git a/sw/globals_n.html b/sw/globals_n.html new file mode 100644 index 0000000000..b72ed12ff8 --- /dev/null +++ b/sw/globals_n.html @@ -0,0 +1,459 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- n -

+
+ + +
+ + diff --git a/sw/globals_o.html b/sw/globals_o.html new file mode 100644 index 0000000000..70cdc2d171 --- /dev/null +++ b/sw/globals_o.html @@ -0,0 +1,123 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- o -

+
+ + +
+ + diff --git a/sw/globals_p.html b/sw/globals_p.html new file mode 100644 index 0000000000..ba99cd94b0 --- /dev/null +++ b/sw/globals_p.html @@ -0,0 +1,129 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- p -

+
+ + +
+ + diff --git a/sw/globals_r.html b/sw/globals_r.html new file mode 100644 index 0000000000..4143536277 --- /dev/null +++ b/sw/globals_r.html @@ -0,0 +1,189 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- r -

+
+ + +
+ + diff --git a/sw/globals_s.html b/sw/globals_s.html new file mode 100644 index 0000000000..91929a0cbd --- /dev/null +++ b/sw/globals_s.html @@ -0,0 +1,240 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- s -

+
+ + +
+ + diff --git a/sw/globals_t.html b/sw/globals_t.html new file mode 100644 index 0000000000..4fdb43f246 --- /dev/null +++ b/sw/globals_t.html @@ -0,0 +1,175 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- t -

+
+ + +
+ + diff --git a/sw/globals_u.html b/sw/globals_u.html new file mode 100644 index 0000000000..476ed2bad6 --- /dev/null +++ b/sw/globals_u.html @@ -0,0 +1,159 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- u -

+
+ + +
+ + diff --git a/sw/globals_v.html b/sw/globals_v.html new file mode 100644 index 0000000000..86ebfa7481 --- /dev/null +++ b/sw/globals_v.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- v -

+
+ + +
+ + diff --git a/sw/globals_vars.html b/sw/globals_vars.html new file mode 100644 index 0000000000..0f2de75dde --- /dev/null +++ b/sw/globals_vars.html @@ -0,0 +1,128 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the documentation:
+
+ + +
+ + diff --git a/sw/globals_w.html b/sw/globals_w.html new file mode 100644 index 0000000000..8b17563fc9 --- /dev/null +++ b/sw/globals_w.html @@ -0,0 +1,116 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- w -

+
+ + +
+ + diff --git a/sw/globals_x.html b/sw/globals_x.html new file mode 100644 index 0000000000..9d6722bc01 --- /dev/null +++ b/sw/globals_x.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: Globals + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- x -

+
+ + +
+ + diff --git a/sw/hello__world_2main_8c.html b/sw/hello__world_2main_8c.html new file mode 100644 index 0000000000..5cc6facaa9 --- /dev/null +++ b/sw/hello__world_2main_8c.html @@ -0,0 +1,161 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/hello_world/main.c File Reference + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
main.c File Reference
+
+
+ +

Classic 'hello world' demo program. +More...

+
#include <neorv32.h>
+
+ + + + +

+Macros

User configuration
#define BAUD_RATE   19200
 
+ + + +

+Functions

int main ()
 
+

Detailed Description

+

Classic 'hello world' demo program.

+
Author
Stephan Nolting
+

Macro Definition Documentation

+ +

◆ BAUD_RATE

+ +
+
+ + + + +
#define BAUD_RATE   19200
+
+

UART BAUD rate

+ +
+
+

Function Documentation

+ +

◆ main()

+ +
+
+ + + + + + + +
int main (void )
+
+

Main function; prints some fancy stuff via UART.

+
Note
This program requires the UART interface to be synthesized.
+
Returns
0 if execution was successful
+ +
+
+
+ + +
+ + diff --git a/sw/index.html b/sw/index.html new file mode 100644 index 0000000000..5cc7ac2d69 --- /dev/null +++ b/sw/index.html @@ -0,0 +1,100 @@ + + + + + + + +NEORV32 Software Framework Documentation: Main Page + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
NEORV32 Software Framework Documentation Documentation
+
+
+ +
+ + +
+ + diff --git a/sw/jquery.js b/sw/jquery.js new file mode 100644 index 0000000000..1dffb65b58 --- /dev/null +++ b/sw/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/sw/md_README.html b/sw/md_README.html new file mode 100644 index 0000000000..f4c6c37fe0 --- /dev/null +++ b/sw/md_README.html @@ -0,0 +1,336 @@ + + + + + + + +NEORV32 Software Framework Documentation: README + + + + + + + + + + + + + +
+
+ + + + + + + +
+
NEORV32 Software Framework Documentation +
+
The NEORV32 RISC-V Processor
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
README
+
+
+

NEORV32

+

+The NEORV32 RISC-V Processor

+

datasheet (pdf) datasheet (html) userguide (pdf) userguide (html) doxygen

+
    +
  1. Overview
      +
    • Key Features
    • +
    • Project Status
    • +
    +
  2. +
  3. Features
  4. +
  5. FPGA Implementation Results
  6. +
  7. Performance
  8. +
  9. **Getting Started** :rocket:
  10. +
+

+1. Overview

+

neorv32 Overview

+

The NEORV32 Processor is a customizable microcontroller-like system on chip (SoC) built around the NEORV32 RISC-V CPU that is written in platform-independent VHDL. The processor is intended as auxiliary controller in larger SoC designs or as tiny and customized microcontroller that even fits into a Lattice iCE40 UltraPlus low-power & low-density FPGA. The project is intended to work out of the box and targets FPGA / RISC-V beginners as well as advanced users.

+

Special focus is paid on execution safety to provide defined and predictable behavior at any time. For example, the CPU ensures all memory accesses are properly acknowledged and all invalid/malformed instructions are always detected as such. Whenever an unexpected state occurs the application software is informed via precise and resumable hardware exceptions.

+
    +
  • :recycle: Looking for an all-Verilog version? Have a look at neorv32-verilog.
  • +
  • :heavy_check_mark: Continuous integration to check for regressions (including RISC-V ISA compatibility check using RISCOF).
  • +
  • :open_file_folder: Exemplary setups and community projects targeting various FPGA boards and toolchains to get started.
  • +
  • :package: The entire processor is also available as Vivado IP Block.
  • +
  • :kite: Support for FreeRTOS, Zephyr OS and LiteX SoC Builder Framework.
  • +
  • :desktop_computer: Pre-configured Eclipse project for developing and debugging code using an IDE.
  • +
  • :label: The project's change log is available in CHANGELOG.md.
  • +
  • :rocket: Check out the quick links below and the User Guide to get started setting up your NEORV32 processor!
  • +
  • :books: For detailed information see the NEORV32 online documentation.
  • +
  • :interrobang: Want to know more? Check out the project's rationale.
  • +
+

Feel free to open a new issue or start a new discussion if you have questions, comments, ideas, feedback or if something is not working as expected. See how to contribute.

+

+Key Features

+
    +
  • all-in-one package: CPU + SoC + Software Framework & Tooling
  • +
+
    +
  • completely described in behavioral, platform-independent VHDL - no platform-specific primitives, macros, attributes, etc.; an all-Verilog "version" is also available
  • +
+
    +
  • extensive configuration options for adapting the processor to the requirements of the application
  • +
+ +
    +
  • aims to be as small as possible while being as RISC-V-compliant as possible - with a reasonable area-vs-performance trade-off
  • +
+
    +
  • FPGA friendly (e.g. all internal memories can be mapped to block RAM - including the CPU's register file)
  • +
+
    +
  • optimized for high clock frequencies to ease integration / timing closure
  • +
+
    +
  • from zero to _"hello world!"_ - completely open source and documented
  • +
+
    +
  • easy to use even for FPGA / RISC-V starters – intended to work out of the box
  • +
+

+Project Status

+

release commits-since-latest-release

+ + + + + + + + + + + + + + + + + + + +
Task / Subproject Repository CI Status
GitHub pages (docs) neorv32 GitHub Pages
Build documentation neorv32 Documentation
Processor verification neorv32 Processor
RISCOF core verification neorv32-riscof neorv32-riscof
FPGA implementations neorv32-setups Implementation
All-Verilog version neorv32-verilog neorv32-verilog
FreeRTOS port neorv32-freertos neorv32-freertos
Prebuilt GCC toolchains riscv-gcc-prebuilt Prebuilt_Toolchains
+

The processor passes the official RISC-V architecture tests to ensure compatibility with the RISC-V ISA specs., which is checked by the neorv32-riscof repository. It can successfully run any C program (for example from the sw/example folder) including CoreMark and FreeRTOS and can be synthesized for any target technology - tested on Intel, AMD and Lattice FPGAs. The conversion into a plain-Verilog netlist module is automatically checked by the neorv32-verilog repository.

+

+2. Features

+

The NEORV32 Processor provides a full-featured microcontroller-like SoC build around the NEORV32 CPU. By using generics the design is highly configurable and allows a flexible customization to tailor the setup according to your needs. Note that all of the following SoC modules are entirely optional.

+

CPU Core

+
    +
  • RISCV-ARCHID
  • +
  • 32-bit little-endian RISC-V single-core, pipelined/multi-cycle modified Harvard architecture
  • +
  • configurable ISA extensions: \ RV32 [I/E] [M] [A] [C] [B] [U] [X] [Zicsr] [Zicntr] [Zicond] [Zihpm] [Zifencei] [Zfinx] [Zmmul] [Zxcfu] [Smpmp] [Sdext] [Sdtrig]
  • +
  • compatible to subsets of the RISC-V Unprivileged ISA Specification (pdf) and Privileged Architecture Specification (pdf).
  • +
  • machine and user privilege modes
  • +
  • implements all standard RISC-V exceptions and interrupts + 16 fast interrupt request channels as NEORV32-specific extension
  • +
  • custom functions unit (CFU as Zxcfu ISA extension) for custom RISC-V instructions;
  • +
  • intrinsic libraries for CPU extensions that are not yet supported by GCC
  • +
+

Memories

+
    +
  • processor-internal data and instruction memories (DMEM / IMEM) & caches (iCACHE and dCACHE)
  • +
  • pre-installed bootloader (BOOTLDROM) with serial user interface; allows booting application code via UART or from external SPI flash
  • +
+

Timers and Counters

+
    +
  • 64-bit machine timer (MTIME), RISC-V spec. compatible
  • +
  • 32-bit general purpose timer (GPTMR)
  • +
  • watchdog timer (WDT)
  • +
+

Input / Output

+ +

SoC Connectivity

+
    +
  • 32-bit external bus interface - Wishbone b4 compatible (XBUS) with optional cache (XCACHE); wrappers for AXI4-Lite and Avalon-MM host interfaces
  • +
  • stream link interface with independent RX and TX channels - AXI4-Stream compatible (SLINK)
  • +
  • external interrupts controller with up to 32 channels (XIRQ)
  • +
+

Advanced

+
    +
  • true-random number generator (TRNG) based on the neoTRNG
  • +
  • execute-in-place module (XIP) to execute code right out of a SPI flash
  • +
  • custom functions subsystem (CFS) for custom tightly-coupled co-processors, accelerators or interfaces
  • +
  • direct memory access controller (DMA) for CPU-independent data transfers and conversions
  • +
  • cyclic redundancy check unit (CRC) to test data integrity (CRC8/16/32)
  • +
+

Debugging

+
    +
  • on-chip debugger (OCD) accessible via standard JTAG interface
  • +
  • compatible to the "Minimal RISC-V Debug Specification Version 1.0"
  • +
  • compatible with OpenOCD, GDB and Segger Embedded Studio
  • +
  • RISC-V trigger module for hardware-assisted breakpoints
  • +
+

+3. FPGA Implementation Results

+

Implementation results for exemplary CPU configurations generated for an Intel Cyclone IV EP4CE22F17C6 FPGA using Intel Quartus Prime Lite 21.1 (no timing constrains, balanced optimization, f_max from Slow 1200mV 0C Model).

+ + + + + + + + + +
CPU Configuration (version 1.7.8.5) LEs FFs Memory bits DSPs f_max
rv32i_Zicsr 1223 607 1024 0 130 MHz
rv32i_Zicsr_Zicntr 1578 773 1024 0 130 MHz
rv32imc_Zicsr_Zicntr 2338 992 1024 0 130 MHz
+

An incremental list of CPU extensions and processor modules can be found in the Data Sheet: FPGA Implementation Results.

+

+4. Performance

+

The NEORV32 CPU is based on a two-stages pipelined/multi-cycle architecture (fetch and execute). The following table shows the performance results (scores and average CPI) for exemplary CPU configurations (no caches) executing 2000 iterations of the CoreMark CPU benchmark (using plain GCC10 rv32i built-in libraries only!).

+ + + + + + + + + +
CPU Configuration (version 1.5.7.10) CoreMark Score
small (rv32i_Zicsr_Zifencei) 33.89
medium (rv32imc_Zicsr_Zifencei) 62.50
performance (rv32imc_Zicsr_Zifencei + perf. options) 95.23
+

More information regarding the CPU performance can be found in the Data Sheet: CPU Performance. The CPU & SoC provide further "tuning" options to optimize the design for maximum performance, maximum clock speed, minimal area or minimal power consumption: User Guide: Application-Specific Processor Configuration

+

+5. Getting Started

+

This overview provides some quick links to the most important sections of the online Data Sheet and the online User Guide.

+

+:mag: NEORV32 Project - An Introduction

+
    +
  • Rationale - why? how come? what for?
  • +
  • Key Features - what makes it special
  • +
  • Structure - folders, RTL files and compile order
  • +
  • Metrics - FPGA implementation and performance evaluation
  • +
+

+:desktop_computer: NEORV32 Processor - The SoC

+ +

+:abacus: NEORV32 CPU - The Core

+ +

+:floppy_disk: Software Framework - The Software Ecosystem

+ +

+:rocket: User Guide - Getting Started!

+ +

+:copyright: Legal

+

license DOI

+
    +
  • Overview - license, disclaimer, limitation of liability for external links, proprietary notice, etc.
  • +
  • Citing - citing information
  • +
+

This is an open-source project that is free of charge. Use this project in any way you like (as long as it complies to the permissive license). Please cite it appropriately. :+1:

+

+:email: Contact

+

Please use GitHub Issues and Discussions for all kind of requests, issues, ideas, questions, etc. If you would like to contact me directly check out the About section.

+
+

**:heart: A big shout-out to the community and all the contributors! This project would not be where it is without them.**

+
+
+ + +
+ + diff --git a/sw/menu.js b/sw/menu.js new file mode 100644 index 0000000000..0fd1e99013 --- /dev/null +++ b/sw/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/sw/menudata.js b/sw/menudata.js new file mode 100644 index 0000000000..528d7cc667 --- /dev/null +++ b/sw/menudata.js @@ -0,0 +1,149 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Data Structures",url:"annotated.html",children:[ +{text:"Data Structures",url:"annotated.html"}, +{text:"Data Structure Index",url:"classes.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"m",url:"functions.html#index_m"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"w",url:"functions.html#index_w"}, +{text:"y",url:"functions.html#index_y"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"w",url:"functions_vars.html#index_w"}, +{text:"y",url:"functions_vars.html#index_y"}]}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"_",url:"globals.html#index__5F"}, +{text:"a",url:"globals_a.html#index_a"}, +{text:"b",url:"globals_b.html#index_b"}, +{text:"c",url:"globals_c.html#index_c"}, +{text:"d",url:"globals_d.html#index_d"}, +{text:"e",url:"globals_e.html#index_e"}, +{text:"f",url:"globals_f.html#index_f"}, +{text:"g",url:"globals_g.html#index_g"}, +{text:"h",url:"globals_h.html#index_h"}, +{text:"i",url:"globals_i.html#index_i"}, +{text:"k",url:"globals_k.html#index_k"}, +{text:"m",url:"globals_m.html#index_m"}, +{text:"n",url:"globals_n.html#index_n"}, +{text:"o",url:"globals_o.html#index_o"}, +{text:"p",url:"globals_p.html#index_p"}, +{text:"r",url:"globals_r.html#index_r"}, +{text:"s",url:"globals_s.html#index_s"}, +{text:"t",url:"globals_t.html#index_t"}, +{text:"u",url:"globals_u.html#index_u"}, +{text:"v",url:"globals_v.html#index_v"}, +{text:"w",url:"globals_w.html#index_w"}, +{text:"x",url:"globals_x.html#index_x"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"_",url:"globals_func.html#index__5F"}, +{text:"a",url:"globals_func_a.html#index_a"}, +{text:"b",url:"globals_func_b.html#index_b"}, +{text:"c",url:"globals_func_c.html#index_c"}, +{text:"d",url:"globals_func_d.html#index_d"}, +{text:"g",url:"globals_func_g.html#index_g"}, +{text:"h",url:"globals_func_h.html#index_h"}, +{text:"m",url:"globals_func_m.html#index_m"}, +{text:"n",url:"globals_func_n.html#index_n"}, +{text:"p",url:"globals_func_p.html#index_p"}, +{text:"r",url:"globals_func_r.html#index_r"}, +{text:"s",url:"globals_func_s.html#index_s"}, +{text:"t",url:"globals_func_t.html#index_t"}, +{text:"u",url:"globals_func_u.html#index_u"}, +{text:"v",url:"globals_func_v.html#index_v"}, +{text:"w",url:"globals_func_w.html#index_w"}, +{text:"x",url:"globals_func_x.html#index_x"}]}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Enumerations",url:"globals_enum.html",children:[ +{text:"e",url:"globals_enum.html#index_e"}, +{text:"n",url:"globals_enum.html#index_n"}, +{text:"s",url:"globals_enum.html#index_s"}]}, +{text:"Enumerator",url:"globals_eval.html",children:[ +{text:"c",url:"globals_eval.html#index_c"}, +{text:"d",url:"globals_eval_d.html#index_d"}, +{text:"e",url:"globals_eval_e.html#index_e"}, +{text:"f",url:"globals_eval_f.html#index_f"}, +{text:"g",url:"globals_eval_g.html#index_g"}, +{text:"h",url:"globals_eval_h.html#index_h"}, +{text:"n",url:"globals_eval_n.html#index_n"}, +{text:"o",url:"globals_eval_o.html#index_o"}, +{text:"p",url:"globals_eval_p.html#index_p"}, +{text:"r",url:"globals_eval_r.html#index_r"}, +{text:"s",url:"globals_eval_s.html#index_s"}, +{text:"t",url:"globals_eval_t.html#index_t"}, +{text:"u",url:"globals_eval_u.html#index_u"}, +{text:"w",url:"globals_eval_w.html#index_w"}, +{text:"x",url:"globals_eval_x.html#index_x"}]}, +{text:"Macros",url:"globals_defs.html",children:[ +{text:"a",url:"globals_defs.html#index_a"}, +{text:"b",url:"globals_defs_b.html#index_b"}, +{text:"c",url:"globals_defs_c.html#index_c"}, +{text:"d",url:"globals_defs_d.html#index_d"}, +{text:"e",url:"globals_defs_e.html#index_e"}, +{text:"f",url:"globals_defs_f.html#index_f"}, +{text:"g",url:"globals_defs_g.html#index_g"}, +{text:"i",url:"globals_defs_i.html#index_i"}, +{text:"m",url:"globals_defs_m.html#index_m"}, +{text:"n",url:"globals_defs_n.html#index_n"}, +{text:"o",url:"globals_defs_o.html#index_o"}, +{text:"p",url:"globals_defs_p.html#index_p"}, +{text:"r",url:"globals_defs_r.html#index_r"}, +{text:"s",url:"globals_defs_s.html#index_s"}, +{text:"t",url:"globals_defs_t.html#index_t"}, +{text:"u",url:"globals_defs_u.html#index_u"}, +{text:"w",url:"globals_defs_w.html#index_w"}, +{text:"x",url:"globals_defs_x.html#index_x"}]}]}]}]} diff --git a/sw/minus.svg b/sw/minus.svg new file mode 100644 index 0000000000..f70d0c1a18 --- /dev/null +++ b/sw/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/sw/minusd.svg b/sw/minusd.svg new file mode 100644 index 0000000000..5f8e879628 --- /dev/null +++ b/sw/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/sw/nav_f.png b/sw/nav_f.png new file mode 100644 index 0000000000..72a58a529e Binary files /dev/null and b/sw/nav_f.png differ diff --git a/sw/nav_fd.png b/sw/nav_fd.png new file mode 100644 index 0000000000..032fbdd4c5 Binary files /dev/null and b/sw/nav_fd.png differ diff --git a/sw/nav_g.png b/sw/nav_g.png new file mode 100644 index 0000000000..2093a237a9 Binary files /dev/null and b/sw/nav_g.png differ diff --git a/sw/nav_h.png b/sw/nav_h.png new file mode 100644 index 0000000000..33389b101d Binary files /dev/null and b/sw/nav_h.png differ diff --git a/sw/nav_hd.png b/sw/nav_hd.png new file mode 100644 index 0000000000..de80f18ad6 Binary files /dev/null and b/sw/nav_hd.png differ diff --git a/sw/navtree.css b/sw/navtree.css new file mode 100644 index 0000000000..69211d4a78 --- /dev/null +++ b/sw/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/sw/neorv32_8h.html b/sw/neorv32_8h.html new file mode 100644 index 0000000000..01455fd245 --- /dev/null +++ b/sw/neorv32_8h.html @@ -0,0 +1,2143 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32.h File Reference
    +
    +
    + +

    Main NEORV32 core library / driver / HAL include file. +More...

    +
    #include <stdint.h>
    +#include <inttypes.h>
    +#include <unistd.h>
    +#include <stdlib.h>
    +#include "neorv32_intrinsics.h"
    +#include "neorv32_aux.h"
    +#include "neorv32_legacy.h"
    +#include "neorv32_cpu.h"
    +#include "neorv32_cpu_amo.h"
    +#include "neorv32_cpu_csr.h"
    +#include "neorv32_cpu_cfu.h"
    +#include "neorv32_rte.h"
    +#include "neorv32_cfs.h"
    +#include "neorv32_crc.h"
    +#include "neorv32_dma.h"
    +#include "neorv32_gpio.h"
    +#include "neorv32_gptmr.h"
    +#include "neorv32_mtime.h"
    +#include "neorv32_neoled.h"
    +#include "neorv32_onewire.h"
    +#include "neorv32_pwm.h"
    +#include "neorv32_sdi.h"
    +#include "neorv32_slink.h"
    +#include "neorv32_spi.h"
    +#include "neorv32_sysinfo.h"
    +#include "neorv32_trng.h"
    +#include "neorv32_twi.h"
    +#include "neorv32_uart.h"
    +#include "neorv32_wdt.h"
    +#include "neorv32_xip.h"
    +#include "neorv32_xirq.h"
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Structures

    union  subwords64_t
     
    union  subwords32_t
     
    union  subwords16_t
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    Main Address Space Sections
    #define XIP_MEM_BASE_ADDRESS   (0xE0000000U)
     
    #define BOOTLOADER_BASE_ADDRESS   (0xFFFFC000U)
     
    #define IO_BASE_ADDRESS   (0xFFFFE000U)
     
    IO Address Space Map - Peripheral/IO Devices
    #define NEORV32_CFS_BASE   (0xFFFFEB00U)
     
    #define NEORV32_SLINK_BASE   (0xFFFFEC00U)
     
    #define NEORV32_DMA_BASE   (0xFFFFED00U)
     
    #define NEORV32_CRC_BASE   (0xFFFFEE00U)
     
    #define NEORV32_XIP_BASE   (0xFFFFEF00U)
     
    #define NEORV32_PWM_BASE   (0xFFFFF000U)
     
    #define NEORV32_GPTMR_BASE   (0xFFFFF100U)
     
    #define NEORV32_ONEWIRE_BASE   (0xFFFFF200U)
     
    #define NEORV32_XIRQ_BASE   (0xFFFFF300U)
     
    #define NEORV32_MTIME_BASE   (0xFFFFF400U)
     
    #define NEORV32_UART0_BASE   (0xFFFFF500U)
     
    #define NEORV32_UART1_BASE   (0xFFFFF600U)
     
    #define NEORV32_SDI_BASE   (0xFFFFF700U)
     
    #define NEORV32_SPI_BASE   (0xFFFFF800U)
     
    #define NEORV32_TWI_BASE   (0xFFFFF900U)
     
    #define NEORV32_TRNG_BASE   (0xFFFFFA00U)
     
    #define NEORV32_WDT_BASE   (0xFFFFFB00U)
     
    #define NEORV32_GPIO_BASE   (0xFFFFFC00U)
     
    #define NEORV32_NEOLED_BASE   (0xFFFFFD00U)
     
    #define NEORV32_SYSINFO_BASE   (0xFFFFFE00U)
     
    #define NEORV32_DM_BASE   (0xFFFFFF00U)
     
    True-Random Number Generator (TRNG)
    #define TRNG_FIRQ_ENABLE   CSR_MIE_FIRQ0E
     
    #define TRNG_FIRQ_PENDING   CSR_MIP_FIRQ0P
     
    #define TRNG_RTE_ID   RTE_TRAP_FIRQ_0
     
    #define TRNG_TRAP_CODE   TRAP_CODE_FIRQ_0
     
    Custom Functions Subsystem (CFS)
    #define CFS_FIRQ_ENABLE   CSR_MIE_FIRQ1E
     
    #define CFS_FIRQ_PENDING   CSR_MIP_FIRQ1P
     
    #define CFS_RTE_ID   RTE_TRAP_FIRQ_1
     
    #define CFS_TRAP_CODE   TRAP_CODE_FIRQ_1
     
    Primary Universal Asynchronous Receiver/Transmitter (UART0)
    #define UART0_RX_FIRQ_ENABLE   CSR_MIE_FIRQ2E
     
    #define UART0_RX_FIRQ_PENDING   CSR_MIP_FIRQ2P
     
    #define UART0_RX_RTE_ID   RTE_TRAP_FIRQ_2
     
    #define UART0_RX_TRAP_CODE   TRAP_CODE_FIRQ_2
     
    #define UART0_TX_FIRQ_ENABLE   CSR_MIE_FIRQ3E
     
    #define UART0_TX_FIRQ_PENDING   CSR_MIP_FIRQ3P
     
    #define UART0_TX_RTE_ID   RTE_TRAP_FIRQ_3
     
    #define UART0_TX_TRAP_CODE   TRAP_CODE_FIRQ_3
     
    Secondary Universal Asynchronous Receiver/Transmitter (UART1)
    #define UART1_RX_FIRQ_ENABLE   CSR_MIE_FIRQ4E
     
    #define UART1_RX_FIRQ_PENDING   CSR_MIP_FIRQ4P
     
    #define UART1_RX_RTE_ID   RTE_TRAP_FIRQ_4
     
    #define UART1_RX_TRAP_CODE   TRAP_CODE_FIRQ_4
     
    #define UART1_TX_FIRQ_ENABLE   CSR_MIE_FIRQ5E
     
    #define UART1_TX_FIRQ_PENDING   CSR_MIP_FIRQ5P
     
    #define UART1_TX_RTE_ID   RTE_TRAP_FIRQ_5
     
    #define UART1_TX_TRAP_CODE   TRAP_CODE_FIRQ_5
     
    Serial Peripheral Interface (SPI)
    #define SPI_FIRQ_ENABLE   CSR_MIE_FIRQ6E
     
    #define SPI_FIRQ_PENDING   CSR_MIP_FIRQ6P
     
    #define SPI_RTE_ID   RTE_TRAP_FIRQ_6
     
    #define SPI_TRAP_CODE   TRAP_CODE_FIRQ_6
     
    Two-Wire Interface (TWI)
    #define TWI_FIRQ_ENABLE   CSR_MIE_FIRQ7E
     
    #define TWI_FIRQ_PENDING   CSR_MIP_FIRQ7P
     
    #define TWI_RTE_ID   RTE_TRAP_FIRQ_7
     
    #define TWI_TRAP_CODE   TRAP_CODE_FIRQ_7
     
    External Interrupt Controller (XIRQ)
    #define XIRQ_FIRQ_ENABLE   CSR_MIE_FIRQ8E
     
    #define XIRQ_FIRQ_PENDING   CSR_MIP_FIRQ8P
     
    #define XIRQ_RTE_ID   RTE_TRAP_FIRQ_8
     
    #define XIRQ_TRAP_CODE   TRAP_CODE_FIRQ_8
     
    Smart LED Controller (NEOLED)
    #define NEOLED_FIRQ_ENABLE   CSR_MIE_FIRQ9E
     
    #define NEOLED_FIRQ_PENDING   CSR_MIP_FIRQ9P
     
    #define NEOLED_RTE_ID   RTE_TRAP_FIRQ_9
     
    #define NEOLED_TRAP_CODE   TRAP_CODE_FIRQ_9
     
    Direct Memory Access Controller (DMA)
    #define DMA_FIRQ_ENABLE   CSR_MIE_FIRQ10E
     
    #define DMA_FIRQ_PENDING   CSR_MIP_FIRQ10P
     
    #define DMA_RTE_ID   RTE_TRAP_FIRQ_10
     
    #define DMA_TRAP_CODE   TRAP_CODE_FIRQ_10
     
    Serial Data Interface (SDI)
    #define SDI_FIRQ_ENABLE   CSR_MIE_FIRQ11E
     
    #define SDI_FIRQ_PENDING   CSR_MIP_FIRQ11P
     
    #define SDI_RTE_ID   RTE_TRAP_FIRQ_11
     
    #define SDI_TRAP_CODE   TRAP_CODE_FIRQ_11
     
    General Purpose Timer (GPTMR)
    #define GPTMR_FIRQ_ENABLE   CSR_MIE_FIRQ12E
     
    #define GPTMR_FIRQ_PENDING   CSR_MIP_FIRQ12P
     
    #define GPTMR_RTE_ID   RTE_TRAP_FIRQ_12
     
    #define GPTMR_TRAP_CODE   TRAP_CODE_FIRQ_12
     
    1-Wire Interface Controller (ONEWIRE)
    #define ONEWIRE_FIRQ_ENABLE   CSR_MIE_FIRQ13E
     
    #define ONEWIRE_FIRQ_PENDING   CSR_MIP_FIRQ13P
     
    #define ONEWIRE_RTE_ID   RTE_TRAP_FIRQ_13
     
    #define ONEWIRE_TRAP_CODE   TRAP_CODE_FIRQ_13
     
    Stream Link Interface (SLINK)
    #define SLINK_RX_FIRQ_ENABLE   CSR_MIE_FIRQ14E
     
    #define SLINK_RX_FIRQ_PENDING   CSR_MIP_FIRQ14P
     
    #define SLINK_RX_RTE_ID   RTE_TRAP_FIRQ_14
     
    #define SLINK_RX_TRAP_CODE   TRAP_CODE_FIRQ_14
     
    #define SLINK_TX_FIRQ_ENABLE   CSR_MIE_FIRQ15E
     
    #define SLINK_TX_FIRQ_PENDING   CSR_MIP_FIRQ15P
     
    #define SLINK_TX_RTE_ID   RTE_TRAP_FIRQ_15
     
    #define SLINK_TX_TRAP_CODE   TRAP_CODE_FIRQ_15
     
    + + + + +

    +Enumerations

    enum  NEORV32_CLOCK_PRSC_enum {
    +  CLK_PRSC_2 = 0 +, CLK_PRSC_4 = 1 +, CLK_PRSC_8 = 2 +, CLK_PRSC_64 = 3 +,
    +  CLK_PRSC_128 = 4 +, CLK_PRSC_1024 = 5 +, CLK_PRSC_2048 = 6 +, CLK_PRSC_4096 = 7 +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Export linker script symbols

    #define neorv32_heap_begin_c   ((uint32_t)&__heap_start[0])
     
    #define neorv32_heap_end_c   ((uint32_t)&__heap_end[0])
     
    #define neorv32_heap_size_c   ((uint32_t)&__crt0_max_heap[0])
     
    #define neorv32_imem_begin_c   ((uint32_t)&__crt0_imem_begin[0])
     
    #define neorv32_dmem_begin_c   ((uint32_t)&__crt0_dmem_begin[0])
     
    #define neorv32_stack_end_c   ((uint32_t)&__crt0_stack_end[0])
     
    #define neorv32_bss_start_c   ((uint32_t)&__crt0_bss_start[0])
     
    #define neorv32_bss_end_c   ((uint32_t)&__crt0_bss_end[0])
     
    #define neorv32_data_start_c   ((uint32_t)&__crt0_copy_data_dst_begin[0])
     
    #define neorv32_data_end_c   ((uint32_t)&__crt0_copy_data_dst_end[0])
     
    char __heap_start []
     
    char __heap_end []
     
    char __crt0_max_heap []
     
    char __crt0_imem_begin []
     
    char __crt0_dmem_begin []
     
    char __crt0_stack_end []
     
    char __crt0_bss_start []
     
    char __crt0_bss_end []
     
    char __crt0_copy_data_dst_begin []
     
    char __crt0_copy_data_dst_end []
     
    +

    Detailed Description

    +

    Main NEORV32 core library / driver / HAL include file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ BOOTLOADER_BASE_ADDRESS

    + +
    +
    + + + + +
    #define BOOTLOADER_BASE_ADDRESS   (0xFFFFC000U)
    +
    +

    bootloader memory base address

    + +
    +
    + +

    ◆ CFS_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define CFS_FIRQ_ENABLE   CSR_MIE_FIRQ1E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ CFS_FIRQ_PENDING

    + +
    +
    + + + + +
    #define CFS_FIRQ_PENDING   CSR_MIP_FIRQ1P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ CFS_RTE_ID

    + +
    +
    + + + + +
    #define CFS_RTE_ID   RTE_TRAP_FIRQ_1
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ CFS_TRAP_CODE

    + +
    +
    + + + + +
    #define CFS_TRAP_CODE   TRAP_CODE_FIRQ_1
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ DMA_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define DMA_FIRQ_ENABLE   CSR_MIE_FIRQ10E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ DMA_FIRQ_PENDING

    + +
    +
    + + + + +
    #define DMA_FIRQ_PENDING   CSR_MIP_FIRQ10P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ DMA_RTE_ID

    + +
    +
    + + + + +
    #define DMA_RTE_ID   RTE_TRAP_FIRQ_10
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ DMA_TRAP_CODE

    + +
    +
    + + + + +
    #define DMA_TRAP_CODE   TRAP_CODE_FIRQ_10
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ GPTMR_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define GPTMR_FIRQ_ENABLE   CSR_MIE_FIRQ12E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ GPTMR_FIRQ_PENDING

    + +
    +
    + + + + +
    #define GPTMR_FIRQ_PENDING   CSR_MIP_FIRQ12P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ GPTMR_RTE_ID

    + +
    +
    + + + + +
    #define GPTMR_RTE_ID   RTE_TRAP_FIRQ_12
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ GPTMR_TRAP_CODE

    + +
    +
    + + + + +
    #define GPTMR_TRAP_CODE   TRAP_CODE_FIRQ_12
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ IO_BASE_ADDRESS

    + +
    +
    + + + + +
    #define IO_BASE_ADDRESS   (0xFFFFE000U)
    +
    +

    peripheral/IO devices memory base address

    + +
    +
    + +

    ◆ NEOLED_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define NEOLED_FIRQ_ENABLE   CSR_MIE_FIRQ9E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ NEOLED_FIRQ_PENDING

    + +
    +
    + + + + +
    #define NEOLED_FIRQ_PENDING   CSR_MIP_FIRQ9P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ NEOLED_RTE_ID

    + +
    +
    + + + + +
    #define NEOLED_RTE_ID   RTE_TRAP_FIRQ_9
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ NEOLED_TRAP_CODE

    + +
    +
    + + + + +
    #define NEOLED_TRAP_CODE   TRAP_CODE_FIRQ_9
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ neorv32_bss_end_c

    + +
    +
    + + + + +
    #define neorv32_bss_end_c   ((uint32_t)&__crt0_bss_end[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ neorv32_bss_start_c

    + +
    +
    + + + + +
    #define neorv32_bss_start_c   ((uint32_t)&__crt0_bss_start[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ NEORV32_CFS_BASE

    + +
    +
    + + + + +
    #define NEORV32_CFS_BASE   (0xFFFFEB00U)
    +
    +

    Custom Functions Subsystem (CFS)

    + +
    +
    + +

    ◆ NEORV32_CRC_BASE

    + +
    +
    + + + + +
    #define NEORV32_CRC_BASE   (0xFFFFEE00U)
    +
    +

    Cyclic Redundancy Check Unit (DMA)

    + +
    +
    + +

    ◆ neorv32_data_end_c

    + +
    +
    + + + + +
    #define neorv32_data_end_c   ((uint32_t)&__crt0_copy_data_dst_end[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ neorv32_data_start_c

    + +
    +
    + + + + +
    #define neorv32_data_start_c   ((uint32_t)&__crt0_copy_data_dst_begin[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ NEORV32_DM_BASE

    + +
    +
    + + + + +
    #define NEORV32_DM_BASE   (0xFFFFFF00U)
    +
    +

    On-Chip Debugger - Debug Module (OCD)

    + +
    +
    + +

    ◆ NEORV32_DMA_BASE

    + +
    +
    + + + + +
    #define NEORV32_DMA_BASE   (0xFFFFED00U)
    +
    +

    Direct Memory Access Controller (DMA)

    + +
    +
    + +

    ◆ neorv32_dmem_begin_c

    + +
    +
    + + + + +
    #define neorv32_dmem_begin_c   ((uint32_t)&__crt0_dmem_begin[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ NEORV32_GPIO_BASE

    + +
    +
    + + + + +
    #define NEORV32_GPIO_BASE   (0xFFFFFC00U)
    +
    +

    General Purpose Input/Output Port Controller (GPIO)

    + +
    +
    + +

    ◆ NEORV32_GPTMR_BASE

    + +
    +
    + + + + +
    #define NEORV32_GPTMR_BASE   (0xFFFFF100U)
    +
    +

    General Purpose Timer (GPTMR)

    + +
    +
    + +

    ◆ neorv32_heap_begin_c

    + +
    +
    + + + + +
    #define neorv32_heap_begin_c   ((uint32_t)&__heap_start[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ neorv32_heap_end_c

    + +
    +
    + + + + +
    #define neorv32_heap_end_c   ((uint32_t)&__heap_end[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ neorv32_heap_size_c

    + +
    +
    + + + + +
    #define neorv32_heap_size_c   ((uint32_t)&__crt0_max_heap[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ neorv32_imem_begin_c

    + +
    +
    + + + + +
    #define neorv32_imem_begin_c   ((uint32_t)&__crt0_imem_begin[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ NEORV32_MTIME_BASE

    + +
    +
    + + + + +
    #define NEORV32_MTIME_BASE   (0xFFFFF400U)
    +
    +

    Machine System Timer (MTIME)

    + +
    +
    + +

    ◆ NEORV32_NEOLED_BASE

    + +
    +
    + + + + +
    #define NEORV32_NEOLED_BASE   (0xFFFFFD00U)
    +
    +

    Smart LED Hardware Interface (NEOLED)

    + +
    +
    + +

    ◆ NEORV32_ONEWIRE_BASE

    + +
    +
    + + + + +
    #define NEORV32_ONEWIRE_BASE   (0xFFFFF200U)
    +
    +

    1-Wire Interface Controller (ONEWIRE)

    + +
    +
    + +

    ◆ NEORV32_PWM_BASE

    + +
    +
    + + + + +
    #define NEORV32_PWM_BASE   (0xFFFFF000U)
    +
    +

    Pulse Width Modulation Controller (PWM)

    + +
    +
    + +

    ◆ NEORV32_SDI_BASE

    + +
    +
    + + + + +
    #define NEORV32_SDI_BASE   (0xFFFFF700U)
    +
    +

    Serial Data Interface (SDI)

    + +
    +
    + +

    ◆ NEORV32_SLINK_BASE

    + +
    +
    + + + + +
    #define NEORV32_SLINK_BASE   (0xFFFFEC00U)
    +
    +

    Stream Link Interface (SLINK)

    + +
    +
    + +

    ◆ NEORV32_SPI_BASE

    + +
    +
    + + + + +
    #define NEORV32_SPI_BASE   (0xFFFFF800U)
    +
    +

    Serial Peripheral Interface Controller (SPI)

    + +
    +
    + +

    ◆ neorv32_stack_end_c

    + +
    +
    + + + + +
    #define neorv32_stack_end_c   ((uint32_t)&__crt0_stack_end[0])
    +
    +

    heap start address

    + +
    +
    + +

    ◆ NEORV32_SYSINFO_BASE

    + +
    +
    + + + + +
    #define NEORV32_SYSINFO_BASE   (0xFFFFFE00U)
    +
    +

    System Information Memory (SYSINFO)

    + +
    +
    + +

    ◆ NEORV32_TRNG_BASE

    + +
    +
    + + + + +
    #define NEORV32_TRNG_BASE   (0xFFFFFA00U)
    +
    +

    True Random Number Generator (TRNG)

    + +
    +
    + +

    ◆ NEORV32_TWI_BASE

    + +
    +
    + + + + +
    #define NEORV32_TWI_BASE   (0xFFFFF900U)
    +
    +

    Two-Wire Interface Controller (TWI)

    + +
    +
    + +

    ◆ NEORV32_UART0_BASE

    + +
    +
    + + + + +
    #define NEORV32_UART0_BASE   (0xFFFFF500U)
    +
    +

    Primary Universal Asynchronous Receiver and Transmitter (UART0)

    + +
    +
    + +

    ◆ NEORV32_UART1_BASE

    + +
    +
    + + + + +
    #define NEORV32_UART1_BASE   (0xFFFFF600U)
    +
    +

    Secondary Universal Asynchronous Receiver and Transmitter (UART1)

    + +
    +
    + +

    ◆ NEORV32_WDT_BASE

    + +
    +
    + + + + +
    #define NEORV32_WDT_BASE   (0xFFFFFB00U)
    +
    +

    Watchdog Timer (WDT)

    + +
    +
    + +

    ◆ NEORV32_XIP_BASE

    + +
    +
    + + + + +
    #define NEORV32_XIP_BASE   (0xFFFFEF00U)
    +
    +

    Execute In Place Module (XIP)

    + +
    +
    + +

    ◆ NEORV32_XIRQ_BASE

    + +
    +
    + + + + +
    #define NEORV32_XIRQ_BASE   (0xFFFFF300U)
    +
    +

    External Interrupt Controller (XIRQ)

    + +
    +
    + +

    ◆ ONEWIRE_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define ONEWIRE_FIRQ_ENABLE   CSR_MIE_FIRQ13E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ ONEWIRE_FIRQ_PENDING

    + +
    +
    + + + + +
    #define ONEWIRE_FIRQ_PENDING   CSR_MIP_FIRQ13P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ ONEWIRE_RTE_ID

    + +
    +
    + + + + +
    #define ONEWIRE_RTE_ID   RTE_TRAP_FIRQ_13
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ ONEWIRE_TRAP_CODE

    + +
    +
    + + + + +
    #define ONEWIRE_TRAP_CODE   TRAP_CODE_FIRQ_13
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ SDI_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define SDI_FIRQ_ENABLE   CSR_MIE_FIRQ11E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ SDI_FIRQ_PENDING

    + +
    +
    + + + + +
    #define SDI_FIRQ_PENDING   CSR_MIP_FIRQ11P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ SDI_RTE_ID

    + +
    +
    + + + + +
    #define SDI_RTE_ID   RTE_TRAP_FIRQ_11
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ SDI_TRAP_CODE

    + +
    +
    + + + + +
    #define SDI_TRAP_CODE   TRAP_CODE_FIRQ_11
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ SLINK_RX_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define SLINK_RX_FIRQ_ENABLE   CSR_MIE_FIRQ14E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ SLINK_RX_FIRQ_PENDING

    + +
    +
    + + + + +
    #define SLINK_RX_FIRQ_PENDING   CSR_MIP_FIRQ14P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ SLINK_RX_RTE_ID

    + +
    +
    + + + + +
    #define SLINK_RX_RTE_ID   RTE_TRAP_FIRQ_14
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ SLINK_RX_TRAP_CODE

    + +
    +
    + + + + +
    #define SLINK_RX_TRAP_CODE   TRAP_CODE_FIRQ_14
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ SLINK_TX_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define SLINK_TX_FIRQ_ENABLE   CSR_MIE_FIRQ15E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ SLINK_TX_FIRQ_PENDING

    + +
    +
    + + + + +
    #define SLINK_TX_FIRQ_PENDING   CSR_MIP_FIRQ15P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ SLINK_TX_RTE_ID

    + +
    +
    + + + + +
    #define SLINK_TX_RTE_ID   RTE_TRAP_FIRQ_15
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ SLINK_TX_TRAP_CODE

    + +
    +
    + + + + +
    #define SLINK_TX_TRAP_CODE   TRAP_CODE_FIRQ_15
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ SPI_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define SPI_FIRQ_ENABLE   CSR_MIE_FIRQ6E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ SPI_FIRQ_PENDING

    + +
    +
    + + + + +
    #define SPI_FIRQ_PENDING   CSR_MIP_FIRQ6P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ SPI_RTE_ID

    + +
    +
    + + + + +
    #define SPI_RTE_ID   RTE_TRAP_FIRQ_6
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ SPI_TRAP_CODE

    + +
    +
    + + + + +
    #define SPI_TRAP_CODE   TRAP_CODE_FIRQ_6
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ TRNG_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define TRNG_FIRQ_ENABLE   CSR_MIE_FIRQ0E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ TRNG_FIRQ_PENDING

    + +
    +
    + + + + +
    #define TRNG_FIRQ_PENDING   CSR_MIP_FIRQ0P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ TRNG_RTE_ID

    + +
    +
    + + + + +
    #define TRNG_RTE_ID   RTE_TRAP_FIRQ_0
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ TRNG_TRAP_CODE

    + +
    +
    + + + + +
    #define TRNG_TRAP_CODE   TRAP_CODE_FIRQ_0
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ TWI_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define TWI_FIRQ_ENABLE   CSR_MIE_FIRQ7E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ TWI_FIRQ_PENDING

    + +
    +
    + + + + +
    #define TWI_FIRQ_PENDING   CSR_MIP_FIRQ7P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ TWI_RTE_ID

    + +
    +
    + + + + +
    #define TWI_RTE_ID   RTE_TRAP_FIRQ_7
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ TWI_TRAP_CODE

    + +
    +
    + + + + +
    #define TWI_TRAP_CODE   TRAP_CODE_FIRQ_7
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ UART0_RX_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define UART0_RX_FIRQ_ENABLE   CSR_MIE_FIRQ2E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ UART0_RX_FIRQ_PENDING

    + +
    +
    + + + + +
    #define UART0_RX_FIRQ_PENDING   CSR_MIP_FIRQ2P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ UART0_RX_RTE_ID

    + +
    +
    + + + + +
    #define UART0_RX_RTE_ID   RTE_TRAP_FIRQ_2
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ UART0_RX_TRAP_CODE

    + +
    +
    + + + + +
    #define UART0_RX_TRAP_CODE   TRAP_CODE_FIRQ_2
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ UART0_TX_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define UART0_TX_FIRQ_ENABLE   CSR_MIE_FIRQ3E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ UART0_TX_FIRQ_PENDING

    + +
    +
    + + + + +
    #define UART0_TX_FIRQ_PENDING   CSR_MIP_FIRQ3P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ UART0_TX_RTE_ID

    + +
    +
    + + + + +
    #define UART0_TX_RTE_ID   RTE_TRAP_FIRQ_3
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ UART0_TX_TRAP_CODE

    + +
    +
    + + + + +
    #define UART0_TX_TRAP_CODE   TRAP_CODE_FIRQ_3
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ UART1_RX_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define UART1_RX_FIRQ_ENABLE   CSR_MIE_FIRQ4E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ UART1_RX_FIRQ_PENDING

    + +
    +
    + + + + +
    #define UART1_RX_FIRQ_PENDING   CSR_MIP_FIRQ4P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ UART1_RX_RTE_ID

    + +
    +
    + + + + +
    #define UART1_RX_RTE_ID   RTE_TRAP_FIRQ_4
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ UART1_RX_TRAP_CODE

    + +
    +
    + + + + +
    #define UART1_RX_TRAP_CODE   TRAP_CODE_FIRQ_4
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ UART1_TX_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define UART1_TX_FIRQ_ENABLE   CSR_MIE_FIRQ5E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ UART1_TX_FIRQ_PENDING

    + +
    +
    + + + + +
    #define UART1_TX_FIRQ_PENDING   CSR_MIP_FIRQ5P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ UART1_TX_RTE_ID

    + +
    +
    + + + + +
    #define UART1_TX_RTE_ID   RTE_TRAP_FIRQ_5
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ UART1_TX_TRAP_CODE

    + +
    +
    + + + + +
    #define UART1_TX_TRAP_CODE   TRAP_CODE_FIRQ_5
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    + +

    ◆ XIP_MEM_BASE_ADDRESS

    + +
    +
    + + + + +
    #define XIP_MEM_BASE_ADDRESS   (0xE0000000U)
    +
    +

    XIP-mapped memory base address

    + +
    +
    + +

    ◆ XIRQ_FIRQ_ENABLE

    + +
    +
    + + + + +
    #define XIRQ_FIRQ_ENABLE   CSR_MIE_FIRQ8E
    +
    +

    MIE CSR bit (NEORV32_CSR_MIE_enum)

    + +
    +
    + +

    ◆ XIRQ_FIRQ_PENDING

    + +
    +
    + + + + +
    #define XIRQ_FIRQ_PENDING   CSR_MIP_FIRQ8P
    +
    +

    MIP CSR bit (NEORV32_CSR_MIP_enum)

    + +
    +
    + +

    ◆ XIRQ_RTE_ID

    + +
    +
    + + + + +
    #define XIRQ_RTE_ID   RTE_TRAP_FIRQ_8
    +
    +

    RTE entry code (NEORV32_RTE_TRAP_enum)

    + +
    +
    + +

    ◆ XIRQ_TRAP_CODE

    + +
    +
    + + + + +
    #define XIRQ_TRAP_CODE   TRAP_CODE_FIRQ_8
    +
    +

    MCAUSE CSR trap code (NEORV32_EXCEPTION_CODES_enum)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_CLOCK_PRSC_enum

    + +
    +
    + + + + +
    enum NEORV32_CLOCK_PRSC_enum
    +
    +

    Processor clock prescaler select (relative to processor's main clock)

    + + + + + + + + + +
    Enumerator
    CLK_PRSC_2 

    CPU_CLK / 2

    +
    CLK_PRSC_4 

    CPU_CLK / 4

    +
    CLK_PRSC_8 

    CPU_CLK / 8

    +
    CLK_PRSC_64 

    CPU_CLK / 64

    +
    CLK_PRSC_128 

    CPU_CLK / 128

    +
    CLK_PRSC_1024 

    CPU_CLK / 1024

    +
    CLK_PRSC_2048 

    CPU_CLK / 2048

    +
    CLK_PRSC_4096 

    CPU_CLK / 4096

    +
    + +
    +
    +

    Variable Documentation

    + +

    ◆ __crt0_bss_end

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_bss_end[]
    +
    +extern
    +
    +

    bss end address

    + +
    +
    + +

    ◆ __crt0_bss_start

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_bss_start[]
    +
    +extern
    +
    +

    bss start address

    + +
    +
    + +

    ◆ __crt0_copy_data_dst_begin

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_copy_data_dst_begin[]
    +
    +extern
    +
    +

    data start address

    + +
    +
    + +

    ◆ __crt0_copy_data_dst_end

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_copy_data_dst_end[]
    +
    +extern
    +
    +

    data end address

    + +
    +
    + +

    ◆ __crt0_dmem_begin

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_dmem_begin[]
    +
    +extern
    +
    +

    data memory/RAM start address

    + +
    +
    + +

    ◆ __crt0_imem_begin

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_imem_begin[]
    +
    +extern
    +
    +

    instruction memory/ROM start address

    + +
    +
    + +

    ◆ __crt0_max_heap

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_max_heap[]
    +
    +extern
    +
    +

    heap size in bytes

    + +
    +
    + +

    ◆ __crt0_stack_end

    + +
    +
    + + + + + +
    + + + + +
    char __crt0_stack_end[]
    +
    +extern
    +
    +

    last address of stack space

    + +
    +
    + +

    ◆ __heap_end

    + +
    +
    + + + + + +
    + + + + +
    char __heap_end[]
    +
    +extern
    +
    +

    heap end address

    + +
    +
    + +

    ◆ __heap_start

    + +
    +
    + + + + + +
    + + + + +
    char __heap_start[]
    +
    +extern
    +
    +

    heap start address

    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32_8h_source.html b/sw/neorv32_8h_source.html new file mode 100644 index 0000000000..369b5d586d --- /dev/null +++ b/sw/neorv32_8h_source.html @@ -0,0 +1,380 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_h
    +
    17#define neorv32_h
    +
    18
    +
    19#ifdef __cplusplus
    +
    20extern "C" {
    +
    21#endif
    +
    22
    +
    23// Standard libraries
    +
    24#include <stdint.h>
    +
    25#include <inttypes.h>
    +
    26#include <unistd.h>
    +
    27#include <stdlib.h>
    +
    28
    +
    29
    +
    30/**********************************************************************/
    +
    35#define XIP_MEM_BASE_ADDRESS (0xE0000000U)
    +
    37#define BOOTLOADER_BASE_ADDRESS (0xFFFFC000U)
    +
    39#define IO_BASE_ADDRESS (0xFFFFE000U)
    +
    43/**********************************************************************/
    +
    47//#define NEORV32_???_BASE (0xFFFFE000U) /**< reserved */
    +
    48//#define NEORV32_???_BASE (0xFFFFE100U) /**< reserved */
    +
    49//#define NEORV32_???_BASE (0xFFFFE200U) /**< reserved */
    +
    50//#define NEORV32_???_BASE (0xFFFFE300U) /**< reserved */
    +
    51//#define NEORV32_???_BASE (0xFFFFE400U) /**< reserved */
    +
    52//#define NEORV32_???_BASE (0xFFFFE500U) /**< reserved */
    +
    53//#define NEORV32_???_BASE (0xFFFFE600U) /**< reserved */
    +
    54//#define NEORV32_???_BASE (0xFFFFE700U) /**< reserved */
    +
    55//#define NEORV32_???_BASE (0xFFFFE800U) /**< reserved */
    +
    56//#define NEORV32_???_BASE (0xFFFFE900U) /**< reserved */
    +
    57//#define NEORV32_???_BASE (0xFFFFEA00U) /**< reserved */
    +
    58#define NEORV32_CFS_BASE (0xFFFFEB00U)
    +
    59#define NEORV32_SLINK_BASE (0xFFFFEC00U)
    +
    60#define NEORV32_DMA_BASE (0xFFFFED00U)
    +
    61#define NEORV32_CRC_BASE (0xFFFFEE00U)
    +
    62#define NEORV32_XIP_BASE (0xFFFFEF00U)
    +
    63#define NEORV32_PWM_BASE (0xFFFFF000U)
    +
    64#define NEORV32_GPTMR_BASE (0xFFFFF100U)
    +
    65#define NEORV32_ONEWIRE_BASE (0xFFFFF200U)
    +
    66#define NEORV32_XIRQ_BASE (0xFFFFF300U)
    +
    67#define NEORV32_MTIME_BASE (0xFFFFF400U)
    +
    68#define NEORV32_UART0_BASE (0xFFFFF500U)
    +
    69#define NEORV32_UART1_BASE (0xFFFFF600U)
    +
    70#define NEORV32_SDI_BASE (0xFFFFF700U)
    +
    71#define NEORV32_SPI_BASE (0xFFFFF800U)
    +
    72#define NEORV32_TWI_BASE (0xFFFFF900U)
    +
    73#define NEORV32_TRNG_BASE (0xFFFFFA00U)
    +
    74#define NEORV32_WDT_BASE (0xFFFFFB00U)
    +
    75#define NEORV32_GPIO_BASE (0xFFFFFC00U)
    +
    76#define NEORV32_NEOLED_BASE (0xFFFFFD00U)
    +
    77#define NEORV32_SYSINFO_BASE (0xFFFFFE00U)
    +
    78#define NEORV32_DM_BASE (0xFFFFFF00U)
    +
    82/**********************************************************************/
    +
    88#define TRNG_FIRQ_ENABLE CSR_MIE_FIRQ0E
    +
    89#define TRNG_FIRQ_PENDING CSR_MIP_FIRQ0P
    +
    90#define TRNG_RTE_ID RTE_TRAP_FIRQ_0
    +
    91#define TRNG_TRAP_CODE TRAP_CODE_FIRQ_0
    +
    95#define CFS_FIRQ_ENABLE CSR_MIE_FIRQ1E
    +
    96#define CFS_FIRQ_PENDING CSR_MIP_FIRQ1P
    +
    97#define CFS_RTE_ID RTE_TRAP_FIRQ_1
    +
    98#define CFS_TRAP_CODE TRAP_CODE_FIRQ_1
    +
    102#define UART0_RX_FIRQ_ENABLE CSR_MIE_FIRQ2E
    +
    103#define UART0_RX_FIRQ_PENDING CSR_MIP_FIRQ2P
    +
    104#define UART0_RX_RTE_ID RTE_TRAP_FIRQ_2
    +
    105#define UART0_RX_TRAP_CODE TRAP_CODE_FIRQ_2
    +
    106#define UART0_TX_FIRQ_ENABLE CSR_MIE_FIRQ3E
    +
    107#define UART0_TX_FIRQ_PENDING CSR_MIP_FIRQ3P
    +
    108#define UART0_TX_RTE_ID RTE_TRAP_FIRQ_3
    +
    109#define UART0_TX_TRAP_CODE TRAP_CODE_FIRQ_3
    +
    113#define UART1_RX_FIRQ_ENABLE CSR_MIE_FIRQ4E
    +
    114#define UART1_RX_FIRQ_PENDING CSR_MIP_FIRQ4P
    +
    115#define UART1_RX_RTE_ID RTE_TRAP_FIRQ_4
    +
    116#define UART1_RX_TRAP_CODE TRAP_CODE_FIRQ_4
    +
    117#define UART1_TX_FIRQ_ENABLE CSR_MIE_FIRQ5E
    +
    118#define UART1_TX_FIRQ_PENDING CSR_MIP_FIRQ5P
    +
    119#define UART1_TX_RTE_ID RTE_TRAP_FIRQ_5
    +
    120#define UART1_TX_TRAP_CODE TRAP_CODE_FIRQ_5
    +
    124#define SPI_FIRQ_ENABLE CSR_MIE_FIRQ6E
    +
    125#define SPI_FIRQ_PENDING CSR_MIP_FIRQ6P
    +
    126#define SPI_RTE_ID RTE_TRAP_FIRQ_6
    +
    127#define SPI_TRAP_CODE TRAP_CODE_FIRQ_6
    +
    131#define TWI_FIRQ_ENABLE CSR_MIE_FIRQ7E
    +
    132#define TWI_FIRQ_PENDING CSR_MIP_FIRQ7P
    +
    133#define TWI_RTE_ID RTE_TRAP_FIRQ_7
    +
    134#define TWI_TRAP_CODE TRAP_CODE_FIRQ_7
    +
    138#define XIRQ_FIRQ_ENABLE CSR_MIE_FIRQ8E
    +
    139#define XIRQ_FIRQ_PENDING CSR_MIP_FIRQ8P
    +
    140#define XIRQ_RTE_ID RTE_TRAP_FIRQ_8
    +
    141#define XIRQ_TRAP_CODE TRAP_CODE_FIRQ_8
    +
    145#define NEOLED_FIRQ_ENABLE CSR_MIE_FIRQ9E
    +
    146#define NEOLED_FIRQ_PENDING CSR_MIP_FIRQ9P
    +
    147#define NEOLED_RTE_ID RTE_TRAP_FIRQ_9
    +
    148#define NEOLED_TRAP_CODE TRAP_CODE_FIRQ_9
    +
    152#define DMA_FIRQ_ENABLE CSR_MIE_FIRQ10E
    +
    153#define DMA_FIRQ_PENDING CSR_MIP_FIRQ10P
    +
    154#define DMA_RTE_ID RTE_TRAP_FIRQ_10
    +
    155#define DMA_TRAP_CODE TRAP_CODE_FIRQ_10
    +
    159#define SDI_FIRQ_ENABLE CSR_MIE_FIRQ11E
    +
    160#define SDI_FIRQ_PENDING CSR_MIP_FIRQ11P
    +
    161#define SDI_RTE_ID RTE_TRAP_FIRQ_11
    +
    162#define SDI_TRAP_CODE TRAP_CODE_FIRQ_11
    +
    166#define GPTMR_FIRQ_ENABLE CSR_MIE_FIRQ12E
    +
    167#define GPTMR_FIRQ_PENDING CSR_MIP_FIRQ12P
    +
    168#define GPTMR_RTE_ID RTE_TRAP_FIRQ_12
    +
    169#define GPTMR_TRAP_CODE TRAP_CODE_FIRQ_12
    +
    173#define ONEWIRE_FIRQ_ENABLE CSR_MIE_FIRQ13E
    +
    174#define ONEWIRE_FIRQ_PENDING CSR_MIP_FIRQ13P
    +
    175#define ONEWIRE_RTE_ID RTE_TRAP_FIRQ_13
    +
    176#define ONEWIRE_TRAP_CODE TRAP_CODE_FIRQ_13
    +
    180#define SLINK_RX_FIRQ_ENABLE CSR_MIE_FIRQ14E
    +
    181#define SLINK_RX_FIRQ_PENDING CSR_MIP_FIRQ14P
    +
    182#define SLINK_RX_RTE_ID RTE_TRAP_FIRQ_14
    +
    183#define SLINK_RX_TRAP_CODE TRAP_CODE_FIRQ_14
    +
    184#define SLINK_TX_FIRQ_ENABLE CSR_MIE_FIRQ15E
    +
    185#define SLINK_TX_FIRQ_PENDING CSR_MIP_FIRQ15P
    +
    186#define SLINK_TX_RTE_ID RTE_TRAP_FIRQ_15
    +
    187#define SLINK_TX_TRAP_CODE TRAP_CODE_FIRQ_15
    +
    192/**********************************************************************/
    +
    196extern char __heap_start[];
    +
    197extern char __heap_end[];
    +
    198extern char __crt0_max_heap[];
    +
    199extern char __crt0_imem_begin[];
    +
    200extern char __crt0_dmem_begin[];
    +
    201extern char __crt0_stack_end[];
    +
    202extern char __crt0_bss_start[];
    +
    203extern char __crt0_bss_end[];
    +
    204extern char __crt0_copy_data_dst_begin[];
    +
    205extern char __crt0_copy_data_dst_end[];
    +
    207// aliases
    +
    208#define neorv32_heap_begin_c ((uint32_t)&__heap_start[0])
    +
    209#define neorv32_heap_end_c ((uint32_t)&__heap_end[0])
    +
    210#define neorv32_heap_size_c ((uint32_t)&__crt0_max_heap[0])
    +
    211#define neorv32_imem_begin_c ((uint32_t)&__crt0_imem_begin[0])
    +
    212#define neorv32_dmem_begin_c ((uint32_t)&__crt0_dmem_begin[0])
    +
    213#define neorv32_stack_end_c ((uint32_t)&__crt0_stack_end[0])
    +
    214#define neorv32_bss_start_c ((uint32_t)&__crt0_bss_start[0])
    +
    215#define neorv32_bss_end_c ((uint32_t)&__crt0_bss_end[0])
    +
    216#define neorv32_data_start_c ((uint32_t)&__crt0_copy_data_dst_begin[0])
    +
    217#define neorv32_data_end_c ((uint32_t)&__crt0_copy_data_dst_end[0])
    +
    221/**********************************************************************/
    + +
    238/**********************************************************************/
    +
    +
    243typedef union {
    +
    244 uint64_t uint64;
    +
    245 uint32_t uint32[sizeof(uint64_t)/sizeof(uint32_t)];
    +
    246 uint16_t uint16[sizeof(uint64_t)/sizeof(uint16_t)];
    +
    247 uint8_t uint8[ sizeof(uint64_t)/sizeof(uint8_t)];
    + +
    +
    +
    250typedef union {
    +
    251 uint32_t uint32[sizeof(uint32_t)/sizeof(uint32_t)];
    +
    252 uint16_t uint16[sizeof(uint32_t)/sizeof(uint16_t)];
    +
    253 uint8_t uint8[ sizeof(uint32_t)/sizeof(uint8_t)];
    + +
    +
    +
    256typedef union {
    +
    257 uint16_t uint16[sizeof(uint16_t)/sizeof(uint16_t)];
    +
    258 uint8_t uint8[ sizeof(uint16_t)/sizeof(uint8_t)];
    + +
    +
    263// ----------------------------------------------------------------------------
    +
    264// Include all system header files
    +
    265// ----------------------------------------------------------------------------
    +
    266// intrinsics
    +
    267#include "neorv32_intrinsics.h"
    +
    268
    +
    269// helper functions
    +
    270#include "neorv32_aux.h"
    +
    271
    +
    272// legacy compatibility layer
    +
    273#include "neorv32_legacy.h"
    +
    274
    +
    275// cpu core
    +
    276#include "neorv32_cpu.h"
    +
    277#include "neorv32_cpu_amo.h"
    +
    278#include "neorv32_cpu_csr.h"
    +
    279#include "neorv32_cpu_cfu.h"
    +
    280
    +
    281// NEORV32 runtime environment
    +
    282#include "neorv32_rte.h"
    +
    283
    +
    284// IO/peripheral devices
    +
    285#include "neorv32_cfs.h"
    +
    286#include "neorv32_crc.h"
    +
    287#include "neorv32_dma.h"
    +
    288#include "neorv32_gpio.h"
    +
    289#include "neorv32_gptmr.h"
    +
    290#include "neorv32_mtime.h"
    +
    291#include "neorv32_neoled.h"
    +
    292#include "neorv32_onewire.h"
    +
    293#include "neorv32_pwm.h"
    +
    294#include "neorv32_sdi.h"
    +
    295#include "neorv32_slink.h"
    +
    296#include "neorv32_spi.h"
    +
    297#include "neorv32_sysinfo.h"
    +
    298#include "neorv32_trng.h"
    +
    299#include "neorv32_twi.h"
    +
    300#include "neorv32_uart.h"
    +
    301#include "neorv32_wdt.h"
    +
    302#include "neorv32_xip.h"
    +
    303#include "neorv32_xirq.h"
    +
    304
    +
    305
    +
    306#ifdef __cplusplus
    +
    307}
    +
    308#endif
    +
    309
    +
    310#endif // neorv32_h
    +
    char __heap_start[]
    +
    NEORV32_CLOCK_PRSC_enum
    Definition neorv32.h:225
    +
    @ CLK_PRSC_4096
    Definition neorv32.h:233
    +
    @ CLK_PRSC_1024
    Definition neorv32.h:231
    +
    @ CLK_PRSC_64
    Definition neorv32.h:229
    +
    @ CLK_PRSC_4
    Definition neorv32.h:227
    +
    @ CLK_PRSC_128
    Definition neorv32.h:230
    +
    @ CLK_PRSC_2048
    Definition neorv32.h:232
    +
    @ CLK_PRSC_8
    Definition neorv32.h:228
    +
    @ CLK_PRSC_2
    Definition neorv32.h:226
    +
    char __crt0_bss_start[]
    +
    char __crt0_copy_data_dst_begin[]
    +
    char __crt0_imem_begin[]
    +
    char __crt0_bss_end[]
    +
    char __crt0_dmem_begin[]
    +
    char __crt0_max_heap[]
    +
    char __crt0_stack_end[]
    +
    char __crt0_copy_data_dst_end[]
    +
    char __heap_end[]
    +
    General auxiliary functions header file.
    +
    Custom Functions Subsystem (CFS) HW driver header file.
    +
    CPU Core Functions HW driver header file.
    +
    Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file.
    +
    CPU Core custom functions unit HW driver header file.
    +
    Control and Status Registers (CSR) definitions.
    +
    Cyclic redundancy check unit (CRC) HW driver header file.
    +
    Direct Memory Access Controller (DMA) HW driver header file.
    +
    General purpose input/output port unit (GPIO) HW driver header file.
    +
    General purpose timer (GPTMR) HW driver header file.
    +
    Helper functions and macros for custom "intrinsics" / instructions.
    +
    Legacy compatibility layer.
    +
    Machine System Timer (MTIME) HW driver header file.
    +
    Smart LED Interface (NEOLED) HW driver header file.
    +
    1-Wire Interface Controller (ONEWIRE) HW driver header file.
    +
    Pulse-Width Modulation Controller (PWM) HW driver header file.
    +
    NEORV32 Runtime Environment.
    +
    Serial data interface controller (SPPI) HW driver header file.
    + +
    Serial peripheral interface controller (SPI) HW driver header file.
    +
    True Random Number Generator (TRNG) HW driver header file.
    +
    Two-Wire Interface Controller (TWI) HW driver header file.
    +
    Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file.
    +
    Watchdog Timer (WDT) HW driver header file.
    +
    Execute in place module (XIP) HW driver header file.
    +
    External Interrupt controller HW driver header file.
    +
    Definition neorv32.h:256
    +
    Definition neorv32.h:250
    +
    Definition neorv32.h:243
    +
    + + +
    + + diff --git a/sw/neorv32__aux_8c.html b/sw/neorv32__aux_8c.html new file mode 100644 index 0000000000..c26b5ca3f0 --- /dev/null +++ b/sw/neorv32__aux_8c.html @@ -0,0 +1,230 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_aux.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_aux.c File Reference
    +
    +
    + +

    General auxiliary functions source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + +

    +Functions

    uint64_t neorv32_aux_date2unixtime (date_t *date)
     
    void neorv32_aux_unixtime2date (uint64_t unixtime, date_t *date)
     
    uint64_t neorv32_aux_hexstr2uint64 (char *buffer, uint8_t length)
     
    uint32_t neorv32_aux_xorshift32 (void)
     
    +

    Detailed Description

    +

    General auxiliary functions source file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_aux_date2unixtime()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_aux_date2unixtime (date_t * date)
    +
    +

    Convert date to Unix time stamp.

    + +
    Parameters
    + + +
    [in]datePointer to date and time struct (date_t).
    +
    +
    +
    Returns
    Unix time since 00:00:00 UTC, January 1, 1970 in seconds.
    + +
    +
    + +

    ◆ neorv32_aux_hexstr2uint64()

    + +
    +
    + + + + + + + + + + + +
    uint64_t neorv32_aux_hexstr2uint64 (char * buffer,
    uint8_t length )
    +
    +

    Helper function to convert up to 16 hex chars string into uint64_t

    +
    Parameters
    + + + +
    [in,out]bufferPointer to array of chars to convert into number.
    [in,out]lengthLength of the conversion string.
    +
    +
    +
    Returns
    Converted number (uint64_t).
    + +
    +
    + +

    ◆ neorv32_aux_unixtime2date()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_aux_unixtime2date (uint64_t unixtime,
    date_t * date )
    +
    +

    Convert Unix time stamp to date.

    + +
    Parameters
    + + + +
    [in]unixtimeUnix time since 00:00:00 UTC, January 1, 1970 in seconds.
    [in,out]datePointer to date and time struct (date_t).
    +
    +
    + +
    +
    + +

    ◆ neorv32_aux_xorshift32()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_aux_xorshift32 (void )
    +
    +

    XORSHIFT pseudo random number generator.

    +
    Returns
    Random number (uint32_t).
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__aux_8h.html b/sw/neorv32__aux_8h.html new file mode 100644 index 0000000000..d4bee7c0ff --- /dev/null +++ b/sw/neorv32__aux_8h.html @@ -0,0 +1,248 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_aux.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_aux.h File Reference
    +
    +
    + +

    General auxiliary functions header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  date_t
     
    + + + + + + +

    +Macros

    Select minimum/maximum
    +#define neorv32_aux_min(a, b)   ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a < _b ? _a : _b; })
     
    +#define neorv32_aux_max(a, b)   ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a > _b ? _a : _b; })
     
    + + + + + + + + + + +

    +Functions

    AUX prototypes
    uint64_t neorv32_aux_date2unixtime (date_t *date)
     
    void neorv32_aux_unixtime2date (uint64_t unixtime, date_t *date)
     
    uint64_t neorv32_aux_hexstr2uint64 (char *buffer, uint8_t length)
     
    uint32_t neorv32_aux_xorshift32 (void)
     
    +

    Detailed Description

    +

    General auxiliary functions header file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_aux_date2unixtime()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_aux_date2unixtime (date_t * date)
    +
    +

    Convert date to Unix time stamp.

    + +
    Parameters
    + + +
    [in]datePointer to date and time struct (date_t).
    +
    +
    +
    Returns
    Unix time since 00:00:00 UTC, January 1, 1970 in seconds.
    + +
    +
    + +

    ◆ neorv32_aux_hexstr2uint64()

    + +
    +
    + + + + + + + + + + + +
    uint64_t neorv32_aux_hexstr2uint64 (char * buffer,
    uint8_t length )
    +
    +

    Helper function to convert up to 16 hex chars string into uint64_t

    +
    Parameters
    + + + +
    [in,out]bufferPointer to array of chars to convert into number.
    [in,out]lengthLength of the conversion string.
    +
    +
    +
    Returns
    Converted number (uint64_t).
    + +
    +
    + +

    ◆ neorv32_aux_unixtime2date()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_aux_unixtime2date (uint64_t unixtime,
    date_t * date )
    +
    +

    Convert Unix time stamp to date.

    + +
    Parameters
    + + + +
    [in]unixtimeUnix time since 00:00:00 UTC, January 1, 1970 in seconds.
    [in,out]datePointer to date and time struct (date_t).
    +
    +
    + +
    +
    + +

    ◆ neorv32_aux_xorshift32()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_aux_xorshift32 (void )
    +
    +

    XORSHIFT pseudo random number generator.

    +
    Returns
    Random number (uint32_t).
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__aux_8h_source.html b/sw/neorv32__aux_8h_source.html new file mode 100644 index 0000000000..b66476c811 --- /dev/null +++ b/sw/neorv32__aux_8h_source.html @@ -0,0 +1,152 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_aux.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_aux.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    15#ifndef neorv32_aux_h
    +
    16#define neorv32_aux_h
    +
    17
    +
    18#include <stdint.h>
    +
    19
    +
    20
    +
    21/**********************************************************************/
    +
    25#define neorv32_aux_min(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a < _b ? _a : _b; })
    +
    26#define neorv32_aux_max(a, b) ({ __typeof__ (a) _a = (a); __typeof__ (b) _b = (b); _a > _b ? _a : _b; })
    +
    30/**********************************************************************/
    +
    +
    33typedef struct {
    +
    34 uint16_t year;
    +
    35 uint8_t month;
    +
    36 uint8_t day;
    +
    37 uint8_t weekday;
    +
    38 uint8_t hours;
    +
    39 uint8_t minutes;
    +
    40 uint8_t seconds;
    +
    41} date_t;
    +
    +
    42
    +
    43
    +
    44/**********************************************************************/
    +
    48uint64_t neorv32_aux_date2unixtime(date_t* date);
    +
    49void neorv32_aux_unixtime2date(uint64_t unixtime, date_t* date);
    +
    50uint64_t neorv32_aux_hexstr2uint64(char *buffer, uint8_t length);
    +
    51uint32_t neorv32_aux_xorshift32(void);
    +
    55#endif // neorv32_aux_h
    +
    void neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date)
    Definition neorv32_aux.c:85
    +
    uint64_t neorv32_aux_date2unixtime(date_t *date)
    Definition neorv32_aux.c:28
    +
    uint64_t neorv32_aux_hexstr2uint64(char *buffer, uint8_t length)
    Definition neorv32_aux.c:151
    +
    uint32_t neorv32_aux_xorshift32(void)
    Definition neorv32_aux.c:190
    +
    Definition neorv32_aux.h:33
    +
    uint8_t seconds
    Definition neorv32_aux.h:40
    +
    uint8_t month
    Definition neorv32_aux.h:35
    +
    uint8_t minutes
    Definition neorv32_aux.h:39
    +
    uint8_t hours
    Definition neorv32_aux.h:38
    +
    uint8_t weekday
    Definition neorv32_aux.h:37
    +
    uint8_t day
    Definition neorv32_aux.h:36
    +
    uint16_t year
    Definition neorv32_aux.h:34
    +
    + + +
    + + diff --git a/sw/neorv32__cfs_8c.html b/sw/neorv32__cfs_8c.html new file mode 100644 index 0000000000..672fa3dbbe --- /dev/null +++ b/sw/neorv32__cfs_8c.html @@ -0,0 +1,142 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cfs.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cfs.c File Reference
    +
    +
    + +

    Custom Functions Subsystem (CFS) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + +

    +Functions

    int neorv32_cfs_available (void)
     
    +

    Detailed Description

    +

    Custom Functions Subsystem (CFS) HW driver source file.

    +
    Warning
    There are no "real" CFS driver functions available here, because these functions are defined by the actual hardware.
    +
    +Hence, the CFS designer has to provide the actual driver functions.
    +
    Note
    These functions should only be used if the CFS was synthesized (IO_CFS_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_cfs_available()

    + +
    +
    + + + + + + + +
    int neorv32_cfs_available (void )
    +
    +

    Check if custom functions subsystem was synthesized.

    +
    Returns
    0 if CFS was not synthesized, 1 if CFS is available.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cfs_8h.html b/sw/neorv32__cfs_8h.html new file mode 100644 index 0000000000..c2c42ec763 --- /dev/null +++ b/sw/neorv32__cfs_8h.html @@ -0,0 +1,175 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cfs.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cfs.h File Reference
    +
    +
    + +

    Custom Functions Subsystem (CFS) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_cfs_t
     
    + + + + +

    +Macros

    IO Device: Custom Functions Subsystem (CFS)
    #define NEORV32_CFS   ((neorv32_cfs_t*) (NEORV32_CFS_BASE))
     
    + + + + +

    +Functions

    Prototypes
    int neorv32_cfs_available (void)
     
    +

    Detailed Description

    +

    Custom Functions Subsystem (CFS) HW driver header file.

    +

    System Configuration Information Memory (SYSINFO) HW driver header file.

    +
    Warning
    There are no "real" CFS driver functions available here, because these functions are defined by the actual hardware.
    +
    +The CFS designer has to provide the actual driver functions.
    +
    Note
    These functions should only be used if the CFS was synthesized (IO_CFS_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +
    +https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_CFS

    + +
    +
    + + + + +
    #define NEORV32_CFS   ((neorv32_cfs_t*) (NEORV32_CFS_BASE))
    +
    +

    CFS module hardware access (neorv32_cfs_t)

    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_cfs_available()

    + +
    +
    + + + + + + + +
    int neorv32_cfs_available (void )
    +
    +

    Check if custom functions subsystem was synthesized.

    +
    Returns
    0 if CFS was not synthesized, 1 if CFS is available.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cfs_8h_source.html b/sw/neorv32__cfs_8h_source.html new file mode 100644 index 0000000000..d771e1cd16 --- /dev/null +++ b/sw/neorv32__cfs_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cfs.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_cfs.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    20#ifndef neorv32_cfs_h
    +
    21#define neorv32_cfs_h
    +
    22
    +
    23#include <stdint.h>
    +
    24
    +
    25
    +
    26/**********************************************************************/
    +
    +
    31typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    32 uint32_t REG[64];
    + +
    +
    34
    +
    36#define NEORV32_CFS ((neorv32_cfs_t*) (NEORV32_CFS_BASE))
    +
    40/**********************************************************************/
    +
    44int neorv32_cfs_available(void);
    +
    48#endif // neorv32_cfs_h
    +
    int neorv32_cfs_available(void)
    Definition neorv32_cfs.c:29
    +
    Definition neorv32_cfs.h:31
    +
    + + +
    + + diff --git a/sw/neorv32__cpu_8c.html b/sw/neorv32__cpu_8c.html new file mode 100644 index 0000000000..f7d5076b30 --- /dev/null +++ b/sw/neorv32__cpu_8c.html @@ -0,0 +1,413 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cpu.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cpu.c File Reference
    +
    +
    + +

    CPU Core Functions HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    uint64_t neorv32_cpu_get_cycle (void)
     
    void neorv32_cpu_set_mcycle (uint64_t value)
     
    uint64_t neorv32_cpu_get_instret (void)
     
    void neorv32_cpu_set_minstret (uint64_t value)
     
    void neorv32_cpu_delay_ms (uint32_t time_ms)
     
    uint32_t neorv32_cpu_get_clk_from_prsc (int prsc)
     
    uint32_t neorv32_cpu_pmp_get_num_regions (void)
     
    uint32_t neorv32_cpu_pmp_get_granularity (void)
     
    int neorv32_cpu_pmp_configure_region (int index, uint32_t addr, uint8_t config)
     
    uint32_t neorv32_cpu_hpm_get_num_counters (void)
     
    uint32_t neorv32_cpu_hpm_get_size (void)
     
    void neorv32_cpu_goto_user_mode (void)
     
    +

    Detailed Description

    +

    CPU Core Functions HW driver source file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_cpu_delay_ms()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_delay_ms (uint32_t time_ms)
    +
    +

    Delay function using busy wait.

    +
    Note
    This function uses the cycle CPU counter if available. Otherwise the MTIME system timer is used if available. A simple loop is used as alternative fall-back (imprecise!).
    +
    Parameters
    + + +
    [in]time_msTime in ms to wait (unsigned 32-bit).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_get_clk_from_prsc()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_get_clk_from_prsc (int prsc)
    +
    +

    Get actual clocking frequency from prescaler select NEORV32_CLOCK_PRSC_enum

    +
    Parameters
    + + +
    [in]prscPrescaler select NEORV32_CLOCK_PRSC_enum. return Actual raw clock frequency in Hz.
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_get_cycle()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_cpu_get_cycle (void )
    +
    +

    Unavailable extensions warnings. Get cycle counter from cycle[h].

    +
    Returns
    Current cycle counter (64 bit).
    + +
    +
    + +

    ◆ neorv32_cpu_get_instret()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_cpu_get_instret (void )
    +
    +

    Get retired instructions counter from instret[h].

    +
    Returns
    Current instructions counter (64 bit).
    + +
    +
    + +

    ◆ neorv32_cpu_goto_user_mode()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_goto_user_mode (void )
    +
    +

    Switch from privilege mode MACHINE to privilege mode USER.

    + +
    +
    + +

    ◆ neorv32_cpu_hpm_get_num_counters()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_hpm_get_num_counters (void )
    +
    +

    Hardware performance monitors (HPM): Get number of available HPM counters.

    +
    Returns
    Returns number of available HPM counters.
    + +
    +
    + +

    ◆ neorv32_cpu_hpm_get_size()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_hpm_get_size (void )
    +
    +

    Hardware performance monitors (HPM): Get total counter width

    +
    Warning
    This function overrides the mhpmcounter3[h] CSRs.
    +
    Returns
    Size of HPM counters (1-64, 0 if not implemented at all).
    + +
    +
    + +

    ◆ neorv32_cpu_pmp_configure_region()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int neorv32_cpu_pmp_configure_region (int index,
    uint32_t addr,
    uint8_t config )
    +
    +

    Physical memory protection (PMP): Configure region.

    +
    Note
    This function requires the PMP CPU extension.
    +
    Warning
    This function expects a WORD address!
    +
    Parameters
    + + + + +
    [in]indexRegion number (index, 0..PMP_NUM_REGIONS-1).
    [in]addrRegion address (word address!).
    [in]configRegion configuration byte (see NEORV32_PMPCFG_ATTRIBUTES_enum).
    +
    +
    +
    Returns
    Returns 0 on success, !=0 on failure.
    + +
    +
    + +

    ◆ neorv32_cpu_pmp_get_granularity()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_pmp_get_granularity (void )
    +
    +

    Physical memory protection (PMP): Get minimal region size (granularity).

    +
    Warning
    This function overrides PMPCFG0[0] and PMPADDR0 CSRs!
    +
    Note
    This function requires the PMP CPU extension.
    +
    Returns
    Returns minimal region size in bytes. Returns zero on error.
    + +
    +
    + +

    ◆ neorv32_cpu_pmp_get_num_regions()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_pmp_get_num_regions (void )
    +
    +

    Physical memory protection (PMP): Get number of available regions.

    +
    Warning
    This function overrides all available PMPCFG* CSRs!
    +
    Note
    This function requires the PMP CPU extension.
    +
    Returns
    Returns number of available PMP regions.
    + +
    +
    + +

    ◆ neorv32_cpu_set_mcycle()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_set_mcycle (uint64_t value)
    +
    +

    Set machine cycle counter mcycle[h].

    +
    Parameters
    + + +
    [in]valueNew value for mcycle[h] CSR (64-bit).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_set_minstret()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_set_minstret (uint64_t value)
    +
    +

    Set machine retired instructions counter minstret[h].

    +
    Parameters
    + + +
    [in]valueNew value for mcycle[h] CSR (64-bit).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cpu_8h.html b/sw/neorv32__cpu_8h.html new file mode 100644 index 0000000000..796700f1dc --- /dev/null +++ b/sw/neorv32__cpu_8h.html @@ -0,0 +1,894 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cpu.h File Reference
    +
    +
    + +

    CPU Core Functions HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void neorv32_cpu_store_unsigned_word (uint32_t addr, uint32_t wdata)
     
    void neorv32_cpu_store_unsigned_half (uint32_t addr, uint16_t wdata)
     
    void neorv32_cpu_store_unsigned_byte (uint32_t addr, uint8_t wdata)
     
    uint32_t neorv32_cpu_load_unsigned_word (uint32_t addr)
     
    uint16_t neorv32_cpu_load_unsigned_half (uint32_t addr)
     
    int16_t neorv32_cpu_load_signed_half (uint32_t addr)
     
    uint8_t neorv32_cpu_load_unsigned_byte (uint32_t addr)
     
    int8_t neorv32_cpu_load_signed_byte (uint32_t addr)
     
    uint32_t neorv32_cpu_csr_read (const int csr_id)
     
    void neorv32_cpu_csr_write (const int csr_id, uint32_t data)
     
    void neorv32_cpu_csr_set (const int csr_id, uint32_t mask)
     
    void neorv32_cpu_csr_clr (const int csr_id, uint32_t mask)
     
    void neorv32_cpu_sleep (void)
     
    Prototypes
    uint64_t neorv32_cpu_get_cycle (void)
     
    void neorv32_cpu_set_mcycle (uint64_t value)
     
    uint64_t neorv32_cpu_get_instret (void)
     
    void neorv32_cpu_set_minstret (uint64_t value)
     
    void neorv32_cpu_delay_ms (uint32_t time_ms)
     
    uint32_t neorv32_cpu_get_clk_from_prsc (int prsc)
     
    uint32_t neorv32_cpu_pmp_get_num_regions (void)
     
    uint32_t neorv32_cpu_pmp_get_granularity (void)
     
    int neorv32_cpu_pmp_configure_region (int index, uint32_t addr, uint8_t config)
     
    uint32_t neorv32_cpu_hpm_get_num_counters (void)
     
    uint32_t neorv32_cpu_hpm_get_size (void)
     
    void neorv32_cpu_goto_user_mode (void)
     
    +

    Detailed Description

    +

    CPU Core Functions HW driver header file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_cpu_csr_clr()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void neorv32_cpu_csr_clr (const int csr_id,
    uint32_t mask )
    +
    +inline
    +
    +

    Clear bit(s) in CPU control and status register (CSR).

    +
    Parameters
    + + + +
    [in]csr_idID of CSR to write. See NEORV32_CSR_enum.
    [in]maskBit mask (high-active) to clear bits (uint32_t).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_csr_read()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_cpu_csr_read (const int csr_id)
    +
    +inline
    +
    +

    Read data from CPU control and status register (CSR).

    +
    Parameters
    + + +
    [in]csr_idID of CSR to read. See NEORV32_CSR_enum.
    +
    +
    +
    Returns
    Read data (uint32_t).
    + +
    +
    + +

    ◆ neorv32_cpu_csr_set()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void neorv32_cpu_csr_set (const int csr_id,
    uint32_t mask )
    +
    +inline
    +
    +

    Set bit(s) in CPU control and status register (CSR).

    +
    Parameters
    + + + +
    [in]csr_idID of CSR to write. See NEORV32_CSR_enum.
    [in]maskBit mask (high-active) to set bits (uint32_t).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_csr_write()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void neorv32_cpu_csr_write (const int csr_id,
    uint32_t data )
    +
    +inline
    +
    +

    Write data to CPU control and status register (CSR).

    +
    Parameters
    + + + +
    [in]csr_idID of CSR to write. See NEORV32_CSR_enum.
    [in]dataData to write (uint32_t).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_delay_ms()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_delay_ms (uint32_t time_ms)
    +
    +

    Delay function using busy wait.

    +
    Note
    This function uses the cycle CPU counter if available. Otherwise the MTIME system timer is used if available. A simple loop is used as alternative fall-back (imprecise!).
    +
    Parameters
    + + +
    [in]time_msTime in ms to wait (unsigned 32-bit).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_get_clk_from_prsc()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_get_clk_from_prsc (int prsc)
    +
    +

    Get actual clocking frequency from prescaler select NEORV32_CLOCK_PRSC_enum

    +
    Parameters
    + + +
    [in]prscPrescaler select NEORV32_CLOCK_PRSC_enum. return Actual raw clock frequency in Hz.
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_get_cycle()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_cpu_get_cycle (void )
    +
    +

    Unavailable extensions warnings. Get cycle counter from cycle[h].

    +
    Returns
    Current cycle counter (64 bit).
    + +
    +
    + +

    ◆ neorv32_cpu_get_instret()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_cpu_get_instret (void )
    +
    +

    Get retired instructions counter from instret[h].

    +
    Returns
    Current instructions counter (64 bit).
    + +
    +
    + +

    ◆ neorv32_cpu_goto_user_mode()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_goto_user_mode (void )
    +
    +

    Switch from privilege mode MACHINE to privilege mode USER.

    + +
    +
    + +

    ◆ neorv32_cpu_hpm_get_num_counters()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_hpm_get_num_counters (void )
    +
    +

    Hardware performance monitors (HPM): Get number of available HPM counters.

    +
    Returns
    Returns number of available HPM counters.
    + +
    +
    + +

    ◆ neorv32_cpu_hpm_get_size()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_hpm_get_size (void )
    +
    +

    Hardware performance monitors (HPM): Get total counter width

    +
    Warning
    This function overrides the mhpmcounter3[h] CSRs.
    +
    Returns
    Size of HPM counters (1-64, 0 if not implemented at all).
    + +
    +
    + +

    ◆ neorv32_cpu_load_signed_byte()

    + +
    +
    + + + + + +
    + + + + + + + +
    int8_t neorv32_cpu_load_signed_byte (uint32_t addr)
    +
    +inline
    +
    +

    Load signed byte from address space.

    +
    Parameters
    + + +
    [in]addrAddress (32-bit).
    +
    +
    +
    Returns
    Read data byte (8-bit).
    + +
    +
    + +

    ◆ neorv32_cpu_load_signed_half()

    + +
    +
    + + + + + +
    + + + + + + + +
    int16_t neorv32_cpu_load_signed_half (uint32_t addr)
    +
    +inline
    +
    +

    Load signed half-word from address space.

    +
    Note
    An unaligned access address will raise an alignment exception.
    +
    Parameters
    + + +
    [in]addrAddress (32-bit).
    +
    +
    +
    Returns
    Read data half-word (16-bit).
    + +
    +
    + +

    ◆ neorv32_cpu_load_unsigned_byte()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint8_t neorv32_cpu_load_unsigned_byte (uint32_t addr)
    +
    +inline
    +
    +

    Load unsigned byte from address space.

    +
    Parameters
    + + +
    [in]addrAddress (32-bit).
    +
    +
    +
    Returns
    Read data byte (8-bit).
    + +
    +
    + +

    ◆ neorv32_cpu_load_unsigned_half()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint16_t neorv32_cpu_load_unsigned_half (uint32_t addr)
    +
    +inline
    +
    +

    Load unsigned half-word from address space.

    +
    Note
    An unaligned access address will raise an alignment exception.
    +
    Parameters
    + + +
    [in]addrAddress (32-bit).
    +
    +
    +
    Returns
    Read data half-word (16-bit).
    + +
    +
    + +

    ◆ neorv32_cpu_load_unsigned_word()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_cpu_load_unsigned_word (uint32_t addr)
    +
    +inline
    +
    +

    Load unsigned word from address space.

    +
    Note
    An unaligned access address will raise an alignment exception.
    +
    Parameters
    + + +
    [in]addrAddress (32-bit).
    +
    +
    +
    Returns
    Read data word (32-bit).
    + +
    +
    + +

    ◆ neorv32_cpu_pmp_configure_region()

    + +
    +
    + + + + + + + + + + + + + + + + +
    int neorv32_cpu_pmp_configure_region (int index,
    uint32_t addr,
    uint8_t config )
    +
    +

    Physical memory protection (PMP): Configure region.

    +
    Note
    This function requires the PMP CPU extension.
    +
    Warning
    This function expects a WORD address!
    +
    Parameters
    + + + + +
    [in]indexRegion number (index, 0..PMP_NUM_REGIONS-1).
    [in]addrRegion address (word address!).
    [in]configRegion configuration byte (see NEORV32_PMPCFG_ATTRIBUTES_enum).
    +
    +
    +
    Returns
    Returns 0 on success, !=0 on failure.
    + +
    +
    + +

    ◆ neorv32_cpu_pmp_get_granularity()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_pmp_get_granularity (void )
    +
    +

    Physical memory protection (PMP): Get minimal region size (granularity).

    +
    Warning
    This function overrides PMPCFG0[0] and PMPADDR0 CSRs!
    +
    Note
    This function requires the PMP CPU extension.
    +
    Returns
    Returns minimal region size in bytes. Returns zero on error.
    + +
    +
    + +

    ◆ neorv32_cpu_pmp_get_num_regions()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_cpu_pmp_get_num_regions (void )
    +
    +

    Physical memory protection (PMP): Get number of available regions.

    +
    Warning
    This function overrides all available PMPCFG* CSRs!
    +
    Note
    This function requires the PMP CPU extension.
    +
    Returns
    Returns number of available PMP regions.
    + +
    +
    + +

    ◆ neorv32_cpu_set_mcycle()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_set_mcycle (uint64_t value)
    +
    +

    Set machine cycle counter mcycle[h].

    +
    Parameters
    + + +
    [in]valueNew value for mcycle[h] CSR (64-bit).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_set_minstret()

    + +
    +
    + + + + + + + +
    void neorv32_cpu_set_minstret (uint64_t value)
    +
    +

    Set machine retired instructions counter minstret[h].

    +
    Parameters
    + + +
    [in]valueNew value for mcycle[h] CSR (64-bit).
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_sleep()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_cpu_sleep (void )
    +
    +inline
    +
    +

    Put CPU into sleep / power-down mode.

    +
    Note
    The WFI (wait for interrupt) instruction will make the CPU halt until any enabled interrupt source becomes pending.
    + +
    +
    + +

    ◆ neorv32_cpu_store_unsigned_byte()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void neorv32_cpu_store_unsigned_byte (uint32_t addr,
    uint8_t wdata )
    +
    +inline
    +
    +

    Store unsigned byte to address space.

    +
    Parameters
    + + + +
    [in]addrAddress (32-bit).
    [in]wdataData byte (8-bit) to store.
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_store_unsigned_half()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void neorv32_cpu_store_unsigned_half (uint32_t addr,
    uint16_t wdata )
    +
    +inline
    +
    +

    Store unsigned half-word to address space.

    +
    Note
    An unaligned access address will raise an alignment exception.
    +
    Parameters
    + + + +
    [in]addrAddress (32-bit).
    [in]wdataData half-word (16-bit) to store.
    +
    +
    + +
    +
    + +

    ◆ neorv32_cpu_store_unsigned_word()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    void neorv32_cpu_store_unsigned_word (uint32_t addr,
    uint32_t wdata )
    +
    +inline
    +
    +

    Store unsigned word to address space.

    +
    Note
    An unaligned access address will raise an alignment exception.
    +
    Parameters
    + + + +
    [in]addrAddress (32-bit).
    [in]wdataData word (32-bit) to store.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cpu_8h_source.html b/sw/neorv32__cpu_8h_source.html new file mode 100644 index 0000000000..a12367c435 --- /dev/null +++ b/sw/neorv32__cpu_8h_source.html @@ -0,0 +1,299 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_cpu.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_cpu_h
    +
    17#define neorv32_cpu_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    26uint64_t neorv32_cpu_get_cycle(void);
    +
    27void neorv32_cpu_set_mcycle(uint64_t value);
    +
    28uint64_t neorv32_cpu_get_instret(void);
    +
    29void neorv32_cpu_set_minstret(uint64_t value);
    +
    30void neorv32_cpu_delay_ms(uint32_t time_ms);
    +
    31uint32_t neorv32_cpu_get_clk_from_prsc(int prsc);
    + + +
    34int neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config);
    + +
    36uint32_t neorv32_cpu_hpm_get_size(void);
    + +
    41/**********************************************************************/
    +
    +
    49inline void __attribute__ ((always_inline)) neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata) {
    +
    50
    +
    51 uint32_t reg_addr = addr;
    +
    52 uint32_t reg_data = wdata;
    +
    53 asm volatile ("sw %[da], 0(%[ad])" : : [da] "r" (reg_data), [ad] "r" (reg_addr));
    +
    54}
    +
    +
    55
    +
    56
    +
    57/**********************************************************************/
    +
    +
    65inline void __attribute__ ((always_inline)) neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata) {
    +
    66
    +
    67 uint32_t reg_addr = addr;
    +
    68 uint32_t reg_data = (uint32_t)wdata;
    +
    69 asm volatile ("sh %[da], 0(%[ad])" : : [da] "r" (reg_data), [ad] "r" (reg_addr));
    +
    70}
    +
    +
    71
    +
    72
    +
    73/**********************************************************************/
    +
    +
    79inline void __attribute__ ((always_inline)) neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata) {
    +
    80
    +
    81 uint32_t reg_addr = addr;
    +
    82 uint32_t reg_data = (uint32_t)wdata;
    +
    83 asm volatile ("sb %[da], 0(%[ad])" : : [da] "r" (reg_data), [ad] "r" (reg_addr));
    +
    84}
    +
    +
    85
    +
    86
    +
    87/**********************************************************************/
    +
    +
    95inline uint32_t __attribute__ ((always_inline)) neorv32_cpu_load_unsigned_word(uint32_t addr) {
    +
    96
    +
    97 uint32_t reg_addr = addr;
    +
    98 uint32_t reg_data;
    +
    99 asm volatile ("lw %[da], 0(%[ad])" : [da] "=r" (reg_data) : [ad] "r" (reg_addr));
    +
    100 return reg_data;
    +
    101}
    +
    +
    102
    +
    103
    +
    104/**********************************************************************/
    +
    +
    112inline uint16_t __attribute__ ((always_inline)) neorv32_cpu_load_unsigned_half(uint32_t addr) {
    +
    113
    +
    114 uint32_t reg_addr = addr;
    +
    115 uint16_t reg_data;
    +
    116 asm volatile ("lhu %[da], 0(%[ad])" : [da] "=r" (reg_data) : [ad] "r" (reg_addr));
    +
    117 return reg_data;
    +
    118}
    +
    +
    119
    +
    120
    +
    121/**********************************************************************/
    +
    +
    129inline int16_t __attribute__ ((always_inline)) neorv32_cpu_load_signed_half(uint32_t addr) {
    +
    130
    +
    131 uint32_t reg_addr = addr;
    +
    132 int16_t reg_data;
    +
    133 asm volatile ("lh %[da], 0(%[ad])" : [da] "=r" (reg_data) : [ad] "r" (reg_addr));
    +
    134 return reg_data;
    +
    135}
    +
    +
    136
    +
    137
    +
    138/**********************************************************************/
    +
    +
    144inline uint8_t __attribute__ ((always_inline)) neorv32_cpu_load_unsigned_byte(uint32_t addr) {
    +
    145
    +
    146 uint32_t reg_addr = addr;
    +
    147 uint8_t reg_data;
    +
    148 asm volatile ("lbu %[da], 0(%[ad])" : [da] "=r" (reg_data) : [ad] "r" (reg_addr));
    +
    149 return reg_data;
    +
    150}
    +
    +
    151
    +
    152
    +
    153/**********************************************************************/
    +
    +
    159inline int8_t __attribute__ ((always_inline)) neorv32_cpu_load_signed_byte(uint32_t addr) {
    +
    160
    +
    161 uint32_t reg_addr = addr;
    +
    162 int8_t reg_data;
    +
    163 asm volatile ("lb %[da], 0(%[ad])" : [da] "=r" (reg_data) : [ad] "r" (reg_addr));
    +
    164 return reg_data;
    +
    165}
    +
    +
    166
    +
    167
    +
    168/**********************************************************************/
    +
    +
    174inline uint32_t __attribute__ ((always_inline)) neorv32_cpu_csr_read(const int csr_id) {
    +
    175
    +
    176 uint32_t csr_data;
    +
    177 asm volatile ("csrr %[result], %[input_i]" : [result] "=r" (csr_data) : [input_i] "i" (csr_id));
    +
    178 return csr_data;
    +
    179}
    +
    +
    180
    +
    181
    +
    182/**********************************************************************/
    +
    +
    188inline void __attribute__ ((always_inline)) neorv32_cpu_csr_write(const int csr_id, uint32_t data) {
    +
    189
    +
    190 uint32_t csr_data = data;
    +
    191 asm volatile ("csrw %[input_i], %[input_j]" : : [input_i] "i" (csr_id), [input_j] "r" (csr_data));
    +
    192}
    +
    +
    193
    +
    194
    +
    195/**********************************************************************/
    +
    +
    201inline void __attribute__ ((always_inline)) neorv32_cpu_csr_set(const int csr_id, uint32_t mask) {
    +
    202
    +
    203 uint32_t csr_data = mask;
    +
    204 asm volatile ("csrs %[input_i], %[input_j]" : : [input_i] "i" (csr_id), [input_j] "r" (csr_data));
    +
    205}
    +
    +
    206
    +
    207
    +
    208/**********************************************************************/
    +
    +
    214inline void __attribute__ ((always_inline)) neorv32_cpu_csr_clr(const int csr_id, uint32_t mask) {
    +
    215
    +
    216 uint32_t csr_data = mask;
    +
    217 asm volatile ("csrc %[input_i], %[input_j]" : : [input_i] "i" (csr_id), [input_j] "r" (csr_data));
    +
    218}
    +
    +
    219
    +
    220
    +
    221/**********************************************************************/
    +
    +
    227inline void __attribute__ ((always_inline)) neorv32_cpu_sleep(void) {
    +
    228
    +
    229 asm volatile ("wfi");
    +
    230}
    +
    +
    231
    +
    232
    +
    233#endif // neorv32_cpu_h
    +
    void neorv32_cpu_store_unsigned_word(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu.h:49
    +
    void neorv32_cpu_set_mcycle(uint64_t value)
    Definition neorv32_cpu.c:72
    +
    void neorv32_cpu_csr_set(const int csr_id, uint32_t mask)
    Definition neorv32_cpu.h:201
    +
    uint32_t neorv32_cpu_pmp_get_num_regions(void)
    Definition neorv32_cpu.c:221
    +
    void neorv32_cpu_store_unsigned_half(uint32_t addr, uint16_t wdata)
    Definition neorv32_cpu.h:65
    +
    int8_t neorv32_cpu_load_signed_byte(uint32_t addr)
    Definition neorv32_cpu.h:159
    +
    uint16_t neorv32_cpu_load_unsigned_half(uint32_t addr)
    Definition neorv32_cpu.h:112
    +
    uint64_t neorv32_cpu_get_instret(void)
    Definition neorv32_cpu.c:90
    +
    uint32_t neorv32_cpu_load_unsigned_word(uint32_t addr)
    Definition neorv32_cpu.h:95
    +
    void neorv32_cpu_set_minstret(uint64_t value)
    Definition neorv32_cpu.c:116
    +
    uint32_t neorv32_cpu_hpm_get_num_counters(void)
    Definition neorv32_cpu.c:374
    +
    void neorv32_cpu_sleep(void)
    Definition neorv32_cpu.h:227
    +
    uint32_t neorv32_cpu_get_clk_from_prsc(int prsc)
    Definition neorv32_cpu.c:188
    +
    int neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config)
    Definition neorv32_cpu.c:308
    +
    void neorv32_cpu_delay_ms(uint32_t time_ms)
    Definition neorv32_cpu.c:138
    +
    uint32_t neorv32_cpu_csr_read(const int csr_id)
    Definition neorv32_cpu.h:174
    +
    void neorv32_cpu_csr_clr(const int csr_id, uint32_t mask)
    Definition neorv32_cpu.h:214
    +
    uint64_t neorv32_cpu_get_cycle(void)
    Definition neorv32_cpu.c:46
    +
    uint8_t neorv32_cpu_load_unsigned_byte(uint32_t addr)
    Definition neorv32_cpu.h:144
    +
    void neorv32_cpu_goto_user_mode(void)
    Definition neorv32_cpu.c:447
    +
    uint32_t neorv32_cpu_pmp_get_granularity(void)
    Definition neorv32_cpu.c:266
    +
    uint32_t neorv32_cpu_hpm_get_size(void)
    Definition neorv32_cpu.c:409
    +
    int16_t neorv32_cpu_load_signed_half(uint32_t addr)
    Definition neorv32_cpu.h:129
    +
    void neorv32_cpu_store_unsigned_byte(uint32_t addr, uint8_t wdata)
    Definition neorv32_cpu.h:79
    +
    void neorv32_cpu_csr_write(const int csr_id, uint32_t data)
    Definition neorv32_cpu.h:188
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__amo_8c.html b/sw/neorv32__cpu__amo_8c.html new file mode 100644 index 0000000000..5f14e84589 --- /dev/null +++ b/sw/neorv32__cpu__amo_8c.html @@ -0,0 +1,414 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cpu_amo.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cpu_amo.c File Reference
    +
    +
    + +

    Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + +

    +Functions

    uint32_t neorv32_cpu_amoswapw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoaddw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoandw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoorw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoxorw (uint32_t addr, uint32_t wdata)
     
    int32_t neorv32_cpu_amomaxw (uint32_t addr, int32_t wdata)
     
    uint32_t neorv32_cpu_amomaxuw (uint32_t addr, uint32_t wdata)
     
    int32_t neorv32_cpu_amominw (uint32_t addr, int32_t wdata)
     
    uint32_t neorv32_cpu_amominuw (uint32_t addr, uint32_t wdata)
     
    +

    Detailed Description

    +

    Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - source file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_cpu_amoaddw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoaddw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic ADD (AMOADD.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] + wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically added to original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amoandw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoandw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic AND (AMOAND.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] and wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically AND-ed with original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amomaxuw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amomaxuw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic unsigned MAX (AMOMAXU.W). return <= MEM[addr]; MEM[addr] <= maximum_unsigned(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MAX-ed with original data at address (unsigned 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (unsigned 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amomaxw()

    + +
    +
    + + + + + + + + + + + +
    int32_t neorv32_cpu_amomaxw (uint32_t addr,
    int32_t wdata )
    +
    +

    Atomic signed MAX (AMOMAX.W). return <= MEM[addr]; MEM[addr] <= maximum_signed(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MAX-ed with original data at address (signed 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (signed 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amominuw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amominuw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic unsigned MIN (AMOMINU.W). return <= MEM[addr]; MEM[addr] <= minimum_unsigned(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MIN-ed with original data at address (unsigned 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (unsigned 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amominw()

    + +
    +
    + + + + + + + + + + + +
    int32_t neorv32_cpu_amominw (uint32_t addr,
    int32_t wdata )
    +
    +

    Atomic signed MIN (AMOMIN.W). return <= MEM[addr]; MEM[addr] <= minimum_signed(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MIN-ed with original data at address (signed 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (signed 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amoorw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoorw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic OR (AMOOR.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] or wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically OR-ed with original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amoswapw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoswapw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic SWAP (AMOSWAP.W). return <= MEM[addr]; MEM[addr] <= wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically stored to address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amoxorw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoxorw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic XOR (AMOXOR.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] xor wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically XOR-ed with original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__amo_8h.html b/sw/neorv32__cpu__amo_8h.html new file mode 100644 index 0000000000..d2dd910606 --- /dev/null +++ b/sw/neorv32__cpu__amo_8h.html @@ -0,0 +1,496 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_amo.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cpu_amo.h File Reference
    +
    +
    + +

    Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    uint32_t neorv32_cpu_amolr (uint32_t addr)
     
    uint32_t neorv32_cpu_amosc (uint32_t addr, uint32_t wdata)
     
    Prototypes
    uint32_t neorv32_cpu_amoswapw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoaddw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoandw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoorw (uint32_t addr, uint32_t wdata)
     
    uint32_t neorv32_cpu_amoxorw (uint32_t addr, uint32_t wdata)
     
    int32_t neorv32_cpu_amomaxw (uint32_t addr, int32_t wdata)
     
    uint32_t neorv32_cpu_amomaxuw (uint32_t addr, uint32_t wdata)
     
    int32_t neorv32_cpu_amominw (uint32_t addr, int32_t wdata)
     
    uint32_t neorv32_cpu_amominuw (uint32_t addr, uint32_t wdata)
     
    +

    Detailed Description

    +

    Atomic memory access (read-modify-write) emulation functions using LR/SC pairs - header file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_cpu_amoaddw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoaddw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic ADD (AMOADD.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] + wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically added to original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amoandw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoandw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic AND (AMOAND.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] and wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically AND-ed with original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amolr()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_cpu_amolr (uint32_t addr)
    +
    +inline
    +
    +

    Atomic memory access: load-reservate word.

    +
    Note
    The address has to be word-aligned - otherwise an alignment exception will be raised.
    +
    Warning
    This function requires the A ISA extension.
    +
    Parameters
    + + +
    [in]addrAddress (32-bit).
    +
    +
    +
    Returns
    Read data word (32-bit).
    + +
    +
    + +

    ◆ neorv32_cpu_amomaxuw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amomaxuw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic unsigned MAX (AMOMAXU.W). return <= MEM[addr]; MEM[addr] <= maximum_unsigned(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MAX-ed with original data at address (unsigned 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (unsigned 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amomaxw()

    + +
    +
    + + + + + + + + + + + +
    int32_t neorv32_cpu_amomaxw (uint32_t addr,
    int32_t wdata )
    +
    +

    Atomic signed MAX (AMOMAX.W). return <= MEM[addr]; MEM[addr] <= maximum_signed(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MAX-ed with original data at address (signed 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (signed 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amominuw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amominuw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic unsigned MIN (AMOMINU.W). return <= MEM[addr]; MEM[addr] <= minimum_unsigned(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MIN-ed with original data at address (unsigned 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (unsigned 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amominw()

    + +
    +
    + + + + + + + + + + + +
    int32_t neorv32_cpu_amominw (uint32_t addr,
    int32_t wdata )
    +
    +

    Atomic signed MIN (AMOMIN.W). return <= MEM[addr]; MEM[addr] <= minimum_signed(MEM[addr], wdata)

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically MIN-ed with original data at address (signed 32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (signed 32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amoorw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoorw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic OR (AMOOR.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] or wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically OR-ed with original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amosc()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amosc (uint32_t addr,
    uint32_t wdata )
    +
    +inline
    +
    +

    Atomic memory access: store-conditional word.

    +
    Note
    The address has to be word-aligned - otherwise an alignment exception will be raised.
    +
    Warning
    This function requires the A ISA extension.
    +
    Parameters
    + + + +
    [in]addrAddress (32-bit).
    [in]wdataData word to-be-written conditionally (32-bit).
    +
    +
    +
    Returns
    Status: 0 = ok, 1 = failed (32-bit).
    + +
    +
    + +

    ◆ neorv32_cpu_amoswapw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoswapw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic SWAP (AMOSWAP.W). return <= MEM[addr]; MEM[addr] <= wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically stored to address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    + +

    ◆ neorv32_cpu_amoxorw()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_cpu_amoxorw (uint32_t addr,
    uint32_t wdata )
    +
    +

    Atomic XOR (AMOXOR.W). return <= MEM[addr]; MEM[addr] <= MEM[addr] xor wdata

    +
    Note
    This function requires the CPU A ISA extension.
    +
    Parameters
    + + + +
    [in]addr32-bit memory address, word-aligned.
    [in]wdataData word to be atomically XOR-ed with original data at address (32-bit).
    +
    +
    +
    Returns
    Pre-operation data loaded from address (32-bit)
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__amo_8h_source.html b/sw/neorv32__cpu__amo_8h_source.html new file mode 100644 index 0000000000..3f3bf6a8b1 --- /dev/null +++ b/sw/neorv32__cpu__amo_8h_source.html @@ -0,0 +1,181 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_amo.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_cpu_amo.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_cpu_amo_h
    +
    17#define neorv32_cpu_amo_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    +
    31inline uint32_t __attribute__ ((always_inline)) neorv32_cpu_amolr(uint32_t addr) {
    +
    32
    +
    33#if defined __riscv_atomic
    +
    34 uint32_t amo_addr = addr;
    +
    35 uint32_t amo_rdata;
    +
    36
    +
    37 asm volatile ("lr.w %[dst], 0(%[addr])" : [dst] "=r" (amo_rdata) : [addr] "r" (amo_addr));
    +
    38
    +
    39 return amo_rdata;
    +
    40#else
    +
    41 (void)addr;
    +
    42
    +
    43 return 0;
    +
    44#endif
    +
    45}
    +
    +
    46
    +
    47
    +
    48/**********************************************************************/
    +
    +
    58inline uint32_t __attribute__ ((always_inline)) neorv32_cpu_amosc(uint32_t addr, uint32_t wdata) {
    +
    59
    +
    60#if defined __riscv_atomic
    +
    61 uint32_t amo_addr = addr;
    +
    62 uint32_t amo_wdata = wdata;
    +
    63 uint32_t amo_status;
    +
    64
    +
    65 asm volatile ("sc.w %[dst], %[src], (%[addr])" : [dst] "=r" (amo_status) : [src] "r" (amo_wdata), [addr] "r" (amo_addr));
    +
    66
    +
    67 return amo_status;
    +
    68#else
    +
    69 (void)addr;
    +
    70 (void)wdata;
    +
    71
    +
    72 return 1; // always fail
    +
    73#endif
    +
    74}
    +
    +
    75
    +
    76
    +
    77/**********************************************************************/
    +
    81uint32_t neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata);
    +
    82uint32_t neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata);
    +
    83uint32_t neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata);
    +
    84uint32_t neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata);
    +
    85uint32_t neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata);
    +
    86int32_t neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata);
    +
    87uint32_t neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata);
    +
    88int32_t neorv32_cpu_amominw(uint32_t addr, int32_t wdata);
    +
    89uint32_t neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata);
    +
    93#endif // neorv32_cpu_amo_h
    +
    uint32_t neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.c:315
    +
    uint32_t neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.c:243
    +
    uint32_t neorv32_cpu_amosc(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.h:58
    +
    int32_t neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata)
    Definition neorv32_cpu_amo.c:207
    +
    uint32_t neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.c:171
    +
    int32_t neorv32_cpu_amominw(uint32_t addr, int32_t wdata)
    Definition neorv32_cpu_amo.c:279
    +
    uint32_t neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.c:99
    +
    uint32_t neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.c:29
    +
    uint32_t neorv32_cpu_amolr(uint32_t addr)
    Definition neorv32_cpu_amo.h:31
    +
    uint32_t neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.c:63
    +
    uint32_t neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata)
    Definition neorv32_cpu_amo.c:135
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__cfu_8c.html b/sw/neorv32__cpu__cfu_8c.html new file mode 100644 index 0000000000..20e41b79d6 --- /dev/null +++ b/sw/neorv32__cpu__cfu_8c.html @@ -0,0 +1,138 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_cpu_cfu.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cpu_cfu.c File Reference
    +
    +
    + +

    CPU Core custom functions unit HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + +

    +Functions

    int neorv32_cpu_cfu_available (void)
     
    +

    Detailed Description

    +

    CPU Core custom functions unit HW driver source file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_cpu_cfu_available()

    + +
    +
    + + + + + + + +
    int neorv32_cpu_cfu_available (void )
    +
    +

    Check if custom functions unit was synthesized.

    +
    Returns
    0 if CFU was not synthesized, 1 if CFU is available.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__cfu_8h.html b/sw/neorv32__cpu__cfu_8h.html new file mode 100644 index 0000000000..8f75cacbb1 --- /dev/null +++ b/sw/neorv32__cpu__cfu_8h.html @@ -0,0 +1,281 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_cfu.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cpu_cfu.h File Reference
    +
    +
    + +

    CPU Core custom functions unit HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + +

    +Macros

    Low-level CFU custom instruction prototypes ("intrinsics")
    #define neorv32_cfu_r3_instr(funct7, funct3, rs1, rs2)   CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, 0b0001011)
     
    #define neorv32_cfu_r4_instr(funct3, rs1, rs2, rs3)   CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, 0b0101011)
     
    #define neorv32_cfu_r5_instr_a(rs1, rs2, rs3, rs4)   CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, 0b1011011)
     
    #define neorv32_cfu_r5_instr_b(rs1, rs2, rs3, rs4)   CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, 0b1111011)
     
    + + + +

    +Functions

    int neorv32_cpu_cfu_available (void)
     
    +

    Detailed Description

    +

    CPU Core custom functions unit HW driver header file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ neorv32_cfu_r3_instr

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    #define neorv32_cfu_r3_instr( funct7,
    funct3,
    rs1,
    rs2 )   CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, 0b0001011)
    +
    +

    R3-type CFU custom instruction (CUSTOM-0 opcode)

    + +
    +
    + +

    ◆ neorv32_cfu_r4_instr

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    #define neorv32_cfu_r4_instr( funct3,
    rs1,
    rs2,
    rs3 )   CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, 0b0101011)
    +
    +

    R4-type CFU custom instruction (CUSTOM-1 opcode)

    + +
    +
    + +

    ◆ neorv32_cfu_r5_instr_a

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    #define neorv32_cfu_r5_instr_a( rs1,
    rs2,
    rs3,
    rs4 )   CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, 0b1011011)
    +
    +

    R5-type CFU custom instruction A (CUSTOM-2 opcode)

    + +
    +
    + +

    ◆ neorv32_cfu_r5_instr_b

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    #define neorv32_cfu_r5_instr_b( rs1,
    rs2,
    rs3,
    rs4 )   CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, 0b1111011)
    +
    +

    R5-type CFU custom instruction B (CUSTOM-3 opcode)

    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_cpu_cfu_available()

    + +
    +
    + + + + + + + +
    int neorv32_cpu_cfu_available (void )
    +
    +

    Check if custom functions unit was synthesized.

    +
    Returns
    0 if CFU was not synthesized, 1 if CFU is available.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__cfu_8h_source.html b/sw/neorv32__cpu__cfu_8h_source.html new file mode 100644 index 0000000000..7c39df43f1 --- /dev/null +++ b/sw/neorv32__cpu__cfu_8h_source.html @@ -0,0 +1,128 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_cfu.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_cpu_cfu.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_cpu_cfu_h
    +
    17#define neorv32_cpu_cfu_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22// prototypes
    + +
    24
    +
    25
    +
    26/**********************************************************************/
    +
    31#define neorv32_cfu_r3_instr(funct7, funct3, rs1, rs2) CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, 0b0001011)
    +
    33#define neorv32_cfu_r4_instr(funct3, rs1, rs2, rs3) CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, 0b0101011)
    +
    35#define neorv32_cfu_r5_instr_a(rs1, rs2, rs3, rs4) CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, 0b1011011)
    +
    37#define neorv32_cfu_r5_instr_b(rs1, rs2, rs3, rs4) CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, 0b1111011)
    +
    40#endif // neorv32_cpu_cfu_h
    +
    int neorv32_cpu_cfu_available(void)
    Definition neorv32_cpu_cfu.c:24
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__csr_8h.html b/sw/neorv32__cpu__csr_8h.html new file mode 100644 index 0000000000..0dca2b7dac --- /dev/null +++ b/sw/neorv32__cpu__csr_8h.html @@ -0,0 +1,1297 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_csr.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_cpu_csr.h File Reference
    +
    +
    + +

    Control and Status Registers (CSR) definitions. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Enumerations

    enum  NEORV32_CSR_enum {
    +  CSR_FFLAGS = 0x001 +, CSR_FRM = 0x002 +, CSR_FCSR = 0x003 +, CSR_MSTATUS = 0x300 +,
    +  CSR_MISA = 0x301 +, CSR_MIE = 0x304 +, CSR_MTVEC = 0x305 +, CSR_MCOUNTEREN = 0x306 +,
    +  CSR_MSTATUSH = 0x310 +, CSR_MCOUNTINHIBIT = 0x320 +, CSR_MENVCFG = 0x30a +, CSR_MENVCFGH = 0x31a +,
    +  CSR_MHPMEVENT3 = 0x323 +, CSR_MHPMEVENT4 = 0x324 +, CSR_MHPMEVENT5 = 0x325 +, CSR_MHPMEVENT6 = 0x326 +,
    +  CSR_MHPMEVENT7 = 0x327 +, CSR_MHPMEVENT8 = 0x328 +, CSR_MHPMEVENT9 = 0x329 +, CSR_MHPMEVENT10 = 0x32a +,
    +  CSR_MHPMEVENT11 = 0x32b +, CSR_MHPMEVENT12 = 0x32c +, CSR_MHPMEVENT13 = 0x32d +, CSR_MHPMEVENT14 = 0x32e +,
    +  CSR_MHPMEVENT15 = 0x32f +, CSR_MSCRATCH = 0x340 +, CSR_MEPC = 0x341 +, CSR_MCAUSE = 0x342 +,
    +  CSR_MTVAL = 0x343 +, CSR_MIP = 0x344 +, CSR_MTINST = 0x34a +, CSR_PMPCFG0 = 0x3a0 +,
    +  CSR_PMPCFG1 = 0x3a1 +, CSR_PMPCFG2 = 0x3a2 +, CSR_PMPCFG3 = 0x3a3 +, CSR_PMPADDR0 = 0x3b0 +,
    +  CSR_PMPADDR1 = 0x3b1 +, CSR_PMPADDR2 = 0x3b2 +, CSR_PMPADDR3 = 0x3b3 +, CSR_PMPADDR4 = 0x3b4 +,
    +  CSR_PMPADDR5 = 0x3b5 +, CSR_PMPADDR6 = 0x3b6 +, CSR_PMPADDR7 = 0x3b7 +, CSR_PMPADDR8 = 0x3b8 +,
    +  CSR_PMPADDR9 = 0x3b9 +, CSR_PMPADDR10 = 0x3ba +, CSR_PMPADDR11 = 0x3bb +, CSR_PMPADDR12 = 0x3bc +,
    +  CSR_PMPADDR13 = 0x3bd +, CSR_PMPADDR14 = 0x3be +, CSR_PMPADDR15 = 0x3bf +, CSR_TSELECT = 0x7a0 +,
    +  CSR_TDATA1 = 0x7a1 +, CSR_TDATA2 = 0x7a2 +, CSR_TINFO = 0x7a4 +, CSR_DCSR = 0x7b0 +,
    +  CSR_DPC = 0x7b1 +, CSR_DSCRATCH0 = 0x7b2 +, CSR_CFUREG0 = 0x800 +, CSR_CFUREG1 = 0x801 +,
    +  CSR_CFUREG2 = 0x802 +, CSR_CFUREG3 = 0x803 +, CSR_MCYCLE = 0xb00 +, CSR_MINSTRET = 0xb02 +,
    +  CSR_MHPMCOUNTER3 = 0xb03 +, CSR_MHPMCOUNTER4 = 0xb04 +, CSR_MHPMCOUNTER5 = 0xb05 +, CSR_MHPMCOUNTER6 = 0xb06 +,
    +  CSR_MHPMCOUNTER7 = 0xb07 +, CSR_MHPMCOUNTER8 = 0xb08 +, CSR_MHPMCOUNTER9 = 0xb09 +, CSR_MHPMCOUNTER10 = 0xb0a +,
    +  CSR_MHPMCOUNTER11 = 0xb0b +, CSR_MHPMCOUNTER12 = 0xb0c +, CSR_MHPMCOUNTER13 = 0xb0d +, CSR_MHPMCOUNTER14 = 0xb0e +,
    +  CSR_MHPMCOUNTER15 = 0xb0f +, CSR_MCYCLEH = 0xb80 +, CSR_MINSTRETH = 0xb82 +, CSR_MHPMCOUNTER3H = 0xb83 +,
    +  CSR_MHPMCOUNTER4H = 0xb84 +, CSR_MHPMCOUNTER5H = 0xb85 +, CSR_MHPMCOUNTER6H = 0xb86 +, CSR_MHPMCOUNTER7H = 0xb87 +,
    +  CSR_MHPMCOUNTER8H = 0xb88 +, CSR_MHPMCOUNTER9H = 0xb89 +, CSR_MHPMCOUNTER10H = 0xb8a +, CSR_MHPMCOUNTER11H = 0xb8b +,
    +  CSR_MHPMCOUNTER12H = 0xb8c +, CSR_MHPMCOUNTER13H = 0xb8d +, CSR_MHPMCOUNTER14H = 0xb8e +, CSR_MHPMCOUNTER15H = 0xb8f +,
    +  CSR_CYCLE = 0xc00 +, CSR_INSTRET = 0xc02 +, CSR_HPMCOUNTER3 = 0xc03 +, CSR_HPMCOUNTER4 = 0xc04 +,
    +  CSR_HPMCOUNTER5 = 0xc05 +, CSR_HPMCOUNTER6 = 0xc06 +, CSR_HPMCOUNTER7 = 0xc07 +, CSR_HPMCOUNTER8 = 0xc08 +,
    +  CSR_HPMCOUNTER9 = 0xc09 +, CSR_HPMCOUNTER10 = 0xc0a +, CSR_HPMCOUNTER11 = 0xc0b +, CSR_HPMCOUNTER12 = 0xc0c +,
    +  CSR_HPMCOUNTER13 = 0xc0d +, CSR_HPMCOUNTER14 = 0xc0e +, CSR_HPMCOUNTER15 = 0xc0f +, CSR_CYCLEH = 0xc80 +,
    +  CSR_INSTRETH = 0xc82 +, CSR_HPMCOUNTER3H = 0xc83 +, CSR_HPMCOUNTER4H = 0xc84 +, CSR_HPMCOUNTER5H = 0xc85 +,
    +  CSR_HPMCOUNTER6H = 0xc86 +, CSR_HPMCOUNTER7H = 0xc87 +, CSR_HPMCOUNTER8H = 0xc88 +, CSR_HPMCOUNTER9H = 0xc89 +,
    +  CSR_HPMCOUNTER10H = 0xc8a +, CSR_HPMCOUNTER11H = 0xc8b +, CSR_HPMCOUNTER12H = 0xc8c +, CSR_HPMCOUNTER13H = 0xc8d +,
    +  CSR_HPMCOUNTER14H = 0xc8e +, CSR_HPMCOUNTER15H = 0xc8f +, CSR_MVENDORID = 0xf11 +, CSR_MARCHID = 0xf12 +,
    +  CSR_MIMPID = 0xf13 +, CSR_MHARTID = 0xf14 +, CSR_MCONFIGPTR = 0xf15 +, CSR_MXISA = 0xfc0 +
    + }
     
    enum  NEORV32_CSR_FFLAGS_enum {
    +  CSR_FFLAGS_NX = 0 +, CSR_FFLAGS_UF = 1 +, CSR_FFLAGS_OF = 2 +, CSR_FFLAGS_DZ = 3 +,
    +  CSR_FFLAGS_NV = 4 +
    + }
     
    enum  NEORV32_CSR_MSTATUS_enum {
    +  CSR_MSTATUS_MIE = 3 +, CSR_MSTATUS_MPIE = 7 +, CSR_MSTATUS_MPP_L = 11 +, CSR_MSTATUS_MPP_H = 12 +,
    +  CSR_MSTATUS_MPRV = 17 +, CSR_MSTATUS_TW = 21 +
    + }
     
    enum  NEORV32_CSR_MCOUNTINHIBIT_enum {
    +  CSR_MCOUNTINHIBIT_CY = 0 +, CSR_MCOUNTINHIBIT_IR = 2 +, CSR_MCOUNTINHIBIT_HPM3 = 3 +, CSR_MCOUNTINHIBIT_HPM4 = 4 +,
    +  CSR_MCOUNTINHIBIT_HPM5 = 5 +, CSR_MCOUNTINHIBIT_HPM6 = 6 +, CSR_MCOUNTINHIBIT_HPM7 = 7 +, CSR_MCOUNTINHIBIT_HPM8 = 8 +,
    +  CSR_MCOUNTINHIBIT_HPM9 = 9 +, CSR_MCOUNTINHIBIT_HPM10 = 10 +, CSR_MCOUNTINHIBIT_HPM11 = 11 +, CSR_MCOUNTINHIBIT_HPM12 = 12 +,
    +  CSR_MCOUNTINHIBIT_HPM13 = 13 +, CSR_MCOUNTINHIBIT_HPM14 = 14 +, CSR_MCOUNTINHIBIT_HPM15 = 15 +, CSR_MCOUNTINHIBIT_HPM16 = 16 +,
    +  CSR_MCOUNTINHIBIT_HPM17 = 17 +, CSR_MCOUNTINHIBIT_HPM18 = 18 +, CSR_MCOUNTINHIBIT_HPM19 = 19 +, CSR_MCOUNTINHIBIT_HPM20 = 20 +,
    +  CSR_MCOUNTINHIBIT_HPM21 = 21 +, CSR_MCOUNTINHIBIT_HPM22 = 22 +, CSR_MCOUNTINHIBIT_HPM23 = 23 +, CSR_MCOUNTINHIBIT_HPM24 = 24 +,
    +  CSR_MCOUNTINHIBIT_HPM25 = 25 +, CSR_MCOUNTINHIBIT_HPM26 = 26 +, CSR_MCOUNTINHIBIT_HPM27 = 27 +, CSR_MCOUNTINHIBIT_HPM28 = 28 +,
    +  CSR_MCOUNTINHIBIT_HPM29 = 29 +, CSR_MCOUNTINHIBIT_HPM30 = 30 +, CSR_MCOUNTINHIBIT_HPM31 = 31 +
    + }
     
    enum  NEORV32_CSR_MIE_enum {
    +  CSR_MIE_MSIE = 3 +, CSR_MIE_MTIE = 7 +, CSR_MIE_MEIE = 11 +, CSR_MIE_FIRQ0E = 16 +,
    +  CSR_MIE_FIRQ1E = 17 +, CSR_MIE_FIRQ2E = 18 +, CSR_MIE_FIRQ3E = 19 +, CSR_MIE_FIRQ4E = 20 +,
    +  CSR_MIE_FIRQ5E = 21 +, CSR_MIE_FIRQ6E = 22 +, CSR_MIE_FIRQ7E = 23 +, CSR_MIE_FIRQ8E = 24 +,
    +  CSR_MIE_FIRQ9E = 25 +, CSR_MIE_FIRQ10E = 26 +, CSR_MIE_FIRQ11E = 27 +, CSR_MIE_FIRQ12E = 28 +,
    +  CSR_MIE_FIRQ13E = 29 +, CSR_MIE_FIRQ14E = 30 +, CSR_MIE_FIRQ15E = 31 +
    + }
     
    enum  NEORV32_CSR_MIP_enum {
    +  CSR_MIP_MSIP = 3 +, CSR_MIP_MTIP = 7 +, CSR_MIP_MEIP = 11 +, CSR_MIP_FIRQ0P = 16 +,
    +  CSR_MIP_FIRQ1P = 17 +, CSR_MIP_FIRQ2P = 18 +, CSR_MIP_FIRQ3P = 19 +, CSR_MIP_FIRQ4P = 20 +,
    +  CSR_MIP_FIRQ5P = 21 +, CSR_MIP_FIRQ6P = 22 +, CSR_MIP_FIRQ7P = 23 +, CSR_MIP_FIRQ8P = 24 +,
    +  CSR_MIP_FIRQ9P = 25 +, CSR_MIP_FIRQ10P = 26 +, CSR_MIP_FIRQ11P = 27 +, CSR_MIP_FIRQ12P = 28 +,
    +  CSR_MIP_FIRQ13P = 29 +, CSR_MIP_FIRQ14P = 30 +, CSR_MIP_FIRQ15P = 31 +
    + }
     
    enum  NEORV32_CSR_MISA_enum {
    +  CSR_MISA_A = 0 +, CSR_MISA_B = 1 +, CSR_MISA_C = 2 +, CSR_MISA_D = 3 +,
    +  CSR_MISA_E = 4 +, CSR_MISA_F = 5 +, CSR_MISA_I = 8 +, CSR_MISA_M = 12 +,
    +  CSR_MISA_U = 20 +, CSR_MISA_X = 23 +, CSR_MISA_MXL_LO = 30 +, CSR_MISA_MXL_HI = 31 +
    + }
     
    enum  NEORV32_CSR_XISA_enum {
    +  CSR_MXISA_ZICSR = 0 +, CSR_MXISA_ZIFENCEI = 1 +, CSR_MXISA_ZMMUL = 2 +, CSR_MXISA_ZXCFU = 3 +,
    +  CSR_MXISA_ZFINX = 5 +, CSR_MXISA_ZICOND = 6 +, CSR_MXISA_ZICNTR = 7 +, CSR_MXISA_SMPMP = 8 +,
    +  CSR_MXISA_ZIHPM = 9 +, CSR_MXISA_SDEXT = 10 +, CSR_MXISA_SDTRIG = 11 +, CSR_MXISA_IS_SIM = 20 +,
    +  CSR_MXISA_RFHWRST = 29 +, CSR_MXISA_FASTMUL = 30 +, CSR_MXISA_FASTSHIFT = 31 +
    + }
     
    enum  NEORV32_HPMCNT_EVENT_enum {
    +  HPMCNT_EVENT_CY = 0 +, HPMCNT_EVENT_TM = 1 +, HPMCNT_EVENT_IR = 2 +, HPMCNT_EVENT_COMPR = 3 +,
    +  HPMCNT_EVENT_WAIT_DIS = 4 +, HPMCNT_EVENT_WAIT_ALU = 5 +, HPMCNT_EVENT_BRANCH = 6 +, HPMCNT_EVENT_BRANCHED = 7 +,
    +  HPMCNT_EVENT_LOAD = 8 +, HPMCNT_EVENT_STORE = 9 +, HPMCNT_EVENT_WAIT_LSU = 10 +, HPMCNT_EVENT_TRAP = 11 +
    + }
     
    enum  NEORV32_PMPCFG_ATTRIBUTES_enum {
    +  PMPCFG_R = 0 +, PMPCFG_W = 1 +, PMPCFG_X = 2 +, PMPCFG_A_LSB = 3 +,
    +  PMPCFG_A_MSB = 4 +, PMPCFG_L = 7 +
    + }
     
    enum  NEORV32_PMP_MODES_enum { PMP_OFF = 0 +, PMP_TOR = 1 +, PMP_NA4 = 2 +, PMP_NAPOT = 3 + }
     
    enum  NEORV32_EXCEPTION_CODES_enum {
    +  TRAP_CODE_I_MISALIGNED = 0x00000000U +, TRAP_CODE_I_ACCESS = 0x00000001U +, TRAP_CODE_I_ILLEGAL = 0x00000002U +, TRAP_CODE_BREAKPOINT = 0x00000003U +,
    +  TRAP_CODE_L_MISALIGNED = 0x00000004U +, TRAP_CODE_L_ACCESS = 0x00000005U +, TRAP_CODE_S_MISALIGNED = 0x00000006U +, TRAP_CODE_S_ACCESS = 0x00000007U +,
    +  TRAP_CODE_UENV_CALL = 0x00000008U +, TRAP_CODE_MENV_CALL = 0x0000000bU +, TRAP_CODE_MSI = 0x80000003U +, TRAP_CODE_MTI = 0x80000007U +,
    +  TRAP_CODE_MEI = 0x8000000bU +, TRAP_CODE_FIRQ_0 = 0x80000010U +, TRAP_CODE_FIRQ_1 = 0x80000011U +, TRAP_CODE_FIRQ_2 = 0x80000012U +,
    +  TRAP_CODE_FIRQ_3 = 0x80000013U +, TRAP_CODE_FIRQ_4 = 0x80000014U +, TRAP_CODE_FIRQ_5 = 0x80000015U +, TRAP_CODE_FIRQ_6 = 0x80000016U +,
    +  TRAP_CODE_FIRQ_7 = 0x80000017U +, TRAP_CODE_FIRQ_8 = 0x80000018U +, TRAP_CODE_FIRQ_9 = 0x80000019U +, TRAP_CODE_FIRQ_10 = 0x8000001aU +,
    +  TRAP_CODE_FIRQ_11 = 0x8000001bU +, TRAP_CODE_FIRQ_12 = 0x8000001cU +, TRAP_CODE_FIRQ_13 = 0x8000001dU +, TRAP_CODE_FIRQ_14 = 0x8000001eU +,
    +  TRAP_CODE_FIRQ_15 = 0x8000001fU +
    + }
     
    +

    Detailed Description

    +

    Control and Status Registers (CSR) definitions.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_CSR_enum

    + +
    +
    + + + + +
    enum NEORV32_CSR_enum
    +
    +

    Available CPU Control and Status Registers (CSRs)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    CSR_FFLAGS 

    0x001 - fflags: Floating-point accrued exception flags

    +
    CSR_FRM 

    0x002 - frm: Floating-point dynamic rounding mode

    +
    CSR_FCSR 

    0x003 - fcsr: Floating-point control/status register (frm + fflags)

    +
    CSR_MSTATUS 

    0x300 - mstatus: Machine status register

    +
    CSR_MISA 

    0x301 - misa: Machine ISA and extensions

    +
    CSR_MIE 

    0x304 - mie: Machine interrupt-enable register

    +
    CSR_MTVEC 

    0x305 - mtvec: Machine trap-handler base address

    +
    CSR_MCOUNTEREN 

    0x305 - mcounteren: Machine counter enable register

    +
    CSR_MSTATUSH 

    0x310 - mstatush: Machine status register - high word

    +
    CSR_MCOUNTINHIBIT 

    0x320 - mcountinhibit: Machine counter-inhibit register

    +
    CSR_MENVCFG 

    0x30a - menvcfg: Machine environment configuration register - low word

    +
    CSR_MENVCFGH 

    0x31a - menvcfgh: Machine environment configuration register - high word

    +
    CSR_MHPMEVENT3 

    0x323 - mhpmevent3: Machine hardware performance monitor event selector 3
    +

    +
    CSR_MHPMEVENT4 

    0x324 - mhpmevent4: Machine hardware performance monitor event selector 4
    +

    +
    CSR_MHPMEVENT5 

    0x325 - mhpmevent5: Machine hardware performance monitor event selector 5
    +

    +
    CSR_MHPMEVENT6 

    0x326 - mhpmevent6: Machine hardware performance monitor event selector 6
    +

    +
    CSR_MHPMEVENT7 

    0x327 - mhpmevent7: Machine hardware performance monitor event selector 7
    +

    +
    CSR_MHPMEVENT8 

    0x328 - mhpmevent8: Machine hardware performance monitor event selector 8
    +

    +
    CSR_MHPMEVENT9 

    0x329 - mhpmevent9: Machine hardware performance monitor event selector 9
    +

    +
    CSR_MHPMEVENT10 

    0x32a - mhpmevent10: Machine hardware performance monitor event selector 10

    +
    CSR_MHPMEVENT11 

    0x32b - mhpmevent11: Machine hardware performance monitor event selector 11

    +
    CSR_MHPMEVENT12 

    0x32c - mhpmevent12: Machine hardware performance monitor event selector 12

    +
    CSR_MHPMEVENT13 

    0x32d - mhpmevent13: Machine hardware performance monitor event selector 13

    +
    CSR_MHPMEVENT14 

    0x32e - mhpmevent14: Machine hardware performance monitor event selector 14

    +
    CSR_MHPMEVENT15 

    0x32f - mhpmevent15: Machine hardware performance monitor event selector 15

    +
    CSR_MSCRATCH 

    0x340 - mscratch: Machine scratch register

    +
    CSR_MEPC 

    0x341 - mepc: Machine exception program counter

    +
    CSR_MCAUSE 

    0x342 - mcause: Machine trap cause

    +
    CSR_MTVAL 

    0x343 - mtval: Machine trap value

    +
    CSR_MIP 

    0x344 - mip: Machine interrupt pending register

    +
    CSR_MTINST 

    0x34a - mtinst: Machine trap instruction

    +
    CSR_PMPCFG0 

    0x3a0 - pmpcfg0: Physical memory protection configuration register 0 (regions 0..3)

    +
    CSR_PMPCFG1 

    0x3a1 - pmpcfg1: Physical memory protection configuration register 1 (regions 4..7)

    +
    CSR_PMPCFG2 

    0x3a2 - pmpcfg2: Physical memory protection configuration register 2 (regions 8..11)

    +
    CSR_PMPCFG3 

    0x3a3 - pmpcfg3: Physical memory protection configuration register 3 (regions 12..15)

    +
    CSR_PMPADDR0 

    0x3b0 - pmpaddr0: Physical memory protection address register 0

    +
    CSR_PMPADDR1 

    0x3b1 - pmpaddr1: Physical memory protection address register 1

    +
    CSR_PMPADDR2 

    0x3b2 - pmpaddr2: Physical memory protection address register 2

    +
    CSR_PMPADDR3 

    0x3b3 - pmpaddr3: Physical memory protection address register 3

    +
    CSR_PMPADDR4 

    0x3b4 - pmpaddr4: Physical memory protection address register 4

    +
    CSR_PMPADDR5 

    0x3b5 - pmpaddr5: Physical memory protection address register 5

    +
    CSR_PMPADDR6 

    0x3b6 - pmpaddr6: Physical memory protection address register 6

    +
    CSR_PMPADDR7 

    0x3b7 - pmpaddr7: Physical memory protection address register 7

    +
    CSR_PMPADDR8 

    0x3b8 - pmpaddr8: Physical memory protection address register 8

    +
    CSR_PMPADDR9 

    0x3b9 - pmpaddr9: Physical memory protection address register 9

    +
    CSR_PMPADDR10 

    0x3ba - pmpaddr10: Physical memory protection address register 10

    +
    CSR_PMPADDR11 

    0x3bb - pmpaddr11: Physical memory protection address register 11

    +
    CSR_PMPADDR12 

    0x3bc - pmpaddr12: Physical memory protection address register 12

    +
    CSR_PMPADDR13 

    0x3bd - pmpaddr13: Physical memory protection address register 13

    +
    CSR_PMPADDR14 

    0x3be - pmpaddr14: Physical memory protection address register 14

    +
    CSR_PMPADDR15 

    0x3bf - pmpaddr15: Physical memory protection address register 15

    +
    CSR_TSELECT 

    0x7a0 - tselect: Trigger select

    +
    CSR_TDATA1 

    0x7a1 - tdata1: Trigger data register 0

    +
    CSR_TDATA2 

    0x7a2 - tdata2: Trigger data register 1

    +
    CSR_TINFO 

    0x7a4 - tinfo: Trigger info

    +
    CSR_DCSR 

    0x7b0 - dcsr: Debug status and control register

    +
    CSR_DPC 

    0x7b1 - dpc: Debug program counter

    +
    CSR_DSCRATCH0 

    0x7b2 - dscratch0: Debug scratch register

    +
    CSR_CFUREG0 

    0x800 - cfureg0: custom CFU CSR 0

    +
    CSR_CFUREG1 

    0x801 - cfureg1: custom CFU CSR 1

    +
    CSR_CFUREG2 

    0x802 - cfureg2: custom CFU CSR 2

    +
    CSR_CFUREG3 

    0x803 - cfureg3: custom CFU CSR 3

    +
    CSR_MCYCLE 

    0xb00 - mcycle: Machine cycle counter low word

    +
    CSR_MINSTRET 

    0xb02 - minstret: Machine instructions-retired counter low word

    +
    CSR_MHPMCOUNTER3 

    0xb03 - mhpmcounter3: Machine hardware performance monitor 3 counter low word

    +
    CSR_MHPMCOUNTER4 

    0xb04 - mhpmcounter4: Machine hardware performance monitor 4 counter low word

    +
    CSR_MHPMCOUNTER5 

    0xb05 - mhpmcounter5: Machine hardware performance monitor 5 counter low word

    +
    CSR_MHPMCOUNTER6 

    0xb06 - mhpmcounter6: Machine hardware performance monitor 6 counter low word

    +
    CSR_MHPMCOUNTER7 

    0xb07 - mhpmcounter7: Machine hardware performance monitor 7 counter low word

    +
    CSR_MHPMCOUNTER8 

    0xb08 - mhpmcounter8: Machine hardware performance monitor 8 counter low word

    +
    CSR_MHPMCOUNTER9 

    0xb09 - mhpmcounter9: Machine hardware performance monitor 9 counter low word

    +
    CSR_MHPMCOUNTER10 

    0xb0a - mhpmcounter10: Machine hardware performance monitor 10 counter low word

    +
    CSR_MHPMCOUNTER11 

    0xb0b - mhpmcounter11: Machine hardware performance monitor 11 counter low word

    +
    CSR_MHPMCOUNTER12 

    0xb0c - mhpmcounter12: Machine hardware performance monitor 12 counter low word

    +
    CSR_MHPMCOUNTER13 

    0xb0d - mhpmcounter13: Machine hardware performance monitor 13 counter low word

    +
    CSR_MHPMCOUNTER14 

    0xb0e - mhpmcounter14: Machine hardware performance monitor 14 counter low word

    +
    CSR_MHPMCOUNTER15 

    0xb0f - mhpmcounter15: Machine hardware performance monitor 15 counter low word

    +
    CSR_MCYCLEH 

    0xb80 - mcycleh: Machine cycle counter high word

    +
    CSR_MINSTRETH 

    0xb82 - minstreth: Machine instructions-retired counter high word

    +
    CSR_MHPMCOUNTER3H 

    0xb83 - mhpmcounter3 : Machine hardware performance monitor 3 counter high word

    +
    CSR_MHPMCOUNTER4H 

    0xb84 - mhpmcounter4h: Machine hardware performance monitor 4 counter high word

    +
    CSR_MHPMCOUNTER5H 

    0xb85 - mhpmcounter5h: Machine hardware performance monitor 5 counter high word

    +
    CSR_MHPMCOUNTER6H 

    0xb86 - mhpmcounter6h: Machine hardware performance monitor 6 counter high word

    +
    CSR_MHPMCOUNTER7H 

    0xb87 - mhpmcounter7h: Machine hardware performance monitor 7 counter high word

    +
    CSR_MHPMCOUNTER8H 

    0xb88 - mhpmcounter8h: Machine hardware performance monitor 8 counter high word

    +
    CSR_MHPMCOUNTER9H 

    0xb89 - mhpmcounter9h: Machine hardware performance monitor 9 counter high word

    +
    CSR_MHPMCOUNTER10H 

    0xb8a - mhpmcounter10h: Machine hardware performance monitor 10 counter high word

    +
    CSR_MHPMCOUNTER11H 

    0xb8b - mhpmcounter11h: Machine hardware performance monitor 11 counter high word

    +
    CSR_MHPMCOUNTER12H 

    0xb8c - mhpmcounter12h: Machine hardware performance monitor 12 counter high word

    +
    CSR_MHPMCOUNTER13H 

    0xb8d - mhpmcounter13h: Machine hardware performance monitor 13 counter high word

    +
    CSR_MHPMCOUNTER14H 

    0xb8e - mhpmcounter14h: Machine hardware performance monitor 14 counter high word

    +
    CSR_MHPMCOUNTER15H 

    0xb8f - mhpmcounter15h: Machine hardware performance monitor 15 counter high word

    +
    CSR_CYCLE 

    0xc00 - cycle: User cycle counter low word

    +
    CSR_INSTRET 

    0xc02 - instret: User instructions-retired counter low word

    +
    CSR_HPMCOUNTER3 

    0xc03 - hpmcounter3: User hardware performance monitor 3 counter low word

    +
    CSR_HPMCOUNTER4 

    0xc04 - hpmcounter4: User hardware performance monitor 4 counter low word

    +
    CSR_HPMCOUNTER5 

    0xc05 - hpmcounter5: User hardware performance monitor 5 counter low word

    +
    CSR_HPMCOUNTER6 

    0xc06 - hpmcounter6: User hardware performance monitor 6 counter low word

    +
    CSR_HPMCOUNTER7 

    0xc07 - hpmcounter7: User hardware performance monitor 7 counter low word

    +
    CSR_HPMCOUNTER8 

    0xc08 - hpmcounter8: User hardware performance monitor 8 counter low word

    +
    CSR_HPMCOUNTER9 

    0xc09 - hpmcounter9: User hardware performance monitor 9 counter low word

    +
    CSR_HPMCOUNTER10 

    0xc0a - hpmcounter10: User hardware performance monitor 10 counter low word

    +
    CSR_HPMCOUNTER11 

    0xc0b - hpmcounter11: User hardware performance monitor 11 counter low word

    +
    CSR_HPMCOUNTER12 

    0xc0c - hpmcounter12: User hardware performance monitor 12 counter low word

    +
    CSR_HPMCOUNTER13 

    0xc0d - hpmcounter13: User hardware performance monitor 13 counter low word

    +
    CSR_HPMCOUNTER14 

    0xc0e - hpmcounter14: User hardware performance monitor 14 counter low word

    +
    CSR_HPMCOUNTER15 

    0xc0f - hpmcounter15: User hardware performance monitor 15 counter low word

    +
    CSR_CYCLEH 

    0xc80 - cycleh: User cycle counter high word

    +
    CSR_INSTRETH 

    0xc82 - instreth: User instructions-retired counter high word

    +
    CSR_HPMCOUNTER3H 

    0xc83 - hpmcounter3h: User hardware performance monitor 3 counter high word

    +
    CSR_HPMCOUNTER4H 

    0xc84 - hpmcounter4h: User hardware performance monitor 4 counter high word

    +
    CSR_HPMCOUNTER5H 

    0xc85 - hpmcounter5h: User hardware performance monitor 5 counter high word

    +
    CSR_HPMCOUNTER6H 

    0xc86 - hpmcounter6h: User hardware performance monitor 6 counter high word

    +
    CSR_HPMCOUNTER7H 

    0xc87 - hpmcounter7h: User hardware performance monitor 7 counter high word

    +
    CSR_HPMCOUNTER8H 

    0xc88 - hpmcounter8h: User hardware performance monitor 8 counter high word

    +
    CSR_HPMCOUNTER9H 

    0xc89 - hpmcounter9h: User hardware performance monitor 9 counter high word

    +
    CSR_HPMCOUNTER10H 

    0xc8a - hpmcounter10h: User hardware performance monitor 10 counter high word

    +
    CSR_HPMCOUNTER11H 

    0xc8b - hpmcounter11h: User hardware performance monitor 11 counter high word

    +
    CSR_HPMCOUNTER12H 

    0xc8c - hpmcounter12h: User hardware performance monitor 12 counter high word

    +
    CSR_HPMCOUNTER13H 

    0xc8d - hpmcounter13h: User hardware performance monitor 13 counter high word

    +
    CSR_HPMCOUNTER14H 

    0xc8e - hpmcounter14h: User hardware performance monitor 14 counter high word

    +
    CSR_HPMCOUNTER15H 

    0xc8f - hpmcounter15h: User hardware performance monitor 15 counter high word

    +
    CSR_MVENDORID 

    0xf11 - mvendorid: Machine vendor ID

    +
    CSR_MARCHID 

    0xf12 - marchid: Machine architecture ID

    +
    CSR_MIMPID 

    0xf13 - mimpid: Machine implementation ID

    +
    CSR_MHARTID 

    0xf14 - mhartid: Machine hardware thread ID

    +
    CSR_MCONFIGPTR 

    0xf15 - mconfigptr: Machine configuration pointer register

    +
    CSR_MXISA 

    0xfc0 - mxisa: Machine extended ISA and extensions (NEORV32-specific)

    +
    + +
    +
    + +

    ◆ NEORV32_CSR_FFLAGS_enum

    + +
    +
    + + + + +
    enum NEORV32_CSR_FFLAGS_enum
    +
    +

    CPU fflags (fcsr) CSR (r/w): FPU accrued exception flags

    + + + + + + +
    Enumerator
    CSR_FFLAGS_NX 

    CPU fflags CSR (0): NX - inexact (r/w)

    +
    CSR_FFLAGS_UF 

    CPU fflags CSR (1): UF - underflow (r/w)

    +
    CSR_FFLAGS_OF 

    CPU fflags CSR (2): OF - overflow (r/w)

    +
    CSR_FFLAGS_DZ 

    CPU fflags CSR (3): DZ - divide by zero (r/w)

    +
    CSR_FFLAGS_NV 

    CPU fflags CSR (4): NV - invalid operation (r/w)

    +
    + +
    +
    + +

    ◆ NEORV32_CSR_MCOUNTINHIBIT_enum

    + +
    +
    +

    CPU mcountinhibit CSR (r/w): Machine counter-inhibit

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    CSR_MCOUNTINHIBIT_CY 

    CPU mcountinhibit CSR (0): CY - Enable auto-increment of [m]cycle[h] CSR when set (r/w)

    +
    CSR_MCOUNTINHIBIT_IR 

    CPU mcountinhibit CSR (2): IR - Enable auto-increment of [m]instret[h] CSR when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM3 

    CPU mcountinhibit CSR (3): HPM3 - Enable auto-increment of hpmcnt3[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM4 

    CPU mcountinhibit CSR (4): HPM4 - Enable auto-increment of hpmcnt4[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM5 

    CPU mcountinhibit CSR (5): HPM5 - Enable auto-increment of hpmcnt5[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM6 

    CPU mcountinhibit CSR (6): HPM6 - Enable auto-increment of hpmcnt6[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM7 

    CPU mcountinhibit CSR (7): HPM7 - Enable auto-increment of hpmcnt7[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM8 

    CPU mcountinhibit CSR (8): HPM8 - Enable auto-increment of hpmcnt8[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM9 

    CPU mcountinhibit CSR (9): HPM9 - Enable auto-increment of hpmcnt9[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM10 

    CPU mcountinhibit CSR (10): HPM10 - Enable auto-increment of hpmcnt10[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM11 

    CPU mcountinhibit CSR (11): HPM11 - Enable auto-increment of hpmcnt11[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM12 

    CPU mcountinhibit CSR (12): HPM12 - Enable auto-increment of hpmcnt12[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM13 

    CPU mcountinhibit CSR (13): HPM13 - Enable auto-increment of hpmcnt13[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM14 

    CPU mcountinhibit CSR (14): HPM14 - Enable auto-increment of hpmcnt14[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM15 

    CPU mcountinhibit CSR (15): HPM15 - Enable auto-increment of hpmcnt15[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM16 

    CPU mcountinhibit CSR (16): HPM16 - Enable auto-increment of hpmcnt16[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM17 

    CPU mcountinhibit CSR (17): HPM17 - Enable auto-increment of hpmcnt17[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM18 

    CPU mcountinhibit CSR (18): HPM18 - Enable auto-increment of hpmcnt18[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM19 

    CPU mcountinhibit CSR (19): HPM19 - Enable auto-increment of hpmcnt19[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM20 

    CPU mcountinhibit CSR (20): HPM20 - Enable auto-increment of hpmcnt20[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM21 

    CPU mcountinhibit CSR (21): HPM21 - Enable auto-increment of hpmcnt21[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM22 

    CPU mcountinhibit CSR (22): HPM22 - Enable auto-increment of hpmcnt22[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM23 

    CPU mcountinhibit CSR (23): HPM23 - Enable auto-increment of hpmcnt23[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM24 

    CPU mcountinhibit CSR (24): HPM24 - Enable auto-increment of hpmcnt24[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM25 

    CPU mcountinhibit CSR (25): HPM25 - Enable auto-increment of hpmcnt25[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM26 

    CPU mcountinhibit CSR (26): HPM26 - Enable auto-increment of hpmcnt26[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM27 

    CPU mcountinhibit CSR (27): HPM27 - Enable auto-increment of hpmcnt27[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM28 

    CPU mcountinhibit CSR (28): HPM28 - Enable auto-increment of hpmcnt28[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM29 

    CPU mcountinhibit CSR (29): HPM29 - Enable auto-increment of hpmcnt29[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM30 

    CPU mcountinhibit CSR (30): HPM30 - Enable auto-increment of hpmcnt30[h] when set (r/w)

    +
    CSR_MCOUNTINHIBIT_HPM31 

    CPU mcountinhibit CSR (31): HPM31 - Enable auto-increment of hpmcnt31[h] when set (r/w)

    +
    + +
    +
    + +

    ◆ NEORV32_CSR_MIE_enum

    + +
    +
    + + + + +
    enum NEORV32_CSR_MIE_enum
    +
    +

    CPU mie CSR (r/w): Machine interrupt enable

    + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    CSR_MIE_MSIE 

    CPU mie CSR (3): MSIE - Machine software interrupt enable (r/w)

    +
    CSR_MIE_MTIE 

    CPU mie CSR (7): MTIE - Machine timer interrupt enable bit (r/w)

    +
    CSR_MIE_MEIE 

    CPU mie CSR (11): MEIE - Machine external interrupt enable bit (r/w)

    +
    CSR_MIE_FIRQ0E 

    CPU mie CSR (16): FIRQ0E - Fast interrupt channel 0 enable bit (r/w)

    +
    CSR_MIE_FIRQ1E 

    CPU mie CSR (17): FIRQ1E - Fast interrupt channel 1 enable bit (r/w)

    +
    CSR_MIE_FIRQ2E 

    CPU mie CSR (18): FIRQ2E - Fast interrupt channel 2 enable bit (r/w)

    +
    CSR_MIE_FIRQ3E 

    CPU mie CSR (19): FIRQ3E - Fast interrupt channel 3 enable bit (r/w)

    +
    CSR_MIE_FIRQ4E 

    CPU mie CSR (20): FIRQ4E - Fast interrupt channel 4 enable bit (r/w)

    +
    CSR_MIE_FIRQ5E 

    CPU mie CSR (21): FIRQ5E - Fast interrupt channel 5 enable bit (r/w)

    +
    CSR_MIE_FIRQ6E 

    CPU mie CSR (22): FIRQ6E - Fast interrupt channel 6 enable bit (r/w)

    +
    CSR_MIE_FIRQ7E 

    CPU mie CSR (23): FIRQ7E - Fast interrupt channel 7 enable bit (r/w)

    +
    CSR_MIE_FIRQ8E 

    CPU mie CSR (24): FIRQ8E - Fast interrupt channel 8 enable bit (r/w)

    +
    CSR_MIE_FIRQ9E 

    CPU mie CSR (25): FIRQ9E - Fast interrupt channel 9 enable bit (r/w)

    +
    CSR_MIE_FIRQ10E 

    CPU mie CSR (26): FIRQ10E - Fast interrupt channel 10 enable bit (r/w)

    +
    CSR_MIE_FIRQ11E 

    CPU mie CSR (27): FIRQ11E - Fast interrupt channel 11 enable bit (r/w)

    +
    CSR_MIE_FIRQ12E 

    CPU mie CSR (28): FIRQ12E - Fast interrupt channel 12 enable bit (r/w)

    +
    CSR_MIE_FIRQ13E 

    CPU mie CSR (29): FIRQ13E - Fast interrupt channel 13 enable bit (r/w)

    +
    CSR_MIE_FIRQ14E 

    CPU mie CSR (30): FIRQ14E - Fast interrupt channel 14 enable bit (r/w)

    +
    CSR_MIE_FIRQ15E 

    CPU mie CSR (31): FIRQ15E - Fast interrupt channel 15 enable bit (r/w)

    +
    + +
    +
    + +

    ◆ NEORV32_CSR_MIP_enum

    + +
    +
    + + + + +
    enum NEORV32_CSR_MIP_enum
    +
    +

    CPU mip CSR (r/-): Machine interrupt pending

    + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    CSR_MIP_MSIP 

    CPU mip CSR (3): MSIP - Machine software interrupt pending (r/-)

    +
    CSR_MIP_MTIP 

    CPU mip CSR (7): MTIP - Machine timer interrupt pending (r/-)

    +
    CSR_MIP_MEIP 

    CPU mip CSR (11): MEIP - Machine external interrupt pending (r/-)

    +
    CSR_MIP_FIRQ0P 

    CPU mip CSR (16): FIRQ0P - Fast interrupt channel 0 pending (r/-)

    +
    CSR_MIP_FIRQ1P 

    CPU mip CSR (17): FIRQ1P - Fast interrupt channel 1 pending (r/-)

    +
    CSR_MIP_FIRQ2P 

    CPU mip CSR (18): FIRQ2P - Fast interrupt channel 2 pending (r/-)

    +
    CSR_MIP_FIRQ3P 

    CPU mip CSR (19): FIRQ3P - Fast interrupt channel 3 pending (r/-)

    +
    CSR_MIP_FIRQ4P 

    CPU mip CSR (20): FIRQ4P - Fast interrupt channel 4 pending (r/-)

    +
    CSR_MIP_FIRQ5P 

    CPU mip CSR (21): FIRQ5P - Fast interrupt channel 5 pending (r/-)

    +
    CSR_MIP_FIRQ6P 

    CPU mip CSR (22): FIRQ6P - Fast interrupt channel 6 pending (r/-)

    +
    CSR_MIP_FIRQ7P 

    CPU mip CSR (23): FIRQ7P - Fast interrupt channel 7 pending (r/-)

    +
    CSR_MIP_FIRQ8P 

    CPU mip CSR (24): FIRQ8P - Fast interrupt channel 8 pending (r/-)

    +
    CSR_MIP_FIRQ9P 

    CPU mip CSR (25): FIRQ9P - Fast interrupt channel 9 pending (r/-)

    +
    CSR_MIP_FIRQ10P 

    CPU mip CSR (26): FIRQ10P - Fast interrupt channel 10 pending (r/-)

    +
    CSR_MIP_FIRQ11P 

    CPU mip CSR (27): FIRQ11P - Fast interrupt channel 11 pending (r/-)

    +
    CSR_MIP_FIRQ12P 

    CPU mip CSR (28): FIRQ12P - Fast interrupt channel 12 pending (r/-)

    +
    CSR_MIP_FIRQ13P 

    CPU mip CSR (29): FIRQ13P - Fast interrupt channel 13 pending (r/-)

    +
    CSR_MIP_FIRQ14P 

    CPU mip CSR (30): FIRQ14P - Fast interrupt channel 14 pending (r/-)

    +
    CSR_MIP_FIRQ15P 

    CPU mip CSR (31): FIRQ15P - Fast interrupt channel 15 pending (r/-)

    +
    + +
    +
    + +

    ◆ NEORV32_CSR_MISA_enum

    + +
    +
    + + + + +
    enum NEORV32_CSR_MISA_enum
    +
    +

    CPU misa CSR (r/-): Machine instruction set extensions

    + + + + + + + + + + + + + +
    Enumerator
    CSR_MISA_A 

    CPU misa CSR (0): A: Atomic instructions CPU extension available (r/-)

    +
    CSR_MISA_B 

    CPU misa CSR (1): B: Bit manipulation CPU extension available (r/-)

    +
    CSR_MISA_C 

    CPU misa CSR (2): C: Compressed instructions CPU extension available (r/-)

    +
    CSR_MISA_D 

    CPU misa CSR (3): D: Double-precision floating-point extension available (r/-)

    +
    CSR_MISA_E 

    CPU misa CSR (4): E: Embedded CPU extension available (r/-)

    +
    CSR_MISA_F 

    CPU misa CSR (5): F: Single-precision floating-point extension available (r/-)

    +
    CSR_MISA_I 

    CPU misa CSR (8): I: Base integer ISA CPU extension available (r/-)

    +
    CSR_MISA_M 

    CPU misa CSR (12): M: Multiplier/divider CPU extension available (r/-)

    +
    CSR_MISA_U 

    CPU misa CSR (20): U: User mode CPU extension available (r/-)

    +
    CSR_MISA_X 

    CPU misa CSR (23): X: Non-standard CPU extension available (r/-)

    +
    CSR_MISA_MXL_LO 

    CPU misa CSR (30): MXL.lo: CPU data width (r/-)

    +
    CSR_MISA_MXL_HI 

    CPU misa CSR (31): MXL.Hi: CPU data width (r/-)

    +
    + +
    +
    + +

    ◆ NEORV32_CSR_MSTATUS_enum

    + +
    +
    + + + + +
    enum NEORV32_CSR_MSTATUS_enum
    +
    +

    CPU mstatus CSR (r/w): Machine status

    + + + + + + + +
    Enumerator
    CSR_MSTATUS_MIE 

    CPU mstatus CSR (3): MIE - Machine interrupt enable bit (r/w)

    +
    CSR_MSTATUS_MPIE 

    CPU mstatus CSR (7): MPIE - Machine previous interrupt enable bit (r/w)

    +
    CSR_MSTATUS_MPP_L 

    CPU mstatus CSR (11): MPP_L - Machine previous privilege mode bit low (r/w)

    +
    CSR_MSTATUS_MPP_H 

    CPU mstatus CSR (12): MPP_H - Machine previous privilege mode bit high (r/w)

    +
    CSR_MSTATUS_MPRV 

    CPU mstatus CSR (17): MPRV - Use MPP as effective privilege for M-mode load/stores when set (r/w)

    +
    CSR_MSTATUS_TW 

    CPU mstatus CSR (21): TW - Disallow execution of wfi instruction in user mode when set (r/w)

    +
    + +
    +
    + +

    ◆ NEORV32_CSR_XISA_enum

    + +
    +
    + + + + +
    enum NEORV32_CSR_XISA_enum
    +
    +

    CPU mxisa CSR (r/-): Machine extended instruction set extensions (NEORV32-specific)

    + + + + + + + + + + + + + + + + +
    Enumerator
    CSR_MXISA_ZICSR 

    CPU mxisa CSR (0): privileged architecture (r/-)

    +
    CSR_MXISA_ZIFENCEI 

    CPU mxisa CSR (1): instruction stream sync (r/-)

    +
    CSR_MXISA_ZMMUL 

    CPU mxisa CSR (2): hardware mul/div (r/-)

    +
    CSR_MXISA_ZXCFU 

    CPU mxisa CSR (3): custom RISC-V instructions (r/-)

    +
    CSR_MXISA_ZFINX 

    CPU mxisa CSR (5): FPU using x registers (r/-)

    +
    CSR_MXISA_ZICOND 

    CPU mxisa CSR (6): integer conditional operations (r/-)

    +
    CSR_MXISA_ZICNTR 

    CPU mxisa CSR (7): standard instruction, cycle and time counter CSRs (r/-)

    +
    CSR_MXISA_SMPMP 

    CPU mxisa CSR (8): physical memory protection (r/-)

    +
    CSR_MXISA_ZIHPM 

    CPU mxisa CSR (9): hardware performance monitors (r/-)

    +
    CSR_MXISA_SDEXT 

    CPU mxisa CSR (10): RISC-V debug mode (r/-)

    +
    CSR_MXISA_SDTRIG 

    CPU mxisa CSR (11): RISC-V trigger module (r/-)

    +
    CSR_MXISA_IS_SIM 

    CPU mxisa CSR (20): this might be a simulation when set (r/-)

    +
    CSR_MXISA_RFHWRST 

    CPU mxisa CSR (29): Register file has full hardware reset (r/-)

    +
    CSR_MXISA_FASTMUL 

    CPU mxisa CSR (30): DSP-based multiplication (M extensions only) (r/-)

    +
    CSR_MXISA_FASTSHIFT 

    CPU mxisa CSR (31): parallel logic for shifts (barrel shifters) (r/-)

    +
    + +
    +
    + +

    ◆ NEORV32_EXCEPTION_CODES_enum

    + +
    +
    +

    Trap codes from mcause CSR.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    TRAP_CODE_I_MISALIGNED 

    0.0: Instruction address misaligned

    +
    TRAP_CODE_I_ACCESS 

    0.1: Instruction (bus) access fault

    +
    TRAP_CODE_I_ILLEGAL 

    0.2: Illegal instruction

    +
    TRAP_CODE_BREAKPOINT 

    0.3: Breakpoint (EBREAK instruction)

    +
    TRAP_CODE_L_MISALIGNED 

    0.4: Load address misaligned

    +
    TRAP_CODE_L_ACCESS 

    0.5: Load (bus) access fault

    +
    TRAP_CODE_S_MISALIGNED 

    0.6: Store address misaligned

    +
    TRAP_CODE_S_ACCESS 

    0.7: Store (bus) access fault

    +
    TRAP_CODE_UENV_CALL 

    0.8: Environment call from user mode (ECALL instruction)

    +
    TRAP_CODE_MENV_CALL 

    0.11: Environment call from machine mode (ECALL instruction)

    +
    TRAP_CODE_MSI 

    1.3: Machine software interrupt

    +
    TRAP_CODE_MTI 

    1.7: Machine timer interrupt

    +
    TRAP_CODE_MEI 

    1.11: Machine external interrupt

    +
    TRAP_CODE_FIRQ_0 

    1.16: Fast interrupt channel 0

    +
    TRAP_CODE_FIRQ_1 

    1.17: Fast interrupt channel 1

    +
    TRAP_CODE_FIRQ_2 

    1.18: Fast interrupt channel 2

    +
    TRAP_CODE_FIRQ_3 

    1.19: Fast interrupt channel 3

    +
    TRAP_CODE_FIRQ_4 

    1.20: Fast interrupt channel 4

    +
    TRAP_CODE_FIRQ_5 

    1.21: Fast interrupt channel 5

    +
    TRAP_CODE_FIRQ_6 

    1.22: Fast interrupt channel 6

    +
    TRAP_CODE_FIRQ_7 

    1.23: Fast interrupt channel 7

    +
    TRAP_CODE_FIRQ_8 

    1.24: Fast interrupt channel 8

    +
    TRAP_CODE_FIRQ_9 

    1.25: Fast interrupt channel 9

    +
    TRAP_CODE_FIRQ_10 

    1.26: Fast interrupt channel 10

    +
    TRAP_CODE_FIRQ_11 

    1.27: Fast interrupt channel 11

    +
    TRAP_CODE_FIRQ_12 

    1.28: Fast interrupt channel 12

    +
    TRAP_CODE_FIRQ_13 

    1.29: Fast interrupt channel 13

    +
    TRAP_CODE_FIRQ_14 

    1.30: Fast interrupt channel 14

    +
    TRAP_CODE_FIRQ_15 

    1.31: Fast interrupt channel 15

    +
    + +
    +
    + +

    ◆ NEORV32_HPMCNT_EVENT_enum

    + +
    +
    + + + + +
    enum NEORV32_HPMCNT_EVENT_enum
    +
    +

    CPU mhpmevent hardware performance monitor events

    + + + + + + + + + + + + + +
    Enumerator
    HPMCNT_EVENT_CY 

    CPU mhpmevent CSR (0): Active cycle

    +
    HPMCNT_EVENT_TM 

    CPU mhpmevent CSR (1): Reserved

    +
    HPMCNT_EVENT_IR 

    CPU mhpmevent CSR (2): Retired instruction

    +
    HPMCNT_EVENT_COMPR 

    CPU mhpmevent CSR (3): Executed compressed instruction

    +
    HPMCNT_EVENT_WAIT_DIS 

    CPU mhpmevent CSR (4): Instruction dispatch wait cycle

    +
    HPMCNT_EVENT_WAIT_ALU 

    CPU mhpmevent CSR (5): Multi-cycle ALU co-processor wait cycle

    +
    HPMCNT_EVENT_BRANCH 

    CPU mhpmevent CSR (6): Executed branch instruction

    +
    HPMCNT_EVENT_BRANCHED 

    CPU mhpmevent CSR (7): Control flow transfer

    +
    HPMCNT_EVENT_LOAD 

    CPU mhpmevent CSR (8): Executed load operation

    +
    HPMCNT_EVENT_STORE 

    CPU mhpmevent CSR (9): Executed store operation

    +
    HPMCNT_EVENT_WAIT_LSU 

    CPU mhpmevent CSR (10): Load-store unit memory wait cycle

    +
    HPMCNT_EVENT_TRAP 

    CPU mhpmevent CSR (11): Entered trap

    +
    + +
    +
    + +

    ◆ NEORV32_PMP_MODES_enum

    + +
    +
    + + + + +
    enum NEORV32_PMP_MODES_enum
    +
    +

    PMP modes

    + + + + + +
    Enumerator
    PMP_OFF 

    '00': entry disabled

    +
    PMP_TOR 

    '01': TOR mode (top of region)

    +
    PMP_NA4 

    '10': Naturally-aligned power of two region (4 bytes)

    +
    PMP_NAPOT 

    '11': Naturally-aligned power of two region (greater than 4 bytes )

    +
    + +
    +
    + +

    ◆ NEORV32_PMPCFG_ATTRIBUTES_enum

    + +
    +
    +

    CPU pmpcfg PMP configuration attributes

    + + + + + + + +
    Enumerator
    PMPCFG_R 

    CPU pmpcfg attribute (0): Read

    +
    PMPCFG_W 

    CPU pmpcfg attribute (1): Write

    +
    PMPCFG_X 

    CPU pmpcfg attribute (2): Execute

    +
    PMPCFG_A_LSB 

    CPU pmpcfg attribute (3): Mode LSB NEORV32_PMP_MODES_enum

    +
    PMPCFG_A_MSB 

    CPU pmpcfg attribute (4): Mode MSB NEORV32_PMP_MODES_enum

    +
    PMPCFG_L 

    CPU pmpcfg attribute (7): Locked

    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__cpu__csr_8h_source.html b/sw/neorv32__cpu__csr_8h_source.html new file mode 100644 index 0000000000..6ccea44610 --- /dev/null +++ b/sw/neorv32__cpu__csr_8h_source.html @@ -0,0 +1,802 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_cpu_csr.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_cpu_csr.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_cpu_csr_h
    +
    17#define neorv32_cpu_csr_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    + +
    26 /* floating-point unit control and status */
    +
    27 CSR_FFLAGS = 0x001,
    +
    28 CSR_FRM = 0x002,
    +
    29 CSR_FCSR = 0x003,
    +
    31 /* machine control and status */
    +
    32 CSR_MSTATUS = 0x300,
    +
    33 CSR_MISA = 0x301,
    +
    34 CSR_MIE = 0x304,
    +
    35 CSR_MTVEC = 0x305,
    + +
    37 CSR_MSTATUSH = 0x310,
    + +
    40 /* machine configuration */
    +
    41 CSR_MENVCFG = 0x30a,
    +
    42 CSR_MENVCFGH = 0x31a,
    +
    44 /* hardware performance monitors - event configuration */
    + + + + + + + + + + + + + +
    59 /* machine trap control */
    +
    60 CSR_MSCRATCH = 0x340,
    +
    61 CSR_MEPC = 0x341,
    +
    62 CSR_MCAUSE = 0x342,
    +
    63 CSR_MTVAL = 0x343,
    +
    64 CSR_MIP = 0x344,
    +
    65 CSR_MTINST = 0x34a,
    +
    67 /* physical memory protection */
    +
    68 CSR_PMPCFG0 = 0x3a0,
    +
    69 CSR_PMPCFG1 = 0x3a1,
    +
    70 CSR_PMPCFG2 = 0x3a2,
    +
    71 CSR_PMPCFG3 = 0x3a3,
    +
    73 CSR_PMPADDR0 = 0x3b0,
    +
    74 CSR_PMPADDR1 = 0x3b1,
    +
    75 CSR_PMPADDR2 = 0x3b2,
    +
    76 CSR_PMPADDR3 = 0x3b3,
    +
    77 CSR_PMPADDR4 = 0x3b4,
    +
    78 CSR_PMPADDR5 = 0x3b5,
    +
    79 CSR_PMPADDR6 = 0x3b6,
    +
    80 CSR_PMPADDR7 = 0x3b7,
    +
    81 CSR_PMPADDR8 = 0x3b8,
    +
    82 CSR_PMPADDR9 = 0x3b9,
    +
    83 CSR_PMPADDR10 = 0x3ba,
    +
    84 CSR_PMPADDR11 = 0x3bb,
    +
    85 CSR_PMPADDR12 = 0x3bc,
    +
    86 CSR_PMPADDR13 = 0x3bd,
    +
    87 CSR_PMPADDR14 = 0x3be,
    +
    88 CSR_PMPADDR15 = 0x3bf,
    +
    90 /* on-chip debugger - hardware trigger module */
    +
    91 CSR_TSELECT = 0x7a0,
    +
    92 CSR_TDATA1 = 0x7a1,
    +
    93 CSR_TDATA2 = 0x7a2,
    +
    94 CSR_TINFO = 0x7a4,
    +
    96 /* CPU debug mode CSRs - not accessible by software running outside of debug mode */
    +
    97 CSR_DCSR = 0x7b0,
    +
    98 CSR_DPC = 0x7b1,
    +
    99 CSR_DSCRATCH0 = 0x7b2,
    +
    101 /* custom functions unit (CFU) registers */
    +
    102 CSR_CFUREG0 = 0x800,
    +
    103 CSR_CFUREG1 = 0x801,
    +
    104 CSR_CFUREG2 = 0x802,
    +
    105 CSR_CFUREG3 = 0x803,
    +
    107 /* machine counters and timers */
    +
    108 CSR_MCYCLE = 0xb00,
    +
    109 CSR_MINSTRET = 0xb02,
    + + + + + + + + + + + + + +
    124 CSR_MCYCLEH = 0xb80,
    + + + + + + + + + + + + + + +
    140 /* user counters and timers */
    +
    141 CSR_CYCLE = 0xc00,
    +
    142 CSR_INSTRET = 0xc02,
    + + + + + + + + + + + + + +
    157 CSR_CYCLEH = 0xc80,
    +
    158 CSR_INSTRETH = 0xc82,
    + + + + + + + + + + + + + +
    173 /* machine information registers */
    + +
    175 CSR_MARCHID = 0xf12,
    +
    176 CSR_MIMPID = 0xf13,
    +
    177 CSR_MHARTID = 0xf14,
    + +
    179 CSR_MXISA = 0xfc0
    + +
    +
    181
    +
    182
    +
    183/**********************************************************************/
    + +
    193
    +
    194
    +
    195/**********************************************************************/
    + +
    206
    +
    207
    +
    208/**********************************************************************/
    + +
    245
    +
    246
    +
    247/**********************************************************************/
    +
    + + + + +
    255 /* NEORV32-specific extension: Fast Interrupt Requests (FIRQ) */
    + + + + + + + + + + + + + + + +
    271 CSR_MIE_FIRQ15E = 31
    + +
    +
    273
    +
    274
    +
    275/**********************************************************************/
    +
    + + + + +
    283 /* NEORV32-specific extension: Fast Interrupt Requests (FIRQ) */
    + + + + + + + + + + + + + + + +
    299 CSR_MIP_FIRQ15P = 31
    + +
    +
    301
    +
    302
    +
    303/**********************************************************************/
    + +
    320
    +
    321
    +
    322/**********************************************************************/
    + +
    348
    +
    349
    +
    350/**********************************************************************/
    + +
    367
    +
    368
    +
    369/**********************************************************************/
    + +
    380
    +
    381/**********************************************************************/
    +
    + + + + +
    388 PMP_NAPOT = 3
    + +
    +
    390
    +
    391
    +
    392/**********************************************************************/
    +
    + + +
    397 TRAP_CODE_I_ACCESS = 0x00000001U,
    +
    398 TRAP_CODE_I_ILLEGAL = 0x00000002U,
    +
    399 TRAP_CODE_BREAKPOINT = 0x00000003U,
    + +
    401 TRAP_CODE_L_ACCESS = 0x00000005U,
    + +
    403 TRAP_CODE_S_ACCESS = 0x00000007U,
    +
    404 TRAP_CODE_UENV_CALL = 0x00000008U,
    +
    405 TRAP_CODE_MENV_CALL = 0x0000000bU,
    +
    406 TRAP_CODE_MSI = 0x80000003U,
    +
    407 TRAP_CODE_MTI = 0x80000007U,
    +
    408 TRAP_CODE_MEI = 0x8000000bU,
    +
    409 TRAP_CODE_FIRQ_0 = 0x80000010U,
    +
    410 TRAP_CODE_FIRQ_1 = 0x80000011U,
    +
    411 TRAP_CODE_FIRQ_2 = 0x80000012U,
    +
    412 TRAP_CODE_FIRQ_3 = 0x80000013U,
    +
    413 TRAP_CODE_FIRQ_4 = 0x80000014U,
    +
    414 TRAP_CODE_FIRQ_5 = 0x80000015U,
    +
    415 TRAP_CODE_FIRQ_6 = 0x80000016U,
    +
    416 TRAP_CODE_FIRQ_7 = 0x80000017U,
    +
    417 TRAP_CODE_FIRQ_8 = 0x80000018U,
    +
    418 TRAP_CODE_FIRQ_9 = 0x80000019U,
    +
    419 TRAP_CODE_FIRQ_10 = 0x8000001aU,
    +
    420 TRAP_CODE_FIRQ_11 = 0x8000001bU,
    +
    421 TRAP_CODE_FIRQ_12 = 0x8000001cU,
    +
    422 TRAP_CODE_FIRQ_13 = 0x8000001dU,
    +
    423 TRAP_CODE_FIRQ_14 = 0x8000001eU,
    +
    424 TRAP_CODE_FIRQ_15 = 0x8000001fU
    + +
    +
    426
    +
    427
    +
    428#endif // neorv32_cpu_csr_h
    +
    NEORV32_CSR_MIE_enum
    Definition neorv32_cpu_csr.h:250
    +
    @ CSR_MIE_FIRQ9E
    Definition neorv32_cpu_csr.h:265
    +
    @ CSR_MIE_FIRQ13E
    Definition neorv32_cpu_csr.h:269
    +
    @ CSR_MIE_FIRQ5E
    Definition neorv32_cpu_csr.h:261
    +
    @ CSR_MIE_MTIE
    Definition neorv32_cpu_csr.h:252
    +
    @ CSR_MIE_FIRQ8E
    Definition neorv32_cpu_csr.h:264
    +
    @ CSR_MIE_FIRQ7E
    Definition neorv32_cpu_csr.h:263
    +
    @ CSR_MIE_FIRQ12E
    Definition neorv32_cpu_csr.h:268
    +
    @ CSR_MIE_FIRQ4E
    Definition neorv32_cpu_csr.h:260
    +
    @ CSR_MIE_FIRQ3E
    Definition neorv32_cpu_csr.h:259
    +
    @ CSR_MIE_FIRQ14E
    Definition neorv32_cpu_csr.h:270
    +
    @ CSR_MIE_FIRQ6E
    Definition neorv32_cpu_csr.h:262
    +
    @ CSR_MIE_FIRQ0E
    Definition neorv32_cpu_csr.h:256
    +
    @ CSR_MIE_FIRQ15E
    Definition neorv32_cpu_csr.h:271
    +
    @ CSR_MIE_FIRQ1E
    Definition neorv32_cpu_csr.h:257
    +
    @ CSR_MIE_MEIE
    Definition neorv32_cpu_csr.h:253
    +
    @ CSR_MIE_FIRQ11E
    Definition neorv32_cpu_csr.h:267
    +
    @ CSR_MIE_FIRQ2E
    Definition neorv32_cpu_csr.h:258
    +
    @ CSR_MIE_MSIE
    Definition neorv32_cpu_csr.h:251
    +
    @ CSR_MIE_FIRQ10E
    Definition neorv32_cpu_csr.h:266
    +
    NEORV32_HPMCNT_EVENT_enum
    Definition neorv32_cpu_csr.h:353
    +
    @ HPMCNT_EVENT_BRANCHED
    Definition neorv32_cpu_csr.h:361
    +
    @ HPMCNT_EVENT_LOAD
    Definition neorv32_cpu_csr.h:362
    +
    @ HPMCNT_EVENT_CY
    Definition neorv32_cpu_csr.h:354
    +
    @ HPMCNT_EVENT_TRAP
    Definition neorv32_cpu_csr.h:365
    +
    @ HPMCNT_EVENT_TM
    Definition neorv32_cpu_csr.h:355
    +
    @ HPMCNT_EVENT_WAIT_LSU
    Definition neorv32_cpu_csr.h:364
    +
    @ HPMCNT_EVENT_COMPR
    Definition neorv32_cpu_csr.h:357
    +
    @ HPMCNT_EVENT_STORE
    Definition neorv32_cpu_csr.h:363
    +
    @ HPMCNT_EVENT_BRANCH
    Definition neorv32_cpu_csr.h:360
    +
    @ HPMCNT_EVENT_IR
    Definition neorv32_cpu_csr.h:356
    +
    @ HPMCNT_EVENT_WAIT_DIS
    Definition neorv32_cpu_csr.h:358
    +
    @ HPMCNT_EVENT_WAIT_ALU
    Definition neorv32_cpu_csr.h:359
    +
    NEORV32_CSR_MIP_enum
    Definition neorv32_cpu_csr.h:278
    +
    @ CSR_MIP_FIRQ12P
    Definition neorv32_cpu_csr.h:296
    +
    @ CSR_MIP_FIRQ15P
    Definition neorv32_cpu_csr.h:299
    +
    @ CSR_MIP_MSIP
    Definition neorv32_cpu_csr.h:279
    +
    @ CSR_MIP_FIRQ13P
    Definition neorv32_cpu_csr.h:297
    +
    @ CSR_MIP_MEIP
    Definition neorv32_cpu_csr.h:281
    +
    @ CSR_MIP_FIRQ0P
    Definition neorv32_cpu_csr.h:284
    +
    @ CSR_MIP_FIRQ10P
    Definition neorv32_cpu_csr.h:294
    +
    @ CSR_MIP_FIRQ1P
    Definition neorv32_cpu_csr.h:285
    +
    @ CSR_MIP_MTIP
    Definition neorv32_cpu_csr.h:280
    +
    @ CSR_MIP_FIRQ11P
    Definition neorv32_cpu_csr.h:295
    +
    @ CSR_MIP_FIRQ3P
    Definition neorv32_cpu_csr.h:287
    +
    @ CSR_MIP_FIRQ5P
    Definition neorv32_cpu_csr.h:289
    +
    @ CSR_MIP_FIRQ14P
    Definition neorv32_cpu_csr.h:298
    +
    @ CSR_MIP_FIRQ7P
    Definition neorv32_cpu_csr.h:291
    +
    @ CSR_MIP_FIRQ4P
    Definition neorv32_cpu_csr.h:288
    +
    @ CSR_MIP_FIRQ9P
    Definition neorv32_cpu_csr.h:293
    +
    @ CSR_MIP_FIRQ2P
    Definition neorv32_cpu_csr.h:286
    +
    @ CSR_MIP_FIRQ8P
    Definition neorv32_cpu_csr.h:292
    +
    @ CSR_MIP_FIRQ6P
    Definition neorv32_cpu_csr.h:290
    +
    NEORV32_CSR_MSTATUS_enum
    Definition neorv32_cpu_csr.h:198
    +
    @ CSR_MSTATUS_MPRV
    Definition neorv32_cpu_csr.h:203
    +
    @ CSR_MSTATUS_MPP_H
    Definition neorv32_cpu_csr.h:202
    +
    @ CSR_MSTATUS_MPIE
    Definition neorv32_cpu_csr.h:200
    +
    @ CSR_MSTATUS_TW
    Definition neorv32_cpu_csr.h:204
    +
    @ CSR_MSTATUS_MIE
    Definition neorv32_cpu_csr.h:199
    +
    @ CSR_MSTATUS_MPP_L
    Definition neorv32_cpu_csr.h:201
    +
    NEORV32_PMP_MODES_enum
    Definition neorv32_cpu_csr.h:384
    +
    @ PMP_OFF
    Definition neorv32_cpu_csr.h:385
    +
    @ PMP_TOR
    Definition neorv32_cpu_csr.h:386
    +
    @ PMP_NA4
    Definition neorv32_cpu_csr.h:387
    +
    @ PMP_NAPOT
    Definition neorv32_cpu_csr.h:388
    +
    NEORV32_CSR_MCOUNTINHIBIT_enum
    Definition neorv32_cpu_csr.h:211
    +
    @ CSR_MCOUNTINHIBIT_HPM15
    Definition neorv32_cpu_csr.h:227
    +
    @ CSR_MCOUNTINHIBIT_HPM9
    Definition neorv32_cpu_csr.h:221
    +
    @ CSR_MCOUNTINHIBIT_HPM30
    Definition neorv32_cpu_csr.h:242
    +
    @ CSR_MCOUNTINHIBIT_HPM26
    Definition neorv32_cpu_csr.h:238
    +
    @ CSR_MCOUNTINHIBIT_HPM31
    Definition neorv32_cpu_csr.h:243
    +
    @ CSR_MCOUNTINHIBIT_HPM21
    Definition neorv32_cpu_csr.h:233
    +
    @ CSR_MCOUNTINHIBIT_CY
    Definition neorv32_cpu_csr.h:212
    +
    @ CSR_MCOUNTINHIBIT_HPM5
    Definition neorv32_cpu_csr.h:217
    +
    @ CSR_MCOUNTINHIBIT_HPM28
    Definition neorv32_cpu_csr.h:240
    +
    @ CSR_MCOUNTINHIBIT_HPM19
    Definition neorv32_cpu_csr.h:231
    +
    @ CSR_MCOUNTINHIBIT_HPM7
    Definition neorv32_cpu_csr.h:219
    +
    @ CSR_MCOUNTINHIBIT_HPM4
    Definition neorv32_cpu_csr.h:216
    +
    @ CSR_MCOUNTINHIBIT_HPM27
    Definition neorv32_cpu_csr.h:239
    +
    @ CSR_MCOUNTINHIBIT_IR
    Definition neorv32_cpu_csr.h:213
    +
    @ CSR_MCOUNTINHIBIT_HPM16
    Definition neorv32_cpu_csr.h:228
    +
    @ CSR_MCOUNTINHIBIT_HPM24
    Definition neorv32_cpu_csr.h:236
    +
    @ CSR_MCOUNTINHIBIT_HPM23
    Definition neorv32_cpu_csr.h:235
    +
    @ CSR_MCOUNTINHIBIT_HPM17
    Definition neorv32_cpu_csr.h:229
    +
    @ CSR_MCOUNTINHIBIT_HPM12
    Definition neorv32_cpu_csr.h:224
    +
    @ CSR_MCOUNTINHIBIT_HPM10
    Definition neorv32_cpu_csr.h:222
    +
    @ CSR_MCOUNTINHIBIT_HPM29
    Definition neorv32_cpu_csr.h:241
    +
    @ CSR_MCOUNTINHIBIT_HPM18
    Definition neorv32_cpu_csr.h:230
    +
    @ CSR_MCOUNTINHIBIT_HPM14
    Definition neorv32_cpu_csr.h:226
    +
    @ CSR_MCOUNTINHIBIT_HPM8
    Definition neorv32_cpu_csr.h:220
    +
    @ CSR_MCOUNTINHIBIT_HPM11
    Definition neorv32_cpu_csr.h:223
    +
    @ CSR_MCOUNTINHIBIT_HPM6
    Definition neorv32_cpu_csr.h:218
    +
    @ CSR_MCOUNTINHIBIT_HPM13
    Definition neorv32_cpu_csr.h:225
    +
    @ CSR_MCOUNTINHIBIT_HPM20
    Definition neorv32_cpu_csr.h:232
    +
    @ CSR_MCOUNTINHIBIT_HPM25
    Definition neorv32_cpu_csr.h:237
    +
    @ CSR_MCOUNTINHIBIT_HPM22
    Definition neorv32_cpu_csr.h:234
    +
    @ CSR_MCOUNTINHIBIT_HPM3
    Definition neorv32_cpu_csr.h:215
    +
    NEORV32_PMPCFG_ATTRIBUTES_enum
    Definition neorv32_cpu_csr.h:372
    +
    @ PMPCFG_L
    Definition neorv32_cpu_csr.h:378
    +
    @ PMPCFG_A_MSB
    Definition neorv32_cpu_csr.h:377
    +
    @ PMPCFG_W
    Definition neorv32_cpu_csr.h:374
    +
    @ PMPCFG_A_LSB
    Definition neorv32_cpu_csr.h:376
    +
    @ PMPCFG_R
    Definition neorv32_cpu_csr.h:373
    +
    @ PMPCFG_X
    Definition neorv32_cpu_csr.h:375
    +
    NEORV32_CSR_enum
    Definition neorv32_cpu_csr.h:25
    +
    @ CSR_HPMCOUNTER14H
    Definition neorv32_cpu_csr.h:170
    +
    @ CSR_MCONFIGPTR
    Definition neorv32_cpu_csr.h:178
    +
    @ CSR_PMPCFG3
    Definition neorv32_cpu_csr.h:71
    +
    @ CSR_MIMPID
    Definition neorv32_cpu_csr.h:176
    +
    @ CSR_MHPMEVENT15
    Definition neorv32_cpu_csr.h:57
    +
    @ CSR_PMPCFG2
    Definition neorv32_cpu_csr.h:70
    +
    @ CSR_DSCRATCH0
    Definition neorv32_cpu_csr.h:99
    +
    @ CSR_HPMCOUNTER15H
    Definition neorv32_cpu_csr.h:171
    +
    @ CSR_HPMCOUNTER7
    Definition neorv32_cpu_csr.h:147
    +
    @ CSR_MHPMCOUNTER12
    Definition neorv32_cpu_csr.h:119
    +
    @ CSR_MCOUNTEREN
    Definition neorv32_cpu_csr.h:36
    +
    @ CSR_MHPMCOUNTER9
    Definition neorv32_cpu_csr.h:116
    +
    @ CSR_MHPMEVENT6
    Definition neorv32_cpu_csr.h:48
    +
    @ CSR_MHPMCOUNTER10H
    Definition neorv32_cpu_csr.h:133
    +
    @ CSR_MHPMCOUNTER15
    Definition neorv32_cpu_csr.h:122
    +
    @ CSR_PMPCFG1
    Definition neorv32_cpu_csr.h:69
    +
    @ CSR_PMPADDR12
    Definition neorv32_cpu_csr.h:85
    +
    @ CSR_MHPMEVENT10
    Definition neorv32_cpu_csr.h:52
    +
    @ CSR_HPMCOUNTER13
    Definition neorv32_cpu_csr.h:153
    +
    @ CSR_MHPMEVENT5
    Definition neorv32_cpu_csr.h:47
    +
    @ CSR_MHPMCOUNTER3H
    Definition neorv32_cpu_csr.h:126
    +
    @ CSR_MCYCLEH
    Definition neorv32_cpu_csr.h:124
    +
    @ CSR_HPMCOUNTER11H
    Definition neorv32_cpu_csr.h:167
    +
    @ CSR_MCAUSE
    Definition neorv32_cpu_csr.h:62
    +
    @ CSR_MHPMEVENT7
    Definition neorv32_cpu_csr.h:49
    +
    @ CSR_MHPMCOUNTER4H
    Definition neorv32_cpu_csr.h:127
    +
    @ CSR_PMPADDR13
    Definition neorv32_cpu_csr.h:86
    +
    @ CSR_MCYCLE
    Definition neorv32_cpu_csr.h:108
    +
    @ CSR_MHPMCOUNTER12H
    Definition neorv32_cpu_csr.h:135
    +
    @ CSR_CFUREG1
    Definition neorv32_cpu_csr.h:103
    +
    @ CSR_MXISA
    Definition neorv32_cpu_csr.h:179
    +
    @ CSR_MCOUNTINHIBIT
    Definition neorv32_cpu_csr.h:38
    +
    @ CSR_PMPADDR11
    Definition neorv32_cpu_csr.h:84
    +
    @ CSR_HPMCOUNTER3
    Definition neorv32_cpu_csr.h:143
    +
    @ CSR_CFUREG2
    Definition neorv32_cpu_csr.h:104
    +
    @ CSR_HPMCOUNTER6H
    Definition neorv32_cpu_csr.h:162
    +
    @ CSR_MENVCFGH
    Definition neorv32_cpu_csr.h:42
    +
    @ CSR_MHPMCOUNTER6H
    Definition neorv32_cpu_csr.h:129
    +
    @ CSR_MHPMEVENT3
    Definition neorv32_cpu_csr.h:45
    +
    @ CSR_MTINST
    Definition neorv32_cpu_csr.h:65
    +
    @ CSR_HPMCOUNTER13H
    Definition neorv32_cpu_csr.h:169
    +
    @ CSR_PMPADDR9
    Definition neorv32_cpu_csr.h:82
    +
    @ CSR_MHPMCOUNTER10
    Definition neorv32_cpu_csr.h:117
    +
    @ CSR_MHPMCOUNTER8
    Definition neorv32_cpu_csr.h:115
    +
    @ CSR_MEPC
    Definition neorv32_cpu_csr.h:61
    +
    @ CSR_MHPMCOUNTER13H
    Definition neorv32_cpu_csr.h:136
    +
    @ CSR_FCSR
    Definition neorv32_cpu_csr.h:29
    +
    @ CSR_FFLAGS
    Definition neorv32_cpu_csr.h:27
    +
    @ CSR_HPMCOUNTER7H
    Definition neorv32_cpu_csr.h:163
    +
    @ CSR_PMPADDR15
    Definition neorv32_cpu_csr.h:88
    +
    @ CSR_PMPADDR1
    Definition neorv32_cpu_csr.h:74
    +
    @ CSR_MHARTID
    Definition neorv32_cpu_csr.h:177
    +
    @ CSR_DCSR
    Definition neorv32_cpu_csr.h:97
    +
    @ CSR_HPMCOUNTER15
    Definition neorv32_cpu_csr.h:155
    +
    @ CSR_MHPMCOUNTER9H
    Definition neorv32_cpu_csr.h:132
    +
    @ CSR_HPMCOUNTER12H
    Definition neorv32_cpu_csr.h:168
    +
    @ CSR_MHPMCOUNTER5H
    Definition neorv32_cpu_csr.h:128
    +
    @ CSR_MTVAL
    Definition neorv32_cpu_csr.h:63
    +
    @ CSR_FRM
    Definition neorv32_cpu_csr.h:28
    +
    @ CSR_MHPMEVENT11
    Definition neorv32_cpu_csr.h:53
    +
    @ CSR_MHPMCOUNTER11H
    Definition neorv32_cpu_csr.h:134
    +
    @ CSR_TDATA1
    Definition neorv32_cpu_csr.h:92
    +
    @ CSR_INSTRET
    Definition neorv32_cpu_csr.h:142
    +
    @ CSR_HPMCOUNTER4H
    Definition neorv32_cpu_csr.h:160
    +
    @ CSR_MHPMCOUNTER11
    Definition neorv32_cpu_csr.h:118
    +
    @ CSR_PMPADDR0
    Definition neorv32_cpu_csr.h:73
    +
    @ CSR_PMPADDR3
    Definition neorv32_cpu_csr.h:76
    +
    @ CSR_MHPMEVENT13
    Definition neorv32_cpu_csr.h:55
    +
    @ CSR_MHPMCOUNTER7
    Definition neorv32_cpu_csr.h:114
    +
    @ CSR_PMPADDR14
    Definition neorv32_cpu_csr.h:87
    +
    @ CSR_MHPMEVENT14
    Definition neorv32_cpu_csr.h:56
    +
    @ CSR_HPMCOUNTER4
    Definition neorv32_cpu_csr.h:144
    +
    @ CSR_MINSTRET
    Definition neorv32_cpu_csr.h:109
    +
    @ CSR_INSTRETH
    Definition neorv32_cpu_csr.h:158
    +
    @ CSR_MHPMCOUNTER4
    Definition neorv32_cpu_csr.h:111
    +
    @ CSR_MHPMCOUNTER13
    Definition neorv32_cpu_csr.h:120
    +
    @ CSR_MENVCFG
    Definition neorv32_cpu_csr.h:41
    +
    @ CSR_MHPMCOUNTER8H
    Definition neorv32_cpu_csr.h:131
    +
    @ CSR_HPMCOUNTER11
    Definition neorv32_cpu_csr.h:151
    +
    @ CSR_PMPADDR2
    Definition neorv32_cpu_csr.h:75
    +
    @ CSR_CYCLEH
    Definition neorv32_cpu_csr.h:157
    +
    @ CSR_HPMCOUNTER6
    Definition neorv32_cpu_csr.h:146
    +
    @ CSR_HPMCOUNTER10
    Definition neorv32_cpu_csr.h:150
    +
    @ CSR_HPMCOUNTER14
    Definition neorv32_cpu_csr.h:154
    +
    @ CSR_MTVEC
    Definition neorv32_cpu_csr.h:35
    +
    @ CSR_HPMCOUNTER8H
    Definition neorv32_cpu_csr.h:164
    +
    @ CSR_HPMCOUNTER3H
    Definition neorv32_cpu_csr.h:159
    +
    @ CSR_TSELECT
    Definition neorv32_cpu_csr.h:91
    +
    @ CSR_CYCLE
    Definition neorv32_cpu_csr.h:141
    +
    @ CSR_HPMCOUNTER5
    Definition neorv32_cpu_csr.h:145
    +
    @ CSR_HPMCOUNTER9
    Definition neorv32_cpu_csr.h:149
    +
    @ CSR_MHPMEVENT4
    Definition neorv32_cpu_csr.h:46
    +
    @ CSR_MHPMCOUNTER7H
    Definition neorv32_cpu_csr.h:130
    +
    @ CSR_MSTATUSH
    Definition neorv32_cpu_csr.h:37
    +
    @ CSR_MHPMCOUNTER14H
    Definition neorv32_cpu_csr.h:137
    +
    @ CSR_HPMCOUNTER8
    Definition neorv32_cpu_csr.h:148
    +
    @ CSR_MIE
    Definition neorv32_cpu_csr.h:34
    +
    @ CSR_HPMCOUNTER9H
    Definition neorv32_cpu_csr.h:165
    +
    @ CSR_PMPADDR4
    Definition neorv32_cpu_csr.h:77
    +
    @ CSR_TDATA2
    Definition neorv32_cpu_csr.h:93
    +
    @ CSR_MSTATUS
    Definition neorv32_cpu_csr.h:32
    +
    @ CSR_HPMCOUNTER5H
    Definition neorv32_cpu_csr.h:161
    +
    @ CSR_MHPMEVENT8
    Definition neorv32_cpu_csr.h:50
    +
    @ CSR_MHPMEVENT12
    Definition neorv32_cpu_csr.h:54
    +
    @ CSR_MARCHID
    Definition neorv32_cpu_csr.h:175
    +
    @ CSR_PMPADDR10
    Definition neorv32_cpu_csr.h:83
    +
    @ CSR_PMPADDR5
    Definition neorv32_cpu_csr.h:78
    +
    @ CSR_MHPMCOUNTER14
    Definition neorv32_cpu_csr.h:121
    +
    @ CSR_MIP
    Definition neorv32_cpu_csr.h:64
    +
    @ CSR_MISA
    Definition neorv32_cpu_csr.h:33
    +
    @ CSR_MHPMCOUNTER3
    Definition neorv32_cpu_csr.h:110
    +
    @ CSR_CFUREG0
    Definition neorv32_cpu_csr.h:102
    +
    @ CSR_MSCRATCH
    Definition neorv32_cpu_csr.h:60
    +
    @ CSR_HPMCOUNTER10H
    Definition neorv32_cpu_csr.h:166
    +
    @ CSR_HPMCOUNTER12
    Definition neorv32_cpu_csr.h:152
    +
    @ CSR_PMPADDR7
    Definition neorv32_cpu_csr.h:80
    +
    @ CSR_PMPADDR8
    Definition neorv32_cpu_csr.h:81
    +
    @ CSR_CFUREG3
    Definition neorv32_cpu_csr.h:105
    +
    @ CSR_MHPMCOUNTER5
    Definition neorv32_cpu_csr.h:112
    +
    @ CSR_PMPCFG0
    Definition neorv32_cpu_csr.h:68
    +
    @ CSR_DPC
    Definition neorv32_cpu_csr.h:98
    +
    @ CSR_PMPADDR6
    Definition neorv32_cpu_csr.h:79
    +
    @ CSR_MVENDORID
    Definition neorv32_cpu_csr.h:174
    +
    @ CSR_MHPMCOUNTER15H
    Definition neorv32_cpu_csr.h:138
    +
    @ CSR_MHPMCOUNTER6
    Definition neorv32_cpu_csr.h:113
    +
    @ CSR_MHPMEVENT9
    Definition neorv32_cpu_csr.h:51
    +
    @ CSR_TINFO
    Definition neorv32_cpu_csr.h:94
    +
    @ CSR_MINSTRETH
    Definition neorv32_cpu_csr.h:125
    +
    NEORV32_EXCEPTION_CODES_enum
    Definition neorv32_cpu_csr.h:395
    +
    @ TRAP_CODE_I_MISALIGNED
    Definition neorv32_cpu_csr.h:396
    +
    @ TRAP_CODE_FIRQ_0
    Definition neorv32_cpu_csr.h:409
    +
    @ TRAP_CODE_FIRQ_12
    Definition neorv32_cpu_csr.h:421
    +
    @ TRAP_CODE_MTI
    Definition neorv32_cpu_csr.h:407
    +
    @ TRAP_CODE_S_MISALIGNED
    Definition neorv32_cpu_csr.h:402
    +
    @ TRAP_CODE_MEI
    Definition neorv32_cpu_csr.h:408
    +
    @ TRAP_CODE_MENV_CALL
    Definition neorv32_cpu_csr.h:405
    +
    @ TRAP_CODE_L_ACCESS
    Definition neorv32_cpu_csr.h:401
    +
    @ TRAP_CODE_BREAKPOINT
    Definition neorv32_cpu_csr.h:399
    +
    @ TRAP_CODE_FIRQ_9
    Definition neorv32_cpu_csr.h:418
    +
    @ TRAP_CODE_FIRQ_3
    Definition neorv32_cpu_csr.h:412
    +
    @ TRAP_CODE_FIRQ_10
    Definition neorv32_cpu_csr.h:419
    +
    @ TRAP_CODE_FIRQ_5
    Definition neorv32_cpu_csr.h:414
    +
    @ TRAP_CODE_L_MISALIGNED
    Definition neorv32_cpu_csr.h:400
    +
    @ TRAP_CODE_I_ACCESS
    Definition neorv32_cpu_csr.h:397
    +
    @ TRAP_CODE_S_ACCESS
    Definition neorv32_cpu_csr.h:403
    +
    @ TRAP_CODE_FIRQ_13
    Definition neorv32_cpu_csr.h:422
    +
    @ TRAP_CODE_FIRQ_6
    Definition neorv32_cpu_csr.h:415
    +
    @ TRAP_CODE_FIRQ_14
    Definition neorv32_cpu_csr.h:423
    +
    @ TRAP_CODE_FIRQ_11
    Definition neorv32_cpu_csr.h:420
    +
    @ TRAP_CODE_UENV_CALL
    Definition neorv32_cpu_csr.h:404
    +
    @ TRAP_CODE_FIRQ_15
    Definition neorv32_cpu_csr.h:424
    +
    @ TRAP_CODE_FIRQ_4
    Definition neorv32_cpu_csr.h:413
    +
    @ TRAP_CODE_FIRQ_8
    Definition neorv32_cpu_csr.h:417
    +
    @ TRAP_CODE_FIRQ_2
    Definition neorv32_cpu_csr.h:411
    +
    @ TRAP_CODE_FIRQ_1
    Definition neorv32_cpu_csr.h:410
    +
    @ TRAP_CODE_MSI
    Definition neorv32_cpu_csr.h:406
    +
    @ TRAP_CODE_FIRQ_7
    Definition neorv32_cpu_csr.h:416
    +
    @ TRAP_CODE_I_ILLEGAL
    Definition neorv32_cpu_csr.h:398
    +
    NEORV32_CSR_XISA_enum
    Definition neorv32_cpu_csr.h:325
    +
    @ CSR_MXISA_ZICNTR
    Definition neorv32_cpu_csr.h:334
    +
    @ CSR_MXISA_FASTMUL
    Definition neorv32_cpu_csr.h:345
    +
    @ CSR_MXISA_ZFINX
    Definition neorv32_cpu_csr.h:332
    +
    @ CSR_MXISA_SDTRIG
    Definition neorv32_cpu_csr.h:338
    +
    @ CSR_MXISA_RFHWRST
    Definition neorv32_cpu_csr.h:344
    +
    @ CSR_MXISA_SMPMP
    Definition neorv32_cpu_csr.h:335
    +
    @ CSR_MXISA_ZIFENCEI
    Definition neorv32_cpu_csr.h:328
    +
    @ CSR_MXISA_ZMMUL
    Definition neorv32_cpu_csr.h:329
    +
    @ CSR_MXISA_IS_SIM
    Definition neorv32_cpu_csr.h:341
    +
    @ CSR_MXISA_ZICOND
    Definition neorv32_cpu_csr.h:333
    +
    @ CSR_MXISA_SDEXT
    Definition neorv32_cpu_csr.h:337
    +
    @ CSR_MXISA_ZIHPM
    Definition neorv32_cpu_csr.h:336
    +
    @ CSR_MXISA_ZICSR
    Definition neorv32_cpu_csr.h:327
    +
    @ CSR_MXISA_FASTSHIFT
    Definition neorv32_cpu_csr.h:346
    +
    @ CSR_MXISA_ZXCFU
    Definition neorv32_cpu_csr.h:330
    +
    NEORV32_CSR_FFLAGS_enum
    Definition neorv32_cpu_csr.h:186
    +
    @ CSR_FFLAGS_DZ
    Definition neorv32_cpu_csr.h:190
    +
    @ CSR_FFLAGS_NV
    Definition neorv32_cpu_csr.h:191
    +
    @ CSR_FFLAGS_OF
    Definition neorv32_cpu_csr.h:189
    +
    @ CSR_FFLAGS_NX
    Definition neorv32_cpu_csr.h:187
    +
    @ CSR_FFLAGS_UF
    Definition neorv32_cpu_csr.h:188
    +
    NEORV32_CSR_MISA_enum
    Definition neorv32_cpu_csr.h:306
    +
    @ CSR_MISA_E
    Definition neorv32_cpu_csr.h:311
    +
    @ CSR_MISA_X
    Definition neorv32_cpu_csr.h:316
    +
    @ CSR_MISA_D
    Definition neorv32_cpu_csr.h:310
    +
    @ CSR_MISA_M
    Definition neorv32_cpu_csr.h:314
    +
    @ CSR_MISA_I
    Definition neorv32_cpu_csr.h:313
    +
    @ CSR_MISA_C
    Definition neorv32_cpu_csr.h:309
    +
    @ CSR_MISA_A
    Definition neorv32_cpu_csr.h:307
    +
    @ CSR_MISA_F
    Definition neorv32_cpu_csr.h:312
    +
    @ CSR_MISA_MXL_LO
    Definition neorv32_cpu_csr.h:317
    +
    @ CSR_MISA_U
    Definition neorv32_cpu_csr.h:315
    +
    @ CSR_MISA_B
    Definition neorv32_cpu_csr.h:308
    +
    @ CSR_MISA_MXL_HI
    Definition neorv32_cpu_csr.h:318
    +
    + + +
    + + diff --git a/sw/neorv32__crc_8c.html b/sw/neorv32__crc_8c.html new file mode 100644 index 0000000000..f11426ec7f --- /dev/null +++ b/sw/neorv32__crc_8c.html @@ -0,0 +1,255 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_crc.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_crc.c File Reference
    +
    +
    + +

    Cyclic redundancy check unit (CRC) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + +

    +Functions

    int neorv32_crc_available (void)
     
    void neorv32_crc_setup (uint32_t mode, uint32_t poly, uint32_t start)
     
    uint32_t neorv32_crc_block (uint8_t *byte, int length)
     
    void neorv32_crc_single (uint8_t byte)
     
    uint32_t neorv32_crc_get (void)
     
    +

    Detailed Description

    +

    Cyclic redundancy check unit (CRC) HW driver source file.

    +
    Note
    These functions should only be used if the CRC unit was synthesized (IO_CRC_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_crc_available()

    + +
    +
    + + + + + + + +
    int neorv32_crc_available (void )
    +
    +

    Check if CRC unit was synthesized.

    +
    Returns
    0 if CRC was not synthesized, 1 if CRC is available.
    + +
    +
    + +

    ◆ neorv32_crc_block()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_crc_block (uint8_t * byte,
    int length )
    +
    +

    Compute pre-configured CRC for entire data block.

    +
    Parameters
    + + + +
    [in]bytePointer to byte (uint8_t) source data array.
    [in]lengthLength of source data array.
    +
    +
    +
    Returns
    32-bit CRC result.
    + +
    +
    + +

    ◆ neorv32_crc_get()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_crc_get (void )
    +
    +

    Get current CRC shift register data.

    +
    Returns
    32-bit CRC result.
    + +
    +
    + +

    ◆ neorv32_crc_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_crc_setup (uint32_t mode,
    uint32_t poly,
    uint32_t start )
    +
    +

    Setup CRC unit.

    +
    Parameters
    + + + + +
    [in]modeOperation mode (NEORV32_CRC_MODE_enum).
    [in]polyCRC polynomial.
    [in]startCRC shift register start value.
    +
    +
    + +
    +
    + +

    ◆ neorv32_crc_single()

    + +
    +
    + + + + + + + +
    void neorv32_crc_single (uint8_t byte)
    +
    +

    Compute pre-configured CRC for single data byte.

    +
    Parameters
    + + +
    [in]byteData byte (uint8_t).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__crc_8h.html b/sw/neorv32__crc_8h.html new file mode 100644 index 0000000000..71059677bf --- /dev/null +++ b/sw/neorv32__crc_8h.html @@ -0,0 +1,312 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_crc.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_crc.h File Reference
    +
    +
    + +

    Cyclic redundancy check unit (CRC) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_crc_t
     
    + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_crc_available (void)
     
    void neorv32_crc_setup (uint32_t mode, uint32_t poly, uint32_t start)
     
    uint32_t neorv32_crc_block (uint8_t *byte, int length)
     
    void neorv32_crc_single (uint8_t byte)
     
    uint32_t neorv32_crc_get (void)
     
    + + + + + +

    IO Device: Cyclic Redundancy Check Unit (CRC)

    #define NEORV32_CRC   ((neorv32_crc_t*) (NEORV32_CRC_BASE))
     
    enum  NEORV32_CRC_MODE_enum { CRC_MODE8 = 0b00 +, CRC_MODE16 = 0b01 +, CRC_MODE32 = 0b10 + }
     
    +

    Detailed Description

    +

    Cyclic redundancy check unit (CRC) HW driver header file.

    +
    Note
    These functions should only be used if the CRC unit was synthesized (IO_CRC_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_CRC

    + +
    +
    + + + + +
    #define NEORV32_CRC   ((neorv32_crc_t*) (NEORV32_CRC_BASE))
    +
    +

    CRC module hardware access (neorv32_crc_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_CRC_MODE_enum

    + +
    +
    + + + + +
    enum NEORV32_CRC_MODE_enum
    +
    +

    CRC mode select

    + + + + +
    Enumerator
    CRC_MODE8 

    (0) crc8

    +
    CRC_MODE16 

    (1) crc16

    +
    CRC_MODE32 

    (3) crc32

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_crc_available()

    + +
    +
    + + + + + + + +
    int neorv32_crc_available (void )
    +
    +

    Check if CRC unit was synthesized.

    +
    Returns
    0 if CRC was not synthesized, 1 if CRC is available.
    + +
    +
    + +

    ◆ neorv32_crc_block()

    + +
    +
    + + + + + + + + + + + +
    uint32_t neorv32_crc_block (uint8_t * byte,
    int length )
    +
    +

    Compute pre-configured CRC for entire data block.

    +
    Parameters
    + + + +
    [in]bytePointer to byte (uint8_t) source data array.
    [in]lengthLength of source data array.
    +
    +
    +
    Returns
    32-bit CRC result.
    + +
    +
    + +

    ◆ neorv32_crc_get()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_crc_get (void )
    +
    +

    Get current CRC shift register data.

    +
    Returns
    32-bit CRC result.
    + +
    +
    + +

    ◆ neorv32_crc_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_crc_setup (uint32_t mode,
    uint32_t poly,
    uint32_t start )
    +
    +

    Setup CRC unit.

    +
    Parameters
    + + + + +
    [in]modeOperation mode (NEORV32_CRC_MODE_enum).
    [in]polyCRC polynomial.
    [in]startCRC shift register start value.
    +
    +
    + +
    +
    + +

    ◆ neorv32_crc_single()

    + +
    +
    + + + + + + + +
    void neorv32_crc_single (uint8_t byte)
    +
    +

    Compute pre-configured CRC for single data byte.

    +
    Parameters
    + + +
    [in]byteData byte (uint8_t).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__crc_8h_source.html b/sw/neorv32__crc_8h_source.html new file mode 100644 index 0000000000..c04a702582 --- /dev/null +++ b/sw/neorv32__crc_8h_source.html @@ -0,0 +1,157 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_crc.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_crc.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_crc_h
    +
    19#define neorv32_crc_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t MODE;
    +
    31 uint32_t POLY;
    +
    32 uint32_t DATA;
    +
    33 uint32_t SREG;
    + +
    +
    35
    +
    37#define NEORV32_CRC ((neorv32_crc_t*) (NEORV32_CRC_BASE))
    +
    38
    +
    + +
    41 CRC_MODE8 = 0b00,
    +
    42 CRC_MODE16 = 0b01,
    +
    43 CRC_MODE32 = 0b10,
    +
    44};
    +
    +
    48/**********************************************************************/
    +
    52int neorv32_crc_available(void);
    +
    53void neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start);
    +
    54uint32_t neorv32_crc_block(uint8_t *byte, int length);
    +
    55void neorv32_crc_single(uint8_t byte);
    +
    56uint32_t neorv32_crc_get(void);
    +
    60#endif // neorv32_crc_h
    +
    NEORV32_CRC_MODE_enum
    Definition neorv32_crc.h:40
    +
    @ CRC_MODE32
    Definition neorv32_crc.h:43
    +
    @ CRC_MODE8
    Definition neorv32_crc.h:41
    +
    @ CRC_MODE16
    Definition neorv32_crc.h:42
    +
    uint32_t neorv32_crc_get(void)
    Definition neorv32_crc.c:86
    +
    void neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start)
    Definition neorv32_crc.c:44
    +
    uint32_t neorv32_crc_block(uint8_t *byte, int length)
    Definition neorv32_crc.c:59
    +
    int neorv32_crc_available(void)
    Definition neorv32_crc.c:26
    +
    void neorv32_crc_single(uint8_t byte)
    Definition neorv32_crc.c:75
    +
    Definition neorv32_crc.h:29
    +
    uint32_t DATA
    Definition neorv32_crc.h:32
    +
    uint32_t POLY
    Definition neorv32_crc.h:31
    +
    uint32_t SREG
    Definition neorv32_crc.h:33
    +
    uint32_t MODE
    Definition neorv32_crc.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__dma_8h.html b/sw/neorv32__dma_8h.html new file mode 100644 index 0000000000..1cfaf42873 --- /dev/null +++ b/sw/neorv32__dma_8h.html @@ -0,0 +1,676 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_dma.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_dma.h File Reference
    +
    +
    + +

    Direct Memory Access Controller (DMA) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_dma_t
     
    + + + + + + + + + + + + + + + + + + + + +

    +Macros

    #define DMA_CMD_B2B   (0b00 << DMA_TTYPE_QSEL_LSB)
     
    #define DMA_CMD_B2UW   (0b01 << DMA_TTYPE_QSEL_LSB)
     
    #define DMA_CMD_B2SW   (0b10 << DMA_TTYPE_QSEL_LSB)
     
    #define DMA_CMD_W2W   (0b11 << DMA_TTYPE_QSEL_LSB)
     
    #define DMA_CMD_SRC_CONST   (0b0 << DMA_TTYPE_SRC_INC)
     
    #define DMA_CMD_SRC_INC   (0b1 << DMA_TTYPE_SRC_INC)
     
    #define DMA_CMD_DST_CONST   (0b0 << DMA_TTYPE_DST_INC)
     
    #define DMA_CMD_DST_INC   (0b1 << DMA_TTYPE_DST_INC)
     
    #define DMA_CMD_ENDIAN   (0b1 << DMA_TTYPE_ENDIAN)
     
    + + + +

    +Enumerations

    enum  NEORV32_DMA_STATUS_enum { DMA_STATUS_ERR_WR = -2 +, DMA_STATUS_ERR_RD = -1 +, DMA_STATUS_IDLE = 0 +, DMA_STATUS_BUSY = 1 + }
     
    + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_dma_available (void)
     
    void neorv32_dma_enable (void)
     
    void neorv32_dma_disable (void)
     
    void neorv32_dma_fence_enable (void)
     
    void neorv32_dma_fence_disable (void)
     
    void neorv32_dma_transfer (uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config)
     
    void neorv32_dma_transfer_auto (uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config, int firq_sel, int firq_type)
     
    int neorv32_dma_status (void)
     
    int neorv32_dma_done (void)
     
    + + + + + + + +

    IO Device: Direct Memory Access Controller (DMA)

    #define NEORV32_DMA   ((neorv32_dma_t*) (NEORV32_DMA_BASE))
     
    enum  NEORV32_DMA_CTRL_enum {
    +  DMA_CTRL_EN = 0 +, DMA_CTRL_AUTO = 1 +, DMA_CTRL_FENCE = 2 +, DMA_CTRL_ERROR_RD = 8 +,
    +  DMA_CTRL_ERROR_WR = 9 +, DMA_CTRL_BUSY = 10 +, DMA_CTRL_DONE = 11 +, DMA_CTRL_FIRQ_TYPE = 15 +,
    +  DMA_CTRL_FIRQ_SEL_LSB = 16 +, DMA_CTRL_FIRQ_SEL_MSB = 19 +
    + }
     
    enum  NEORV32_DMA_TTYPE_enum {
    +  DMA_TTYPE_NUM_LSB = 0 +, DMA_TTYPE_NUM_MSB = 23 +, DMA_TTYPE_QSEL_LSB = 27 +, DMA_TTYPE_QSEL_MSB = 28 +,
    +  DMA_TTYPE_SRC_INC = 29 +, DMA_TTYPE_DST_INC = 30 +, DMA_TTYPE_ENDIAN = 31 +
    + }
     
    +

    Detailed Description

    +

    Direct Memory Access Controller (DMA) HW driver header file.

    +
    Note
    These functions should only be used if the DMA controller was synthesized (IO_DMA_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ DMA_CMD_B2B

    + +
    +
    + + + + +
    #define DMA_CMD_B2B   (0b00 << DMA_TTYPE_QSEL_LSB)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_B2SW

    + +
    +
    + + + + +
    #define DMA_CMD_B2SW   (0b10 << DMA_TTYPE_QSEL_LSB)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_B2UW

    + +
    +
    + + + + +
    #define DMA_CMD_B2UW   (0b01 << DMA_TTYPE_QSEL_LSB)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_DST_CONST

    + +
    +
    + + + + +
    #define DMA_CMD_DST_CONST   (0b0 << DMA_TTYPE_DST_INC)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_DST_INC

    + +
    +
    + + + + +
    #define DMA_CMD_DST_INC   (0b1 << DMA_TTYPE_DST_INC)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_ENDIAN

    + +
    +
    + + + + +
    #define DMA_CMD_ENDIAN   (0b1 << DMA_TTYPE_ENDIAN)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_SRC_CONST

    + +
    +
    + + + + +
    #define DMA_CMD_SRC_CONST   (0b0 << DMA_TTYPE_SRC_INC)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_SRC_INC

    + +
    +
    + + + + +
    #define DMA_CMD_SRC_INC   (0b1 << DMA_TTYPE_SRC_INC)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ DMA_CMD_W2W

    + +
    +
    + + + + +
    #define DMA_CMD_W2W   (0b11 << DMA_TTYPE_QSEL_LSB)
    +
    +

    DMA transfer type commands

    + +
    +
    + +

    ◆ NEORV32_DMA

    + +
    +
    + + + + +
    #define NEORV32_DMA   ((neorv32_dma_t*) (NEORV32_DMA_BASE))
    +
    +

    DMA module hardware access (neorv32_dma_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_DMA_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_DMA_CTRL_enum
    +
    +

    DMA control and status register bits

    + + + + + + + + + + + +
    Enumerator
    DMA_CTRL_EN 

    DMA control register(0) (r/w): DMA enable

    +
    DMA_CTRL_AUTO 

    DMA control register(1) (r/w): Automatic trigger mode enable

    +
    DMA_CTRL_FENCE 

    DMA control register(2) (r/w): Issue FENCE downstream operation when DMA transfer is completed

    +
    DMA_CTRL_ERROR_RD 

    DMA control register(8) (r/-): Error during read access; SRC_BASE shows the faulting address

    +
    DMA_CTRL_ERROR_WR 

    DMA control register(9) (r/-): Error during write access; DST_BASE shows the faulting address

    +
    DMA_CTRL_BUSY 

    DMA control register(10) (r/-): DMA busy / transfer in progress

    +
    DMA_CTRL_DONE 

    DMA control register(11) (r/c): A transfer was executed when set

    +
    DMA_CTRL_FIRQ_TYPE 

    DMA control register(15) (r/w): Trigger on FIRQ rising-edge (0) or high-level (1)

    +
    DMA_CTRL_FIRQ_SEL_LSB 

    DMA control register(16) (r/w): FIRQ trigger select LSB

    +
    DMA_CTRL_FIRQ_SEL_MSB 

    DMA control register(19) (r/w): FIRQ trigger select MSB

    +
    + +
    +
    + +

    ◆ NEORV32_DMA_STATUS_enum

    + +
    +
    + + + + +
    enum NEORV32_DMA_STATUS_enum
    +
    +

    DMA status

    + + + + + +
    Enumerator
    DMA_STATUS_ERR_WR 

    write access error during last transfer (-2)

    +
    DMA_STATUS_ERR_RD 

    read access error during last transfer (-1)

    +
    DMA_STATUS_IDLE 

    DMA idle (0)

    +
    DMA_STATUS_BUSY 

    DMA busy (1)

    +
    + +
    +
    + +

    ◆ NEORV32_DMA_TTYPE_enum

    + +
    +
    + + + + +
    enum NEORV32_DMA_TTYPE_enum
    +
    +

    DMA transfer type bits

    + + + + + + + + +
    Enumerator
    DMA_TTYPE_NUM_LSB 

    DMA transfer type register(0) (r/w): Number of elements to transfer, LSB

    +
    DMA_TTYPE_NUM_MSB 

    DMA transfer type register(23) (r/w): Number of elements to transfer, MSB

    +
    DMA_TTYPE_QSEL_LSB 

    DMA transfer type register(27) (r/w): Data quantity select, LSB

    +
    DMA_TTYPE_QSEL_MSB 

    DMA transfer type register(28) (r/w): Data quantity select, MSB

    +
    DMA_TTYPE_SRC_INC 

    DMA transfer type register(29) (r/w): SRC constant (0) or incrementing (1) address

    +
    DMA_TTYPE_DST_INC 

    DMA transfer type register(30) (r/w): SRC constant (0) or incrementing (1) address

    +
    DMA_TTYPE_ENDIAN 

    DMA transfer type register(31) (r/w): Convert Endianness when set

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_dma_available()

    + +
    +
    + + + + + + + +
    int neorv32_dma_available (void )
    +
    +

    Check if DMA controller was synthesized.

    +
    Returns
    0 if DMA was not synthesized, 1 if DMA is available.
    + +
    +
    + +

    ◆ neorv32_dma_disable()

    + +
    +
    + + + + + + + +
    void neorv32_dma_disable (void )
    +
    +

    Disable DMA. This will reset the DMA and will also terminate the current transfer.

    + +
    +
    + +

    ◆ neorv32_dma_done()

    + +
    +
    + + + + + + + +
    int neorv32_dma_done (void )
    +
    +

    Check if a transfer has actually been executed.

    +
    Returns
    0 if no transfer was executed, 1 if a transfer has actually been executed. Use neorv32_dma_status(void) to check if there was an error during that transfer.
    + +
    +
    + +

    ◆ neorv32_dma_enable()

    + +
    +
    + + + + + + + +
    void neorv32_dma_enable (void )
    +
    +

    Enable DMA.

    + +
    +
    + +

    ◆ neorv32_dma_fence_disable()

    + +
    +
    + + + + + + + +
    void neorv32_dma_fence_disable (void )
    +
    +

    Disable memory barrier (fence).

    + +
    +
    + +

    ◆ neorv32_dma_fence_enable()

    + +
    +
    + + + + + + + +
    void neorv32_dma_fence_enable (void )
    +
    +

    Enable memory barrier (fence): issue a FENCE operation when DMA transfer completes without errors.

    + +
    +
    + +

    ◆ neorv32_dma_status()

    + +
    +
    + + + + + + + +
    int neorv32_dma_status (void )
    +
    +

    Get DMA status.

    +
    Returns
    Current DMA status (NEORV32_DMA_STATUS_enum)
    + +
    +
    + +

    ◆ neorv32_dma_transfer()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_dma_transfer (uint32_t base_src,
    uint32_t base_dst,
    uint32_t num,
    uint32_t config )
    +
    +

    Trigger manual DMA transfer.

    +
    Parameters
    + + + + + +
    [in]base_srcSource base address (has to be aligned to source data type!).
    [in]base_dstDestination base address (has to be aligned to destination data type!).
    [in]numNumber of elements to transfer (24-bit).
    [in]configTransfer type configuration/commands.
    +
    +
    + +
    +
    + +

    ◆ neorv32_dma_transfer_auto()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_dma_transfer_auto (uint32_t base_src,
    uint32_t base_dst,
    uint32_t num,
    uint32_t config,
    int firq_sel,
    int firq_type )
    +
    +

    Configure automatic DMA transfer (triggered by CPU FIRQ).

    +
    Parameters
    + + + + + + + +
    [in]base_srcSource base address (has to be aligned to source data type!).
    [in]base_dstDestination base address (has to be aligned to destination data type!).
    [in]numNumber of elements to transfer (24-bit).
    [in]configTransfer type configuration/commands.
    [in]firq_selFIRQ trigger select (NEORV32_CSR_MIP_enum); only FIRQ0..FIRQ15 = 16..31.
    [in]firq_typeTrigger on rising-edge (0) or high-level (1) of FIRQ channel.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__dma_8h_source.html b/sw/neorv32__dma_8h_source.html new file mode 100644 index 0000000000..eed46c6278 --- /dev/null +++ b/sw/neorv32__dma_8h_source.html @@ -0,0 +1,228 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_dma.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_dma.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_dma_h
    +
    19#define neorv32_dma_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t SRC_BASE;
    +
    32 uint32_t DST_BASE;
    +
    33 uint32_t TTYPE;
    + +
    +
    35
    +
    37#define NEORV32_DMA ((neorv32_dma_t*) (NEORV32_DMA_BASE))
    +
    38
    + +
    54
    + +
    69/**********************************************************************/
    +
    73#define DMA_CMD_B2B (0b00 << DMA_TTYPE_QSEL_LSB) // byte to byte
    +
    74#define DMA_CMD_B2UW (0b01 << DMA_TTYPE_QSEL_LSB) // byte to unsigned word
    +
    75#define DMA_CMD_B2SW (0b10 << DMA_TTYPE_QSEL_LSB) // byte to signed word
    +
    76#define DMA_CMD_W2W (0b11 << DMA_TTYPE_QSEL_LSB) // word to word
    +
    77
    +
    78#define DMA_CMD_SRC_CONST (0b0 << DMA_TTYPE_SRC_INC) // constant source address
    +
    79#define DMA_CMD_SRC_INC (0b1 << DMA_TTYPE_SRC_INC) // incrementing source address
    +
    80
    +
    81#define DMA_CMD_DST_CONST (0b0 << DMA_TTYPE_DST_INC) // constant destination address
    +
    82#define DMA_CMD_DST_INC (0b1 << DMA_TTYPE_DST_INC) // incrementing destination address
    +
    83
    +
    84#define DMA_CMD_ENDIAN (0b1 << DMA_TTYPE_ENDIAN) // convert endianness
    +
    88/**********************************************************************/
    + +
    97
    +
    98
    +
    99/**********************************************************************/
    +
    103int neorv32_dma_available(void);
    +
    104void neorv32_dma_enable(void);
    +
    105void neorv32_dma_disable(void);
    +
    106void neorv32_dma_fence_enable(void);
    + +
    108void neorv32_dma_transfer(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config);
    +
    109void neorv32_dma_transfer_auto(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config, int firq_sel, int firq_type);
    +
    110int neorv32_dma_status(void);
    +
    111int neorv32_dma_done(void);
    +
    115#endif // neorv32_dma_h
    +
    NEORV32_DMA_STATUS_enum
    Definition neorv32_dma.h:91
    +
    @ DMA_STATUS_ERR_WR
    Definition neorv32_dma.h:92
    +
    @ DMA_STATUS_IDLE
    Definition neorv32_dma.h:94
    +
    @ DMA_STATUS_BUSY
    Definition neorv32_dma.h:95
    +
    @ DMA_STATUS_ERR_RD
    Definition neorv32_dma.h:93
    +
    int neorv32_dma_available(void)
    Definition neorv32_dma.c:26
    +
    void neorv32_dma_fence_enable(void)
    Definition neorv32_dma.c:59
    +
    void neorv32_dma_transfer(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config)
    Definition neorv32_dma.c:82
    +
    NEORV32_DMA_TTYPE_enum
    Definition neorv32_dma.h:56
    +
    @ DMA_TTYPE_ENDIAN
    Definition neorv32_dma.h:64
    +
    @ DMA_TTYPE_QSEL_MSB
    Definition neorv32_dma.h:61
    +
    @ DMA_TTYPE_SRC_INC
    Definition neorv32_dma.h:62
    +
    @ DMA_TTYPE_NUM_MSB
    Definition neorv32_dma.h:58
    +
    @ DMA_TTYPE_NUM_LSB
    Definition neorv32_dma.h:57
    +
    @ DMA_TTYPE_DST_INC
    Definition neorv32_dma.h:63
    +
    @ DMA_TTYPE_QSEL_LSB
    Definition neorv32_dma.h:60
    +
    NEORV32_DMA_CTRL_enum
    Definition neorv32_dma.h:40
    +
    @ DMA_CTRL_DONE
    Definition neorv32_dma.h:48
    +
    @ DMA_CTRL_FIRQ_SEL_MSB
    Definition neorv32_dma.h:52
    +
    @ DMA_CTRL_ERROR_RD
    Definition neorv32_dma.h:45
    +
    @ DMA_CTRL_AUTO
    Definition neorv32_dma.h:42
    +
    @ DMA_CTRL_EN
    Definition neorv32_dma.h:41
    +
    @ DMA_CTRL_BUSY
    Definition neorv32_dma.h:47
    +
    @ DMA_CTRL_FIRQ_SEL_LSB
    Definition neorv32_dma.h:51
    +
    @ DMA_CTRL_FENCE
    Definition neorv32_dma.h:43
    +
    @ DMA_CTRL_FIRQ_TYPE
    Definition neorv32_dma.h:50
    +
    @ DMA_CTRL_ERROR_WR
    Definition neorv32_dma.h:46
    +
    void neorv32_dma_disable(void)
    Definition neorv32_dma.c:49
    +
    void neorv32_dma_transfer_auto(uint32_t base_src, uint32_t base_dst, uint32_t num, uint32_t config, int firq_sel, int firq_type)
    Definition neorv32_dma.c:101
    +
    void neorv32_dma_fence_disable(void)
    Definition neorv32_dma.c:68
    +
    int neorv32_dma_status(void)
    Definition neorv32_dma.c:121
    +
    void neorv32_dma_enable(void)
    Definition neorv32_dma.c:40
    +
    int neorv32_dma_done(void)
    Definition neorv32_dma.c:146
    +
    Definition neorv32_dma.h:29
    +
    uint32_t SRC_BASE
    Definition neorv32_dma.h:31
    +
    uint32_t TTYPE
    Definition neorv32_dma.h:33
    +
    uint32_t CTRL
    Definition neorv32_dma.h:30
    +
    uint32_t DST_BASE
    Definition neorv32_dma.h:32
    +
    + + +
    + + diff --git a/sw/neorv32__gpio_8c.html b/sw/neorv32__gpio_8c.html new file mode 100644 index 0000000000..eaea806e2d --- /dev/null +++ b/sw/neorv32__gpio_8c.html @@ -0,0 +1,296 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_gpio.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_gpio.c File Reference
    +
    +
    + +

    General purpose input/output port unit (GPIO) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_gpio_available (void)
     
    void neorv32_gpio_pin_set (int pin, int value)
     
    void neorv32_gpio_pin_toggle (int pin)
     
    uint32_t neorv32_gpio_pin_get (int pin)
     
    void neorv32_gpio_port_set (uint64_t port_data)
     
    void neorv32_gpio_port_toggle (uint64_t toggle)
     
    uint64_t neorv32_gpio_port_get (void)
     
    +

    Detailed Description

    +

    General purpose input/output port unit (GPIO) HW driver source file.

    +
    Note
    These functions should only be used if the GPIO unit was synthesized (IO_GPIO_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_gpio_available()

    + +
    +
    + + + + + + + +
    int neorv32_gpio_available (void )
    +
    +

    Check if GPIO unit was synthesized.

    +
    Returns
    0 if GPIO was not synthesized, 1 if GPIO is available.
    + +
    +
    + +

    ◆ neorv32_gpio_pin_get()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_gpio_pin_get (int pin)
    +
    +

    Get single pin of GPIO's input port.

    +
    Parameters
    + + +
    [in]pinInput pin to be read (0..63).
    +
    +
    +
    Returns
    =0 if pin is low, !=0 if pin is high.
    + +
    +
    + +

    ◆ neorv32_gpio_pin_set()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_gpio_pin_set (int pin,
    int value )
    +
    +

    Set single pin of GPIO's output port.

    +
    Parameters
    + + + +
    [in]pinOutput pin number to be set (0..63).
    [in]valueSet pint high (1) or low (0).
    +
    +
    + +
    +
    + +

    ◆ neorv32_gpio_pin_toggle()

    + +
    +
    + + + + + + + +
    void neorv32_gpio_pin_toggle (int pin)
    +
    +

    Toggle single pin of GPIO's output port.

    +
    Parameters
    + + +
    [in]pinOutput pin number to be toggled (0..63).
    +
    +
    + +
    +
    + +

    ◆ neorv32_gpio_port_get()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_gpio_port_get (void )
    +
    +

    Get complete GPIO input port.

    +
    Returns
    Current input port state (64-bit).
    + +
    +
    + +

    ◆ neorv32_gpio_port_set()

    + +
    +
    + + + + + + + +
    void neorv32_gpio_port_set (uint64_t port_data)
    +
    +

    Set complete GPIO output port.

    +
    Parameters
    + + +
    [in]port_dataNew output port value (64-bit).
    +
    +
    + +
    +
    + +

    ◆ neorv32_gpio_port_toggle()

    + +
    +
    + + + + + + + +
    void neorv32_gpio_port_toggle (uint64_t toggle)
    +
    +

    Toggle bit in entire GPIO output port.

    +
    Parameters
    + + +
    [in]toggleBit mask; set bits will toggle the according output port (64-bit).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__gpio_8h.html b/sw/neorv32__gpio_8h.html new file mode 100644 index 0000000000..4d8f632d0f --- /dev/null +++ b/sw/neorv32__gpio_8h.html @@ -0,0 +1,326 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gpio.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_gpio.h File Reference
    +
    +
    + +

    General purpose input/output port unit (GPIO) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_gpio_t
     
    + + + + +

    +Macros

    IO Device: General Purpose Input/Output Port Unit (GPIO)
    #define NEORV32_GPIO   ((neorv32_gpio_t*) (NEORV32_GPIO_BASE))
     
    + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_gpio_available (void)
     
    void neorv32_gpio_pin_set (int pin, int value)
     
    void neorv32_gpio_pin_toggle (int pin)
     
    uint32_t neorv32_gpio_pin_get (int pin)
     
    void neorv32_gpio_port_set (uint64_t d)
     
    void neorv32_gpio_port_toggle (uint64_t toggle)
     
    uint64_t neorv32_gpio_port_get (void)
     
    +

    Detailed Description

    +

    General purpose input/output port unit (GPIO) HW driver header file.

    +
    Note
    These functions should only be used if the GPIO unit was synthesized (IO_GPIO_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_GPIO

    + +
    +
    + + + + +
    #define NEORV32_GPIO   ((neorv32_gpio_t*) (NEORV32_GPIO_BASE))
    +
    +

    GPIO module hardware access (neorv32_gpio_t)

    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_gpio_available()

    + +
    +
    + + + + + + + +
    int neorv32_gpio_available (void )
    +
    +

    Check if GPIO unit was synthesized.

    +
    Returns
    0 if GPIO was not synthesized, 1 if GPIO is available.
    + +
    +
    + +

    ◆ neorv32_gpio_pin_get()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_gpio_pin_get (int pin)
    +
    +

    Get single pin of GPIO's input port.

    +
    Parameters
    + + +
    [in]pinInput pin to be read (0..63).
    +
    +
    +
    Returns
    =0 if pin is low, !=0 if pin is high.
    + +
    +
    + +

    ◆ neorv32_gpio_pin_set()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_gpio_pin_set (int pin,
    int value )
    +
    +

    Set single pin of GPIO's output port.

    +
    Parameters
    + + + +
    [in]pinOutput pin number to be set (0..63).
    [in]valueSet pint high (1) or low (0).
    +
    +
    + +
    +
    + +

    ◆ neorv32_gpio_pin_toggle()

    + +
    +
    + + + + + + + +
    void neorv32_gpio_pin_toggle (int pin)
    +
    +

    Toggle single pin of GPIO's output port.

    +
    Parameters
    + + +
    [in]pinOutput pin number to be toggled (0..63).
    +
    +
    + +
    +
    + +

    ◆ neorv32_gpio_port_get()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_gpio_port_get (void )
    +
    +

    Get complete GPIO input port.

    +
    Returns
    Current input port state (64-bit).
    + +
    +
    + +

    ◆ neorv32_gpio_port_set()

    + +
    +
    + + + + + + + +
    void neorv32_gpio_port_set (uint64_t port_data)
    +
    +

    Set complete GPIO output port.

    +
    Parameters
    + + +
    [in]port_dataNew output port value (64-bit).
    +
    +
    + +
    +
    + +

    ◆ neorv32_gpio_port_toggle()

    + +
    +
    + + + + + + + +
    void neorv32_gpio_port_toggle (uint64_t toggle)
    +
    +

    Toggle bit in entire GPIO output port.

    +
    Parameters
    + + +
    [in]toggleBit mask; set bits will toggle the according output port (64-bit).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__gpio_8h_source.html b/sw/neorv32__gpio_8h_source.html new file mode 100644 index 0000000000..8de444f906 --- /dev/null +++ b/sw/neorv32__gpio_8h_source.html @@ -0,0 +1,143 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gpio.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_gpio.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_gpio_h
    +
    19#define neorv32_gpio_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 const uint32_t INPUT[2];
    +
    31 uint32_t OUTPUT[2];
    + +
    +
    33
    +
    35#define NEORV32_GPIO ((neorv32_gpio_t*) (NEORV32_GPIO_BASE))
    +
    39/**********************************************************************/
    + +
    44void neorv32_gpio_pin_set(int pin, int value);
    +
    45void neorv32_gpio_pin_toggle(int pin);
    +
    46uint32_t neorv32_gpio_pin_get(int pin);
    +
    47void neorv32_gpio_port_set(uint64_t d);
    +
    48void neorv32_gpio_port_toggle(uint64_t toggle);
    +
    49uint64_t neorv32_gpio_port_get(void);
    +
    53#endif // neorv32_gpio_h
    +
    void neorv32_gpio_pin_toggle(int pin)
    Definition neorv32_gpio.c:62
    +
    void neorv32_gpio_port_toggle(uint64_t toggle)
    Definition neorv32_gpio.c:104
    +
    int neorv32_gpio_available(void)
    Definition neorv32_gpio.c:26
    +
    void neorv32_gpio_pin_set(int pin, int value)
    Definition neorv32_gpio.c:43
    +
    void neorv32_gpio_port_set(uint64_t d)
    Definition neorv32_gpio.c:89
    +
    uint64_t neorv32_gpio_port_get(void)
    Definition neorv32_gpio.c:119
    +
    uint32_t neorv32_gpio_pin_get(int pin)
    Definition neorv32_gpio.c:76
    +
    Definition neorv32_gpio.h:29
    +
    + + +
    + + diff --git a/sw/neorv32__gptmr_8c.html b/sw/neorv32__gptmr_8c.html new file mode 100644 index 0000000000..8688a8a2c1 --- /dev/null +++ b/sw/neorv32__gptmr_8c.html @@ -0,0 +1,236 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_gptmr.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_gptmr.c File Reference
    +
    +
    + +

    General purpose timer (GPTMR) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + +

    +Functions

    int neorv32_gptmr_available (void)
     
    void neorv32_gptmr_setup (int prsc, uint32_t threshold, int cont_mode)
     
    void neorv32_gptmr_disable (void)
     
    void neorv32_gptmr_enable (void)
     
    void neorv32_gptmr_irq_ack (void)
     
    +

    Detailed Description

    +

    General purpose timer (GPTMR) HW driver source file.

    +
    Note
    These functions should only be used if the GPTMR unit was synthesized (IO_GPTMR_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_gptmr_available()

    + +
    +
    + + + + + + + +
    int neorv32_gptmr_available (void )
    +
    +

    Check if general purpose timer unit was synthesized.

    +
    Returns
    0 if GPTMR was not synthesized, 1 if GPTMR is available.
    + +
    +
    + +

    ◆ neorv32_gptmr_disable()

    + +
    +
    + + + + + + + +
    void neorv32_gptmr_disable (void )
    +
    +

    Disable general purpose timer.

    + +
    +
    + +

    ◆ neorv32_gptmr_enable()

    + +
    +
    + + + + + + + +
    void neorv32_gptmr_enable (void )
    +
    +

    Enable general purpose timer.

    + +
    +
    + +

    ◆ neorv32_gptmr_irq_ack()

    + +
    +
    + + + + + + + +
    void neorv32_gptmr_irq_ack (void )
    +
    +

    Clear pending timer interrupt.

    + +
    +
    + +

    ◆ neorv32_gptmr_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_gptmr_setup (int prsc,
    uint32_t threshold,
    int cont_mode )
    +
    +

    Reset, enable and configure general purpose timer.

    +
    Parameters
    + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    [in]thresholdThreshold value, counter will reset to zero when reaching this.
    [in]cont_modeSet to operate timer in continuous mode (instead of single-shot mode).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__gptmr_8h.html b/sw/neorv32__gptmr_8h.html new file mode 100644 index 0000000000..48d433203e --- /dev/null +++ b/sw/neorv32__gptmr_8h.html @@ -0,0 +1,308 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gptmr.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_gptmr.h File Reference
    +
    +
    + +

    General purpose timer (GPTMR) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_gptmr_t
     
    + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_gptmr_available (void)
     
    void neorv32_gptmr_setup (int prsc, uint32_t threshold, int cont_mode)
     
    void neorv32_gptmr_disable (void)
     
    void neorv32_gptmr_enable (void)
     
    void neorv32_gptmr_irq_ack (void)
     
    + + + + + +

    IO Device: General Purpose Timer (GPTMR)

    #define NEORV32_GPTMR   ((neorv32_gptmr_t*) (NEORV32_GPTMR_BASE))
     
    enum  NEORV32_GPTMR_CTRL_enum {
    +  GPTMR_CTRL_EN = 0 +, GPTMR_CTRL_PRSC0 = 1 +, GPTMR_CTRL_PRSC1 = 2 +, GPTMR_CTRL_PRSC2 = 3 +,
    +  GPTMR_CTRL_MODE = 4 +, GPTMR_CTRL_IRQ_CLR = 30 +, GPTMR_CTRL_IRQ_PND = 31 +
    + }
     
    +

    Detailed Description

    +

    General purpose timer (GPTMR) HW driver header file.

    +
    Note
    These functions should only be used if the GPTMR unit was synthesized (IO_GPTMR_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_GPTMR

    + +
    +
    + + + + +
    #define NEORV32_GPTMR   ((neorv32_gptmr_t*) (NEORV32_GPTMR_BASE))
    +
    +

    GPTMR module hardware access (neorv32_gptmr_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_GPTMR_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_GPTMR_CTRL_enum
    +
    +

    GPTMR control register bits

    + + + + + + + + +
    Enumerator
    GPTMR_CTRL_EN 

    GPTMR control register(0) (r/w): GPTMR enable

    +
    GPTMR_CTRL_PRSC0 

    GPTMR control register(1) (r/w): Clock prescaler select bit 0

    +
    GPTMR_CTRL_PRSC1 

    GPTMR control register(2) (r/w): Clock prescaler select bit 1

    +
    GPTMR_CTRL_PRSC2 

    GPTMR control register(3) (r/w): Clock prescaler select bit 2

    +
    GPTMR_CTRL_MODE 

    GPTMR control register(4) (r/w): Operation mode (0=single-shot, 1=continuous)

    +
    GPTMR_CTRL_IRQ_CLR 

    GPTMR control register(30) (-/w): Set to clear timer-match interrupt

    +
    GPTMR_CTRL_IRQ_PND 

    GPTMR control register(31) (r/-): Timer-match interrupt pending

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_gptmr_available()

    + +
    +
    + + + + + + + +
    int neorv32_gptmr_available (void )
    +
    +

    Check if general purpose timer unit was synthesized.

    +
    Returns
    0 if GPTMR was not synthesized, 1 if GPTMR is available.
    + +
    +
    + +

    ◆ neorv32_gptmr_disable()

    + +
    +
    + + + + + + + +
    void neorv32_gptmr_disable (void )
    +
    +

    Disable general purpose timer.

    + +
    +
    + +

    ◆ neorv32_gptmr_enable()

    + +
    +
    + + + + + + + +
    void neorv32_gptmr_enable (void )
    +
    +

    Enable general purpose timer.

    + +
    +
    + +

    ◆ neorv32_gptmr_irq_ack()

    + +
    +
    + + + + + + + +
    void neorv32_gptmr_irq_ack (void )
    +
    +

    Clear pending timer interrupt.

    + +
    +
    + +

    ◆ neorv32_gptmr_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_gptmr_setup (int prsc,
    uint32_t threshold,
    int cont_mode )
    +
    +

    Reset, enable and configure general purpose timer.

    +
    Parameters
    + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    [in]thresholdThreshold value, counter will reset to zero when reaching this.
    [in]cont_modeSet to operate timer in continuous mode (instead of single-shot mode).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__gptmr_8h_source.html b/sw/neorv32__gptmr_8h_source.html new file mode 100644 index 0000000000..09c85886f4 --- /dev/null +++ b/sw/neorv32__gptmr_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_gptmr.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_gptmr.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_gptmr_h
    +
    19#define neorv32_gptmr_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t THRES;
    +
    32 const uint32_t COUNT;
    + +
    +
    34
    +
    36#define NEORV32_GPTMR ((neorv32_gptmr_t*) (NEORV32_GPTMR_BASE))
    +
    37
    + +
    52/**********************************************************************/
    + +
    57void neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode);
    +
    58void neorv32_gptmr_disable(void);
    +
    59void neorv32_gptmr_enable(void);
    +
    60void neorv32_gptmr_irq_ack(void);
    +
    64#endif // neorv32_gptmr_h
    +
    NEORV32_GPTMR_CTRL_enum
    Definition neorv32_gptmr.h:39
    +
    @ GPTMR_CTRL_PRSC2
    Definition neorv32_gptmr.h:43
    +
    @ GPTMR_CTRL_PRSC1
    Definition neorv32_gptmr.h:42
    +
    @ GPTMR_CTRL_IRQ_PND
    Definition neorv32_gptmr.h:47
    +
    @ GPTMR_CTRL_MODE
    Definition neorv32_gptmr.h:44
    +
    @ GPTMR_CTRL_IRQ_CLR
    Definition neorv32_gptmr.h:46
    +
    @ GPTMR_CTRL_EN
    Definition neorv32_gptmr.h:40
    +
    @ GPTMR_CTRL_PRSC0
    Definition neorv32_gptmr.h:41
    +
    void neorv32_gptmr_enable(void)
    Definition neorv32_gptmr.c:69
    +
    void neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode)
    Definition neorv32_gptmr.c:44
    +
    void neorv32_gptmr_disable(void)
    Definition neorv32_gptmr.c:60
    +
    void neorv32_gptmr_irq_ack(void)
    Definition neorv32_gptmr.c:78
    +
    int neorv32_gptmr_available(void)
    Definition neorv32_gptmr.c:26
    +
    Definition neorv32_gptmr.h:29
    +
    const uint32_t COUNT
    Definition neorv32_gptmr.h:32
    +
    uint32_t CTRL
    Definition neorv32_gptmr.h:30
    +
    uint32_t THRES
    Definition neorv32_gptmr.h:31
    +
    + + +
    + + diff --git a/sw/neorv32__intrinsics_8h.html b/sw/neorv32__intrinsics_8h.html new file mode 100644 index 0000000000..b4b1e8d58d --- /dev/null +++ b/sw/neorv32__intrinsics_8h.html @@ -0,0 +1,451 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_intrinsics.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_intrinsics.h File Reference
    +
    +
    + +

    Helper functions and macros for custom "intrinsics" / instructions. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    R2-type instruction format, RISC-V-standard
    #define CUSTOM_INSTR_R2_TYPE(funct7, funct5, rs1, funct3, opcode)
     
    R3-type instruction format, RISC-V-standard
    #define CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, opcode)
     
    R4-type instruction format, RISC-V-standard
    #define CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, opcode)
     
    R5-type instruction format
    Warning
    NOT RISC-V-standard, NEORV32-specific!
    +
    #define CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, opcode)
     
    I-type instruction format, RISC-V-standard
    #define CUSTOM_INSTR_I_TYPE(imm12, rs1, funct3, opcode)
     
    S-type instruction format, RISC-V-standard
    #define CUSTOM_INSTR_S_TYPE(imm12, rs2, rs1, funct3, opcode)
     
    + + + + +

    +Functions

    Register mappings
    asm (".set reg_x0, 0 \n" ".set reg_x1, 1 \n" ".set reg_x2, 2 \n" ".set reg_x3, 3 \n" ".set reg_x4, 4 \n" ".set reg_x5, 5 \n" ".set reg_x6, 6 \n" ".set reg_x7, 7 \n" ".set reg_x8, 8 \n" ".set reg_x9, 9 \n" ".set reg_x10, 10 \n" ".set reg_x11, 11 \n" ".set reg_x12, 12 \n" ".set reg_x13, 13 \n" ".set reg_x14, 14 \n" ".set reg_x15, 15 \n" ".set reg_x16, 16 \n" ".set reg_x17, 17 \n" ".set reg_x18, 18 \n" ".set reg_x19, 19 \n" ".set reg_x20, 20 \n" ".set reg_x21, 21 \n" ".set reg_x22, 22 \n" ".set reg_x23, 23 \n" ".set reg_x24, 24 \n" ".set reg_x25, 25 \n" ".set reg_x26, 26 \n" ".set reg_x27, 27 \n" ".set reg_x28, 28 \n" ".set reg_x29, 29 \n" ".set reg_x30, 30 \n" ".set reg_x31, 31 \n" ".set reg_zero, 0 \n" ".set reg_ra, 1 \n" ".set reg_sp, 2 \n" ".set reg_gp, 3 \n" ".set reg_tp, 4 \n" ".set reg_t0, 5 \n" ".set reg_t1, 6 \n" ".set reg_t2, 7 \n" ".set reg_s0, 8 \n" ".set reg_s1, 9 \n" ".set reg_a0, 10 \n" ".set reg_a1, 11 \n" ".set reg_a2, 12 \n" ".set reg_a3, 13 \n" ".set reg_a4, 14 \n" ".set reg_a5, 15 \n" ".set reg_a6, 16 \n" ".set reg_a7, 17 \n" ".set reg_s2, 18 \n" ".set reg_s3, 19 \n" ".set reg_s4, 20 \n" ".set reg_s5, 21 \n" ".set reg_s6, 22 \n" ".set reg_s7, 23 \n" ".set reg_s8, 24 \n" ".set reg_s9, 25 \n" ".set reg_s10, 26 \n" ".set reg_s11, 27 \n" ".set reg_t3, 28 \n" ".set reg_t4, 29 \n" ".set reg_t5, 30 \n" ".set reg_t6, 31 \n")
     
    +

    Detailed Description

    +

    Helper functions and macros for custom "intrinsics" / instructions.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ CUSTOM_INSTR_I_TYPE

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    #define CUSTOM_INSTR_I_TYPE( imm12,
    rs1,
    funct3,
    opcode )
    +
    +Value:
    ({ \
    +
    uint32_t __return; \
    +
    asm volatile ( \
    +
    "" \
    +
    : [output] "=r" (__return) \
    +
    : [input_i] "r" (rs1) \
    +
    ); \
    +
    asm volatile ( \
    +
    ".word ( \ (((" #imm12 ") & 0xfff) << 20) | \ ((( reg_%1 ) & 0x1f) << 15) | \ (((" #funct3 ") & 0x07) << 12) | \ ((( reg_%0 ) & 0x1f) << 7) | \ (((" #opcode ") & 0x7f) << 0) \ );" \
    +
    : [rd] "=r" (__return) \
    +
    : "r" (rs1) \
    +
    ); \
    +
    __return; \
    +
    })
    +
    +
    +
    + +

    ◆ CUSTOM_INSTR_R2_TYPE

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define CUSTOM_INSTR_R2_TYPE( funct7,
    funct5,
    rs1,
    funct3,
    opcode )
    +
    +Value:
    ({ \
    +
    uint32_t __return; \
    +
    asm volatile ( \
    +
    "" \
    +
    : [output] "=r" (__return) \
    +
    : [input_i] "r" (rs1) \
    +
    ); \
    +
    asm volatile( \
    +
    ".word ( \ (((" #funct7 ") & 0x7f) << 25) | \ (((" #funct5 ") & 0x1f) << 20) | \ ((( reg_%1 ) & 0x1f) << 15) | \ (((" #funct3 ") & 0x07) << 12) | \ ((( reg_%0 ) & 0x1f) << 7) | \ (((" #opcode ") & 0x7f) << 0) \ );" \
    +
    : [rd] "=r" (__return) \
    +
    : "r" (rs1) \
    +
    ); \
    +
    __return; \
    +
    })
    +
    +
    +
    + +

    ◆ CUSTOM_INSTR_R3_TYPE

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define CUSTOM_INSTR_R3_TYPE( funct7,
    rs2,
    rs1,
    funct3,
    opcode )
    +
    +Value:
    ({ \
    +
    uint32_t __return; \
    +
    asm volatile ( \
    +
    "" \
    +
    : [output] "=r" (__return) \
    +
    : [input_i] "r" (rs1), \
    +
    [input_j] "r" (rs2) \
    +
    ); \
    +
    asm volatile ( \
    +
    ".word ( \ (((" #funct7 ") & 0x7f) << 25) | \ ((( reg_%2 ) & 0x1f) << 20) | \ ((( reg_%1 ) & 0x1f) << 15) | \ (((" #funct3 ") & 0x07) << 12) | \ ((( reg_%0 ) & 0x1f) << 7) | \ (((" #opcode ") & 0x7f) << 0) \ );" \
    +
    : [rd] "=r" (__return) \
    +
    : "r" (rs1), \
    +
    "r" (rs2) \
    +
    ); \
    +
    __return; \
    +
    })
    +
    +
    +
    + +

    ◆ CUSTOM_INSTR_R4_TYPE

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define CUSTOM_INSTR_R4_TYPE( rs3,
    rs2,
    rs1,
    funct3,
    opcode )
    +
    +Value:
    ({ \
    +
    uint32_t __return; \
    +
    asm volatile ( \
    +
    "" \
    +
    : [output] "=r" (__return) \
    +
    : [input_i] "r" (rs1), \
    +
    [input_j] "r" (rs2), \
    +
    [input_k] "r" (rs3) \
    +
    ); \
    +
    asm volatile ( \
    +
    ".word ( \ ((( reg_%3 ) & 0x1f) << 27) | \ ((( reg_%2 ) & 0x1f) << 20) | \ ((( reg_%1 ) & 0x1f) << 15) | \ (((" #funct3 ") & 0x07) << 12) | \ ((( reg_%0 ) & 0x1f) << 7) | \ (((" #opcode ") & 0x7f) << 0) \ );" \
    +
    : [rd] "=r" (__return) \
    +
    : "r" (rs1), \
    +
    "r" (rs2), \
    +
    "r" (rs3) \
    +
    ); \
    +
    __return; \
    +
    })
    +
    +
    +
    + +

    ◆ CUSTOM_INSTR_R5_TYPE

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define CUSTOM_INSTR_R5_TYPE( rs4,
    rs3,
    rs2,
    rs1,
    opcode )
    +
    +Value:
    ({ \
    +
    uint32_t __return; \
    +
    asm volatile ( \
    +
    "" \
    +
    : [output] "=r" (__return) \
    +
    : [input_i] "r" (rs1), \
    +
    [input_j] "r" (rs2), \
    +
    [input_k] "r" (rs3), \
    +
    [input_l] "r" (rs4) \
    +
    ); \
    +
    asm volatile ( \
    +
    ".word ( \ ((( reg_%3 ) & 0x1f) << 27) | \ (((( reg_%4 ) >> 3) & 0x03) << 25) | \ ((( reg_%2 ) & 0x1f) << 20) | \ ((( reg_%1 ) & 0x1f) << 15) | \ ((( reg_%4 ) & 0x07) << 12) | \ ((( reg_%0 ) & 0x1f) << 7) | \ (((" #opcode ") & 0x7f) << 0) \ );" \
    +
    : [rd] "=r" (__return) \
    +
    : "r" (rs1), \
    +
    "r" (rs2), \
    +
    "r" (rs3), \
    +
    "r" (rs4) \
    +
    ); \
    +
    __return; \
    +
    })
    +
    +
    +
    + +

    ◆ CUSTOM_INSTR_S_TYPE

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define CUSTOM_INSTR_S_TYPE( imm12,
    rs2,
    rs1,
    funct3,
    opcode )
    +
    +Value:
    ({ \
    +
    asm volatile ( \
    +
    "" \
    +
    : \
    +
    : [input_i] "r" (rs1), \
    +
    [input_j] "r" (rs2) \
    +
    ); \
    +
    asm volatile ( \
    +
    ".word ( \ ((((" #imm12 ") >> 5) & 0x7f) << 25) | \ ((( reg_%1 ) & 0x1f) << 20) | \ ((( reg_%0 ) & 0x1f) << 15) | \ (((" #funct3 ") & 0x07) << 12) | \ (((" #imm12 ") & 0x1f) << 7) | \ (((" #opcode ") & 0x7f) << 0) \ );" \
    +
    : \
    +
    : "r" (rs1), \
    +
    "r" (rs2) \
    +
    ); \
    +
    })
    +
    +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__intrinsics_8h_source.html b/sw/neorv32__intrinsics_8h_source.html new file mode 100644 index 0000000000..62be1eaa88 --- /dev/null +++ b/sw/neorv32__intrinsics_8h_source.html @@ -0,0 +1,389 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_intrinsics.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_intrinsics.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_intrinsics_h
    +
    17#define neorv32_intrinsics_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22// ****************************************************************************************************************************
    +
    23// Custom Instruction Intrinsics
    +
    24// Derived from https://github.com/google/CFU-Playground/blob/dfe5c2b75a4540dab62baef1b12fd03bfa78425e/third_party/SaxonSoc/riscv.h
    +
    25// Original license header:
    +
    26//
    +
    27// From https://github.com/SpinalHDL/SaxonSoc/blob/dev-0.1/software/standalone/driver/riscv.h
    +
    28//
    +
    29// Copyright (c) 2019 SaxonSoc contributors
    +
    30//
    +
    31// MIT License: https://github.com/SpinalHDL/SaxonSoc/blob/dev-0.1/LICENSE
    +
    32//
    +
    33// LICENSE:
    +
    34// MIT License
    +
    35//
    +
    36// Copyright (c) 2019 SaxonSoc contributors
    +
    37//
    +
    38// Permission is hereby granted, free of charge, to any person obtaining a copy
    +
    39// of this software and associated documentation files (the "Software"), to deal
    +
    40// in the Software without restriction, including without limitation the rights
    +
    41// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +
    42// copies of the Software, and to permit persons to whom the Software is
    +
    43// furnished to do so, subject to the following conditions:
    +
    44//
    +
    45// The above copyright notice and this permission notice shall be included in all
    +
    46// copies or substantial portions of the Software.
    +
    47//
    +
    48// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +
    49// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +
    50// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +
    51// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +
    52// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +
    53// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +
    54// SOFTWARE.
    +
    55// ****************************************************************************************************************************
    +
    56
    +
    57
    +
    58/**********************************************************************/
    +
    61asm (
    +
    62 ".set reg_x0, 0 \n"
    +
    63 ".set reg_x1, 1 \n"
    +
    64 ".set reg_x2, 2 \n"
    +
    65 ".set reg_x3, 3 \n"
    +
    66 ".set reg_x4, 4 \n"
    +
    67 ".set reg_x5, 5 \n"
    +
    68 ".set reg_x6, 6 \n"
    +
    69 ".set reg_x7, 7 \n"
    +
    70 ".set reg_x8, 8 \n"
    +
    71 ".set reg_x9, 9 \n"
    +
    72 ".set reg_x10, 10 \n"
    +
    73 ".set reg_x11, 11 \n"
    +
    74 ".set reg_x12, 12 \n"
    +
    75 ".set reg_x13, 13 \n"
    +
    76 ".set reg_x14, 14 \n"
    +
    77 ".set reg_x15, 15 \n"
    +
    78#ifndef __riscv_32e
    +
    79 ".set reg_x16, 16 \n"
    +
    80 ".set reg_x17, 17 \n"
    +
    81 ".set reg_x18, 18 \n"
    +
    82 ".set reg_x19, 19 \n"
    +
    83 ".set reg_x20, 20 \n"
    +
    84 ".set reg_x21, 21 \n"
    +
    85 ".set reg_x22, 22 \n"
    +
    86 ".set reg_x23, 23 \n"
    +
    87 ".set reg_x24, 24 \n"
    +
    88 ".set reg_x25, 25 \n"
    +
    89 ".set reg_x26, 26 \n"
    +
    90 ".set reg_x27, 27 \n"
    +
    91 ".set reg_x28, 28 \n"
    +
    92 ".set reg_x29, 29 \n"
    +
    93 ".set reg_x30, 30 \n"
    +
    94 ".set reg_x31, 31 \n"
    +
    95#endif
    +
    96 ".set reg_zero, 0 \n"
    +
    97 ".set reg_ra, 1 \n"
    +
    98 ".set reg_sp, 2 \n"
    +
    99 ".set reg_gp, 3 \n"
    +
    100 ".set reg_tp, 4 \n"
    +
    101 ".set reg_t0, 5 \n"
    +
    102 ".set reg_t1, 6 \n"
    +
    103 ".set reg_t2, 7 \n"
    +
    104 ".set reg_s0, 8 \n"
    +
    105 ".set reg_s1, 9 \n"
    +
    106 ".set reg_a0, 10 \n"
    +
    107 ".set reg_a1, 11 \n"
    +
    108 ".set reg_a2, 12 \n"
    +
    109 ".set reg_a3, 13 \n"
    +
    110 ".set reg_a4, 14 \n"
    +
    111 ".set reg_a5, 15 \n"
    +
    112#ifndef __riscv_32e
    +
    113 ".set reg_a6, 16 \n"
    +
    114 ".set reg_a7, 17 \n"
    +
    115 ".set reg_s2, 18 \n"
    +
    116 ".set reg_s3, 19 \n"
    +
    117 ".set reg_s4, 20 \n"
    +
    118 ".set reg_s5, 21 \n"
    +
    119 ".set reg_s6, 22 \n"
    +
    120 ".set reg_s7, 23 \n"
    +
    121 ".set reg_s8, 24 \n"
    +
    122 ".set reg_s9, 25 \n"
    +
    123 ".set reg_s10, 26 \n"
    +
    124 ".set reg_s11, 27 \n"
    +
    125 ".set reg_t3, 28 \n"
    +
    126 ".set reg_t4, 29 \n"
    +
    127 ".set reg_t5, 30 \n"
    +
    128 ".set reg_t6, 31 \n"
    +
    129#endif
    +
    130);
    +
    131
    +
    132
    +
    133/**********************************************************************/
    +
    136#define CUSTOM_INSTR_R2_TYPE(funct7, funct5, rs1, funct3, opcode) \
    +
    137({ \
    +
    138 uint32_t __return; \
    +
    139 asm volatile ( \
    +
    140 "" \
    +
    141 : [output] "=r" (__return) \
    +
    142 : [input_i] "r" (rs1) \
    +
    143 ); \
    +
    144 asm volatile( \
    +
    145 ".word ( \
    +
    146 (((" #funct7 ") & 0x7f) << 25) | \
    +
    147 (((" #funct5 ") & 0x1f) << 20) | \
    +
    148 ((( reg_%1 ) & 0x1f) << 15) | \
    +
    149 (((" #funct3 ") & 0x07) << 12) | \
    +
    150 ((( reg_%0 ) & 0x1f) << 7) | \
    +
    151 (((" #opcode ") & 0x7f) << 0) \
    +
    152 );" \
    +
    153 : [rd] "=r" (__return) \
    +
    154 : "r" (rs1) \
    +
    155 ); \
    +
    156 __return; \
    +
    157})
    +
    158
    +
    159
    +
    160/**********************************************************************/
    +
    163#define CUSTOM_INSTR_R3_TYPE(funct7, rs2, rs1, funct3, opcode) \
    +
    164({ \
    +
    165 uint32_t __return; \
    +
    166 asm volatile ( \
    +
    167 "" \
    +
    168 : [output] "=r" (__return) \
    +
    169 : [input_i] "r" (rs1), \
    +
    170 [input_j] "r" (rs2) \
    +
    171 ); \
    +
    172 asm volatile ( \
    +
    173 ".word ( \
    +
    174 (((" #funct7 ") & 0x7f) << 25) | \
    +
    175 ((( reg_%2 ) & 0x1f) << 20) | \
    +
    176 ((( reg_%1 ) & 0x1f) << 15) | \
    +
    177 (((" #funct3 ") & 0x07) << 12) | \
    +
    178 ((( reg_%0 ) & 0x1f) << 7) | \
    +
    179 (((" #opcode ") & 0x7f) << 0) \
    +
    180 );" \
    +
    181 : [rd] "=r" (__return) \
    +
    182 : "r" (rs1), \
    +
    183 "r" (rs2) \
    +
    184 ); \
    +
    185 __return; \
    +
    186})
    +
    187
    +
    188
    +
    189/**********************************************************************/
    +
    192#define CUSTOM_INSTR_R4_TYPE(rs3, rs2, rs1, funct3, opcode) \
    +
    193({ \
    +
    194 uint32_t __return; \
    +
    195 asm volatile ( \
    +
    196 "" \
    +
    197 : [output] "=r" (__return) \
    +
    198 : [input_i] "r" (rs1), \
    +
    199 [input_j] "r" (rs2), \
    +
    200 [input_k] "r" (rs3) \
    +
    201 ); \
    +
    202 asm volatile ( \
    +
    203 ".word ( \
    +
    204 ((( reg_%3 ) & 0x1f) << 27) | \
    +
    205 ((( reg_%2 ) & 0x1f) << 20) | \
    +
    206 ((( reg_%1 ) & 0x1f) << 15) | \
    +
    207 (((" #funct3 ") & 0x07) << 12) | \
    +
    208 ((( reg_%0 ) & 0x1f) << 7) | \
    +
    209 (((" #opcode ") & 0x7f) << 0) \
    +
    210 );" \
    +
    211 : [rd] "=r" (__return) \
    +
    212 : "r" (rs1), \
    +
    213 "r" (rs2), \
    +
    214 "r" (rs3) \
    +
    215 ); \
    +
    216 __return; \
    +
    217})
    +
    218
    +
    219
    +
    220/**********************************************************************/
    +
    224#define CUSTOM_INSTR_R5_TYPE(rs4, rs3, rs2, rs1, opcode) \
    +
    225({ \
    +
    226 uint32_t __return; \
    +
    227 asm volatile ( \
    +
    228 "" \
    +
    229 : [output] "=r" (__return) \
    +
    230 : [input_i] "r" (rs1), \
    +
    231 [input_j] "r" (rs2), \
    +
    232 [input_k] "r" (rs3), \
    +
    233 [input_l] "r" (rs4) \
    +
    234 ); \
    +
    235 asm volatile ( \
    +
    236 ".word ( \
    +
    237 ((( reg_%3 ) & 0x1f) << 27) | \
    +
    238 (((( reg_%4 ) >> 3) & 0x03) << 25) | \
    +
    239 ((( reg_%2 ) & 0x1f) << 20) | \
    +
    240 ((( reg_%1 ) & 0x1f) << 15) | \
    +
    241 ((( reg_%4 ) & 0x07) << 12) | \
    +
    242 ((( reg_%0 ) & 0x1f) << 7) | \
    +
    243 (((" #opcode ") & 0x7f) << 0) \
    +
    244 );" \
    +
    245 : [rd] "=r" (__return) \
    +
    246 : "r" (rs1), \
    +
    247 "r" (rs2), \
    +
    248 "r" (rs3), \
    +
    249 "r" (rs4) \
    +
    250 ); \
    +
    251 __return; \
    +
    252})
    +
    253
    +
    254
    +
    255/**********************************************************************/
    +
    258#define CUSTOM_INSTR_I_TYPE(imm12, rs1, funct3, opcode) \
    +
    259({ \
    +
    260 uint32_t __return; \
    +
    261 asm volatile ( \
    +
    262 "" \
    +
    263 : [output] "=r" (__return) \
    +
    264 : [input_i] "r" (rs1) \
    +
    265 ); \
    +
    266 asm volatile ( \
    +
    267 ".word ( \
    +
    268 (((" #imm12 ") & 0xfff) << 20) | \
    +
    269 ((( reg_%1 ) & 0x1f) << 15) | \
    +
    270 (((" #funct3 ") & 0x07) << 12) | \
    +
    271 ((( reg_%0 ) & 0x1f) << 7) | \
    +
    272 (((" #opcode ") & 0x7f) << 0) \
    +
    273 );" \
    +
    274 : [rd] "=r" (__return) \
    +
    275 : "r" (rs1) \
    +
    276 ); \
    +
    277 __return; \
    +
    278})
    +
    279
    +
    280
    +
    281/**********************************************************************/
    +
    284#define CUSTOM_INSTR_S_TYPE(imm12, rs2, rs1, funct3, opcode) \
    +
    285({ \
    +
    286 asm volatile ( \
    +
    287 "" \
    +
    288 : \
    +
    289 : [input_i] "r" (rs1), \
    +
    290 [input_j] "r" (rs2) \
    +
    291 ); \
    +
    292 asm volatile ( \
    +
    293 ".word ( \
    +
    294 ((((" #imm12 ") >> 5) & 0x7f) << 25) | \
    +
    295 ((( reg_%1 ) & 0x1f) << 20) | \
    +
    296 ((( reg_%0 ) & 0x1f) << 15) | \
    +
    297 (((" #funct3 ") & 0x07) << 12) | \
    +
    298 (((" #imm12 ") & 0x1f) << 7) | \
    +
    299 (((" #opcode ") & 0x7f) << 0) \
    +
    300 );" \
    +
    301 : \
    +
    302 : "r" (rs1), \
    +
    303 "r" (rs2) \
    +
    304 ); \
    +
    305})
    +
    306
    +
    307
    +
    308#endif // neorv32_intrinsics_h
    +
    + + +
    + + diff --git a/sw/neorv32__legacy_8h.html b/sw/neorv32__legacy_8h.html new file mode 100644 index 0000000000..ff725d29a5 --- /dev/null +++ b/sw/neorv32__legacy_8h.html @@ -0,0 +1,137 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_legacy.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_legacy.h File Reference
    +
    +
    + +

    Legacy compatibility layer. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + +

    +Macros

    GPIO aliases
    +#define INPUT_LO   INPUT[0]
     
    +#define INPUT_HI   INPUT[1]
     
    +#define OUTPUT_LO   OUTPUT[0]
     
    +#define OUTPUT_HI   OUTPUT[1]
     
    Atomic LR/SC instructions
    +#define neorv32_cpu_load_reservate_word(addr, wdata)   neorv32_cpu_amolr(addr, wdata)
     
    +#define neorv32_cpu_store_conditional_word(addr, wdata)   neorv32_cpu_amosc(addr, wdata)
     
    +

    Detailed Description

    +

    Legacy compatibility layer.

    +
    Warning
    Deprecated! Do not use for new designs!
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +
    + + +
    + + diff --git a/sw/neorv32__legacy_8h_source.html b/sw/neorv32__legacy_8h_source.html new file mode 100644 index 0000000000..12d32b952a --- /dev/null +++ b/sw/neorv32__legacy_8h_source.html @@ -0,0 +1,126 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_legacy.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_legacy.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_legacy_h
    +
    17#define neorv32_legacy_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    26#define INPUT_LO INPUT[0]
    +
    27#define INPUT_HI INPUT[1]
    +
    28#define OUTPUT_LO OUTPUT[0]
    +
    29#define OUTPUT_HI OUTPUT[1]
    +
    33/**********************************************************************/
    +
    37#define neorv32_cpu_load_reservate_word(addr, wdata) neorv32_cpu_amolr(addr, wdata)
    +
    38#define neorv32_cpu_store_conditional_word(addr, wdata) neorv32_cpu_amosc(addr, wdata)
    +
    42#endif // neorv32_legacy_h
    +
    + + +
    + + diff --git a/sw/neorv32__mtime_8c.html b/sw/neorv32__mtime_8c.html new file mode 100644 index 0000000000..6667f0cc3f --- /dev/null +++ b/sw/neorv32__mtime_8c.html @@ -0,0 +1,285 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_mtime.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_mtime.c File Reference
    +
    +
    + +

    Machine System Timer (MTIME) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_mtime_available (void)
     
    void neorv32_mtime_set_time (uint64_t time)
     
    uint64_t neorv32_mtime_get_time (void)
     
    void neorv32_mtime_set_timecmp (uint64_t timecmp)
     
    uint64_t neorv32_mtime_get_timecmp (void)
     
    void neorv32_mtime_set_unixtime (uint64_t unixtime)
     
    uint64_t neorv32_mtime_get_unixtime (void)
     
    +

    Detailed Description

    +

    Machine System Timer (MTIME) HW driver source file.

    +
    Note
    These functions should only be used if the MTIME unit was synthesized (IO_MTIME_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_mtime_available()

    + +
    +
    + + + + + + + +
    int neorv32_mtime_available (void )
    +
    +

    Check if MTIME unit was synthesized.

    +
    Returns
    0 if MTIME was not synthesized, 1 if MTIME is available.
    + +
    +
    + +

    ◆ neorv32_mtime_get_time()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_mtime_get_time (void )
    +
    +

    Get current system time.

    +
    Note
    The MTIME timer increments with the primary processor clock.
    +
    Returns
    Current system time (uint64_t)
    + +
    +
    + +

    ◆ neorv32_mtime_get_timecmp()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_mtime_get_timecmp (void )
    +
    +

    Get compare time register (MTIMECMP).

    +
    Returns
    Current MTIMECMP value.
    + +
    +
    + +

    ◆ neorv32_mtime_get_unixtime()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_mtime_get_unixtime (void )
    +
    +

    Get Unix time from TIME.

    +
    Returns
    Unix time since 00:00:00 UTC, January 1, 1970 in seconds.
    + +
    +
    + +

    ◆ neorv32_mtime_set_time()

    + +
    +
    + + + + + + + +
    void neorv32_mtime_set_time (uint64_t time)
    +
    +

    Set current system time.

    +
    Note
    The MTIME timer increments with the primary processor clock.
    +
    Parameters
    + + +
    [in]timeNew system time (uint64_t)
    +
    +
    + +
    +
    + +

    ◆ neorv32_mtime_set_timecmp()

    + +
    +
    + + + + + + + +
    void neorv32_mtime_set_timecmp (uint64_t timecmp)
    +
    +

    Set compare time register (MTIMECMP) for generating interrupts.

    +
    Note
    The interrupt is triggered when MTIME >= MTIMECMP.
    +
    +Global interrupts and the timer interrupt source have to be enabled.
    +
    Parameters
    + + +
    [in]timecmpSystem time for interrupt (uint64_t)
    +
    +
    + +
    +
    + +

    ◆ neorv32_mtime_set_unixtime()

    + +
    +
    + + + + + + + +
    void neorv32_mtime_set_unixtime (uint64_t unixtime)
    +
    +

    Set TIME to Unix time.

    +
    Parameters
    + + +
    [in]unixtimeUnix time since 00:00:00 UTC, January 1, 1970 in seconds.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__mtime_8h.html b/sw/neorv32__mtime_8h.html new file mode 100644 index 0000000000..310e245356 --- /dev/null +++ b/sw/neorv32__mtime_8h.html @@ -0,0 +1,315 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_mtime.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_mtime.h File Reference
    +
    +
    + +

    Machine System Timer (MTIME) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_mtime_t
     
    + + + + +

    +Macros

    IO Device: Machine System Timer (MTIME)
    #define NEORV32_MTIME   ((neorv32_mtime_t*) (NEORV32_MTIME_BASE))
     
    + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_mtime_available (void)
     
    void neorv32_mtime_set_time (uint64_t time)
     
    uint64_t neorv32_mtime_get_time (void)
     
    void neorv32_mtime_set_timecmp (uint64_t timecmp)
     
    uint64_t neorv32_mtime_get_timecmp (void)
     
    void neorv32_mtime_set_unixtime (uint64_t unixtime)
     
    uint64_t neorv32_mtime_get_unixtime (void)
     
    +

    Detailed Description

    +

    Machine System Timer (MTIME) HW driver header file.

    +
    Note
    These functions should only be used if the MTIME unit was synthesized (IO_MTIME_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_MTIME

    + +
    +
    + + + + +
    #define NEORV32_MTIME   ((neorv32_mtime_t*) (NEORV32_MTIME_BASE))
    +
    +

    MTIME module hardware access (neorv32_mtime_t)

    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_mtime_available()

    + +
    +
    + + + + + + + +
    int neorv32_mtime_available (void )
    +
    +

    Check if MTIME unit was synthesized.

    +
    Returns
    0 if MTIME was not synthesized, 1 if MTIME is available.
    + +
    +
    + +

    ◆ neorv32_mtime_get_time()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_mtime_get_time (void )
    +
    +

    Get current system time.

    +
    Note
    The MTIME timer increments with the primary processor clock.
    +
    Returns
    Current system time (uint64_t)
    + +
    +
    + +

    ◆ neorv32_mtime_get_timecmp()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_mtime_get_timecmp (void )
    +
    +

    Get compare time register (MTIMECMP).

    +
    Returns
    Current MTIMECMP value.
    + +
    +
    + +

    ◆ neorv32_mtime_get_unixtime()

    + +
    +
    + + + + + + + +
    uint64_t neorv32_mtime_get_unixtime (void )
    +
    +

    Get Unix time from TIME.

    +
    Returns
    Unix time since 00:00:00 UTC, January 1, 1970 in seconds.
    + +
    +
    + +

    ◆ neorv32_mtime_set_time()

    + +
    +
    + + + + + + + +
    void neorv32_mtime_set_time (uint64_t time)
    +
    +

    Set current system time.

    +
    Note
    The MTIME timer increments with the primary processor clock.
    +
    Parameters
    + + +
    [in]timeNew system time (uint64_t)
    +
    +
    + +
    +
    + +

    ◆ neorv32_mtime_set_timecmp()

    + +
    +
    + + + + + + + +
    void neorv32_mtime_set_timecmp (uint64_t timecmp)
    +
    +

    Set compare time register (MTIMECMP) for generating interrupts.

    +
    Note
    The interrupt is triggered when MTIME >= MTIMECMP.
    +
    +Global interrupts and the timer interrupt source have to be enabled.
    +
    Parameters
    + + +
    [in]timecmpSystem time for interrupt (uint64_t)
    +
    +
    + +
    +
    + +

    ◆ neorv32_mtime_set_unixtime()

    + +
    +
    + + + + + + + +
    void neorv32_mtime_set_unixtime (uint64_t unixtime)
    +
    +

    Set TIME to Unix time.

    +
    Parameters
    + + +
    [in]unixtimeUnix time since 00:00:00 UTC, January 1, 1970 in seconds.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__mtime_8h_source.html b/sw/neorv32__mtime_8h_source.html new file mode 100644 index 0000000000..9af46fd99b --- /dev/null +++ b/sw/neorv32__mtime_8h_source.html @@ -0,0 +1,149 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_mtime.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_mtime.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_mtime_h
    +
    19#define neorv32_mtime_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t TIME_LO;
    +
    31 uint32_t TIME_HI;
    +
    32 uint32_t TIMECMP_LO;
    +
    33 uint32_t TIMECMP_HI;
    + +
    +
    35
    +
    37#define NEORV32_MTIME ((neorv32_mtime_t*) (NEORV32_MTIME_BASE))
    +
    41/**********************************************************************/
    + +
    46void neorv32_mtime_set_time(uint64_t time);
    +
    47uint64_t neorv32_mtime_get_time(void);
    +
    48void neorv32_mtime_set_timecmp(uint64_t timecmp);
    +
    49uint64_t neorv32_mtime_get_timecmp(void);
    +
    50void neorv32_mtime_set_unixtime(uint64_t unixtime);
    +
    51uint64_t neorv32_mtime_get_unixtime(void);
    +
    54#endif // neorv32_mtime_h
    +
    void neorv32_mtime_set_unixtime(uint64_t unixtime)
    Definition neorv32_mtime.c:127
    +
    void neorv32_mtime_set_time(uint64_t time)
    Definition neorv32_mtime.c:44
    +
    uint64_t neorv32_mtime_get_unixtime(void)
    Definition neorv32_mtime.c:138
    +
    void neorv32_mtime_set_timecmp(uint64_t timecmp)
    Definition neorv32_mtime.c:93
    +
    int neorv32_mtime_available(void)
    Definition neorv32_mtime.c:26
    +
    uint64_t neorv32_mtime_get_timecmp(void)
    Definition neorv32_mtime.c:111
    +
    uint64_t neorv32_mtime_get_time(void)
    Definition neorv32_mtime.c:64
    +
    Definition neorv32_mtime.h:29
    +
    uint32_t TIME_HI
    Definition neorv32_mtime.h:31
    +
    uint32_t TIMECMP_LO
    Definition neorv32_mtime.h:32
    +
    uint32_t TIME_LO
    Definition neorv32_mtime.h:30
    +
    uint32_t TIMECMP_HI
    Definition neorv32_mtime.h:33
    +
    + + +
    + + diff --git a/sw/neorv32__neoled_8c.html b/sw/neorv32__neoled_8c.html new file mode 100644 index 0000000000..aa71c1bd0f --- /dev/null +++ b/sw/neorv32__neoled_8c.html @@ -0,0 +1,371 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_neoled.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_neoled.c File Reference
    +
    +
    + +

    Smart LED Interface (NEOLED) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_neoled_available (void)
     
    void neorv32_neoled_setup (uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode)
     
    void neorv32_neoled_setup_ws2812 (int irq_mode)
     
    void neorv32_neoled_set_mode (uint32_t mode)
     
    void neorv32_neoled_strobe_blocking (void)
     
    void neorv32_neoled_strobe_nonblocking (void)
     
    void neorv32_neoled_enable (void)
     
    void neorv32_neoled_disable (void)
     
    void neorv32_neoled_write_blocking (uint32_t data)
     
    uint32_t neorv32_neoled_get_buffer_size (void)
     
    +

    Detailed Description

    +

    Smart LED Interface (NEOLED) HW driver source file.

    +
    Note
    These functions should only be used if the NEOLED unit was synthesized (IO_NEOLED_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_neoled_available()

    + +
    +
    + + + + + + + +
    int neorv32_neoled_available (void )
    +
    +

    Check if NEOLED unit was synthesized.

    +
    Returns
    0 if NEOLED was not synthesized, 1 if NEOLED is available.
    + +
    +
    + +

    ◆ neorv32_neoled_disable()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_disable (void )
    +
    +

    Disable NEOLED controller.

    + +
    +
    + +

    ◆ neorv32_neoled_enable()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_enable (void )
    +
    +

    Enable NEOLED controller.

    + +
    +
    + +

    ◆ neorv32_neoled_get_buffer_size()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_neoled_get_buffer_size (void )
    +
    +

    Get NEOLED hardware buffer size.

    +
    Returns
    Number of entries in NEOLED TX buffer.
    + +
    +
    + +

    ◆ neorv32_neoled_set_mode()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_set_mode (uint32_t mode)
    +
    +

    Set NEOLED mode (24-bit RGB / 32-bit RGBW).

    +
    Parameters
    + + +
    [in]mode0 = 24-bit mode (RGB), 1 = 32-bit mode (RGBW)
    +
    +
    + +
    +
    + +

    ◆ neorv32_neoled_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_neoled_setup (uint32_t prsc,
    uint32_t t_total,
    uint32_t t_high_zero,
    uint32_t t_high_one,
    int irq_mode )
    +
    +

    Enable and configure NEOLED controller. The NEOLED control register bits are listed in NEORV32_NEOLED_CTRL_enum. This function performs a "raw" configuration (just configuring the according control register bit).

    +
    Parameters
    + + + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    [in]t_totalNumber of pre-scaled clock ticks for total bit period (0..31).
    [in]t_high_zeroNumber of pre-scaled clock ticks to generate high-time for sending a '0' (0..31).
    [in]t_high_oneNumber of pre-scaled clock ticks to generate high-time for sending a '1' (0..31).
    [in]irq_modeInterrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full).
    +
    +
    + +
    +
    + +

    ◆ neorv32_neoled_setup_ws2812()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_setup_ws2812 (int irq_mode)
    +
    +

    Configure NEOLED controller for using WS2812 LEDs (NeoPixel-compatible). This function computes all the required timings and finally calls neorv32_neoled_setup.

    +
    Note
    WS2812 timing: T_period = 1.2us, T_high_zero = 0.4us, T_high_one = 0.8us. Change the constants if required.
    +
    +This function uses the SYSINFO_CLK value (from the SYSINFO HW module) to do the timing computations.
    +
    Parameters
    + + +
    [in]irq_modeInterrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full).
    +
    +
    + +
    +
    + +

    ◆ neorv32_neoled_strobe_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_strobe_blocking (void )
    +
    +

    Send strobe command ("RESET") - blocking.

    + +
    +
    + +

    ◆ neorv32_neoled_strobe_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_strobe_nonblocking (void )
    +
    +

    Send strobe command ("RESET") - non-blocking.

    + +
    +
    + +

    ◆ neorv32_neoled_write_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_write_blocking (uint32_t data)
    +
    +

    Send single RGB(W) data word to NEOLED module (blocking).

    +
    Warning
    This function is blocking as it polls the NEOLED FIFO full flag.
    +
    Parameters
    + + +
    [in]dataLSB-aligned 24-bit RGB or 32-bit RGBW data
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__neoled_8h.html b/sw/neorv32__neoled_8h.html new file mode 100644 index 0000000000..bd99b6c5a6 --- /dev/null +++ b/sw/neorv32__neoled_8h.html @@ -0,0 +1,554 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_neoled.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_neoled.h File Reference
    +
    +
    + +

    Smart LED Interface (NEOLED) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_neoled_t
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void neorv32_neoled_write_nonblocking (uint32_t data)
     
    Prototypes
    int neorv32_neoled_available (void)
     
    void neorv32_neoled_setup (uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode)
     
    void neorv32_neoled_setup_ws2812 (int irq_mode)
     
    void neorv32_neoled_set_mode (uint32_t mode)
     
    void neorv32_neoled_strobe_blocking (void)
     
    void neorv32_neoled_strobe_nonblocking (void)
     
    void neorv32_neoled_enable (void)
     
    void neorv32_neoled_disable (void)
     
    void neorv32_neoled_write_blocking (uint32_t data)
     
    uint32_t neorv32_neoled_get_buffer_size (void)
     
    + + + + + +

    IO Device: Smart LED Hardware Interface (NEOLED)

    #define NEORV32_NEOLED   ((neorv32_neoled_t*) (NEORV32_NEOLED_BASE))
     
    enum  NEORV32_NEOLED_CTRL_enum {
    +  NEOLED_CTRL_EN = 0 +, NEOLED_CTRL_MODE = 1 +, NEOLED_CTRL_STROBE = 2 +, NEOLED_CTRL_PRSC0 = 3 +,
    +  NEOLED_CTRL_PRSC1 = 4 +, NEOLED_CTRL_PRSC2 = 5 +, NEOLED_CTRL_BUFS_0 = 6 +, NEOLED_CTRL_BUFS_1 = 7 +,
    +  NEOLED_CTRL_BUFS_2 = 8 +, NEOLED_CTRL_BUFS_3 = 9 +, NEOLED_CTRL_T_TOT_0 = 10 +, NEOLED_CTRL_T_TOT_1 = 11 +,
    +  NEOLED_CTRL_T_TOT_2 = 12 +, NEOLED_CTRL_T_TOT_3 = 13 +, NEOLED_CTRL_T_TOT_4 = 14 +, NEOLED_CTRL_T_ZERO_H_0 = 15 +,
    +  NEOLED_CTRL_T_ZERO_H_1 = 16 +, NEOLED_CTRL_T_ZERO_H_2 = 17 +, NEOLED_CTRL_T_ZERO_H_3 = 18 +, NEOLED_CTRL_T_ZERO_H_4 = 19 +,
    +  NEOLED_CTRL_T_ONE_H_0 = 20 +, NEOLED_CTRL_T_ONE_H_1 = 21 +, NEOLED_CTRL_T_ONE_H_2 = 22 +, NEOLED_CTRL_T_ONE_H_3 = 23 +,
    +  NEOLED_CTRL_T_ONE_H_4 = 24 +, NEOLED_CTRL_IRQ_CONF = 27 +, NEOLED_CTRL_TX_EMPTY = 28 +, NEOLED_CTRL_TX_HALF = 29 +,
    +  NEOLED_CTRL_TX_FULL = 30 +, NEOLED_CTRL_TX_BUSY = 31 +
    + }
     
    +

    Detailed Description

    +

    Smart LED Interface (NEOLED) HW driver header file.

    +
    Note
    These functions should only be used if the NEOLED unit was synthesized (IO_NEOLED_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_NEOLED

    + +
    +
    + + + + +
    #define NEORV32_NEOLED   ((neorv32_neoled_t*) (NEORV32_NEOLED_BASE))
    +
    +

    NEOLED module hardware access (neorv32_neoled_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_NEOLED_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_NEOLED_CTRL_enum
    +
    +

    NEOLED control register bits

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    NEOLED_CTRL_EN 

    NEOLED control register(0) (r/w): NEOLED global enable

    +
    NEOLED_CTRL_MODE 

    NEOLED control register(1) (r/w): TX mode (0=24-bit, 1=32-bit)

    +
    NEOLED_CTRL_STROBE 

    NEOLED control register(2) (r/w): Strobe (0=send normal data, 1=send RESET command on data write)

    +
    NEOLED_CTRL_PRSC0 

    NEOLED control register(3) (r/w): Clock prescaler select bit 0 (pulse-clock speed select)

    +
    NEOLED_CTRL_PRSC1 

    NEOLED control register(4) (r/w): Clock prescaler select bit 1 (pulse-clock speed select)

    +
    NEOLED_CTRL_PRSC2 

    NEOLED control register(5) (r/w): Clock prescaler select bit 2 (pulse-clock speed select)

    +
    NEOLED_CTRL_BUFS_0 

    NEOLED control register(6) (r/-): log2(tx buffer size) bit 0

    +
    NEOLED_CTRL_BUFS_1 

    NEOLED control register(7) (r/-): log2(tx buffer size) bit 1

    +
    NEOLED_CTRL_BUFS_2 

    NEOLED control register(8) (r/-): log2(tx buffer size) bit 2

    +
    NEOLED_CTRL_BUFS_3 

    NEOLED control register(9) (r/-): log2(tx buffer size) bit 3

    +
    NEOLED_CTRL_T_TOT_0 

    NEOLED control register(10) (r/w): pulse-clock ticks per total period bit 0

    +
    NEOLED_CTRL_T_TOT_1 

    NEOLED control register(11) (r/w): pulse-clock ticks per total period bit 1

    +
    NEOLED_CTRL_T_TOT_2 

    NEOLED control register(12) (r/w): pulse-clock ticks per total period bit 2

    +
    NEOLED_CTRL_T_TOT_3 

    NEOLED control register(13) (r/w): pulse-clock ticks per total period bit 3

    +
    NEOLED_CTRL_T_TOT_4 

    NEOLED control register(14) (r/w): pulse-clock ticks per total period bit 4

    +
    NEOLED_CTRL_T_ZERO_H_0 

    NEOLED control register(15) (r/w): pulse-clock ticks per ZERO high-time bit 0

    +
    NEOLED_CTRL_T_ZERO_H_1 

    NEOLED control register(16) (r/w): pulse-clock ticks per ZERO high-time bit 1

    +
    NEOLED_CTRL_T_ZERO_H_2 

    NEOLED control register(17) (r/w): pulse-clock ticks per ZERO high-time bit 2

    +
    NEOLED_CTRL_T_ZERO_H_3 

    NEOLED control register(18) (r/w): pulse-clock ticks per ZERO high-time bit 3

    +
    NEOLED_CTRL_T_ZERO_H_4 

    NEOLED control register(19) (r/w): pulse-clock ticks per ZERO high-time bit 4

    +
    NEOLED_CTRL_T_ONE_H_0 

    NEOLED control register(20) (r/w): pulse-clock ticks per ONE high-time bit 0

    +
    NEOLED_CTRL_T_ONE_H_1 

    NEOLED control register(21) (r/w): pulse-clock ticks per ONE high-time bit 1

    +
    NEOLED_CTRL_T_ONE_H_2 

    NEOLED control register(22) (r/w): pulse-clock ticks per ONE high-time bit 2

    +
    NEOLED_CTRL_T_ONE_H_3 

    NEOLED control register(23) (r/w): pulse-clock ticks per ONE high-time bit 3

    +
    NEOLED_CTRL_T_ONE_H_4 

    NEOLED control register(24) (r/w): pulse-clock ticks per ONE high-time bit 4

    +
    NEOLED_CTRL_IRQ_CONF 

    NEOLED control register(27) (r/w): TX FIFO interrupt: 1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full

    +
    NEOLED_CTRL_TX_EMPTY 

    NEOLED control register(28) (r/-): TX FIFO is empty

    +
    NEOLED_CTRL_TX_HALF 

    NEOLED control register(29) (r/-): TX FIFO is at least half-full

    +
    NEOLED_CTRL_TX_FULL 

    NEOLED control register(30) (r/-): TX FIFO is full

    +
    NEOLED_CTRL_TX_BUSY 

    NEOLED control register(31) (r/-): busy flag

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_neoled_available()

    + +
    +
    + + + + + + + +
    int neorv32_neoled_available (void )
    +
    +

    Check if NEOLED unit was synthesized.

    +
    Returns
    0 if NEOLED was not synthesized, 1 if NEOLED is available.
    + +
    +
    + +

    ◆ neorv32_neoled_disable()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_disable (void )
    +
    +

    Disable NEOLED controller.

    + +
    +
    + +

    ◆ neorv32_neoled_enable()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_enable (void )
    +
    +

    Enable NEOLED controller.

    + +
    +
    + +

    ◆ neorv32_neoled_get_buffer_size()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_neoled_get_buffer_size (void )
    +
    +

    Get NEOLED hardware buffer size.

    +
    Returns
    Number of entries in NEOLED TX buffer.
    + +
    +
    + +

    ◆ neorv32_neoled_set_mode()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_set_mode (uint32_t mode)
    +
    +

    Set NEOLED mode (24-bit RGB / 32-bit RGBW).

    +
    Parameters
    + + +
    [in]mode0 = 24-bit mode (RGB), 1 = 32-bit mode (RGBW)
    +
    +
    + +
    +
    + +

    ◆ neorv32_neoled_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_neoled_setup (uint32_t prsc,
    uint32_t t_total,
    uint32_t t_high_zero,
    uint32_t t_high_one,
    int irq_mode )
    +
    +

    Enable and configure NEOLED controller. The NEOLED control register bits are listed in NEORV32_NEOLED_CTRL_enum. This function performs a "raw" configuration (just configuring the according control register bit).

    +
    Parameters
    + + + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    [in]t_totalNumber of pre-scaled clock ticks for total bit period (0..31).
    [in]t_high_zeroNumber of pre-scaled clock ticks to generate high-time for sending a '0' (0..31).
    [in]t_high_oneNumber of pre-scaled clock ticks to generate high-time for sending a '1' (0..31).
    [in]irq_modeInterrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full).
    +
    +
    + +
    +
    + +

    ◆ neorv32_neoled_setup_ws2812()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_setup_ws2812 (int irq_mode)
    +
    +

    Configure NEOLED controller for using WS2812 LEDs (NeoPixel-compatible). This function computes all the required timings and finally calls neorv32_neoled_setup.

    +
    Note
    WS2812 timing: T_period = 1.2us, T_high_zero = 0.4us, T_high_one = 0.8us. Change the constants if required.
    +
    +This function uses the SYSINFO_CLK value (from the SYSINFO HW module) to do the timing computations.
    +
    Parameters
    + + +
    [in]irq_modeInterrupt condition (1=IRQ if FIFO is empty, 1=IRQ if FIFO is less than half-full).
    +
    +
    + +
    +
    + +

    ◆ neorv32_neoled_strobe_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_strobe_blocking (void )
    +
    +

    Send strobe command ("RESET") - blocking.

    + +
    +
    + +

    ◆ neorv32_neoled_strobe_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_strobe_nonblocking (void )
    +
    +

    Send strobe command ("RESET") - non-blocking.

    + +
    +
    + +

    ◆ neorv32_neoled_write_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_neoled_write_blocking (uint32_t data)
    +
    +

    Send single RGB(W) data word to NEOLED module (blocking).

    +
    Warning
    This function is blocking as it polls the NEOLED FIFO full flag.
    +
    Parameters
    + + +
    [in]dataLSB-aligned 24-bit RGB or 32-bit RGBW data
    +
    +
    + +
    +
    + +

    ◆ neorv32_neoled_write_nonblocking()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_neoled_write_nonblocking (uint32_t data)
    +
    +inline
    +
    +

    Send single RGB(W) data word to NEOLED module (non-blocking).

    +
    Warning
    This function uses NO busy/flag checks at all!
    +
    Parameters
    + + +
    [in]dataLSB-aligned 24-bit RGB or 32-bit RGBW data
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__neoled_8h_source.html b/sw/neorv32__neoled_8h_source.html new file mode 100644 index 0000000000..02d556681a --- /dev/null +++ b/sw/neorv32__neoled_8h_source.html @@ -0,0 +1,227 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_neoled.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_neoled.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_neoled_h
    +
    19#define neorv32_neoled_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t DATA;
    + +
    +
    33
    +
    35#define NEORV32_NEOLED ((neorv32_neoled_t*) (NEORV32_NEOLED_BASE))
    +
    36
    + +
    78/**********************************************************************/
    + +
    83void neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode);
    +
    84void neorv32_neoled_setup_ws2812(int irq_mode);
    +
    85void neorv32_neoled_set_mode(uint32_t mode);
    + + +
    88void neorv32_neoled_enable(void);
    +
    89void neorv32_neoled_disable(void);
    +
    90void neorv32_neoled_write_blocking(uint32_t data);
    + +
    95/**********************************************************************/
    +
    +
    102inline void __attribute__ ((always_inline)) neorv32_neoled_write_nonblocking(uint32_t data) {
    +
    103
    +
    104 NEORV32_NEOLED->DATA = data; // send new LED data
    +
    105}
    +
    +
    106
    +
    107#endif // neorv32_neoled_h
    +
    #define NEORV32_NEOLED
    Definition neorv32_neoled.h:35
    +
    void neorv32_neoled_write_blocking(uint32_t data)
    Definition neorv32_neoled.c:193
    +
    void neorv32_neoled_set_mode(uint32_t mode)
    Definition neorv32_neoled.c:130
    +
    int neorv32_neoled_available(void)
    Definition neorv32_neoled.c:26
    +
    void neorv32_neoled_strobe_blocking(void)
    Definition neorv32_neoled.c:142
    +
    void neorv32_neoled_enable(void)
    Definition neorv32_neoled.c:171
    +
    uint32_t neorv32_neoled_get_buffer_size(void)
    Definition neorv32_neoled.c:210
    +
    void neorv32_neoled_disable(void)
    Definition neorv32_neoled.c:180
    +
    NEORV32_NEOLED_CTRL_enum
    Definition neorv32_neoled.h:38
    +
    @ NEOLED_CTRL_T_ONE_H_4
    Definition neorv32_neoled.h:67
    +
    @ NEOLED_CTRL_T_ZERO_H_4
    Definition neorv32_neoled.h:61
    +
    @ NEOLED_CTRL_PRSC1
    Definition neorv32_neoled.h:43
    +
    @ NEOLED_CTRL_PRSC0
    Definition neorv32_neoled.h:42
    +
    @ NEOLED_CTRL_TX_HALF
    Definition neorv32_neoled.h:71
    +
    @ NEOLED_CTRL_T_ZERO_H_1
    Definition neorv32_neoled.h:58
    +
    @ NEOLED_CTRL_TX_EMPTY
    Definition neorv32_neoled.h:70
    +
    @ NEOLED_CTRL_T_ONE_H_3
    Definition neorv32_neoled.h:66
    +
    @ NEOLED_CTRL_IRQ_CONF
    Definition neorv32_neoled.h:69
    +
    @ NEOLED_CTRL_BUFS_0
    Definition neorv32_neoled.h:46
    +
    @ NEOLED_CTRL_PRSC2
    Definition neorv32_neoled.h:44
    +
    @ NEOLED_CTRL_T_TOT_4
    Definition neorv32_neoled.h:55
    +
    @ NEOLED_CTRL_T_TOT_2
    Definition neorv32_neoled.h:53
    +
    @ NEOLED_CTRL_STROBE
    Definition neorv32_neoled.h:41
    +
    @ NEOLED_CTRL_T_TOT_0
    Definition neorv32_neoled.h:51
    +
    @ NEOLED_CTRL_T_ONE_H_2
    Definition neorv32_neoled.h:65
    +
    @ NEOLED_CTRL_TX_BUSY
    Definition neorv32_neoled.h:73
    +
    @ NEOLED_CTRL_T_ZERO_H_0
    Definition neorv32_neoled.h:57
    +
    @ NEOLED_CTRL_T_ONE_H_0
    Definition neorv32_neoled.h:63
    +
    @ NEOLED_CTRL_T_ZERO_H_2
    Definition neorv32_neoled.h:59
    +
    @ NEOLED_CTRL_T_ZERO_H_3
    Definition neorv32_neoled.h:60
    +
    @ NEOLED_CTRL_MODE
    Definition neorv32_neoled.h:40
    +
    @ NEOLED_CTRL_BUFS_3
    Definition neorv32_neoled.h:49
    +
    @ NEOLED_CTRL_T_TOT_3
    Definition neorv32_neoled.h:54
    +
    @ NEOLED_CTRL_TX_FULL
    Definition neorv32_neoled.h:72
    +
    @ NEOLED_CTRL_T_TOT_1
    Definition neorv32_neoled.h:52
    +
    @ NEOLED_CTRL_BUFS_2
    Definition neorv32_neoled.h:48
    +
    @ NEOLED_CTRL_T_ONE_H_1
    Definition neorv32_neoled.h:64
    +
    @ NEOLED_CTRL_BUFS_1
    Definition neorv32_neoled.h:47
    +
    @ NEOLED_CTRL_EN
    Definition neorv32_neoled.h:39
    +
    void neorv32_neoled_strobe_nonblocking(void)
    Definition neorv32_neoled.c:157
    +
    void neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode)
    Definition neorv32_neoled.c:47
    +
    void neorv32_neoled_write_nonblocking(uint32_t data)
    Definition neorv32_neoled.h:102
    +
    void neorv32_neoled_setup_ws2812(int irq_mode)
    Definition neorv32_neoled.c:71
    +
    Definition neorv32_neoled.h:29
    +
    uint32_t DATA
    Definition neorv32_neoled.h:31
    +
    uint32_t CTRL
    Definition neorv32_neoled.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__onewire_8c.html b/sw/neorv32__onewire_8c.html new file mode 100644 index 0000000000..97ccdd9a88 --- /dev/null +++ b/sw/neorv32__onewire_8c.html @@ -0,0 +1,552 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_onewire.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_onewire.c File Reference
    +
    +
    + +

    1-Wire Interface Controller (ONEWIRE) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_onewire_available (void)
     
    int neorv32_onewire_setup (uint32_t t_base)
     
    void neorv32_onewire_enable (void)
     
    void neorv32_onewire_disable (void)
     
    int neorv32_onewire_sense (void)
     
    int neorv32_onewire_busy (void)
     
    void neorv32_onewire_reset (void)
     
    int neorv32_onewire_reset_get_presence (void)
     
    void neorv32_onewire_read_bit (void)
     
    uint8_t neorv32_onewire_read_bit_get (void)
     
    void neorv32_onewire_write_bit (uint8_t bit)
     
    void neorv32_onewire_read_byte (void)
     
    uint8_t neorv32_onewire_read_byte_get (void)
     
    void neorv32_onewire_write_byte (uint8_t byte)
     
    int neorv32_onewire_reset_blocking (void)
     
    uint8_t neorv32_onewire_read_bit_blocking (void)
     
    void neorv32_onewire_write_bit_blocking (uint8_t bit)
     
    uint8_t neorv32_onewire_read_byte_blocking (void)
     
    void neorv32_onewire_write_byte_blocking (uint8_t byte)
     
    +

    Detailed Description

    +

    1-Wire Interface Controller (ONEWIRE) HW driver source file.

    +
    Note
    These functions should only be used if the ONEWIRE unit was synthesized (IO_ONEWIRE_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_onewire_available()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_available (void )
    +
    +

    Check if ONEWIRE controller was synthesized.

    +
    Returns
    0 if ONEWIRE was not synthesized, 1 if ONEWIRE is available.
    + +
    +
    + +

    ◆ neorv32_onewire_busy()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_busy (void )
    +
    +

    Check if ONEWIRE module is busy.

    +
    Note
    This function is non-blocking.
    +
    Returns
    0 if not busy, 1 if busy.
    + +
    +
    + +

    ◆ neorv32_onewire_disable()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_disable (void )
    +
    +

    Disable ONEWIRE controller.

    + +
    +
    + +

    ◆ neorv32_onewire_enable()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_enable (void )
    +
    +

    Enable ONEWIRE controller.

    + +
    +
    + +

    ◆ neorv32_onewire_read_bit()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_read_bit (void )
    +
    +

    Initiate single-bit read.

    +
    Note
    This function is non-blocking.
    + +
    +
    + +

    ◆ neorv32_onewire_read_bit_blocking()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_bit_blocking (void )
    +
    +

    Read single bit.

    +
    Warning
    This function is blocking!
    +
    Returns
    Read bit in bit 0.
    + +
    +
    + +

    ◆ neorv32_onewire_read_bit_get()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_bit_get (void )
    +
    +

    Get bit from previous single-bit read operation

    +
    Note
    This function is non-blocking.
    +
    Returns
    Read bit in bit 0.
    + +
    +
    + +

    ◆ neorv32_onewire_read_byte()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_read_byte (void )
    +
    +

    Initiate read byte.

    +
    Note
    This function is non-blocking.
    + +
    +
    + +

    ◆ neorv32_onewire_read_byte_blocking()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_byte_blocking (void )
    +
    +

    Read byte.

    +
    Warning
    This function is blocking!
    +
    Returns
    Read byte.
    + +
    +
    + +

    ◆ neorv32_onewire_read_byte_get()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_byte_get (void )
    +
    +

    Get data from previous read byte operation.

    +
    Note
    This function is non-blocking.
    +
    Returns
    Read byte.
    + +
    +
    + +

    ◆ neorv32_onewire_reset()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_reset (void )
    +
    +

    Initiate reset pulse.

    +
    Note
    This function is non-blocking.
    + +
    +
    + +

    ◆ neorv32_onewire_reset_blocking()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_reset_blocking (void )
    +
    +

    Generate reset pulse and check if any bus device is present.

    +
    Warning
    This function is blocking!
    +
    Returns
    0 if at lest one device is present, -1 otherwise
    + +
    +
    + +

    ◆ neorv32_onewire_reset_get_presence()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_reset_get_presence (void )
    +
    +

    Get bus presence (after RESET).

    +
    Note
    This function is non-blocking.
    +
    Returns
    0 if at lest one device is present, -1 otherwise
    + +
    +
    + +

    ◆ neorv32_onewire_sense()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_sense (void )
    +
    +

    Get current bus state.

    +
    Returns
    1 if bus is high, 0 if bus is low.
    + +
    +
    + +

    ◆ neorv32_onewire_setup()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_setup (uint32_t t_base)
    +
    +

    Reset, configure and enable ONEWIRE interface controller.

    +
    Parameters
    + + +
    [in]t_baseBase tick time in ns.
    +
    +
    +
    Returns
    0 if configuration failed, otherwise the actual t_base time in ns is returned.
    + +
    +
    + +

    ◆ neorv32_onewire_write_bit()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_bit (uint8_t bit)
    +
    +

    Initiate single-bit write.

    +
    Note
    This function is non-blocking.
    +
    Parameters
    + + +
    [in]bitBit to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_onewire_write_bit_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_bit_blocking (uint8_t bit)
    +
    +

    Write single bit.

    +
    Warning
    This function is blocking!
    +
    Parameters
    + + +
    [in]bitBit to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_onewire_write_byte()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_byte (uint8_t byte)
    +
    +

    Initiate write byte.

    +
    Note
    This function is non-blocking.
    +
    Parameters
    + + +
    [in]byteByte to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_onewire_write_byte_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_byte_blocking (uint8_t byte)
    +
    +

    Write byte.

    +
    Warning
    This function is blocking!
    +
    Parameters
    + + +
    [in]byteByte to be send.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__onewire_8h.html b/sw/neorv32__onewire_8h.html new file mode 100644 index 0000000000..6b848b54c7 --- /dev/null +++ b/sw/neorv32__onewire_8h.html @@ -0,0 +1,682 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_onewire.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_onewire.h File Reference
    +
    +
    + +

    1-Wire Interface Controller (ONEWIRE) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_onewire_t
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_onewire_available (void)
     
    int neorv32_onewire_setup (uint32_t t_base)
     
    void neorv32_onewire_enable (void)
     
    void neorv32_onewire_disable (void)
     
    int neorv32_onewire_sense (void)
     
    int neorv32_onewire_busy (void)
     
    void neorv32_onewire_reset (void)
     
    int neorv32_onewire_reset_get_presence (void)
     
    void neorv32_onewire_read_bit (void)
     
    uint8_t neorv32_onewire_read_bit_get (void)
     
    void neorv32_onewire_write_bit (uint8_t bit)
     
    void neorv32_onewire_read_byte (void)
     
    uint8_t neorv32_onewire_read_byte_get (void)
     
    void neorv32_onewire_write_byte (uint8_t byte)
     
    int neorv32_onewire_reset_blocking (void)
     
    uint8_t neorv32_onewire_read_bit_blocking (void)
     
    void neorv32_onewire_write_bit_blocking (uint8_t bit)
     
    uint8_t neorv32_onewire_read_byte_blocking (void)
     
    void neorv32_onewire_write_byte_blocking (uint8_t byte)
     
    + + + + + + + +

    IO Device: 1-Wire Interface Controller (ONEWIRE)

    #define NEORV32_ONEWIRE   ((neorv32_onewire_t*) (NEORV32_ONEWIRE_BASE))
     
    enum  NEORV32_ONEWIRE_CTRL_enum {
    +  ONEWIRE_CTRL_EN = 0 +, ONEWIRE_CTRL_PRSC0 = 1 +, ONEWIRE_CTRL_PRSC1 = 2 +, ONEWIRE_CTRL_CLKDIV0 = 3 +,
    +  ONEWIRE_CTRL_CLKDIV1 = 4 +, ONEWIRE_CTRL_CLKDIV2 = 5 +, ONEWIRE_CTRL_CLKDIV3 = 6 +, ONEWIRE_CTRL_CLKDIV4 = 7 +,
    +  ONEWIRE_CTRL_CLKDIV5 = 8 +, ONEWIRE_CTRL_CLKDIV6 = 9 +, ONEWIRE_CTRL_CLKDIV7 = 10 +, ONEWIRE_CTRL_TRIG_RST = 11 +,
    +  ONEWIRE_CTRL_TRIG_BIT = 12 +, ONEWIRE_CTRL_TRIG_BYTE = 13 +, ONEWIRE_CTRL_SENSE = 29 +, ONEWIRE_CTRL_PRESENCE = 30 +,
    +  ONEWIRE_CTRL_BUSY = 31 +
    + }
     
    enum  NEORV32_ONEWIRE_DATA_enum { ONEWIRE_DATA_LSB = 0 +, ONEWIRE_DATA_MSB = 7 + }
     
    +

    Detailed Description

    +

    1-Wire Interface Controller (ONEWIRE) HW driver header file.

    +
    Note
    These functions should only be used if the ONEWIRE unit was synthesized (IO_ONEWIRE_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_ONEWIRE

    + +
    +
    + + + + +
    #define NEORV32_ONEWIRE   ((neorv32_onewire_t*) (NEORV32_ONEWIRE_BASE))
    +
    +

    ONEWIRE module hardware access (neorv32_onewire_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_ONEWIRE_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_ONEWIRE_CTRL_enum
    +
    +

    ONEWIRE control register bits

    + + + + + + + + + + + + + + + + + + +
    Enumerator
    ONEWIRE_CTRL_EN 

    ONEWIRE control register(0) (r/w): ONEWIRE controller enable

    +
    ONEWIRE_CTRL_PRSC0 

    ONEWIRE control register(1) (r/w): Clock prescaler select bit 0

    +
    ONEWIRE_CTRL_PRSC1 

    ONEWIRE control register(2) (r/w): Clock prescaler select bit 1

    +
    ONEWIRE_CTRL_CLKDIV0 

    ONEWIRE control register(3) (r/w): Clock divider bit 0

    +
    ONEWIRE_CTRL_CLKDIV1 

    ONEWIRE control register(4) (r/w): Clock divider bit 1

    +
    ONEWIRE_CTRL_CLKDIV2 

    ONEWIRE control register(5) (r/w): Clock divider bit 2

    +
    ONEWIRE_CTRL_CLKDIV3 

    ONEWIRE control register(6) (r/w): Clock divider bit 3

    +
    ONEWIRE_CTRL_CLKDIV4 

    ONEWIRE control register(7) (r/w): Clock divider bit 4

    +
    ONEWIRE_CTRL_CLKDIV5 

    ONEWIRE control register(8) (r/w): Clock divider bit 5

    +
    ONEWIRE_CTRL_CLKDIV6 

    ONEWIRE control register(9) (r/w): Clock divider bit 6

    +
    ONEWIRE_CTRL_CLKDIV7 

    ONEWIRE control register(10) (r/w): Clock divider bit 7

    +
    ONEWIRE_CTRL_TRIG_RST 

    ONEWIRE control register(11) (-/w): Trigger reset pulse, auto-clears

    +
    ONEWIRE_CTRL_TRIG_BIT 

    ONEWIRE control register(12) (-/w): Trigger single-bit transmission, auto-clears

    +
    ONEWIRE_CTRL_TRIG_BYTE 

    ONEWIRE control register(13) (-/w): Trigger full-byte transmission, auto-clears

    +
    ONEWIRE_CTRL_SENSE 

    ONEWIRE control register(29) (r/-): Current state of the bus line

    +
    ONEWIRE_CTRL_PRESENCE 

    ONEWIRE control register(30) (r/-): Bus presence detected

    +
    ONEWIRE_CTRL_BUSY 

    ONEWIRE control register(31) (r/-): Operation in progress when set

    +
    + +
    +
    + +

    ◆ NEORV32_ONEWIRE_DATA_enum

    + +
    +
    + + + + +
    enum NEORV32_ONEWIRE_DATA_enum
    +
    +

    ONEWIRE receive/transmit data register bits

    + + + +
    Enumerator
    ONEWIRE_DATA_LSB 

    ONEWIRE data register(0) (r/w): Receive/transmit data (8-bit) LSB

    +
    ONEWIRE_DATA_MSB 

    ONEWIRE data register(7) (r/w): Receive/transmit data (8-bit) MSB

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_onewire_available()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_available (void )
    +
    +

    Check if ONEWIRE controller was synthesized.

    +
    Returns
    0 if ONEWIRE was not synthesized, 1 if ONEWIRE is available.
    + +
    +
    + +

    ◆ neorv32_onewire_busy()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_busy (void )
    +
    +

    Check if ONEWIRE module is busy.

    +
    Note
    This function is non-blocking.
    +
    Returns
    0 if not busy, 1 if busy.
    + +
    +
    + +

    ◆ neorv32_onewire_disable()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_disable (void )
    +
    +

    Disable ONEWIRE controller.

    + +
    +
    + +

    ◆ neorv32_onewire_enable()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_enable (void )
    +
    +

    Enable ONEWIRE controller.

    + +
    +
    + +

    ◆ neorv32_onewire_read_bit()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_read_bit (void )
    +
    +

    Initiate single-bit read.

    +
    Note
    This function is non-blocking.
    + +
    +
    + +

    ◆ neorv32_onewire_read_bit_blocking()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_bit_blocking (void )
    +
    +

    Read single bit.

    +
    Warning
    This function is blocking!
    +
    Returns
    Read bit in bit 0.
    + +
    +
    + +

    ◆ neorv32_onewire_read_bit_get()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_bit_get (void )
    +
    +

    Get bit from previous single-bit read operation

    +
    Note
    This function is non-blocking.
    +
    Returns
    Read bit in bit 0.
    + +
    +
    + +

    ◆ neorv32_onewire_read_byte()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_read_byte (void )
    +
    +

    Initiate read byte.

    +
    Note
    This function is non-blocking.
    + +
    +
    + +

    ◆ neorv32_onewire_read_byte_blocking()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_byte_blocking (void )
    +
    +

    Read byte.

    +
    Warning
    This function is blocking!
    +
    Returns
    Read byte.
    + +
    +
    + +

    ◆ neorv32_onewire_read_byte_get()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_onewire_read_byte_get (void )
    +
    +

    Get data from previous read byte operation.

    +
    Note
    This function is non-blocking.
    +
    Returns
    Read byte.
    + +
    +
    + +

    ◆ neorv32_onewire_reset()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_reset (void )
    +
    +

    Initiate reset pulse.

    +
    Note
    This function is non-blocking.
    + +
    +
    + +

    ◆ neorv32_onewire_reset_blocking()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_reset_blocking (void )
    +
    +

    Generate reset pulse and check if any bus device is present.

    +
    Warning
    This function is blocking!
    +
    Returns
    0 if at lest one device is present, -1 otherwise
    + +
    +
    + +

    ◆ neorv32_onewire_reset_get_presence()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_reset_get_presence (void )
    +
    +

    Get bus presence (after RESET).

    +
    Note
    This function is non-blocking.
    +
    Returns
    0 if at lest one device is present, -1 otherwise
    + +
    +
    + +

    ◆ neorv32_onewire_sense()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_sense (void )
    +
    +

    Get current bus state.

    +
    Returns
    1 if bus is high, 0 if bus is low.
    + +
    +
    + +

    ◆ neorv32_onewire_setup()

    + +
    +
    + + + + + + + +
    int neorv32_onewire_setup (uint32_t t_base)
    +
    +

    Reset, configure and enable ONEWIRE interface controller.

    +
    Parameters
    + + +
    [in]t_baseBase tick time in ns.
    +
    +
    +
    Returns
    0 if configuration failed, otherwise the actual t_base time in ns is returned.
    + +
    +
    + +

    ◆ neorv32_onewire_write_bit()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_bit (uint8_t bit)
    +
    +

    Initiate single-bit write.

    +
    Note
    This function is non-blocking.
    +
    Parameters
    + + +
    [in]bitBit to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_onewire_write_bit_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_bit_blocking (uint8_t bit)
    +
    +

    Write single bit.

    +
    Warning
    This function is blocking!
    +
    Parameters
    + + +
    [in]bitBit to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_onewire_write_byte()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_byte (uint8_t byte)
    +
    +

    Initiate write byte.

    +
    Note
    This function is non-blocking.
    +
    Parameters
    + + +
    [in]byteByte to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_onewire_write_byte_blocking()

    + +
    +
    + + + + + + + +
    void neorv32_onewire_write_byte_blocking (uint8_t byte)
    +
    +

    Write byte.

    +
    Warning
    This function is blocking!
    +
    Parameters
    + + +
    [in]byteByte to be send.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__onewire_8h_source.html b/sw/neorv32__onewire_8h_source.html new file mode 100644 index 0000000000..31a065903f --- /dev/null +++ b/sw/neorv32__onewire_8h_source.html @@ -0,0 +1,221 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_onewire.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_onewire.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_onewire_h
    +
    19#define neorv32_onewire_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t DATA;
    + +
    +
    33
    +
    35#define NEORV32_ONEWIRE ((neorv32_onewire_t*) (NEORV32_ONEWIRE_BASE))
    +
    36
    + +
    58
    + +
    67/**********************************************************************/
    + +
    72int neorv32_onewire_setup(uint32_t t_base);
    +
    73void neorv32_onewire_enable(void);
    + +
    75int neorv32_onewire_sense(void);
    +
    76
    +
    77int neorv32_onewire_busy(void);
    +
    78void neorv32_onewire_reset(void);
    + + + +
    82void neorv32_onewire_write_bit(uint8_t bit);
    + + +
    85void neorv32_onewire_write_byte(uint8_t byte);
    +
    86
    + + + + + +
    95#endif // neorv32_onewire_h
    +
    int neorv32_onewire_busy(void)
    Definition neorv32_onewire.c:130
    +
    void neorv32_onewire_read_byte(void)
    Definition neorv32_onewire.c:234
    +
    int neorv32_onewire_sense(void)
    Definition neorv32_onewire.c:107
    +
    int neorv32_onewire_setup(uint32_t t_base)
    Definition neorv32_onewire.c:43
    +
    void neorv32_onewire_write_byte(uint8_t byte)
    Definition neorv32_onewire.c:265
    +
    void neorv32_onewire_reset(void)
    Definition neorv32_onewire.c:147
    +
    int neorv32_onewire_reset_get_presence(void)
    Definition neorv32_onewire.c:161
    +
    void neorv32_onewire_write_bit(uint8_t bit)
    Definition neorv32_onewire.c:214
    +
    uint8_t neorv32_onewire_read_byte_get(void)
    Definition neorv32_onewire.c:251
    +
    void neorv32_onewire_write_bit_blocking(uint8_t bit)
    Definition neorv32_onewire.c:327
    +
    uint8_t neorv32_onewire_read_byte_blocking(void)
    Definition neorv32_onewire.c:344
    +
    void neorv32_onewire_disable(void)
    Definition neorv32_onewire.c:96
    +
    int neorv32_onewire_available(void)
    Definition neorv32_onewire.c:26
    +
    uint8_t neorv32_onewire_read_bit_get(void)
    Definition neorv32_onewire.c:195
    +
    void neorv32_onewire_read_bit(void)
    Definition neorv32_onewire.c:178
    +
    void neorv32_onewire_write_byte_blocking(uint8_t byte)
    Definition neorv32_onewire.c:364
    +
    uint8_t neorv32_onewire_read_bit_blocking(void)
    Definition neorv32_onewire.c:307
    +
    NEORV32_ONEWIRE_CTRL_enum
    Definition neorv32_onewire.h:38
    +
    @ ONEWIRE_CTRL_CLKDIV6
    Definition neorv32_onewire.h:48
    +
    @ ONEWIRE_CTRL_CLKDIV4
    Definition neorv32_onewire.h:46
    +
    @ ONEWIRE_CTRL_CLKDIV5
    Definition neorv32_onewire.h:47
    +
    @ ONEWIRE_CTRL_TRIG_BIT
    Definition neorv32_onewire.h:51
    +
    @ ONEWIRE_CTRL_CLKDIV7
    Definition neorv32_onewire.h:49
    +
    @ ONEWIRE_CTRL_PRESENCE
    Definition neorv32_onewire.h:55
    +
    @ ONEWIRE_CTRL_TRIG_RST
    Definition neorv32_onewire.h:50
    +
    @ ONEWIRE_CTRL_BUSY
    Definition neorv32_onewire.h:56
    +
    @ ONEWIRE_CTRL_CLKDIV3
    Definition neorv32_onewire.h:45
    +
    @ ONEWIRE_CTRL_EN
    Definition neorv32_onewire.h:39
    +
    @ ONEWIRE_CTRL_PRSC0
    Definition neorv32_onewire.h:40
    +
    @ ONEWIRE_CTRL_CLKDIV0
    Definition neorv32_onewire.h:42
    +
    @ ONEWIRE_CTRL_TRIG_BYTE
    Definition neorv32_onewire.h:52
    +
    @ ONEWIRE_CTRL_CLKDIV2
    Definition neorv32_onewire.h:44
    +
    @ ONEWIRE_CTRL_PRSC1
    Definition neorv32_onewire.h:41
    +
    @ ONEWIRE_CTRL_SENSE
    Definition neorv32_onewire.h:54
    +
    @ ONEWIRE_CTRL_CLKDIV1
    Definition neorv32_onewire.h:43
    +
    void neorv32_onewire_enable(void)
    Definition neorv32_onewire.c:87
    +
    NEORV32_ONEWIRE_DATA_enum
    Definition neorv32_onewire.h:60
    +
    @ ONEWIRE_DATA_LSB
    Definition neorv32_onewire.h:61
    +
    @ ONEWIRE_DATA_MSB
    Definition neorv32_onewire.h:62
    +
    int neorv32_onewire_reset_blocking(void)
    Definition neorv32_onewire.c:287
    +
    Definition neorv32_onewire.h:29
    +
    uint32_t DATA
    Definition neorv32_onewire.h:31
    +
    uint32_t CTRL
    Definition neorv32_onewire.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__pwm_8c.html b/sw/neorv32__pwm_8c.html new file mode 100644 index 0000000000..08dee5aabe --- /dev/null +++ b/sw/neorv32__pwm_8c.html @@ -0,0 +1,284 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_pwm.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_pwm.c File Reference
    +
    +
    + +

    Pulse-Width Modulation Controller (PWM) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_pwm_available (void)
     
    void neorv32_pwm_setup (int prsc)
     
    void neorv32_pwm_disable (void)
     
    void neorv32_pwm_enable (void)
     
    int neorv32_pmw_get_num_channels (void)
     
    void neorv32_pwm_set (int channel, uint8_t dc)
     
    uint8_t neorv32_pwm_get (int channel)
     
    +

    Detailed Description

    +

    Pulse-Width Modulation Controller (PWM) HW driver source file.

    +
    Note
    These functions should only be used if the PWM unit was synthesized (IO_PWM_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_pmw_get_num_channels()

    + +
    +
    + + + + + + + +
    int neorv32_pmw_get_num_channels (void )
    +
    +

    Get number of implemented channels.

    Warning
    This function will override all duty cycle configuration registers.
    +
    Returns
    Number of implemented channels.
    + +
    +
    + +

    ◆ neorv32_pwm_available()

    + +
    +
    + + + + + + + +
    int neorv32_pwm_available (void )
    +
    +

    Check if PWM unit was synthesized.

    +
    Returns
    0 if PWM was not synthesized, 1 if PWM is available.
    + +
    +
    + +

    ◆ neorv32_pwm_disable()

    + +
    +
    + + + + + + + +
    void neorv32_pwm_disable (void )
    +
    +

    Disable pulse width modulation controller.

    + +
    +
    + +

    ◆ neorv32_pwm_enable()

    + +
    +
    + + + + + + + +
    void neorv32_pwm_enable (void )
    +
    +

    Enable pulse width modulation controller.

    + +
    +
    + +

    ◆ neorv32_pwm_get()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_pwm_get (int channel)
    +
    +

    Get duty cycle from channel.

    +
    Parameters
    + + +
    [in]channelChannel select (0..11).
    +
    +
    +
    Returns
    Duty cycle (8-bit, LSB-aligned) of channel 'channel'.
    + +
    +
    + +

    ◆ neorv32_pwm_set()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_pwm_set (int channel,
    uint8_t dc )
    +
    +

    Set duty cycle for channel.

    +
    Parameters
    + + + +
    [in]channelChannel select (0..11).
    [in]dcDuty cycle (8-bit, LSB-aligned).
    +
    +
    + +
    +
    + +

    ◆ neorv32_pwm_setup()

    + +
    +
    + + + + + + + +
    void neorv32_pwm_setup (int prsc)
    +
    +

    Enable and configure pulse width modulation controller. The PWM control register bits are listed in NEORV32_PWM_CTRL_enum.

    +
    Parameters
    + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__pwm_8h.html b/sw/neorv32__pwm_8h.html new file mode 100644 index 0000000000..c0d3525d88 --- /dev/null +++ b/sw/neorv32__pwm_8h.html @@ -0,0 +1,344 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_pwm.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_pwm.h File Reference
    +
    +
    + +

    Pulse-Width Modulation Controller (PWM) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_pwm_t
     
    + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_pwm_available (void)
     
    void neorv32_pwm_setup (int prsc)
     
    void neorv32_pwm_disable (void)
     
    void neorv32_pwm_enable (void)
     
    int neorv32_pmw_get_num_channels (void)
     
    void neorv32_pwm_set (int channel, uint8_t dc)
     
    uint8_t neorv32_pwm_get (int channel)
     
    + + + + + +

    IO Device: Pulse Width Modulation Controller (PWM)

    #define NEORV32_PWM   ((neorv32_pwm_t*) (NEORV32_PWM_BASE))
     
    enum  NEORV32_PWM_CTRL_enum { PWM_CTRL_EN = 0 +, PWM_CTRL_PRSC0 = 1 +, PWM_CTRL_PRSC1 = 2 +, PWM_CTRL_PRSC2 = 3 + }
     
    +

    Detailed Description

    +

    Pulse-Width Modulation Controller (PWM) HW driver header file.

    +
    Note
    These functions should only be used if the PWM unit was synthesized (IO_PWM_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_PWM

    + +
    +
    + + + + +
    #define NEORV32_PWM   ((neorv32_pwm_t*) (NEORV32_PWM_BASE))
    +
    +

    PWM module hardware access (neorv32_pwm_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_PWM_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_PWM_CTRL_enum
    +
    +

    PWM control register bits

    + + + + + +
    Enumerator
    PWM_CTRL_EN 

    PWM control register(0) (r/w): PWM controller enable

    +
    PWM_CTRL_PRSC0 

    PWM control register(1) (r/w): Clock prescaler select bit 0

    +
    PWM_CTRL_PRSC1 

    PWM control register(2) (r/w): Clock prescaler select bit 1

    +
    PWM_CTRL_PRSC2 

    PWM control register(3) (r/w): Clock prescaler select bit 2

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_pmw_get_num_channels()

    + +
    +
    + + + + + + + +
    int neorv32_pmw_get_num_channels (void )
    +
    +

    Get number of implemented channels.

    Warning
    This function will override all duty cycle configuration registers.
    +
    Returns
    Number of implemented channels.
    + +
    +
    + +

    ◆ neorv32_pwm_available()

    + +
    +
    + + + + + + + +
    int neorv32_pwm_available (void )
    +
    +

    Check if PWM unit was synthesized.

    +
    Returns
    0 if PWM was not synthesized, 1 if PWM is available.
    + +
    +
    + +

    ◆ neorv32_pwm_disable()

    + +
    +
    + + + + + + + +
    void neorv32_pwm_disable (void )
    +
    +

    Disable pulse width modulation controller.

    + +
    +
    + +

    ◆ neorv32_pwm_enable()

    + +
    +
    + + + + + + + +
    void neorv32_pwm_enable (void )
    +
    +

    Enable pulse width modulation controller.

    + +
    +
    + +

    ◆ neorv32_pwm_get()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_pwm_get (int channel)
    +
    +

    Get duty cycle from channel.

    +
    Parameters
    + + +
    [in]channelChannel select (0..11).
    +
    +
    +
    Returns
    Duty cycle (8-bit, LSB-aligned) of channel 'channel'.
    + +
    +
    + +

    ◆ neorv32_pwm_set()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_pwm_set (int channel,
    uint8_t dc )
    +
    +

    Set duty cycle for channel.

    +
    Parameters
    + + + +
    [in]channelChannel select (0..11).
    [in]dcDuty cycle (8-bit, LSB-aligned).
    +
    +
    + +
    +
    + +

    ◆ neorv32_pwm_setup()

    + +
    +
    + + + + + + + +
    void neorv32_pwm_setup (int prsc)
    +
    +

    Enable and configure pulse width modulation controller. The PWM control register bits are listed in NEORV32_PWM_CTRL_enum.

    +
    Parameters
    + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__pwm_8h_source.html b/sw/neorv32__pwm_8h_source.html new file mode 100644 index 0000000000..94bef8f5ea --- /dev/null +++ b/sw/neorv32__pwm_8h_source.html @@ -0,0 +1,158 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_pwm.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_pwm.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_pwm_h
    +
    19#define neorv32_pwm_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t DC[3];
    + +
    +
    33
    +
    35#define NEORV32_PWM ((neorv32_pwm_t*) (NEORV32_PWM_BASE))
    +
    36
    + +
    47/**********************************************************************/
    +
    51int neorv32_pwm_available(void);
    +
    52void neorv32_pwm_setup(int prsc);
    +
    53void neorv32_pwm_disable(void);
    +
    54void neorv32_pwm_enable(void);
    + +
    56void neorv32_pwm_set(int channel, uint8_t dc);
    +
    57uint8_t neorv32_pwm_get(int channel);
    +
    60#endif // neorv32_pwm_h
    +
    int neorv32_pmw_get_num_channels(void)
    Definition neorv32_pwm.c:81
    +
    void neorv32_pwm_setup(int prsc)
    Definition neorv32_pwm.c:43
    +
    uint8_t neorv32_pwm_get(int channel)
    Definition neorv32_pwm.c:127
    +
    void neorv32_pwm_disable(void)
    Definition neorv32_pwm.c:60
    +
    void neorv32_pwm_set(int channel, uint8_t dc)
    Definition neorv32_pwm.c:103
    +
    void neorv32_pwm_enable(void)
    Definition neorv32_pwm.c:69
    +
    NEORV32_PWM_CTRL_enum
    Definition neorv32_pwm.h:38
    +
    @ PWM_CTRL_PRSC0
    Definition neorv32_pwm.h:40
    +
    @ PWM_CTRL_PRSC2
    Definition neorv32_pwm.h:42
    +
    @ PWM_CTRL_PRSC1
    Definition neorv32_pwm.h:41
    +
    @ PWM_CTRL_EN
    Definition neorv32_pwm.h:39
    +
    int neorv32_pwm_available(void)
    Definition neorv32_pwm.c:26
    +
    Definition neorv32_pwm.h:29
    +
    uint32_t CTRL
    Definition neorv32_pwm.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__rte_8c.html b/sw/neorv32__rte_8c.html new file mode 100644 index 0000000000..ac75d97d8b --- /dev/null +++ b/sw/neorv32__rte_8c.html @@ -0,0 +1,468 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_rte.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_rte.c File Reference
    +
    +
    + +

    NEORV32 Runtime Environment. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    static void __neorv32_rte_core (void)
     
    static void __neorv32_rte_print_hex_word (uint32_t num)
     
    void neorv32_rte_setup (void)
     
    int neorv32_rte_handler_install (int id, void(*handler)(void))
     
    int neorv32_rte_handler_uninstall (int id)
     
    uint32_t neorv32_rte_context_get (int x)
     
    void neorv32_rte_context_put (int x, uint32_t data)
     
    void neorv32_rte_debug_handler (void)
     
    void neorv32_rte_print_hw_config (void)
     
    void neorv32_rte_print_hw_version (void)
     
    void neorv32_rte_print_about (void)
     
    void neorv32_rte_print_logo (void)
     
    void neorv32_rte_print_license (void)
     
    + + + +

    +Variables

    static uint32_t __neorv32_rte_vector_lut [NEORV32_RTE_NUM_TRAPS]
     
    +

    Detailed Description

    +

    NEORV32 Runtime Environment.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ __neorv32_rte_core()

    + +
    +
    + + + + + +
    + + + + + + + +
    static void __neorv32_rte_core (void )
    +
    +static
    +
    +

    NEORV32 runtime environment (RTE): This is the core of the NEORV32 RTE (first-level trap handler, executed in machine mode).

    + +
    +
    + +

    ◆ __neorv32_rte_print_hex_word()

    + +
    +
    + + + + + +
    + + + + + + + +
    void __neorv32_rte_print_hex_word (uint32_t num)
    +
    +static
    +
    +

    NEORV32 runtime environment (RTE): Private function to print 32-bit number as 8-digit hexadecimal value (with "0x" suffix).

    +
    Parameters
    + + +
    [in]numNumber to print as hexadecimal via UART0.
    +
    +
    + +
    +
    + +

    ◆ neorv32_rte_context_get()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_rte_context_get (int x)
    +
    +

    NEORV32 runtime environment (RTE): Read register from application context (on stack).

    +
    Parameters
    + + +
    [in]xRegister number (0..31, corresponds to register x0..x31).
    +
    +
    +
    Returns
    Content of register x.
    + +
    +
    + +

    ◆ neorv32_rte_context_put()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_rte_context_put (int x,
    uint32_t data )
    +
    +

    NEORV32 runtime environment (RTE): Write register to application context (on stack).

    +
    Parameters
    + + + +
    [in]xRegister number (0..31, corresponds to register x0..x31).
    [in]dataData to be written to register x.
    +
    +
    + +
    +
    + +

    ◆ neorv32_rte_debug_handler()

    + +
    +
    + + + + + + + +
    void neorv32_rte_debug_handler (void )
    +
    +

    NEORV32 runtime environment (RTE): Debug trap handler, printing information via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_handler_install()

    + +
    +
    + + + + + + + + + + + +
    int neorv32_rte_handler_install (int id,
    void(* handler )(void) )
    +
    +

    NEORV32 runtime environment (RTE): Install trap handler function (second-level trap handler).

    +
    Parameters
    + + + +
    [in]idIdentifier (type) of the targeted trap. See NEORV32_RTE_TRAP_enum.
    [in]handlerThe actual handler function for the specified trap (function MUST be of type "void function(void);").
    +
    +
    +
    Returns
    0 if success, -1 if error (invalid id or targeted trap not supported).
    + +
    +
    + +

    ◆ neorv32_rte_handler_uninstall()

    + +
    +
    + + + + + + + +
    int neorv32_rte_handler_uninstall (int id)
    +
    +

    NEORV32 runtime environment (RTE): Uninstall trap handler function from NEORV32 runtime environment, which was previously installed via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)).

    +
    Parameters
    + + +
    [in]idIdentifier (type) of the targeted trap. See NEORV32_RTE_TRAP_enum.
    +
    +
    +
    Returns
    0 if success, -1 if error (invalid id or targeted trap not supported).
    + +
    +
    + +

    ◆ neorv32_rte_print_about()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_about (void )
    +
    +

    NEORV32 runtime environment (RTE): Print project info via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_print_hw_config()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_hw_config (void )
    +
    +

    NEORV32 runtime environment (RTE): Print hardware configuration information via UART0.

    +
    Warning
    This function overrides several CSR, CNT and HPM CSRs!
    + +
    +
    + +

    ◆ neorv32_rte_print_hw_version()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_hw_version (void )
    +
    +

    NEORV32 runtime environment (RTE): Print the processor version in human-readable format via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_print_license()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_license (void )
    +
    +

    NEORV32 runtime environment (RTE): Print project license via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_print_logo()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_logo (void )
    +
    +

    NEORV32 runtime environment (RTE): Print project logo via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_setup()

    + +
    +
    + + + + + + + +
    void neorv32_rte_setup (void )
    +
    +

    NEORV32 runtime environment (RTE): Setup RTE.

    +
    Note
    This function installs a debug handler for ALL trap sources, which gives detailed information about the trap. Actual handlers can be installed afterwards via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)).
    + +
    +
    +

    Variable Documentation

    + +

    ◆ __neorv32_rte_vector_lut

    + +
    +
    + + + + + +
    + + + + +
    uint32_t __neorv32_rte_vector_lut[NEORV32_RTE_NUM_TRAPS]
    +
    +static
    +
    +

    NEORV32 runtime environment (RTE): The >private< trap vector look-up table of the NEORV32 RTE.

    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__rte_8h.html b/sw/neorv32__rte_8h.html new file mode 100644 index 0000000000..f607d6b2ff --- /dev/null +++ b/sw/neorv32__rte_8h.html @@ -0,0 +1,520 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_rte.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_rte.h File Reference
    +
    +
    + +

    NEORV32 Runtime Environment. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Macros

    #define NEORV32_RTE_NUM_TRAPS   29
     
    + + + +

    +Enumerations

    enum  NEORV32_RTE_TRAP_enum {
    +  RTE_TRAP_I_ACCESS = 0 +, RTE_TRAP_I_ILLEGAL = 1 +, RTE_TRAP_I_MISALIGNED = 2 +, RTE_TRAP_BREAKPOINT = 3 +,
    +  RTE_TRAP_L_MISALIGNED = 4 +, RTE_TRAP_L_ACCESS = 5 +, RTE_TRAP_S_MISALIGNED = 6 +, RTE_TRAP_S_ACCESS = 7 +,
    +  RTE_TRAP_UENV_CALL = 8 +, RTE_TRAP_MENV_CALL = 9 +, RTE_TRAP_MSI = 10 +, RTE_TRAP_MTI = 11 +,
    +  RTE_TRAP_MEI = 12 +, RTE_TRAP_FIRQ_0 = 13 +, RTE_TRAP_FIRQ_1 = 14 +, RTE_TRAP_FIRQ_2 = 15 +,
    +  RTE_TRAP_FIRQ_3 = 16 +, RTE_TRAP_FIRQ_4 = 17 +, RTE_TRAP_FIRQ_5 = 18 +, RTE_TRAP_FIRQ_6 = 19 +,
    +  RTE_TRAP_FIRQ_7 = 20 +, RTE_TRAP_FIRQ_8 = 21 +, RTE_TRAP_FIRQ_9 = 22 +, RTE_TRAP_FIRQ_10 = 23 +,
    +  RTE_TRAP_FIRQ_11 = 24 +, RTE_TRAP_FIRQ_12 = 25 +, RTE_TRAP_FIRQ_13 = 26 +, RTE_TRAP_FIRQ_14 = 27 +,
    +  RTE_TRAP_FIRQ_15 = 28 +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    void neorv32_rte_setup (void)
     
    int neorv32_rte_handler_install (int id, void(*handler)(void))
     
    int neorv32_rte_handler_uninstall (int id)
     
    void neorv32_rte_debug_handler (void)
     
    uint32_t neorv32_rte_context_get (int x)
     
    void neorv32_rte_context_put (int x, uint32_t data)
     
    void neorv32_rte_print_hw_config (void)
     
    void neorv32_rte_print_hw_version (void)
     
    void neorv32_rte_print_about (void)
     
    void neorv32_rte_print_logo (void)
     
    void neorv32_rte_print_license (void)
     
    +

    Detailed Description

    +

    NEORV32 Runtime Environment.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_RTE_NUM_TRAPS

    + +
    +
    + + + + +
    #define NEORV32_RTE_NUM_TRAPS   29
    +
    +

    NEORV32 runtime environment: Number of available traps.

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_RTE_TRAP_enum

    + +
    +
    + + + + +
    enum NEORV32_RTE_TRAP_enum
    +
    +

    NEORV32 runtime environment trap IDs.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    RTE_TRAP_I_ACCESS 

    Instruction access fault

    +
    RTE_TRAP_I_ILLEGAL 

    Illegal instruction

    +
    RTE_TRAP_I_MISALIGNED 

    Instruction address misaligned

    +
    RTE_TRAP_BREAKPOINT 

    Breakpoint (EBREAK instruction)

    +
    RTE_TRAP_L_MISALIGNED 

    Load address misaligned

    +
    RTE_TRAP_L_ACCESS 

    Load access fault

    +
    RTE_TRAP_S_MISALIGNED 

    Store address misaligned

    +
    RTE_TRAP_S_ACCESS 

    Store access fault

    +
    RTE_TRAP_UENV_CALL 

    Environment call from user mode (ECALL instruction)

    +
    RTE_TRAP_MENV_CALL 

    Environment call from machine mode (ECALL instruction)

    +
    RTE_TRAP_MSI 

    Machine software interrupt

    +
    RTE_TRAP_MTI 

    Machine timer interrupt

    +
    RTE_TRAP_MEI 

    Machine external interrupt

    +
    RTE_TRAP_FIRQ_0 

    Fast interrupt channel 0

    +
    RTE_TRAP_FIRQ_1 

    Fast interrupt channel 1

    +
    RTE_TRAP_FIRQ_2 

    Fast interrupt channel 2

    +
    RTE_TRAP_FIRQ_3 

    Fast interrupt channel 3

    +
    RTE_TRAP_FIRQ_4 

    Fast interrupt channel 4

    +
    RTE_TRAP_FIRQ_5 

    Fast interrupt channel 5

    +
    RTE_TRAP_FIRQ_6 

    Fast interrupt channel 6

    +
    RTE_TRAP_FIRQ_7 

    Fast interrupt channel 7

    +
    RTE_TRAP_FIRQ_8 

    Fast interrupt channel 8

    +
    RTE_TRAP_FIRQ_9 

    Fast interrupt channel 9

    +
    RTE_TRAP_FIRQ_10 

    Fast interrupt channel 10

    +
    RTE_TRAP_FIRQ_11 

    Fast interrupt channel 11

    +
    RTE_TRAP_FIRQ_12 

    Fast interrupt channel 12

    +
    RTE_TRAP_FIRQ_13 

    Fast interrupt channel 13

    +
    RTE_TRAP_FIRQ_14 

    Fast interrupt channel 14

    +
    RTE_TRAP_FIRQ_15 

    Fast interrupt channel 15

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_rte_context_get()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_rte_context_get (int x)
    +
    +

    NEORV32 runtime environment (RTE): Read register from application context (on stack).

    +
    Parameters
    + + +
    [in]xRegister number (0..31, corresponds to register x0..x31).
    +
    +
    +
    Returns
    Content of register x.
    + +
    +
    + +

    ◆ neorv32_rte_context_put()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_rte_context_put (int x,
    uint32_t data )
    +
    +

    NEORV32 runtime environment (RTE): Write register to application context (on stack).

    +
    Parameters
    + + + +
    [in]xRegister number (0..31, corresponds to register x0..x31).
    [in]dataData to be written to register x.
    +
    +
    + +
    +
    + +

    ◆ neorv32_rte_debug_handler()

    + +
    +
    + + + + + + + +
    void neorv32_rte_debug_handler (void )
    +
    +

    NEORV32 runtime environment (RTE): Debug trap handler, printing information via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_handler_install()

    + +
    +
    + + + + + + + + + + + +
    int neorv32_rte_handler_install (int id,
    void(* handler )(void) )
    +
    +

    NEORV32 runtime environment (RTE): Install trap handler function (second-level trap handler).

    +
    Parameters
    + + + +
    [in]idIdentifier (type) of the targeted trap. See NEORV32_RTE_TRAP_enum.
    [in]handlerThe actual handler function for the specified trap (function MUST be of type "void function(void);").
    +
    +
    +
    Returns
    0 if success, -1 if error (invalid id or targeted trap not supported).
    + +
    +
    + +

    ◆ neorv32_rte_handler_uninstall()

    + +
    +
    + + + + + + + +
    int neorv32_rte_handler_uninstall (int id)
    +
    +

    NEORV32 runtime environment (RTE): Uninstall trap handler function from NEORV32 runtime environment, which was previously installed via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)).

    +
    Parameters
    + + +
    [in]idIdentifier (type) of the targeted trap. See NEORV32_RTE_TRAP_enum.
    +
    +
    +
    Returns
    0 if success, -1 if error (invalid id or targeted trap not supported).
    + +
    +
    + +

    ◆ neorv32_rte_print_about()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_about (void )
    +
    +

    NEORV32 runtime environment (RTE): Print project info via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_print_hw_config()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_hw_config (void )
    +
    +

    NEORV32 runtime environment (RTE): Print hardware configuration information via UART0.

    +
    Warning
    This function overrides several CSR, CNT and HPM CSRs!
    + +
    +
    + +

    ◆ neorv32_rte_print_hw_version()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_hw_version (void )
    +
    +

    NEORV32 runtime environment (RTE): Print the processor version in human-readable format via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_print_license()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_license (void )
    +
    +

    NEORV32 runtime environment (RTE): Print project license via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_print_logo()

    + +
    +
    + + + + + + + +
    void neorv32_rte_print_logo (void )
    +
    +

    NEORV32 runtime environment (RTE): Print project logo via UART0.

    + +
    +
    + +

    ◆ neorv32_rte_setup()

    + +
    +
    + + + + + + + +
    void neorv32_rte_setup (void )
    +
    +

    NEORV32 runtime environment (RTE): Setup RTE.

    +
    Note
    This function installs a debug handler for ALL trap sources, which gives detailed information about the trap. Actual handlers can be installed afterwards via neorv32_rte_handler_install(uint8_t id, void (*handler)(void)).
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__rte_8h_source.html b/sw/neorv32__rte_8h_source.html new file mode 100644 index 0000000000..89dfdcf0a8 --- /dev/null +++ b/sw/neorv32__rte_8h_source.html @@ -0,0 +1,212 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_rte.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_rte.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_rte_h
    +
    17#define neorv32_rte_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    25#define NEORV32_RTE_NUM_TRAPS 29
    +
    26
    +
    27
    +
    28/**********************************************************************/
    + +
    62
    +
    63
    +
    64/**********************************************************************/
    +
    68void neorv32_rte_setup(void);
    +
    69int neorv32_rte_handler_install(int id, void (*handler)(void));
    + + +
    72uint32_t neorv32_rte_context_get(int x);
    +
    73void neorv32_rte_context_put(int x, uint32_t data);
    +
    74
    + + + +
    78void neorv32_rte_print_logo(void);
    + +
    83#endif // neorv32_rte_h
    +
    void neorv32_rte_print_hw_config(void)
    Definition neorv32_rte.c:387
    +
    int neorv32_rte_handler_uninstall(int id)
    Definition neorv32_rte.c:85
    +
    void neorv32_rte_print_logo(void)
    Definition neorv32_rte.c:711
    +
    int neorv32_rte_handler_install(int id, void(*handler)(void))
    Definition neorv32_rte.c:65
    +
    void neorv32_rte_setup(void)
    Definition neorv32_rte.c:38
    +
    void neorv32_rte_debug_handler(void)
    Definition neorv32_rte.c:297
    +
    uint32_t neorv32_rte_context_get(int x)
    Definition neorv32_rte.c:260
    +
    void neorv32_rte_print_about(void)
    Definition neorv32_rte.c:696
    +
    void neorv32_rte_print_hw_version(void)
    Definition neorv32_rte.c:663
    +
    void neorv32_rte_print_license(void)
    Definition neorv32_rte.c:753
    +
    NEORV32_RTE_TRAP_enum
    Definition neorv32_rte.h:31
    +
    @ RTE_TRAP_FIRQ_5
    Definition neorv32_rte.h:50
    +
    @ RTE_TRAP_UENV_CALL
    Definition neorv32_rte.h:40
    +
    @ RTE_TRAP_FIRQ_15
    Definition neorv32_rte.h:60
    +
    @ RTE_TRAP_FIRQ_2
    Definition neorv32_rte.h:47
    +
    @ RTE_TRAP_FIRQ_9
    Definition neorv32_rte.h:54
    +
    @ RTE_TRAP_FIRQ_8
    Definition neorv32_rte.h:53
    +
    @ RTE_TRAP_BREAKPOINT
    Definition neorv32_rte.h:35
    +
    @ RTE_TRAP_I_ILLEGAL
    Definition neorv32_rte.h:33
    +
    @ RTE_TRAP_FIRQ_3
    Definition neorv32_rte.h:48
    +
    @ RTE_TRAP_FIRQ_13
    Definition neorv32_rte.h:58
    +
    @ RTE_TRAP_FIRQ_7
    Definition neorv32_rte.h:52
    +
    @ RTE_TRAP_S_MISALIGNED
    Definition neorv32_rte.h:38
    +
    @ RTE_TRAP_FIRQ_4
    Definition neorv32_rte.h:49
    +
    @ RTE_TRAP_L_MISALIGNED
    Definition neorv32_rte.h:36
    +
    @ RTE_TRAP_I_ACCESS
    Definition neorv32_rte.h:32
    +
    @ RTE_TRAP_L_ACCESS
    Definition neorv32_rte.h:37
    +
    @ RTE_TRAP_S_ACCESS
    Definition neorv32_rte.h:39
    +
    @ RTE_TRAP_FIRQ_14
    Definition neorv32_rte.h:59
    +
    @ RTE_TRAP_FIRQ_1
    Definition neorv32_rte.h:46
    +
    @ RTE_TRAP_FIRQ_0
    Definition neorv32_rte.h:45
    +
    @ RTE_TRAP_FIRQ_11
    Definition neorv32_rte.h:56
    +
    @ RTE_TRAP_FIRQ_6
    Definition neorv32_rte.h:51
    +
    @ RTE_TRAP_MTI
    Definition neorv32_rte.h:43
    +
    @ RTE_TRAP_MEI
    Definition neorv32_rte.h:44
    +
    @ RTE_TRAP_MSI
    Definition neorv32_rte.h:42
    +
    @ RTE_TRAP_FIRQ_10
    Definition neorv32_rte.h:55
    +
    @ RTE_TRAP_MENV_CALL
    Definition neorv32_rte.h:41
    +
    @ RTE_TRAP_FIRQ_12
    Definition neorv32_rte.h:57
    +
    @ RTE_TRAP_I_MISALIGNED
    Definition neorv32_rte.h:34
    +
    void neorv32_rte_context_put(int x, uint32_t data)
    Definition neorv32_rte.c:280
    +
    + + +
    + + diff --git a/sw/neorv32__sdi_8c.html b/sw/neorv32__sdi_8c.html new file mode 100644 index 0000000000..a761fda9fd --- /dev/null +++ b/sw/neorv32__sdi_8c.html @@ -0,0 +1,301 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_sdi.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_sdi.c File Reference
    +
    +
    + +

    Serial data interface controller (SDI) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_sdi_available (void)
     
    void neorv32_sdi_setup (uint32_t irq_mask)
     
    void neorv32_sdi_disable (void)
     
    void neorv32_sdi_enable (void)
     
    int neorv32_sdi_get_fifo_depth (void)
     
    int neorv32_sdi_put (uint8_t data)
     
    int neorv32_sdi_get (uint8_t *data)
     
    int neorv32_sdi_check_cs (void)
     
    +

    Detailed Description

    +

    Serial data interface controller (SDI) HW driver source file.

    +
    Note
    These functions should only be used if the SDI unit was synthesized (IO_SDI_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_sdi_available()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_available (void )
    +
    +

    Check if SDI unit was synthesized.

    +
    Returns
    0 if SDI was not synthesized, 1 if SPI is available.
    + +
    +
    + +

    ◆ neorv32_sdi_check_cs()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_check_cs (void )
    +
    +

    Get status of chip-select line.

    +
    Returns
    1 if chip-select line is enabled/active (driven low), 0 otherwise.
    + +
    +
    + +

    ◆ neorv32_sdi_disable()

    + +
    +
    + + + + + + + +
    void neorv32_sdi_disable (void )
    +
    +

    Disable SDI controller.

    + +
    +
    + +

    ◆ neorv32_sdi_enable()

    + +
    +
    + + + + + + + +
    void neorv32_sdi_enable (void )
    +
    +

    Enable SDI controller.

    + +
    +
    + +

    ◆ neorv32_sdi_get()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_get (uint8_t * data)
    +
    +

    Get data from SDI input FIFO.

    +
    Parameters
    + + +
    [in,out]Pointerfro data byte read from RX FIFO.
    +
    +
    +
    Returns
    -1 if RX FIFO is empty, 0 if success.
    + +
    +
    + +

    ◆ neorv32_sdi_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_get_fifo_depth (void )
    +
    +

    Get SDI FIFO depth.

    +
    Returns
    FIFO depth (number of entries), 1 if no FIFO implemented
    + +
    +
    + +

    ◆ neorv32_sdi_put()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_put (uint8_t data)
    +
    +

    Push data to SDI output FIFO.

    +
    Parameters
    + + +
    [in]dataByte to push into TX FIFO.
    +
    +
    +
    Returns
    -1 if TX FIFO is full, 0 if success.
    + +
    +
    + +

    ◆ neorv32_sdi_setup()

    + +
    +
    + + + + + + + +
    void neorv32_sdi_setup (uint32_t irq_mask)
    +
    +

    Reset, enable and configure SDI controller. The SDI control register bits are listed in NEORV32_SDI_CTRL_enum.

    +
    Parameters
    + + +
    [in]irq_maskInterrupt configuration mask (CTRL's irq_* bits).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__sdi_8h.html b/sw/neorv32__sdi_8h.html new file mode 100644 index 0000000000..99c820be8f --- /dev/null +++ b/sw/neorv32__sdi_8h.html @@ -0,0 +1,399 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_sdi.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_sdi.h File Reference
    +
    +
    + +

    Serial data interface controller (SPPI) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_sdi_t
     
    + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_sdi_available (void)
     
    void neorv32_sdi_setup (uint32_t irq_mask)
     
    void neorv32_sdi_disable (void)
     
    void neorv32_sdi_enable (void)
     
    int neorv32_sdi_get_fifo_depth (void)
     
    int neorv32_sdi_put (uint8_t data)
     
    int neorv32_sdi_get (uint8_t *data)
     
    int neorv32_sdi_check_cs (void)
     
    + + + + + +

    IO Device: Serial Data Interface (SDI)

    #define NEORV32_SDI   ((neorv32_sdi_t*) (NEORV32_SDI_BASE))
     
    enum  NEORV32_SDI_CTRL_enum {
    +  SDI_CTRL_EN = 0 +, SDI_CTRL_FIFO_LSB = 4 +, SDI_CTRL_FIFO_MSB = 7 +, SDI_CTRL_IRQ_RX_AVAIL = 15 +,
    +  SDI_CTRL_IRQ_RX_HALF = 16 +, SDI_CTRL_IRQ_RX_FULL = 17 +, SDI_CTRL_IRQ_TX_EMPTY = 18 +, SDI_CTRL_IRQ_TX_NHALF = 19 +,
    +  SDI_CTRL_RX_AVAIL = 23 +, SDI_CTRL_RX_HALF = 24 +, SDI_CTRL_RX_FULL = 25 +, SDI_CTRL_TX_EMPTY = 26 +,
    +  SDI_CTRL_TX_NHALF = 27 +, SDI_CTRL_TX_FULL = 28 +, SDI_CTRL_CS_ACTIVE = 31 +
    + }
     
    +

    Detailed Description

    +

    Serial data interface controller (SPPI) HW driver header file.

    +
    Note
    These functions should only be used if the SDI unit was synthesized (IO_SDI_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_SDI

    + +
    +
    + + + + +
    #define NEORV32_SDI   ((neorv32_sdi_t*) (NEORV32_SDI_BASE))
    +
    +

    SDI module hardware access (neorv32_sdi_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_SDI_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_SDI_CTRL_enum
    +
    +

    SDI control register bits

    + + + + + + + + + + + + + + + + +
    Enumerator
    SDI_CTRL_EN 

    SDI control register(0) (r/w): SID module enable

    +
    SDI_CTRL_FIFO_LSB 

    SDI control register(4) (r/-): log2 of SDI FIFO size, LSB

    +
    SDI_CTRL_FIFO_MSB 

    SDI control register(7) (r/-): log2 of SDI FIFO size, MSB

    +
    SDI_CTRL_IRQ_RX_AVAIL 

    SDI control register(15) (r/w): IRQ when RX FIFO not empty

    +
    SDI_CTRL_IRQ_RX_HALF 

    SDI control register(16) (r/w): IRQ when RX FIFO at least half full

    +
    SDI_CTRL_IRQ_RX_FULL 

    SDI control register(17) (r/w): IRQ when RX FIFO full

    +
    SDI_CTRL_IRQ_TX_EMPTY 

    SDI control register(18) (r/w): IRQ when TX FIFO empty

    +
    SDI_CTRL_IRQ_TX_NHALF 

    SDI control register(19) (r/w): IRQ when TX FIFO not at least half full

    +
    SDI_CTRL_RX_AVAIL 

    SDI control register(23) (r/-): RX FIFO not empty

    +
    SDI_CTRL_RX_HALF 

    SDI control register(24) (r/-): RX FIFO at least half full

    +
    SDI_CTRL_RX_FULL 

    SDI control register(25) (r/-): RX FIFO full

    +
    SDI_CTRL_TX_EMPTY 

    SDI control register(26) (r/-): TX FIFO empty

    +
    SDI_CTRL_TX_NHALF 

    SDI control register(27) (r/-): TX FIFO not at least half full

    +
    SDI_CTRL_TX_FULL 

    SDI control register(28) (r/-): TX FIFO full

    +
    SDI_CTRL_CS_ACTIVE 

    SDI control register(31) (r/-): Chip-select is active when set

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_sdi_available()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_available (void )
    +
    +

    Check if SDI unit was synthesized.

    +
    Returns
    0 if SDI was not synthesized, 1 if SPI is available.
    + +
    +
    + +

    ◆ neorv32_sdi_check_cs()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_check_cs (void )
    +
    +

    Get status of chip-select line.

    +
    Returns
    1 if chip-select line is enabled/active (driven low), 0 otherwise.
    + +
    +
    + +

    ◆ neorv32_sdi_disable()

    + +
    +
    + + + + + + + +
    void neorv32_sdi_disable (void )
    +
    +

    Disable SDI controller.

    + +
    +
    + +

    ◆ neorv32_sdi_enable()

    + +
    +
    + + + + + + + +
    void neorv32_sdi_enable (void )
    +
    +

    Enable SDI controller.

    + +
    +
    + +

    ◆ neorv32_sdi_get()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_get (uint8_t * data)
    +
    +

    Get data from SDI input FIFO.

    +
    Parameters
    + + +
    [in,out]Pointerfro data byte read from RX FIFO.
    +
    +
    +
    Returns
    -1 if RX FIFO is empty, 0 if success.
    + +
    +
    + +

    ◆ neorv32_sdi_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_get_fifo_depth (void )
    +
    +

    Get SDI FIFO depth.

    +
    Returns
    FIFO depth (number of entries), 1 if no FIFO implemented
    + +
    +
    + +

    ◆ neorv32_sdi_put()

    + +
    +
    + + + + + + + +
    int neorv32_sdi_put (uint8_t data)
    +
    +

    Push data to SDI output FIFO.

    +
    Parameters
    + + +
    [in]dataByte to push into TX FIFO.
    +
    +
    +
    Returns
    -1 if TX FIFO is full, 0 if success.
    + +
    +
    + +

    ◆ neorv32_sdi_setup()

    + +
    +
    + + + + + + + +
    void neorv32_sdi_setup (uint32_t irq_mask)
    +
    +

    Reset, enable and configure SDI controller. The SDI control register bits are listed in NEORV32_SDI_CTRL_enum.

    +
    Parameters
    + + +
    [in]irq_maskInterrupt configuration mask (CTRL's irq_* bits).
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__sdi_8h_source.html b/sw/neorv32__sdi_8h_source.html new file mode 100644 index 0000000000..1b4ad04120 --- /dev/null +++ b/sw/neorv32__sdi_8h_source.html @@ -0,0 +1,183 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_sdi.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_sdi.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_sdi_h
    +
    19#define neorv32_sdi_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t DATA;
    + +
    +
    33
    +
    35#define NEORV32_SDI ((neorv32_sdi_t*) (NEORV32_SDI_BASE))
    +
    36
    + +
    62/**********************************************************************/
    +
    66int neorv32_sdi_available(void);
    +
    67void neorv32_sdi_setup(uint32_t irq_mask);
    +
    68void neorv32_sdi_disable(void);
    +
    69void neorv32_sdi_enable(void);
    + +
    71int neorv32_sdi_put(uint8_t data);
    +
    72int neorv32_sdi_get(uint8_t* data);
    +
    73int neorv32_sdi_check_cs(void);
    +
    77#endif // neorv32_sdi_h
    +
    int neorv32_sdi_check_cs(void)
    Definition neorv32_sdi.c:126
    +
    void neorv32_sdi_setup(uint32_t irq_mask)
    Definition neorv32_sdi.c:43
    +
    int neorv32_sdi_get(uint8_t *data)
    Definition neorv32_sdi.c:109
    +
    int neorv32_sdi_available(void)
    Definition neorv32_sdi.c:26
    +
    void neorv32_sdi_enable(void)
    Definition neorv32_sdi.c:67
    +
    int neorv32_sdi_get_fifo_depth(void)
    Definition neorv32_sdi.c:78
    +
    void neorv32_sdi_disable(void)
    Definition neorv32_sdi.c:58
    +
    NEORV32_SDI_CTRL_enum
    Definition neorv32_sdi.h:38
    +
    @ SDI_CTRL_IRQ_RX_FULL
    Definition neorv32_sdi.h:46
    +
    @ SDI_CTRL_IRQ_RX_AVAIL
    Definition neorv32_sdi.h:44
    +
    @ SDI_CTRL_RX_FULL
    Definition neorv32_sdi.h:52
    +
    @ SDI_CTRL_IRQ_TX_EMPTY
    Definition neorv32_sdi.h:47
    +
    @ SDI_CTRL_IRQ_TX_NHALF
    Definition neorv32_sdi.h:48
    +
    @ SDI_CTRL_FIFO_LSB
    Definition neorv32_sdi.h:41
    +
    @ SDI_CTRL_TX_EMPTY
    Definition neorv32_sdi.h:53
    +
    @ SDI_CTRL_FIFO_MSB
    Definition neorv32_sdi.h:42
    +
    @ SDI_CTRL_RX_HALF
    Definition neorv32_sdi.h:51
    +
    @ SDI_CTRL_CS_ACTIVE
    Definition neorv32_sdi.h:57
    +
    @ SDI_CTRL_TX_FULL
    Definition neorv32_sdi.h:55
    +
    @ SDI_CTRL_RX_AVAIL
    Definition neorv32_sdi.h:50
    +
    @ SDI_CTRL_TX_NHALF
    Definition neorv32_sdi.h:54
    +
    @ SDI_CTRL_IRQ_RX_HALF
    Definition neorv32_sdi.h:45
    +
    @ SDI_CTRL_EN
    Definition neorv32_sdi.h:39
    +
    int neorv32_sdi_put(uint8_t data)
    Definition neorv32_sdi.c:91
    +
    Definition neorv32_sdi.h:29
    +
    uint32_t DATA
    Definition neorv32_sdi.h:31
    +
    uint32_t CTRL
    Definition neorv32_sdi.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__slink_8c.html b/sw/neorv32__slink_8c.html new file mode 100644 index 0000000000..f32eca78be --- /dev/null +++ b/sw/neorv32__slink_8c.html @@ -0,0 +1,485 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_slink.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_slink.c File Reference
    +
    +
    + +

    Stream Link Interface HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_slink_available (void)
     
    void neorv32_slink_setup (uint32_t rx_irq, uint32_t tx_irq)
     
    void neorv32_slink_rx_clear (void)
     
    void neorv32_slink_tx_clear (void)
     
    int neorv32_slink_get_rx_fifo_depth (void)
     
    int neorv32_slink_get_tx_fifo_depth (void)
     
    uint32_t neorv32_slink_get (void)
     
    uint32_t neorv32_slink_check_last (void)
     
    void neorv32_slink_set_dst (uint32_t dst)
     
    uint32_t neorv32_slink_get_src (void)
     
    void neorv32_slink_put (uint32_t tx_data)
     
    void neorv32_slink_put_last (uint32_t tx_data)
     
    int neorv32_slink_rx_status (void)
     
    int neorv32_slink_tx_status (void)
     
    +

    Detailed Description

    +

    Stream Link Interface HW driver source file.

    +
    Note
    These functions should only be used if the SLINK unit was synthesized (IO_SLINK_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_slink_available()

    + +
    +
    + + + + + + + +
    int neorv32_slink_available (void )
    +
    +

    Check if stream link interface was synthesized.

    +
    Returns
    0 if SLINK was not synthesized, 1 if SLINK is available.
    + +
    +
    + +

    ◆ neorv32_slink_check_last()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_slink_check_last (void )
    +
    +inline
    +
    +

    Check if last RX word has "end-of-stream" delimiter.

    +
    Note
    This needs has to be called AFTER reading the actual data word using neorv32_slink_get(void).
    +
    Returns
    0 if not end of stream, !=0 if end of stream.
    + +
    +
    + +

    ◆ neorv32_slink_get()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_slink_get (void )
    +
    +inline
    +
    +

    Read data from RX link (non-blocking)

    +
    Returns
    Data received from link.
    + +
    +
    + +

    ◆ neorv32_slink_get_rx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_slink_get_rx_fifo_depth (void )
    +
    +

    Get FIFO depth of RX link.

    +
    Returns
    FIFO depth of RX link (1..32768).
    + +
    +
    + +

    ◆ neorv32_slink_get_src()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_slink_get_src (void )
    +
    +inline
    +
    +

    Get RX link routing source

    +
    Note
    This needs has to be called AFTER reading the actual data word using neorv32_slink_get(void).
    +
    Returns
    4-bit source routing ID.
    + +
    +
    + +

    ◆ neorv32_slink_get_tx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_slink_get_tx_fifo_depth (void )
    +
    +

    Get FIFO depth of TX link.

    +
    Returns
    FIFO depth of TX link (1..32768).
    + +
    +
    + +

    ◆ neorv32_slink_put()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_slink_put (uint32_t tx_data)
    +
    +inline
    +
    +

    Write data to TX link (non-blocking)

    +
    Parameters
    + + +
    [in]tx_dataData to send to link.
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_put_last()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_slink_put_last (uint32_t tx_data)
    +
    +inline
    +
    +

    Write data to TX link (non-blocking) and set "last" (end-of-stream) delimiter.

    +
    Parameters
    + + +
    [in]tx_dataData to send to link.
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_rx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_slink_rx_clear (void )
    +
    +

    Clear RX FIFO.

    + +
    +
    + +

    ◆ neorv32_slink_rx_status()

    + +
    +
    + + + + + + + +
    int neorv32_slink_rx_status (void )
    +
    +

    Get RX link FIFO status.

    +
    Returns
    FIFO status NEORV32_SLINK_STATUS_enum.
    + +
    +
    + +

    ◆ neorv32_slink_set_dst()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_slink_set_dst (uint32_t dst)
    +
    +inline
    +
    +

    Set TX link routing destination

    +
    Parameters
    + + +
    [in]dstRouting destination ID (4-bit, LSB-aligned).
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_setup()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_slink_setup (uint32_t rx_irq,
    uint32_t tx_irq )
    +
    +

    Reset, enable and configure SLINK.

    +
    Parameters
    + + + +
    [in]rx_irqConfigure RX interrupt conditions (NEORV32_SLINK_CTRL_enum).
    [in]tx_irqConfigure TX interrupt conditions (NEORV32_SLINK_CTRL_enum).
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_tx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_slink_tx_clear (void )
    +
    +

    Clear TX FIFO.

    + +
    +
    + +

    ◆ neorv32_slink_tx_status()

    + +
    +
    + + + + + + + +
    int neorv32_slink_tx_status (void )
    +
    +

    Get TX link FIFO status.

    +
    Returns
    FIFO status NEORV32_SLINK_STATUS_enum.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__slink_8h.html b/sw/neorv32__slink_8h.html new file mode 100644 index 0000000000..f4919ff054 --- /dev/null +++ b/sw/neorv32__slink_8h.html @@ -0,0 +1,657 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_slink.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_slink.h File Reference
    +
    +
    + +

    Stream Link Interface HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_slink_t
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_slink_available (void)
     
    void neorv32_slink_setup (uint32_t rx_irq, uint32_t tx_irq)
     
    void neorv32_slink_rx_clear (void)
     
    void neorv32_slink_tx_clear (void)
     
    int neorv32_slink_get_rx_fifo_depth (void)
     
    int neorv32_slink_get_tx_fifo_depth (void)
     
    uint32_t neorv32_slink_get (void)
     
    uint32_t neorv32_slink_check_last (void)
     
    void neorv32_slink_set_dst (uint32_t dst)
     
    uint32_t neorv32_slink_get_src (void)
     
    void neorv32_slink_put (uint32_t tx_data)
     
    void neorv32_slink_put_last (uint32_t tx_data)
     
    int neorv32_slink_rx_status (void)
     
    int neorv32_slink_tx_status (void)
     
    + + + + + + + + + +

    IO Device: Stream Link Interface (SLINK)

    #define NEORV32_SLINK   ((neorv32_slink_t*) (NEORV32_SLINK_BASE))
     
    enum  NEORV32_SLINK_CTRL_enum {
    +  SLINK_CTRL_EN = 0 +, SLINK_CTRL_RX_CLR = 1 +, SLINK_CTRL_TX_CLR = 2 +, SLINK_CTRL_RX_LAST = 4 +,
    +  SLINK_CTRL_RX_EMPTY = 8 +, SLINK_CTRL_RX_HALF = 9 +, SLINK_CTRL_RX_FULL = 10 +, SLINK_CTRL_TX_EMPTY = 11 +,
    +  SLINK_CTRL_TX_HALF = 12 +, SLINK_CTRL_TX_FULL = 13 +, SLINK_CTRL_IRQ_RX_NEMPTY = 16 +, SLINK_CTRL_IRQ_RX_HALF = 17 +,
    +  SLINK_CTRL_IRQ_RX_FULL = 18 +, SLINK_CTRL_IRQ_TX_EMPTY = 19 +, SLINK_CTRL_IRQ_TX_NHALF = 20 +, SLINK_CTRL_IRQ_TX_NFULL = 21 +,
    +  SLINK_CTRL_RX_FIFO_LSB = 24 +, SLINK_CTRL_RX_FIFO_MSB = 27 +, SLINK_CTRL_TX_FIFO_LSB = 28 +, SLINK_CTRL_TX_FIFO_MSB = 31 +
    + }
     
    enum  NEORV32_SLINK_ROUTE_enum { SLINK_ROUTE_DST_LSB = 0 +, SLINK_ROUTE_DST_MSB = 3 +, SLINK_ROUTE_SRC_LSB = 4 +, SLINK_ROUTE_SRC_MSB = 7 + }
     
    enum  NEORV32_SLINK_STATUS_enum { SLINK_FIFO_EMPTY = 0 +, SLINK_FIFO_HALF = 1 +, SLINK_FIFO_FULL = 2 + }
     
    +

    Detailed Description

    +

    Stream Link Interface HW driver header file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_SLINK

    + +
    +
    + + + + +
    #define NEORV32_SLINK   ((neorv32_slink_t*) (NEORV32_SLINK_BASE))
    +
    +

    SLINK module hardware access (neorv32_slink_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_SLINK_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_SLINK_CTRL_enum
    +
    +

    SLINK control register bits

    + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    SLINK_CTRL_EN 

    SLINK control register(0) (r/w): SLINK unit enable

    +
    SLINK_CTRL_RX_CLR 

    SLINK control register(1) (-/w): Clear RX FIFO, auto-clears

    +
    SLINK_CTRL_TX_CLR 

    SLINK control register(2) (-/w): Clear TX FIFO, auto-clears

    +
    SLINK_CTRL_RX_LAST 

    SLINK control register(4) (r/-): RX end-of-stream delimiter

    +
    SLINK_CTRL_RX_EMPTY 

    SLINK control register(8) (r/-): RX FIFO empty

    +
    SLINK_CTRL_RX_HALF 

    SLINK control register(9) (r/-): RX FIFO at least half full

    +
    SLINK_CTRL_RX_FULL 

    SLINK control register(10) (r/-): RX FIFO full

    +
    SLINK_CTRL_TX_EMPTY 

    SLINK control register(11) (r/-): TX FIFO empty

    +
    SLINK_CTRL_TX_HALF 

    SLINK control register(12) (r/-): TX FIFO at least half full

    +
    SLINK_CTRL_TX_FULL 

    SLINK control register(13) (r/-): TX FIFO full

    +
    SLINK_CTRL_IRQ_RX_NEMPTY 

    SLINK control register(16) (r/w): RX interrupt if RX FIFO not empty

    +
    SLINK_CTRL_IRQ_RX_HALF 

    SLINK control register(17) (r/w): RX interrupt if RX FIFO at least half full

    +
    SLINK_CTRL_IRQ_RX_FULL 

    SLINK control register(18) (r/w): RX interrupt if RX FIFO full

    +
    SLINK_CTRL_IRQ_TX_EMPTY 

    SLINK control register(19) (r/w): TX interrupt if TX FIFO empty

    +
    SLINK_CTRL_IRQ_TX_NHALF 

    SLINK control register(20) (r/w): TX interrupt if TX FIFO not at least half full

    +
    SLINK_CTRL_IRQ_TX_NFULL 

    SLINK control register(21) (r/w): TX interrupt if TX FIFO not full

    +
    SLINK_CTRL_RX_FIFO_LSB 

    SLINK control register(24) (r/-): log2(RX FIFO size) LSB

    +
    SLINK_CTRL_RX_FIFO_MSB 

    SLINK control register(27) (r/-): log2(RX FIFO size) MSB

    +
    SLINK_CTRL_TX_FIFO_LSB 

    SLINK control register(28) (r/-): log2(TX FIFO size) LSB

    +
    SLINK_CTRL_TX_FIFO_MSB 

    SLINK control register(31) (r/-): log2(TX FIFO size) MSB

    +
    + +
    +
    + +

    ◆ NEORV32_SLINK_ROUTE_enum

    + +
    +
    + + + + +
    enum NEORV32_SLINK_ROUTE_enum
    +
    +

    ROUTE register bits

    + + + + + +
    Enumerator
    SLINK_ROUTE_DST_LSB 

    SLINK routing register(0) (r/w): Destination routing information LSB

    +
    SLINK_ROUTE_DST_MSB 

    SLINK routing register(3) (r/w): Destination routing information MSB

    +
    SLINK_ROUTE_SRC_LSB 

    SLINK routing register(4) (r/-): Source routing information LSB

    +
    SLINK_ROUTE_SRC_MSB 

    SLINK routing register(7) (r/-): Source routing information MSB

    +
    + +
    +
    + +

    ◆ NEORV32_SLINK_STATUS_enum

    + +
    +
    + + + + +
    enum NEORV32_SLINK_STATUS_enum
    +
    +

    SLINK module hardware access (neorv32_slink_t)

    + + + + +
    Enumerator
    SLINK_FIFO_EMPTY 

    FIFO is empty

    +
    SLINK_FIFO_HALF 

    FIFO is at least half full

    +
    SLINK_FIFO_FULL 

    FIFO is full

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_slink_available()

    + +
    +
    + + + + + + + +
    int neorv32_slink_available (void )
    +
    +

    Check if stream link interface was synthesized.

    +
    Returns
    0 if SLINK was not synthesized, 1 if SLINK is available.
    + +
    +
    + +

    ◆ neorv32_slink_check_last()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_slink_check_last (void )
    +
    +inline
    +
    +

    Check if last RX word has "end-of-stream" delimiter.

    +
    Note
    This needs has to be called AFTER reading the actual data word using neorv32_slink_get(void).
    +
    Returns
    0 if not end of stream, !=0 if end of stream.
    + +
    +
    + +

    ◆ neorv32_slink_get()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_slink_get (void )
    +
    +inline
    +
    +

    Read data from RX link (non-blocking)

    +
    Returns
    Data received from link.
    + +
    +
    + +

    ◆ neorv32_slink_get_rx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_slink_get_rx_fifo_depth (void )
    +
    +

    Get FIFO depth of RX link.

    +
    Returns
    FIFO depth of RX link (1..32768).
    + +
    +
    + +

    ◆ neorv32_slink_get_src()

    + +
    +
    + + + + + +
    + + + + + + + +
    uint32_t neorv32_slink_get_src (void )
    +
    +inline
    +
    +

    Get RX link routing source

    +
    Note
    This needs has to be called AFTER reading the actual data word using neorv32_slink_get(void).
    +
    Returns
    4-bit source routing ID.
    + +
    +
    + +

    ◆ neorv32_slink_get_tx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_slink_get_tx_fifo_depth (void )
    +
    +

    Get FIFO depth of TX link.

    +
    Returns
    FIFO depth of TX link (1..32768).
    + +
    +
    + +

    ◆ neorv32_slink_put()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_slink_put (uint32_t tx_data)
    +
    +inline
    +
    +

    Write data to TX link (non-blocking)

    +
    Parameters
    + + +
    [in]tx_dataData to send to link.
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_put_last()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_slink_put_last (uint32_t tx_data)
    +
    +inline
    +
    +

    Write data to TX link (non-blocking) and set "last" (end-of-stream) delimiter.

    +
    Parameters
    + + +
    [in]tx_dataData to send to link.
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_rx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_slink_rx_clear (void )
    +
    +

    Clear RX FIFO.

    + +
    +
    + +

    ◆ neorv32_slink_rx_status()

    + +
    +
    + + + + + + + +
    int neorv32_slink_rx_status (void )
    +
    +

    Get RX link FIFO status.

    +
    Returns
    FIFO status NEORV32_SLINK_STATUS_enum.
    + +
    +
    + +

    ◆ neorv32_slink_set_dst()

    + +
    +
    + + + + + +
    + + + + + + + +
    void neorv32_slink_set_dst (uint32_t dst)
    +
    +inline
    +
    +

    Set TX link routing destination

    +
    Parameters
    + + +
    [in]dstRouting destination ID (4-bit, LSB-aligned).
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_setup()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_slink_setup (uint32_t rx_irq,
    uint32_t tx_irq )
    +
    +

    Reset, enable and configure SLINK.

    +
    Parameters
    + + + +
    [in]rx_irqConfigure RX interrupt conditions (NEORV32_SLINK_CTRL_enum).
    [in]tx_irqConfigure TX interrupt conditions (NEORV32_SLINK_CTRL_enum).
    +
    +
    + +
    +
    + +

    ◆ neorv32_slink_tx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_slink_tx_clear (void )
    +
    +

    Clear TX FIFO.

    + +
    +
    + +

    ◆ neorv32_slink_tx_status()

    + +
    +
    + + + + + + + +
    int neorv32_slink_tx_status (void )
    +
    +

    Get TX link FIFO status.

    +
    Returns
    FIFO status NEORV32_SLINK_STATUS_enum.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__slink_8h_source.html b/sw/neorv32__slink_8h_source.html new file mode 100644 index 0000000000..b57bb0668f --- /dev/null +++ b/sw/neorv32__slink_8h_source.html @@ -0,0 +1,235 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_slink.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_slink.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_slink_h
    +
    17#define neorv32_slink_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    +
    27typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    28 uint32_t CTRL;
    +
    29 uint32_t ROUTE;
    +
    30 uint32_t DATA;
    +
    31 uint32_t DATA_LAST;
    + +
    +
    33
    +
    35#define NEORV32_SLINK ((neorv32_slink_t*) (NEORV32_SLINK_BASE))
    +
    36
    + +
    64
    + +
    72
    + +
    81/**********************************************************************/
    + +
    86void neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq);
    +
    87void neorv32_slink_rx_clear(void);
    +
    88void neorv32_slink_tx_clear(void);
    + + +
    91uint32_t neorv32_slink_get(void);
    +
    92uint32_t neorv32_slink_check_last(void);
    +
    93void neorv32_slink_set_dst(uint32_t dst);
    +
    94uint32_t neorv32_slink_get_src(void);
    +
    95void neorv32_slink_put(uint32_t tx_data);
    +
    96void neorv32_slink_put_last(uint32_t tx_data);
    + + +
    102#endif // neorv32_slink_h
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + diff --git a/sw/neorv32__spi_8c.html b/sw/neorv32__spi_8c.html new file mode 100644 index 0000000000..5b131572cb --- /dev/null +++ b/sw/neorv32__spi_8c.html @@ -0,0 +1,526 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_spi.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_spi.c File Reference
    +
    +
    + +

    Serial peripheral interface controller (SPI) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_spi_available (void)
     
    void neorv32_spi_setup (int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask)
     
    void neorv32_spi_highspeed_enable (void)
     
    void neorv32_spi_highspeed_disable (void)
     
    uint32_t neorv32_spi_get_clock_speed (void)
     
    void neorv32_spi_disable (void)
     
    void neorv32_spi_enable (void)
     
    int neorv32_spi_get_fifo_depth (void)
     
    void neorv32_spi_cs_en (int cs)
     
    void neorv32_spi_cs_dis (void)
     
    uint8_t neorv32_spi_trans (uint8_t tx_data)
     
    void neorv32_spi_put_nonblocking (uint8_t tx_data)
     
    uint8_t neorv32_spi_get_nonblocking (void)
     
    void neorv32_spi_cs_en_nonblocking (int cs)
     
    void neorv32_spi_cs_dis_nonblocking (void)
     
    int neorv32_spi_check_cs (void)
     
    int neorv32_spi_busy (void)
     
    +

    Detailed Description

    +

    Serial peripheral interface controller (SPI) HW driver source file.

    +
    Note
    These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_spi_available()

    + +
    +
    + + + + + + + +
    int neorv32_spi_available (void )
    +
    +

    Check if SPI unit was synthesized.

    +
    Returns
    0 if SPI was not synthesized, 1 if SPI is available.
    + +
    +
    + +

    ◆ neorv32_spi_busy()

    + +
    +
    + + + + + + + +
    int neorv32_spi_busy (void )
    +
    +

    Check if SPI transceiver is busy or TX FIFO not empty.

    +
    Returns
    0 if idle, 1 if busy
    + +
    +
    + +

    ◆ neorv32_spi_check_cs()

    + +
    +
    + + + + + + + +
    int neorv32_spi_check_cs (void )
    +
    +

    Check if any chip-select line is active.

    +
    Returns
    0 if no CS lines are active, 1 if at least one CS line is active.
    + +
    +
    + +

    ◆ neorv32_spi_cs_dis()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_dis (void )
    +
    +

    Deactivate currently active SPI chip select signal.

    +
    Note
    The SPI chip select output lines are HIGH when deactivated.
    +
    +This function is blocking.
    + +
    +
    + +

    ◆ neorv32_spi_cs_dis_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_dis_nonblocking (void )
    +
    +

    Deactivate currently active SPI chip select signal (non-blocking).

    +
    Note
    The SPI chip select output lines are HIGH when deactivated.
    + +
    +
    + +

    ◆ neorv32_spi_cs_en()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_en (int cs)
    +
    +

    Activate single SPI chip select signal.

    +
    Note
    The SPI chip select output lines are LOW when activated.
    +
    +This function is blocking.
    +
    Parameters
    + + +
    csChip select line to activate (0..7).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_cs_en_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_en_nonblocking (int cs)
    +
    +

    Activate single SPI chip select signal (non-blocking).

    +
    Note
    The SPI chip select output lines are LOW when activated.
    +
    Parameters
    + + +
    csChip select line to activate (0..7).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_disable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_disable (void )
    +
    +

    Disable SPI controller.

    + +
    +
    + +

    ◆ neorv32_spi_enable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_enable (void )
    +
    +

    Enable SPI controller.

    + +
    +
    + +

    ◆ neorv32_spi_get_clock_speed()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_spi_get_clock_speed (void )
    +
    +

    Get configured clock speed in Hz.

    +
    Returns
    Actual configured SPI clock speed in Hz.
    + +
    +
    + +

    ◆ neorv32_spi_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_spi_get_fifo_depth (void )
    +
    +

    Get SPI FIFO depth.

    +
    Returns
    FIFO depth (number of entries), zero if no FIFO implemented
    + +
    +
    + +

    ◆ neorv32_spi_get_nonblocking()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_spi_get_nonblocking (void )
    +
    +

    Get SPI RX data (non-blocking).

    +
    Returns
    Receive data (8-bit, LSB-aligned).
    + +
    +
    + +

    ◆ neorv32_spi_highspeed_disable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_highspeed_disable (void )
    +
    +

    Disable high-speed mode.

    + +
    +
    + +

    ◆ neorv32_spi_highspeed_enable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_highspeed_enable (void )
    +
    +

    Enable high-speed mode.

    + +
    +
    + +

    ◆ neorv32_spi_put_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_spi_put_nonblocking (uint8_t tx_data)
    +
    +

    Put SPI TX data (non-blocking).

    +
    Parameters
    + + +
    tx_dataTransmit data (8-bit, LSB-aligned).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_spi_setup (int prsc,
    int cdiv,
    int clk_phase,
    int clk_polarity,
    uint32_t irq_mask )
    +
    +

    Enable and configure SPI controller. The SPI control register bits are listed in NEORV32_SPI_CTRL_enum.

    +
    Parameters
    + + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum. @prama[in] cdiv Clock divider (0..15).
    [in]clk_phaseClock phase (0=sample on rising edge, 1=sample on falling edge).
    [in]clk_polarityClock polarity (when idle).
    [in]irq_maskInterrupt configuration mask (CTRL's irq_* bits).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_trans()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_spi_trans (uint8_t tx_data)
    +
    +

    Perform a single SPI data transfer.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + +
    tx_dataTransmit data (8-bit, LSB-aligned).
    +
    +
    +
    Returns
    Receive data (8-bit, LSB-aligned).
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__spi_8h.html b/sw/neorv32__spi_8h.html new file mode 100644 index 0000000000..469c571ebf --- /dev/null +++ b/sw/neorv32__spi_8h.html @@ -0,0 +1,681 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_spi.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_spi.h File Reference
    +
    +
    + +

    Serial peripheral interface controller (SPI) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_spi_t
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_spi_available (void)
     
    void neorv32_spi_setup (int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask)
     
    void neorv32_spi_highspeed_enable (void)
     
    void neorv32_spi_highspeed_disable (void)
     
    uint32_t neorv32_spi_get_clock_speed (void)
     
    void neorv32_spi_disable (void)
     
    void neorv32_spi_enable (void)
     
    int neorv32_spi_get_fifo_depth (void)
     
    void neorv32_spi_cs_en (int cs)
     
    void neorv32_spi_cs_dis (void)
     
    uint8_t neorv32_spi_trans (uint8_t tx_data)
     
    void neorv32_spi_put_nonblocking (uint8_t tx_data)
     
    uint8_t neorv32_spi_get_nonblocking (void)
     
    void neorv32_spi_cs_en_nonblocking (int cs)
     
    void neorv32_spi_cs_dis_nonblocking (void)
     
    int neorv32_spi_check_cs (void)
     
    int neorv32_spi_busy (void)
     
    + + + + + + + +

    IO Device: Serial Peripheral Interface Controller (SPI)

    #define NEORV32_SPI   ((neorv32_spi_t*) (NEORV32_SPI_BASE))
     
    enum  NEORV32_SPI_CTRL_enum {
    +  SPI_CTRL_EN = 0 +, SPI_CTRL_CPHA = 1 +, SPI_CTRL_CPOL = 2 +, SPI_CTRL_PRSC0 = 3 +,
    +  SPI_CTRL_PRSC1 = 4 +, SPI_CTRL_PRSC2 = 5 +, SPI_CTRL_CDIV0 = 6 +, SPI_CTRL_CDIV1 = 7 +,
    +  SPI_CTRL_CDIV2 = 8 +, SPI_CTRL_CDIV3 = 9 +, SPI_CTRL_HIGHSPEED = 10 +, SPI_CTRL_RX_AVAIL = 16 +,
    +  SPI_CTRL_TX_EMPTY = 17 +, SPI_CTRL_TX_NHALF = 18 +, SPI_CTRL_TX_FULL = 19 +, SPI_CTRL_IRQ_RX_AVAIL = 20 +,
    +  SPI_CTRL_IRQ_TX_EMPTY = 21 +, SPI_CTRL_IRQ_TX_HALF = 22 +, SPI_CTRL_IRQ_IDLE = 23 +, SPI_CTRL_FIFO_LSB = 24 +,
    +  SPI_CTRL_FIFO_MSB = 27 +, SPI_CS_ACTIVE = 30 +, SPI_CTRL_BUSY = 31 +
    + }
     
    enum  NEORV32_SPI_DATA_enum { SPI_DATA_LSB = 0 +, SPI_DATA_MSB = 1 +, SPI_DATA_CSEN = 3 +, SPI_DATA_CMD = 31 + }
     
    +

    Detailed Description

    +

    Serial peripheral interface controller (SPI) HW driver header file.

    +
    Note
    These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_SPI

    + +
    +
    + + + + +
    #define NEORV32_SPI   ((neorv32_spi_t*) (NEORV32_SPI_BASE))
    +
    +

    SPI module hardware access (neorv32_spi_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_SPI_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_SPI_CTRL_enum
    +
    +

    SPI control register bits

    + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    SPI_CTRL_EN 

    SPI control register(0) (r/w): SPI unit enable

    +
    SPI_CTRL_CPHA 

    SPI control register(1) (r/w): Clock phase

    +
    SPI_CTRL_CPOL 

    SPI control register(2) (r/w): Clock polarity

    +
    SPI_CTRL_PRSC0 

    SPI control register(3) (r/w): Clock prescaler select bit 0

    +
    SPI_CTRL_PRSC1 

    SPI control register(4) (r/w): Clock prescaler select bit 1

    +
    SPI_CTRL_PRSC2 

    SPI control register(5) (r/w): Clock prescaler select bit 2

    +
    SPI_CTRL_CDIV0 

    SPI control register(6) (r/w): Clock divider bit 0

    +
    SPI_CTRL_CDIV1 

    SPI control register(7) (r/w): Clock divider bit 1

    +
    SPI_CTRL_CDIV2 

    SPI control register(8) (r/w): Clock divider bit 2

    +
    SPI_CTRL_CDIV3 

    SPI control register(9) (r/w): Clock divider bit 3

    +
    SPI_CTRL_HIGHSPEED 

    SPI control register(10) (r/w): High-speed mode

    +
    SPI_CTRL_RX_AVAIL 

    SPI control register(16) (r/-): RX FIFO data available (RX FIFO not empty)

    +
    SPI_CTRL_TX_EMPTY 

    SPI control register(17) (r/-): TX FIFO empty

    +
    SPI_CTRL_TX_NHALF 

    SPI control register(18) (r/-): TX FIFO not at least half full

    +
    SPI_CTRL_TX_FULL 

    SPI control register(19) (r/-): TX FIFO full

    +
    SPI_CTRL_IRQ_RX_AVAIL 

    SPI control register(20) (r/w): Fire IRQ if RX FIFO data available (RX FIFO not empty)

    +
    SPI_CTRL_IRQ_TX_EMPTY 

    SPI control register(21) (r/w): Fire IRQ if TX FIFO empty

    +
    SPI_CTRL_IRQ_TX_HALF 

    SPI control register(22) (r/w): Fire IRQ if TX FIFO not at least half full

    +
    SPI_CTRL_IRQ_IDLE 

    SPI control register(23) (r/w): Fire IRQ if TX FIFO is empty and SPI bus engine is idle

    +
    SPI_CTRL_FIFO_LSB 

    SPI control register(24) (r/-): log2(FIFO size), lsb

    +
    SPI_CTRL_FIFO_MSB 

    SPI control register(27) (r/-): log2(FIFO size), msb

    +
    SPI_CS_ACTIVE 

    SPI control register(30) (r/-): At least one CS line is active when set

    +
    SPI_CTRL_BUSY 

    SPI control register(31) (r/-): SPI busy flag

    +
    + +
    +
    + +

    ◆ NEORV32_SPI_DATA_enum

    + +
    +
    + + + + +
    enum NEORV32_SPI_DATA_enum
    +
    +

    SPI data register bits

    + + + + + +
    Enumerator
    SPI_DATA_LSB 

    SPI data register(0) (r/w): Data byte LSB

    +
    SPI_DATA_MSB 

    SPI data register(1) (r/w): Data byte LSB

    +
    SPI_DATA_CSEN 

    SPI data register(3) (-/w): Chip select enable (command-mode only)

    +
    SPI_DATA_CMD 

    SPI data register(31) (-/w): Command (=1) / data (=0) select

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_spi_available()

    + +
    +
    + + + + + + + +
    int neorv32_spi_available (void )
    +
    +

    Check if SPI unit was synthesized.

    +
    Returns
    0 if SPI was not synthesized, 1 if SPI is available.
    + +
    +
    + +

    ◆ neorv32_spi_busy()

    + +
    +
    + + + + + + + +
    int neorv32_spi_busy (void )
    +
    +

    Check if SPI transceiver is busy or TX FIFO not empty.

    +
    Returns
    0 if idle, 1 if busy
    + +
    +
    + +

    ◆ neorv32_spi_check_cs()

    + +
    +
    + + + + + + + +
    int neorv32_spi_check_cs (void )
    +
    +

    Check if any chip-select line is active.

    +
    Returns
    0 if no CS lines are active, 1 if at least one CS line is active.
    + +
    +
    + +

    ◆ neorv32_spi_cs_dis()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_dis (void )
    +
    +

    Deactivate currently active SPI chip select signal.

    +
    Note
    The SPI chip select output lines are HIGH when deactivated.
    +
    +This function is blocking.
    + +
    +
    + +

    ◆ neorv32_spi_cs_dis_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_dis_nonblocking (void )
    +
    +

    Deactivate currently active SPI chip select signal (non-blocking).

    +
    Note
    The SPI chip select output lines are HIGH when deactivated.
    + +
    +
    + +

    ◆ neorv32_spi_cs_en()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_en (int cs)
    +
    +

    Activate single SPI chip select signal.

    +
    Note
    The SPI chip select output lines are LOW when activated.
    +
    +This function is blocking.
    +
    Parameters
    + + +
    csChip select line to activate (0..7).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_cs_en_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_spi_cs_en_nonblocking (int cs)
    +
    +

    Activate single SPI chip select signal (non-blocking).

    +
    Note
    The SPI chip select output lines are LOW when activated.
    +
    Parameters
    + + +
    csChip select line to activate (0..7).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_disable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_disable (void )
    +
    +

    Disable SPI controller.

    + +
    +
    + +

    ◆ neorv32_spi_enable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_enable (void )
    +
    +

    Enable SPI controller.

    + +
    +
    + +

    ◆ neorv32_spi_get_clock_speed()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_spi_get_clock_speed (void )
    +
    +

    Get configured clock speed in Hz.

    +
    Returns
    Actual configured SPI clock speed in Hz.
    + +
    +
    + +

    ◆ neorv32_spi_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_spi_get_fifo_depth (void )
    +
    +

    Get SPI FIFO depth.

    +
    Returns
    FIFO depth (number of entries), zero if no FIFO implemented
    + +
    +
    + +

    ◆ neorv32_spi_get_nonblocking()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_spi_get_nonblocking (void )
    +
    +

    Get SPI RX data (non-blocking).

    +
    Returns
    Receive data (8-bit, LSB-aligned).
    + +
    +
    + +

    ◆ neorv32_spi_highspeed_disable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_highspeed_disable (void )
    +
    +

    Disable high-speed mode.

    + +
    +
    + +

    ◆ neorv32_spi_highspeed_enable()

    + +
    +
    + + + + + + + +
    void neorv32_spi_highspeed_enable (void )
    +
    +

    Enable high-speed mode.

    + +
    +
    + +

    ◆ neorv32_spi_put_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_spi_put_nonblocking (uint8_t tx_data)
    +
    +

    Put SPI TX data (non-blocking).

    +
    Parameters
    + + +
    tx_dataTransmit data (8-bit, LSB-aligned).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_spi_setup (int prsc,
    int cdiv,
    int clk_phase,
    int clk_polarity,
    uint32_t irq_mask )
    +
    +

    Enable and configure SPI controller. The SPI control register bits are listed in NEORV32_SPI_CTRL_enum.

    +
    Parameters
    + + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum. @prama[in] cdiv Clock divider (0..15).
    [in]clk_phaseClock phase (0=sample on rising edge, 1=sample on falling edge).
    [in]clk_polarityClock polarity (when idle).
    [in]irq_maskInterrupt configuration mask (CTRL's irq_* bits).
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_trans()

    + +
    +
    + + + + + + + +
    uint8_t neorv32_spi_trans (uint8_t tx_data)
    +
    +

    Perform a single SPI data transfer.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + +
    tx_dataTransmit data (8-bit, LSB-aligned).
    +
    +
    +
    Returns
    Receive data (8-bit, LSB-aligned).
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__spi_8h_source.html b/sw/neorv32__spi_8h_source.html new file mode 100644 index 0000000000..83c93a8813 --- /dev/null +++ b/sw/neorv32__spi_8h_source.html @@ -0,0 +1,231 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_spi.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_spi.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_spi_h
    +
    19#define neorv32_spi_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t DATA;
    + +
    +
    33
    +
    35#define NEORV32_SPI ((neorv32_spi_t*) (NEORV32_SPI_BASE))
    +
    36
    + +
    67
    + +
    78/**********************************************************************/
    +
    82int neorv32_spi_available(void);
    +
    83void neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask);
    + + +
    86uint32_t neorv32_spi_get_clock_speed(void);
    +
    87void neorv32_spi_disable(void);
    +
    88void neorv32_spi_enable(void);
    + +
    90void neorv32_spi_cs_en(int cs);
    +
    91void neorv32_spi_cs_dis(void);
    +
    92uint8_t neorv32_spi_trans(uint8_t tx_data);
    +
    93void neorv32_spi_put_nonblocking(uint8_t tx_data);
    +
    94uint8_t neorv32_spi_get_nonblocking(void);
    + + +
    97int neorv32_spi_check_cs(void);
    +
    98int neorv32_spi_busy(void);
    +
    101#endif // neorv32_spi_h
    +
    uint32_t neorv32_spi_get_clock_speed(void)
    Definition neorv32_spi.c:85
    +
    int neorv32_spi_busy(void)
    Definition neorv32_spi.c:247
    +
    void neorv32_spi_highspeed_disable(void)
    Definition neorv32_spi.c:74
    +
    int neorv32_spi_available(void)
    Definition neorv32_spi.c:26
    +
    void neorv32_spi_cs_en(int cs)
    Definition neorv32_spi.c:144
    +
    uint8_t neorv32_spi_trans(uint8_t tx_data)
    Definition neorv32_spi.c:172
    +
    void neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask)
    Definition neorv32_spi.c:46
    +
    void neorv32_spi_disable(void)
    Definition neorv32_spi.c:109
    +
    int neorv32_spi_check_cs(void)
    Definition neorv32_spi.c:231
    +
    void neorv32_spi_enable(void)
    Definition neorv32_spi.c:118
    +
    void neorv32_spi_cs_en_nonblocking(int cs)
    Definition neorv32_spi.c:209
    +
    void neorv32_spi_cs_dis(void)
    Definition neorv32_spi.c:157
    +
    NEORV32_SPI_DATA_enum
    Definition neorv32_spi.h:69
    +
    @ SPI_DATA_MSB
    Definition neorv32_spi.h:71
    +
    @ SPI_DATA_CSEN
    Definition neorv32_spi.h:72
    +
    @ SPI_DATA_CMD
    Definition neorv32_spi.h:73
    +
    @ SPI_DATA_LSB
    Definition neorv32_spi.h:70
    +
    uint8_t neorv32_spi_get_nonblocking(void)
    Definition neorv32_spi.c:196
    +
    void neorv32_spi_highspeed_enable(void)
    Definition neorv32_spi.c:65
    +
    void neorv32_spi_cs_dis_nonblocking(void)
    Definition neorv32_spi.c:220
    +
    int neorv32_spi_get_fifo_depth(void)
    Definition neorv32_spi.c:129
    +
    NEORV32_SPI_CTRL_enum
    Definition neorv32_spi.h:38
    +
    @ SPI_CTRL_CDIV1
    Definition neorv32_spi.h:46
    +
    @ SPI_CTRL_RX_AVAIL
    Definition neorv32_spi.h:51
    +
    @ SPI_CTRL_FIFO_LSB
    Definition neorv32_spi.h:61
    +
    @ SPI_CTRL_IRQ_RX_AVAIL
    Definition neorv32_spi.h:56
    +
    @ SPI_CTRL_IRQ_IDLE
    Definition neorv32_spi.h:59
    +
    @ SPI_CTRL_TX_EMPTY
    Definition neorv32_spi.h:52
    +
    @ SPI_CTRL_PRSC1
    Definition neorv32_spi.h:43
    +
    @ SPI_CTRL_CPHA
    Definition neorv32_spi.h:40
    +
    @ SPI_CS_ACTIVE
    Definition neorv32_spi.h:64
    +
    @ SPI_CTRL_TX_NHALF
    Definition neorv32_spi.h:53
    +
    @ SPI_CTRL_EN
    Definition neorv32_spi.h:39
    +
    @ SPI_CTRL_CPOL
    Definition neorv32_spi.h:41
    +
    @ SPI_CTRL_BUSY
    Definition neorv32_spi.h:65
    +
    @ SPI_CTRL_PRSC2
    Definition neorv32_spi.h:44
    +
    @ SPI_CTRL_CDIV3
    Definition neorv32_spi.h:48
    +
    @ SPI_CTRL_FIFO_MSB
    Definition neorv32_spi.h:62
    +
    @ SPI_CTRL_IRQ_TX_HALF
    Definition neorv32_spi.h:58
    +
    @ SPI_CTRL_TX_FULL
    Definition neorv32_spi.h:54
    +
    @ SPI_CTRL_CDIV2
    Definition neorv32_spi.h:47
    +
    @ SPI_CTRL_PRSC0
    Definition neorv32_spi.h:42
    +
    @ SPI_CTRL_HIGHSPEED
    Definition neorv32_spi.h:49
    +
    @ SPI_CTRL_CDIV0
    Definition neorv32_spi.h:45
    +
    @ SPI_CTRL_IRQ_TX_EMPTY
    Definition neorv32_spi.h:57
    +
    void neorv32_spi_put_nonblocking(uint8_t tx_data)
    Definition neorv32_spi.c:185
    +
    Definition neorv32_spi.h:29
    +
    uint32_t CTRL
    Definition neorv32_spi.h:30
    +
    uint32_t DATA
    Definition neorv32_spi.h:31
    +
    + + +
    + + diff --git a/sw/neorv32__spi__irq_8c.html b/sw/neorv32__spi__irq_8c.html new file mode 100644 index 0000000000..9c88109ba9 --- /dev/null +++ b/sw/neorv32__spi__irq_8c.html @@ -0,0 +1,257 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv/neorv32_spi_irq.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_spi_irq.c File Reference
    +
    +
    + +

    Addition to neorv32_spi.c, which provides an IRQ driven data flow. +More...

    +
    #include "neorv32.h"
    +#include "neorv32_spi_irq.h"
    +
    + + + + + + + + + +

    +Functions

    void neorv32_spi_init (t_neorv32_spi *self)
     
    void neorv32_spi_isr (t_neorv32_spi *self)
     
    int neorv32_spi_rw (t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len)
     
    int neorv32_spi_rw_busy (t_neorv32_spi *self)
     
    +

    Detailed Description

    +

    Addition to neorv32_spi.c, which provides an IRQ driven data flow.

    +
    Author
    Andreas Kaeberlein
    +
    Note
    These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true).
    +

    Function Documentation

    + +

    ◆ neorv32_spi_init()

    + +
    +
    + + + + + + + +
    void neorv32_spi_init (t_neorv32_spi * self)
    +
    +

    Initializes SPI flow control handle. The data structure elements are listed in t_neorv32_spi.

    +
    Parameters
    + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_isr()

    + +
    +
    + + + + + + + +
    void neorv32_spi_isr (t_neorv32_spi * self)
    +
    +

    SPI interrupt service routine. The data structure elements are listed in t_neorv32_spi.

    +
    Parameters
    + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_rw()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int neorv32_spi_rw (t_neorv32_spi * self,
    uint8_t csn,
    void * spi,
    uint32_t len )
    +
    +

    Starts ISR driven read/write SPI transfer.

    +
    Parameters
    + + + + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    [in]csnUsed chip select index for transfer.
    [in,out]*spiwrite/read data buffer for SPI. Before transmission contents the write data and after the read data.
    [in]lennumber of bytes to transfer.
    +
    +
    +
    Returns
    int status of function.
    +
    Return values
    + + + + +
    0new transfer started.
    1transfer active, refused request.
    2unsupported data size, only 1/2/4 allowed.
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_rw_busy()

    + +
    +
    + + + + + + + +
    int neorv32_spi_rw_busy (t_neorv32_spi * self)
    +
    +

    Check if transfer is active. see neorv32_spi_rw

    +
    Parameters
    + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    +
    +
    +
    Returns
    int status of function.
    +
    Return values
    + + + +
    0idle.
    1busy.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__spi__irq_8h.html b/sw/neorv32__spi__irq_8h.html new file mode 100644 index 0000000000..5c4679bada --- /dev/null +++ b/sw/neorv32__spi__irq_8h.html @@ -0,0 +1,301 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv/neorv32_spi_irq.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_spi_irq.h File Reference
    +
    +
    + +

    Addition to neorv32_spi.h, which provides an IRQ driven data flow. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  t_neorv32_spi
     
    + + + +

    +Macros

    #define min(a, b)
     
    + + + +

    +Typedefs

    +typedef struct t_neorv32_spi t_neorv32_spi
     
    + + + + + + + + + +

    +Functions

    void neorv32_spi_init (t_neorv32_spi *self)
     
    void neorv32_spi_isr (t_neorv32_spi *self)
     
    int neorv32_spi_rw (t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len)
     
    int neorv32_spi_rw_busy (t_neorv32_spi *self)
     
    +

    Detailed Description

    +

    Addition to neorv32_spi.h, which provides an IRQ driven data flow.

    +
    Author
    Andreas Kaeberlein
    +
    Note
    These functions should only be used if the SPI unit was synthesized (IO_SPI_EN = true).
    +

    Macro Definition Documentation

    + +

    ◆ min

    + +
    +
    + + + + + + + + + + + +
    #define min( a,
    b )
    +
    +Value:
    ({ __typeof__ (a) _a = (a); \
    +
    __typeof__ (b) _b = (b); \
    +
    _a < _b ? _a : _b; })
    +
    +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_spi_init()

    + +
    +
    + + + + + + + +
    void neorv32_spi_init (t_neorv32_spi * self)
    +
    +

    Initializes SPI flow control handle. The data structure elements are listed in t_neorv32_spi.

    +
    Parameters
    + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_isr()

    + +
    +
    + + + + + + + +
    void neorv32_spi_isr (t_neorv32_spi * self)
    +
    +

    SPI interrupt service routine. The data structure elements are listed in t_neorv32_spi.

    +
    Parameters
    + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_rw()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int neorv32_spi_rw (t_neorv32_spi * self,
    uint8_t csn,
    void * spi,
    uint32_t len )
    +
    +

    Starts ISR driven read/write SPI transfer.

    +
    Parameters
    + + + + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    [in]csnUsed chip select index for transfer.
    [in,out]*spiwrite/read data buffer for SPI. Before transmission contents the write data and after the read data.
    [in]lennumber of bytes to transfer.
    +
    +
    +
    Returns
    int status of function.
    +
    Return values
    + + + + +
    0new transfer started.
    1transfer active, refused request.
    2unsupported data size, only 1/2/4 allowed.
    +
    +
    + +
    +
    + +

    ◆ neorv32_spi_rw_busy()

    + +
    +
    + + + + + + + +
    int neorv32_spi_rw_busy (t_neorv32_spi * self)
    +
    +

    Check if transfer is active. see neorv32_spi_rw

    +
    Parameters
    + + +
    [in,out]*selfSPI driver common data handle. See t_neorv32_spi.
    +
    +
    +
    Returns
    int status of function.
    +
    Return values
    + + + +
    0idle.
    1busy.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__spi__irq_8h_source.html b/sw/neorv32__spi__irq_8h_source.html new file mode 100644 index 0000000000..c8abc9c05e --- /dev/null +++ b/sw/neorv32__spi__irq_8h_source.html @@ -0,0 +1,183 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_spi_irq/drv/neorv32_spi_irq.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_spi_irq.h
    +
    +
    +Go to the documentation of this file.
    1// #################################################################################################
    +
    2// # << NEORV32: neorv32_spi_irq.h - IRQ driven SPI Controller HW Driver >> #
    +
    3// # ********************************************************************************************* #
    +
    4// # BSD 3-Clause License #
    +
    5// # #
    +
    6// # Copyright (c) 2023, Stephan Nolting. All rights reserved. #
    +
    7// # #
    +
    8// # Redistribution and use in source and binary forms, with or without modification, are #
    +
    9// # permitted provided that the following conditions are met: #
    +
    10// # #
    +
    11// # 1. Redistributions of source code must retain the above copyright notice, this list of #
    +
    12// # conditions and the following disclaimer. #
    +
    13// # #
    +
    14// # 2. Redistributions in binary form must reproduce the above copyright notice, this list of #
    +
    15// # conditions and the following disclaimer in the documentation and/or other materials #
    +
    16// # provided with the distribution. #
    +
    17// # #
    +
    18// # 3. Neither the name of the copyright holder nor the names of its contributors may be used to #
    +
    19// # endorse or promote products derived from this software without specific prior written #
    +
    20// # permission. #
    +
    21// # #
    +
    22// # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS #
    +
    23// # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF #
    +
    24// # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE #
    +
    25// # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
    +
    26// # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE #
    +
    27// # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED #
    +
    28// # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
    +
    29// # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED #
    +
    30// # OF THE POSSIBILITY OF SUCH DAMAGE. #
    +
    31// # ********************************************************************************************* #
    +
    32// # The NEORV32 Processor - https://github.com/stnolting/neorv32 (c) Stephan Nolting #
    +
    33// #################################################################################################
    +
    34
    +
    35
    +
    36/**********************************************************************/
    +
    44#ifndef neorv32_spi_irq_h
    +
    45#define neorv32_spi_irq_h
    +
    46
    +
    47// MIN macro
    +
    48// https://stackoverflow.com/questions/3437404/min-and-max-in-c
    +
    49#define min(a,b) \
    +
    50 ({ __typeof__ (a) _a = (a); \
    +
    51 __typeof__ (b) _b = (b); \
    +
    52 _a < _b ? _a : _b; })
    +
    53
    +
    54// data handle for ISR
    +
    +
    55typedef struct t_neorv32_spi
    +
    56{
    +
    57 uint8_t* ptrSpiBuf;
    +
    58 uint8_t uint8Csn;
    +
    59 uint16_t uint16Fifo;
    +
    60 uint32_t uint32Total;
    +
    61 volatile uint32_t uint32Write;
    +
    62 volatile uint32_t uint32Read;
    +
    63 volatile uint8_t uint8IsBusy;
    + +
    +
    65
    +
    66
    +
    67// prototypes
    + + +
    70int neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len);
    + +
    72
    +
    73#endif // neorv32_spi_irq_h
    +
    int neorv32_spi_rw_busy(t_neorv32_spi *self)
    Definition neorv32_spi_irq.c:139
    +
    int neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len)
    Definition neorv32_spi_irq.c:109
    +
    void neorv32_spi_init(t_neorv32_spi *self)
    Definition neorv32_spi_irq.c:53
    +
    void neorv32_spi_isr(t_neorv32_spi *self)
    Definition neorv32_spi_irq.c:69
    +
    Definition neorv32_spi_irq.h:56
    +
    uint8_t uint8Csn
    Definition neorv32_spi_irq.h:58
    +
    uint8_t * ptrSpiBuf
    Definition neorv32_spi_irq.h:57
    +
    volatile uint32_t uint32Read
    Definition neorv32_spi_irq.h:62
    +
    uint16_t uint16Fifo
    Definition neorv32_spi_irq.h:59
    +
    volatile uint8_t uint8IsBusy
    Definition neorv32_spi_irq.h:63
    +
    uint32_t uint32Total
    Definition neorv32_spi_irq.h:60
    +
    volatile uint32_t uint32Write
    Definition neorv32_spi_irq.h:61
    +
    + + +
    + + diff --git a/sw/neorv32__sysinfo_8h_source.html b/sw/neorv32__sysinfo_8h_source.html new file mode 100644 index 0000000000..f59abe3752 --- /dev/null +++ b/sw/neorv32__sysinfo_8h_source.html @@ -0,0 +1,189 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_sysinfo.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_sysinfo.h
    +
    +
    +
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_sysinfo_h
    +
    17#define neorv32_sysinfo_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    +
    27typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    28 const uint32_t CLK;
    +
    29 const uint8_t MEM[4];
    +
    30 const uint32_t SOC;
    +
    31 const uint32_t CACHE;
    + +
    +
    33
    +
    35#define NEORV32_SYSINFO ((neorv32_sysinfo_t*) (NEORV32_SYSINFO_BASE))
    +
    36
    +
    38enum NEORV32_SYSINFO_MEM_enum {
    +
    39 SYSINFO_MEM_IMEM = 0,
    +
    40 SYSINFO_MEM_DMEM = 1
    +
    41};
    +
    42
    +
    44enum NEORV32_SYSINFO_SOC_enum {
    +
    45 SYSINFO_SOC_BOOTLOADER = 0,
    +
    46 SYSINFO_SOC_XBUS = 1,
    +
    47 SYSINFO_SOC_MEM_INT_IMEM = 2,
    +
    48 SYSINFO_SOC_MEM_INT_DMEM = 3,
    +
    49 SYSINFO_SOC_OCD = 4,
    +
    50 SYSINFO_SOC_ICACHE = 5,
    +
    51 SYSINFO_SOC_DCACHE = 6,
    +
    52 SYSINFO_SOC_CLOCK_GATING = 7,
    +
    53 SYSINFO_SOC_XBUS_CACHE = 8,
    +
    54 SYSINFO_SOC_XIP = 9,
    +
    55 SYSINFO_SOC_XIP_CACHE = 10,
    +
    57 SYSINFO_SOC_IO_DMA = 14,
    +
    58 SYSINFO_SOC_IO_GPIO = 15,
    +
    59 SYSINFO_SOC_IO_MTIME = 16,
    +
    60 SYSINFO_SOC_IO_UART0 = 17,
    +
    61 SYSINFO_SOC_IO_SPI = 18,
    +
    62 SYSINFO_SOC_IO_TWI = 19,
    +
    63 SYSINFO_SOC_IO_PWM = 20,
    +
    64 SYSINFO_SOC_IO_WDT = 21,
    +
    65 SYSINFO_SOC_IO_CFS = 22,
    +
    66 SYSINFO_SOC_IO_TRNG = 23,
    +
    67 SYSINFO_SOC_IO_SDI = 24,
    +
    68 SYSINFO_SOC_IO_UART1 = 25,
    +
    69 SYSINFO_SOC_IO_NEOLED = 26,
    +
    70 SYSINFO_SOC_IO_XIRQ = 27,
    +
    71 SYSINFO_SOC_IO_GPTMR = 28,
    +
    72 SYSINFO_SOC_IO_SLINK = 29,
    +
    73 SYSINFO_SOC_IO_ONEWIRE = 30,
    +
    74 SYSINFO_SOC_IO_CRC = 31
    +
    75};
    +
    76
    +
    78 enum NEORV32_SYSINFO_CACHE_enum {
    +
    79 SYSINFO_CACHE_INST_BLOCK_SIZE_0 = 0,
    +
    80 SYSINFO_CACHE_INST_BLOCK_SIZE_3 = 3,
    +
    81 SYSINFO_CACHE_INST_NUM_BLOCKS_0 = 4,
    +
    82 SYSINFO_CACHE_INST_NUM_BLOCKS_3 = 7,
    +
    84 SYSINFO_CACHE_DATA_BLOCK_SIZE_0 = 8,
    +
    85 SYSINFO_CACHE_DATA_BLOCK_SIZE_3 = 11,
    +
    86 SYSINFO_CACHE_DATA_NUM_BLOCKS_0 = 12,
    +
    87 SYSINFO_CACHE_DATA_NUM_BLOCKS_3 = 15,
    +
    89 SYSINFO_CACHE_XIP_BLOCK_SIZE_0 = 16,
    +
    90 SYSINFO_CACHE_XIP_BLOCK_SIZE_3 = 19,
    +
    91 SYSINFO_CACHE_XIP_NUM_BLOCKS_0 = 20,
    +
    92 SYSINFO_CACHE_XIP_NUM_BLOCKS_3 = 23,
    +
    94 SYSINFO_CACHE_XBUS_BLOCK_SIZE_0 = 24,
    +
    95 SYSINFO_CACHE_XBUS_BLOCK_SIZE_3 = 27,
    +
    96 SYSINFO_CACHE_XBUS_NUM_BLOCKS_0 = 28,
    +
    97 SYSINFO_CACHE_XBUS_NUM_BLOCKS_3 = 31
    +
    98};
    +
    102#endif // neorv32_sysinfo_h
    +
    Definition neorv32_sysinfo.h:27
    +
    const uint32_t SOC
    Definition neorv32_sysinfo.h:30
    +
    const uint32_t CACHE
    Definition neorv32_sysinfo.h:31
    +
    const uint32_t CLK
    Definition neorv32_sysinfo.h:28
    +
    + + +
    + + diff --git a/sw/neorv32__trng_8c.html b/sw/neorv32__trng_8c.html new file mode 100644 index 0000000000..2c935f8e0f --- /dev/null +++ b/sw/neorv32__trng_8c.html @@ -0,0 +1,275 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_trng.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_trng.c File Reference
    +
    +
    + +

    True Random Number Generator (TRNG) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_trng_available (void)
     
    void neorv32_trng_enable (int irq_sel)
     
    void neorv32_trng_disable (void)
     
    void neorv32_trng_fifo_clear (void)
     
    int neorv32_trng_get_fifo_depth (void)
     
    int neorv32_trng_get (uint8_t *data)
     
    int neorv32_trng_check_sim_mode (void)
     
    +

    Detailed Description

    +

    True Random Number Generator (TRNG) HW driver source file.

    +
    Note
    These functions should only be used if the TRNG unit was synthesized (IO_TRNG_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_trng_available()

    + +
    +
    + + + + + + + +
    int neorv32_trng_available (void )
    +
    +

    Check if TRNG unit was synthesized.

    +
    Returns
    0 if TRNG was not synthesized, 1 if TRNG is available.
    + +
    +
    + +

    ◆ neorv32_trng_check_sim_mode()

    + +
    +
    + + + + + + + +
    int neorv32_trng_check_sim_mode (void )
    +
    +

    Check if TRNG is implemented using SIMULATION mode.

    +
    Warning
    In simulation mode the physical entropy source is replaced by a PRNG (LFSR) with very bad random quality.
    +
    Returns
    Simulation mode active when not zero.
    + +
    +
    + +

    ◆ neorv32_trng_disable()

    + +
    +
    + + + + + + + +
    void neorv32_trng_disable (void )
    +
    +

    Reset and disable TRNG.

    + +
    +
    + +

    ◆ neorv32_trng_enable()

    + +
    +
    + + + + + + + +
    void neorv32_trng_enable (int irq_sel)
    +
    +

    Reset, configure and enable TRNG.

    +
    Parameters
    + + +
    [in]irq_selInterrupt trigger select (0 = data available, 1 = FIFO full).
    +
    +
    + +
    +
    + +

    ◆ neorv32_trng_fifo_clear()

    + +
    +
    + + + + + + + +
    void neorv32_trng_fifo_clear (void )
    +
    +

    Flush TRNG random data FIFO.

    + +
    +
    + +

    ◆ neorv32_trng_get()

    + +
    +
    + + + + + + + +
    int neorv32_trng_get (uint8_t * data)
    +
    +

    Get random data byte from TRNG.

    +
    Parameters
    + + +
    [in,out]datauint8_t pointer for storing random data byte. Will be set to zero if no valid data available.
    +
    +
    +
    Returns
    Data is valid when 0 and invalid otherwise.
    + +
    +
    + +

    ◆ neorv32_trng_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_trng_get_fifo_depth (void )
    +
    +

    Get TRNG FIFO depth.

    +
    Returns
    TRNG FIFO size (number of entries).
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__trng_8h.html b/sw/neorv32__trng_8h.html new file mode 100644 index 0000000000..97b5383ca3 --- /dev/null +++ b/sw/neorv32__trng_8h.html @@ -0,0 +1,354 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_trng.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_trng.h File Reference
    +
    +
    + +

    True Random Number Generator (TRNG) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_trng_t
     
    + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_trng_available (void)
     
    void neorv32_trng_enable (int irq_sel)
     
    void neorv32_trng_disable (void)
     
    void neorv32_trng_fifo_clear (void)
     
    int neorv32_trng_get_fifo_depth (void)
     
    int neorv32_trng_get (uint8_t *data)
     
    int neorv32_trng_check_sim_mode (void)
     
    + + + + + +

    IO Device: True Random Number Generator (TRNG)

    #define NEORV32_TRNG   ((neorv32_trng_t*) (NEORV32_TRNG_BASE))
     
    enum  NEORV32_TRNG_CTRL_enum {
    +  TRNG_CTRL_DATA_LSB = 0 +, TRNG_CTRL_DATA_MSB = 7 +, TRNG_CTRL_FIFO_LSB = 16 +, TRNG_CTRL_FIFO_MSB = 19 +,
    +  TRNG_CTRL_IRQ_SEL = 27 +, TRNG_CTRL_FIFO_CLR = 28 +, TRNG_CTRL_SIM_MODE = 29 +, TRNG_CTRL_EN = 30 +,
    +  TRNG_CTRL_VALID = 31 +
    + }
     
    +

    Detailed Description

    +

    True Random Number Generator (TRNG) HW driver header file.

    +
    Note
    These functions should only be used if the TRNG unit was synthesized (IO_TRNG_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_TRNG

    + +
    +
    + + + + +
    #define NEORV32_TRNG   ((neorv32_trng_t*) (NEORV32_TRNG_BASE))
    +
    +

    TRNG module hardware access (neorv32_trng_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_TRNG_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_TRNG_CTRL_enum
    +
    +

    TRNG control/data register bits

    + + + + + + + + + + +
    Enumerator
    TRNG_CTRL_DATA_LSB 

    TRNG data/control register(0) (r/-): Random data byte LSB

    +
    TRNG_CTRL_DATA_MSB 

    TRNG data/control register(7) (r/-): Random data byte MSB

    +
    TRNG_CTRL_FIFO_LSB 

    TRNG data/control register(16) (r/-): log2(FIFO size), LSB

    +
    TRNG_CTRL_FIFO_MSB 

    TRNG data/control register(19) (r/-): log2(FIFO size), MSB

    +
    TRNG_CTRL_IRQ_SEL 

    TRNG data/control register(27) (r/w): Interrupt trigger select (0 = data available, 1 = FIFO full)

    +
    TRNG_CTRL_FIFO_CLR 

    TRNG data/control register(28) (-/w): Clear data FIFO (auto clears)

    +
    TRNG_CTRL_SIM_MODE 

    TRNG data/control register(29) (r/-): PRNG mode (simulation mode)

    +
    TRNG_CTRL_EN 

    TRNG data/control register(30) (r/w): TRNG enable

    +
    TRNG_CTRL_VALID 

    TRNG data/control register(31) (r/-): Random data output valid

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_trng_available()

    + +
    +
    + + + + + + + +
    int neorv32_trng_available (void )
    +
    +

    Check if TRNG unit was synthesized.

    +
    Returns
    0 if TRNG was not synthesized, 1 if TRNG is available.
    + +
    +
    + +

    ◆ neorv32_trng_check_sim_mode()

    + +
    +
    + + + + + + + +
    int neorv32_trng_check_sim_mode (void )
    +
    +

    Check if TRNG is implemented using SIMULATION mode.

    +
    Warning
    In simulation mode the physical entropy source is replaced by a PRNG (LFSR) with very bad random quality.
    +
    Returns
    Simulation mode active when not zero.
    + +
    +
    + +

    ◆ neorv32_trng_disable()

    + +
    +
    + + + + + + + +
    void neorv32_trng_disable (void )
    +
    +

    Reset and disable TRNG.

    + +
    +
    + +

    ◆ neorv32_trng_enable()

    + +
    +
    + + + + + + + +
    void neorv32_trng_enable (int irq_sel)
    +
    +

    Reset, configure and enable TRNG.

    +
    Parameters
    + + +
    [in]irq_selInterrupt trigger select (0 = data available, 1 = FIFO full).
    +
    +
    + +
    +
    + +

    ◆ neorv32_trng_fifo_clear()

    + +
    +
    + + + + + + + +
    void neorv32_trng_fifo_clear (void )
    +
    +

    Flush TRNG random data FIFO.

    + +
    +
    + +

    ◆ neorv32_trng_get()

    + +
    +
    + + + + + + + +
    int neorv32_trng_get (uint8_t * data)
    +
    +

    Get random data byte from TRNG.

    +
    Parameters
    + + +
    [in,out]datauint8_t pointer for storing random data byte. Will be set to zero if no valid data available.
    +
    +
    +
    Returns
    Data is valid when 0 and invalid otherwise.
    + +
    +
    + +

    ◆ neorv32_trng_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_trng_get_fifo_depth (void )
    +
    +

    Get TRNG FIFO depth.

    +
    Returns
    TRNG FIFO size (number of entries).
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__trng_8h_source.html b/sw/neorv32__trng_8h_source.html new file mode 100644 index 0000000000..f0baed0421 --- /dev/null +++ b/sw/neorv32__trng_8h_source.html @@ -0,0 +1,167 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_trng.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_trng.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_trng_h
    +
    19#define neorv32_trng_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    + +
    +
    32
    +
    34#define NEORV32_TRNG ((neorv32_trng_t*) (NEORV32_TRNG_BASE))
    +
    35
    + +
    53/**********************************************************************/
    + +
    58void neorv32_trng_enable(int irq_sel);
    +
    59void neorv32_trng_disable(void);
    + + +
    62int neorv32_trng_get(uint8_t *data);
    + +
    67#endif // neorv32_trng_h
    +
    NEORV32_TRNG_CTRL_enum
    Definition neorv32_trng.h:37
    +
    @ TRNG_CTRL_EN
    Definition neorv32_trng.h:47
    +
    @ TRNG_CTRL_VALID
    Definition neorv32_trng.h:48
    +
    @ TRNG_CTRL_DATA_LSB
    Definition neorv32_trng.h:38
    +
    @ TRNG_CTRL_FIFO_LSB
    Definition neorv32_trng.h:41
    +
    @ TRNG_CTRL_FIFO_MSB
    Definition neorv32_trng.h:42
    +
    @ TRNG_CTRL_DATA_MSB
    Definition neorv32_trng.h:39
    +
    @ TRNG_CTRL_IRQ_SEL
    Definition neorv32_trng.h:44
    +
    @ TRNG_CTRL_SIM_MODE
    Definition neorv32_trng.h:46
    +
    @ TRNG_CTRL_FIFO_CLR
    Definition neorv32_trng.h:45
    +
    void neorv32_trng_fifo_clear(void)
    Definition neorv32_trng.c:72
    +
    void neorv32_trng_enable(int irq_sel)
    Definition neorv32_trng.c:42
    +
    int neorv32_trng_get(uint8_t *data)
    Definition neorv32_trng.c:96
    +
    int neorv32_trng_check_sim_mode(void)
    Definition neorv32_trng.c:117
    +
    int neorv32_trng_get_fifo_depth(void)
    Definition neorv32_trng.c:83
    +
    void neorv32_trng_disable(void)
    Definition neorv32_trng.c:63
    +
    int neorv32_trng_available(void)
    Definition neorv32_trng.c:26
    +
    Definition neorv32_trng.h:29
    +
    uint32_t CTRL
    Definition neorv32_trng.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__twi_8c.html b/sw/neorv32__twi_8c.html new file mode 100644 index 0000000000..2d09048798 --- /dev/null +++ b/sw/neorv32__twi_8c.html @@ -0,0 +1,434 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_twi.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_twi.c File Reference
    +
    +
    + +

    Two-Wire Interface Controller (TWI) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_twi_available (void)
     
    void neorv32_twi_setup (int prsc, int cdiv, int clkstr)
     
    int neorv32_twi_get_fifo_depth (void)
     
    void neorv32_twi_disable (void)
     
    void neorv32_twi_enable (void)
     
    int neorv32_twi_busy (void)
     
    int neorv32_twi_get (uint8_t *data)
     
    int neorv32_twi_trans (uint8_t *data, int mack)
     
    void neorv32_twi_generate_stop (void)
     
    void neorv32_twi_generate_start (void)
     
    void neorv32_twi_send_nonblocking (uint8_t data, int mack)
     
    void neorv32_twi_generate_stop_nonblocking (void)
     
    void neorv32_twi_generate_start_nonblocking (void)
     
    +

    Detailed Description

    +

    Two-Wire Interface Controller (TWI) HW driver source file.

    +
    Note
    These functions should only be used if the TWI unit was synthesized (IO_TWI_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_twi_available()

    + +
    +
    + + + + + + + +
    int neorv32_twi_available (void )
    +
    +

    Check if TWI unit was synthesized.

    +
    Returns
    0 if TWI was not synthesized, 1 if TWI is available.
    + +
    +
    + +

    ◆ neorv32_twi_busy()

    + +
    +
    + + + + + + + +
    int neorv32_twi_busy (void )
    +
    +

    Check if TWI is busy (TWI bus engine busy or TX FIFO not empty).

    +
    Returns
    0 if idle, 1 if busy
    + +
    +
    + +

    ◆ neorv32_twi_disable()

    + +
    +
    + + + + + + + +
    void neorv32_twi_disable (void )
    +
    +

    Disable TWI controller.

    + +
    +
    + +

    ◆ neorv32_twi_enable()

    + +
    +
    + + + + + + + +
    void neorv32_twi_enable (void )
    +
    +

    Enable TWI controller.

    + +
    +
    + +

    ◆ neorv32_twi_generate_start()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_start (void )
    +
    +

    Generate START (or REPEATED-START) condition.

    +
    Note
    Blocking function.
    + +
    +
    + +

    ◆ neorv32_twi_generate_start_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_start_nonblocking (void )
    +
    +

    Generate START (or REPEATED-START) condition.

    +
    Note
    Non-blocking function; does not check the TX FIFO.
    + +
    +
    + +

    ◆ neorv32_twi_generate_stop()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_stop (void )
    +
    +

    Generate STOP condition.

    +
    Note
    Blocking function.
    + +
    +
    + +

    ◆ neorv32_twi_generate_stop_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_stop_nonblocking (void )
    +
    +

    Generate STOP condition.

    +
    Note
    Non-blocking function; does not check the TX FIFO.
    + +
    +
    + +

    ◆ neorv32_twi_get()

    + +
    +
    + + + + + + + +
    int neorv32_twi_get (uint8_t * data)
    +
    +

    Get received data + ACK/NACH from RX FIFO.

    +
    Parameters
    + + +
    [in,out]dataPointer for returned data (uint8_t).
    +
    +
    +
    Returns
    RX FIFO access status (-1 = no data available, 0 = ACK received, 1 = NACK received).
    + +
    +
    + +

    ◆ neorv32_twi_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_twi_get_fifo_depth (void )
    +
    +

    Get TWI FIFO depth.

    +
    Returns
    FIFO depth (number of entries), zero if no FIFO implemented
    + +
    +
    + +

    ◆ neorv32_twi_send_nonblocking()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_twi_send_nonblocking (uint8_t data,
    int mack )
    +
    +

    Send data byte (RX can be read via neorv32_twi_get()).

    +
    Note
    Non-blocking function; does not check the TX FIFO.
    +
    Parameters
    + + + +
    [in]dataData byte to be send.
    [in]mackGenerate ACK by host controller when set.
    +
    +
    + +
    +
    + +

    ◆ neorv32_twi_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_twi_setup (int prsc,
    int cdiv,
    int clkstr )
    +
    +

    Enable and configure TWI controller. The TWI control register bits are listed in NEORV32_TWI_CTRL_enum.

    +
    Parameters
    + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    [in]cdivClock divider (0..15).
    [in]clkstrEnable (allow) clock stretching.
    +
    +
    + +
    +
    + +

    ◆ neorv32_twi_trans()

    + +
    +
    + + + + + + + + + + + +
    int neorv32_twi_trans (uint8_t * data,
    int mack )
    +
    +

    TWI transfer: send data byte and also receive data byte.

    +
    Note
    Blocking function.
    +
    Parameters
    + + + +
    [in,out]dataPointer for TX/RX data (uint8_t).
    [in]mackGenerate ACK by host controller when set.
    +
    +
    +
    Returns
    0: ACK received, 1: NACK received.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__twi_8h.html b/sw/neorv32__twi_8h.html new file mode 100644 index 0000000000..723fb1272e --- /dev/null +++ b/sw/neorv32__twi_8h.html @@ -0,0 +1,582 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_twi.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_twi.h File Reference
    +
    +
    + +

    Two-Wire Interface Controller (TWI) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_twi_t
     
    + + + + + + + + + + +

    +Macros

    TWI commands
    +#define TWI_CMD_NOP   (0b00)
     
    +#define TWI_CMD_START   (0b01)
     
    +#define TWI_CMD_STOP   (0b10)
     
    +#define TWI_CMD_RTX   (0b11)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_twi_available (void)
     
    void neorv32_twi_setup (int prsc, int cdiv, int clkstr)
     
    int neorv32_twi_get_fifo_depth (void)
     
    void neorv32_twi_disable (void)
     
    void neorv32_twi_enable (void)
     
    int neorv32_twi_busy (void)
     
    int neorv32_twi_get (uint8_t *data)
     
    int neorv32_twi_trans (uint8_t *data, int mack)
     
    void neorv32_twi_generate_stop (void)
     
    void neorv32_twi_generate_start (void)
     
    void neorv32_twi_send_nonblocking (uint8_t data, int mack)
     
    void neorv32_twi_generate_stop_nonblocking (void)
     
    void neorv32_twi_generate_start_nonblocking (void)
     
    + + + + + + + +

    IO Device: Two-Wire Interface Controller (TWI)

    #define NEORV32_TWI   ((neorv32_twi_t*) (NEORV32_TWI_BASE))
     
    enum  NEORV32_TWI_CTRL_enum {
    +  TWI_CTRL_EN = 0 +, TWI_CTRL_PRSC0 = 1 +, TWI_CTRL_PRSC1 = 2 +, TWI_CTRL_PRSC2 = 3 +,
    +  TWI_CTRL_CDIV0 = 4 +, TWI_CTRL_CDIV1 = 5 +, TWI_CTRL_CDIV2 = 6 +, TWI_CTRL_CDIV3 = 7 +,
    +  TWI_CTRL_CLKSTR = 8 +, TWI_CTRL_FIFO_LSB = 15 +, TWI_CTRL_FIFO_MSB = 18 +, TWI_CTRL_TX_FULL = 29 +,
    +  TWI_CTRL_RX_AVAIL = 30 +, TWI_CTRL_BUSY = 31 +
    + }
     
    enum  NEORV32_TWI_DCMD_enum {
    +  TWI_DCMD_LSB = 0 +, TWI_DCMD_MSB = 7 +, TWI_DCMD_ACK = 8 +, TWI_DCMD_CMD_LO = 9 +,
    +  TWI_DCMD_CMD_HI = 10 +
    + }
     
    +

    Detailed Description

    +

    Two-Wire Interface Controller (TWI) HW driver header file.

    +
    Note
    These functions should only be used if the TWI unit was synthesized (IO_TWI_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_TWI

    + +
    +
    + + + + +
    #define NEORV32_TWI   ((neorv32_twi_t*) (NEORV32_TWI_BASE))
    +
    +

    TWI module hardware access (neorv32_twi_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_TWI_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_TWI_CTRL_enum
    +
    +

    TWI control register bits

    + + + + + + + + + + + + + + + +
    Enumerator
    TWI_CTRL_EN 

    TWI control register(0) (r/w): TWI enable

    +
    TWI_CTRL_PRSC0 

    TWI control register(1) (r/w): Clock prescaler select bit 0

    +
    TWI_CTRL_PRSC1 

    TWI control register(2) (r/w): Clock prescaler select bit 1

    +
    TWI_CTRL_PRSC2 

    TWI control register(3) (r/w): Clock prescaler select bit 2

    +
    TWI_CTRL_CDIV0 

    TWI control register(4) (r/w): Clock divider bit 0

    +
    TWI_CTRL_CDIV1 

    TWI control register(5) (r/w): Clock divider bit 1

    +
    TWI_CTRL_CDIV2 

    TWI control register(6) (r/w): Clock divider bit 2

    +
    TWI_CTRL_CDIV3 

    TWI control register(7) (r/w): Clock divider bit 3

    +
    TWI_CTRL_CLKSTR 

    TWI control register(8) (r/w): Enable/allow clock stretching

    +
    TWI_CTRL_FIFO_LSB 

    SPI control register(15) (r/-): log2(FIFO size), lsb

    +
    TWI_CTRL_FIFO_MSB 

    SPI control register(18) (r/-): log2(FIFO size), msb

    +
    TWI_CTRL_TX_FULL 

    TWI control register(29) (r/-): TX FIFO full

    +
    TWI_CTRL_RX_AVAIL 

    TWI control register(30) (r/-): RX FIFO data available

    +
    TWI_CTRL_BUSY 

    TWI control register(31) (r/-): Bus engine busy or TX FIFO not empty

    +
    + +
    +
    + +

    ◆ NEORV32_TWI_DCMD_enum

    + +
    +
    + + + + +
    enum NEORV32_TWI_DCMD_enum
    +
    +

    TWI command/data register bits

    + + + + + + +
    Enumerator
    TWI_DCMD_LSB 

    TWI data register(0) (r/w): Receive/transmit data (8-bit) LSB

    +
    TWI_DCMD_MSB 

    TWI data register(7) (r/w): Receive/transmit data (8-bit) MSB

    +
    TWI_DCMD_ACK 

    TWI data register(8) (r/w): RX = ACK/NACK, TX = MACK

    +
    TWI_DCMD_CMD_LO 

    TWI data register(9) (r/w): CMD lsb

    +
    TWI_DCMD_CMD_HI 

    TWI data register(10) (r/w): CMD msb

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_twi_available()

    + +
    +
    + + + + + + + +
    int neorv32_twi_available (void )
    +
    +

    Check if TWI unit was synthesized.

    +
    Returns
    0 if TWI was not synthesized, 1 if TWI is available.
    + +
    +
    + +

    ◆ neorv32_twi_busy()

    + +
    +
    + + + + + + + +
    int neorv32_twi_busy (void )
    +
    +

    Check if TWI is busy (TWI bus engine busy or TX FIFO not empty).

    +
    Returns
    0 if idle, 1 if busy
    + +
    +
    + +

    ◆ neorv32_twi_disable()

    + +
    +
    + + + + + + + +
    void neorv32_twi_disable (void )
    +
    +

    Disable TWI controller.

    + +
    +
    + +

    ◆ neorv32_twi_enable()

    + +
    +
    + + + + + + + +
    void neorv32_twi_enable (void )
    +
    +

    Enable TWI controller.

    + +
    +
    + +

    ◆ neorv32_twi_generate_start()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_start (void )
    +
    +

    Generate START (or REPEATED-START) condition.

    +
    Note
    Blocking function.
    + +
    +
    + +

    ◆ neorv32_twi_generate_start_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_start_nonblocking (void )
    +
    +

    Generate START (or REPEATED-START) condition.

    +
    Note
    Non-blocking function; does not check the TX FIFO.
    + +
    +
    + +

    ◆ neorv32_twi_generate_stop()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_stop (void )
    +
    +

    Generate STOP condition.

    +
    Note
    Blocking function.
    + +
    +
    + +

    ◆ neorv32_twi_generate_stop_nonblocking()

    + +
    +
    + + + + + + + +
    void neorv32_twi_generate_stop_nonblocking (void )
    +
    +

    Generate STOP condition.

    +
    Note
    Non-blocking function; does not check the TX FIFO.
    + +
    +
    + +

    ◆ neorv32_twi_get()

    + +
    +
    + + + + + + + +
    int neorv32_twi_get (uint8_t * data)
    +
    +

    Get received data + ACK/NACH from RX FIFO.

    +
    Parameters
    + + +
    [in,out]dataPointer for returned data (uint8_t).
    +
    +
    +
    Returns
    RX FIFO access status (-1 = no data available, 0 = ACK received, 1 = NACK received).
    + +
    +
    + +

    ◆ neorv32_twi_get_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_twi_get_fifo_depth (void )
    +
    +

    Get TWI FIFO depth.

    +
    Returns
    FIFO depth (number of entries), zero if no FIFO implemented
    + +
    +
    + +

    ◆ neorv32_twi_send_nonblocking()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_twi_send_nonblocking (uint8_t data,
    int mack )
    +
    +

    Send data byte (RX can be read via neorv32_twi_get()).

    +
    Note
    Non-blocking function; does not check the TX FIFO.
    +
    Parameters
    + + + +
    [in]dataData byte to be send.
    [in]mackGenerate ACK by host controller when set.
    +
    +
    + +
    +
    + +

    ◆ neorv32_twi_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_twi_setup (int prsc,
    int cdiv,
    int clkstr )
    +
    +

    Enable and configure TWI controller. The TWI control register bits are listed in NEORV32_TWI_CTRL_enum.

    +
    Parameters
    + + + + +
    [in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
    [in]cdivClock divider (0..15).
    [in]clkstrEnable (allow) clock stretching.
    +
    +
    + +
    +
    + +

    ◆ neorv32_twi_trans()

    + +
    +
    + + + + + + + + + + + +
    int neorv32_twi_trans (uint8_t * data,
    int mack )
    +
    +

    TWI transfer: send data byte and also receive data byte.

    +
    Note
    Blocking function.
    +
    Parameters
    + + + +
    [in,out]dataPointer for TX/RX data (uint8_t).
    [in]mackGenerate ACK by host controller when set.
    +
    +
    +
    Returns
    0: ACK received, 1: NACK received.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__twi_8h_source.html b/sw/neorv32__twi_8h_source.html new file mode 100644 index 0000000000..cdc153f933 --- /dev/null +++ b/sw/neorv32__twi_8h_source.html @@ -0,0 +1,215 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_twi.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_twi.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_twi_h
    +
    19#define neorv32_twi_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t DCMD;
    + +
    +
    33
    +
    35#define NEORV32_TWI ((neorv32_twi_t*) (NEORV32_TWI_BASE))
    +
    36
    + +
    56
    + +
    67/**********************************************************************/
    +
    71#define TWI_CMD_NOP (0b00) // no operation
    +
    72#define TWI_CMD_START (0b01) // generate start condition
    +
    73#define TWI_CMD_STOP (0b10) // generate stop condition
    +
    74#define TWI_CMD_RTX (0b11) // transmit+receive data byte
    +
    78/**********************************************************************/
    +
    82int neorv32_twi_available(void);
    +
    83void neorv32_twi_setup(int prsc, int cdiv, int clkstr);
    + +
    85void neorv32_twi_disable(void);
    +
    86void neorv32_twi_enable(void);
    +
    87
    +
    88int neorv32_twi_busy(void);
    +
    89int neorv32_twi_get(uint8_t *data);
    +
    90
    +
    91int neorv32_twi_trans(uint8_t *data, int mack);
    + + +
    94
    +
    95void neorv32_twi_send_nonblocking(uint8_t data, int mack);
    + + +
    101#endif // neorv32_twi_h
    +
    void neorv32_twi_enable(void)
    Definition neorv32_twi.c:81
    +
    void neorv32_twi_send_nonblocking(uint8_t data, int mack)
    Definition neorv32_twi.c:182
    +
    int neorv32_twi_get_fifo_depth(void)
    Definition neorv32_twi.c:62
    +
    NEORV32_TWI_DCMD_enum
    Definition neorv32_twi.h:58
    +
    @ TWI_DCMD_CMD_LO
    Definition neorv32_twi.h:62
    +
    @ TWI_DCMD_MSB
    Definition neorv32_twi.h:60
    +
    @ TWI_DCMD_CMD_HI
    Definition neorv32_twi.h:63
    +
    @ TWI_DCMD_LSB
    Definition neorv32_twi.h:59
    +
    @ TWI_DCMD_ACK
    Definition neorv32_twi.h:61
    +
    int neorv32_twi_busy(void)
    Definition neorv32_twi.c:92
    +
    void neorv32_twi_generate_start(void)
    Definition neorv32_twi.c:166
    +
    NEORV32_TWI_CTRL_enum
    Definition neorv32_twi.h:38
    +
    @ TWI_CTRL_FIFO_MSB
    Definition neorv32_twi.h:50
    +
    @ TWI_CTRL_EN
    Definition neorv32_twi.h:39
    +
    @ TWI_CTRL_BUSY
    Definition neorv32_twi.h:54
    +
    @ TWI_CTRL_CDIV1
    Definition neorv32_twi.h:44
    +
    @ TWI_CTRL_PRSC2
    Definition neorv32_twi.h:42
    +
    @ TWI_CTRL_FIFO_LSB
    Definition neorv32_twi.h:49
    +
    @ TWI_CTRL_CDIV0
    Definition neorv32_twi.h:43
    +
    @ TWI_CTRL_PRSC1
    Definition neorv32_twi.h:41
    +
    @ TWI_CTRL_PRSC0
    Definition neorv32_twi.h:40
    +
    @ TWI_CTRL_CDIV3
    Definition neorv32_twi.h:46
    +
    @ TWI_CTRL_TX_FULL
    Definition neorv32_twi.h:52
    +
    @ TWI_CTRL_CDIV2
    Definition neorv32_twi.h:45
    +
    @ TWI_CTRL_CLKSTR
    Definition neorv32_twi.h:47
    +
    @ TWI_CTRL_RX_AVAIL
    Definition neorv32_twi.h:53
    +
    int neorv32_twi_get(uint8_t *data)
    Definition neorv32_twi.c:109
    +
    void neorv32_twi_setup(int prsc, int cdiv, int clkstr)
    Definition neorv32_twi.c:44
    +
    void neorv32_twi_generate_stop_nonblocking(void)
    Definition neorv32_twi.c:196
    +
    int neorv32_twi_available(void)
    Definition neorv32_twi.c:26
    +
    int neorv32_twi_trans(uint8_t *data, int mack)
    Definition neorv32_twi.c:130
    +
    void neorv32_twi_generate_stop(void)
    Definition neorv32_twi.c:153
    +
    void neorv32_twi_generate_start_nonblocking(void)
    Definition neorv32_twi.c:207
    +
    void neorv32_twi_disable(void)
    Definition neorv32_twi.c:72
    +
    Definition neorv32_twi.h:29
    +
    uint32_t CTRL
    Definition neorv32_twi.h:30
    +
    uint32_t DCMD
    Definition neorv32_twi.h:31
    +
    + + +
    + + diff --git a/sw/neorv32__uart_8c.html b/sw/neorv32__uart_8c.html new file mode 100644 index 0000000000..97ce6b845b --- /dev/null +++ b/sw/neorv32__uart_8c.html @@ -0,0 +1,860 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_uart.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_uart.c File Reference
    +
    +
    + +

    Universal asynchronous receiver/transmitter (UART0/UART1) HW driver source file. +More...

    +
    #include "neorv32.h"
    +#include <string.h>
    +#include <stdarg.h>
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    static void __neorv32_uart_itoa (uint32_t x, char *res)
     
    static void __neorv32_uart_tohex (uint32_t x, char *res)
     
    static void __neorv32_uart_touppercase (uint32_t len, char *ptr)
     
    int neorv32_uart_available (neorv32_uart_t *UARTx)
     
    void neorv32_uart_setup (neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask)
     
    int neorv32_uart_get_rx_fifo_depth (neorv32_uart_t *UARTx)
     
    int neorv32_uart_get_tx_fifo_depth (neorv32_uart_t *UARTx)
     
    void neorv32_uart_enable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_disable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_rtscts_enable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_rtscts_disable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_putc (neorv32_uart_t *UARTx, char c)
     
    void neorv32_uart_rx_clear (neorv32_uart_t *UARTx)
     
    void neorv32_uart_tx_clear (neorv32_uart_t *UARTx)
     
    int neorv32_uart_tx_busy (neorv32_uart_t *UARTx)
     
    char neorv32_uart_getc (neorv32_uart_t *UARTx)
     
    int neorv32_uart_char_received (neorv32_uart_t *UARTx)
     
    char neorv32_uart_char_received_get (neorv32_uart_t *UARTx)
     
    void neorv32_uart_puts (neorv32_uart_t *UARTx, const char *s)
     
    void neorv32_uart_vprintf (neorv32_uart_t *UARTx, const char *format, va_list args)
     
    void neorv32_uart_printf (neorv32_uart_t *UARTx, const char *format,...)
     
    int neorv32_uart_scan (neorv32_uart_t *UARTx, char *buffer, int max_size, int echo)
     
    int putchar (int ch)
     
    int getchar (void)
     
    +

    Detailed Description

    +

    Universal asynchronous receiver/transmitter (UART0/UART1) HW driver source file.

    +
    Note
    These functions should only be used if the UART0/UART1 unit was synthesized.
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ __neorv32_uart_itoa()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    static void __neorv32_uart_itoa (uint32_t x,
    char * res )
    +
    +static
    +
    +

    Private function for 'neorv32_printf' to convert into decimal.

    +
    Parameters
    + + + +
    [in]xUnsigned input number.
    [in,out]resPointer for storing the resulting number string (11 chars).
    +
    +
    + +
    +
    + +

    ◆ __neorv32_uart_tohex()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    static void __neorv32_uart_tohex (uint32_t x,
    char * res )
    +
    +static
    +
    +

    Private function for 'neorv32_printf' to convert into hexadecimal.

    +
    Parameters
    + + + +
    [in]xUnsigned input number.
    [in,out]resPointer for storing the resulting number string (9 chars).
    +
    +
    + +
    +
    + +

    ◆ __neorv32_uart_touppercase()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    static void __neorv32_uart_touppercase (uint32_t len,
    char * ptr )
    +
    +static
    +
    +

    Private function to cast a string to UPPERCASE.

    +
    Parameters
    + + + +
    [in]lenTotal length of input string.
    [in,out]ptrPointer for input/output string.
    +
    +
    + +
    +
    + +

    ◆ getchar()

    + +
    +
    + + + + + + + +
    int getchar (void )
    +
    +

    STDIO: Read char from UART0.

    +
    Returns
    Read char.
    + +
    +
    + +

    ◆ neorv32_uart_available()

    + +
    +
    + + + + + + + +
    int neorv32_uart_available (neorv32_uart_t * UARTx)
    +
    +

    Check if UART unit was synthesized.

    +
    Parameters
    + + +
    [in,out]Hardwarehandle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    0 if UART0/1 was not synthesized, 1 if UART0/1 is available.
    + +
    +
    + +

    ◆ neorv32_uart_char_received()

    + +
    +
    + + + + + + + +
    int neorv32_uart_char_received (neorv32_uart_t * UARTx)
    +
    +

    Check if UART has received a char.

    +
    Note
    This function is non-blocking.
    +
    +Use neorv32_uart_char_received_get(void) to get the char.
    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    1 when a char has been received, 0 otherwise.
    + +
    +
    + +

    ◆ neorv32_uart_char_received_get()

    + +
    +
    + + + + + + + +
    char neorv32_uart_char_received_get (neorv32_uart_t * UARTx)
    +
    +

    Get a received char from UART.

    +
    Note
    This function is non-blocking.
    +
    +Should only be used in combination with neorv32_uart_char_received(void).
    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    Received char.
    + +
    +
    + +

    ◆ neorv32_uart_disable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_disable (neorv32_uart_t * UARTx)
    +
    +

    Disable UART.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_enable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_enable (neorv32_uart_t * UARTx)
    +
    +

    Enable UART.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_get_rx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_uart_get_rx_fifo_depth (neorv32_uart_t * UARTx)
    +
    +

    Get UART RX FIFO depth.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    FIFO depth (number of entries)
    + +
    +
    + +

    ◆ neorv32_uart_get_tx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_uart_get_tx_fifo_depth (neorv32_uart_t * UARTx)
    +
    +

    Get UART TX FIFO depth.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    FIFO depth (number of entries)
    + +
    +
    + +

    ◆ neorv32_uart_getc()

    + +
    +
    + + + + + + + +
    char neorv32_uart_getc (neorv32_uart_t * UARTx)
    +
    +

    Get char from UART.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    Received char.
    + +
    +
    + +

    ◆ neorv32_uart_printf()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_uart_printf (neorv32_uart_t * UARTx,
    const char * format,
    ... )
    +
    +

    Custom version of 'printf' printing to UART.

    +
    Warning
    : This functions only provides a minimal subset of the 'printf' formating features!
    +
    Note
    This function is blocking.
    +
    Parameters
    + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]formatPointer to format string. See neorv32_uart_vprintf.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_putc()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_uart_putc (neorv32_uart_t * UARTx,
    char c )
    +
    +

    Send single char via UART.

    +
    Parameters
    + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]cChar to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_puts()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_uart_puts (neorv32_uart_t * UARTx,
    const char * s )
    +
    +

    Print string (zero-terminated) via UART. Print full line break "\r\n" for every '
    +'.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]sPointer to string.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_rtscts_disable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_rtscts_disable (neorv32_uart_t * UARTx)
    +
    +

    Disable RTS/CTS hardware flow-control.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_rtscts_enable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_rtscts_enable (neorv32_uart_t * UARTx)
    +
    +

    Enable RTS/CTS hardware flow-control.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_rx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_uart_rx_clear (neorv32_uart_t * UARTx)
    +
    +

    Clear RX FIFO.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_scan()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int neorv32_uart_scan (neorv32_uart_t * UARTx,
    char * buffer,
    int max_size,
    int echo )
    +
    +

    Simplified custom version of 'scanf' reading from UART.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in,out]bufferPointer to array of chars to store string.
    [in]max_sizeMaximum number of chars to sample.
    [in]echoEcho UART input when 1.
    +
    +
    +
    Returns
    Number of chars read.
    + +
    +
    + +

    ◆ neorv32_uart_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_uart_setup (neorv32_uart_t * UARTx,
    uint32_t baudrate,
    uint32_t irq_mask )
    +
    +

    Reset, configure and enable UART.

    +
    Parameters
    + + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]baudrateTargeted BAUD rate (e.g. 19200).
    [in]irq_maskInterrupt configuration mask (CTRL's irq_* bits).
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_tx_busy()

    + +
    +
    + + + + + + + +
    int neorv32_uart_tx_busy (neorv32_uart_t * UARTx)
    +
    +

    Check if UART TX is busy (transmitter busy or data left in TX buffer).

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    0 if idle, 1 if busy
    + +
    +
    + +

    ◆ neorv32_uart_tx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_uart_tx_clear (neorv32_uart_t * UARTx)
    +
    +

    Clear TX FIFO.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_vprintf()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_uart_vprintf (neorv32_uart_t * UARTx,
    const char * format,
    va_list args )
    +
    +

    Custom version of 'vprintf' printing to UART.

    +
    Warning
    : This functions only provides a minimal subset of the 'vprintf' formating features!
    +
    Note
    This function is blocking.
    +
    Parameters
    + + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]formatPointer to format string.
    [in]argsA value identifying a variable arguments list.
    +
    +
    + +
    +
    + +

    ◆ putchar()

    + +
    +
    + + + + + + + +
    int putchar (int ch)
    +
    +

    STDIO: Send char via UART0

    +
    Parameters
    + + +
    [in]Charto be send.
    +
    +
    +
    Returns
    Char that has been sent.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__uart_8h.html b/sw/neorv32__uart_8h.html new file mode 100644 index 0000000000..a4133f1193 --- /dev/null +++ b/sw/neorv32__uart_8h.html @@ -0,0 +1,1012 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_uart.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_uart.h File Reference
    +
    +
    + +

    Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file. +More...

    +
    #include <stdint.h>
    +#include <stdarg.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_uart_t
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    UART wrappers for easy access
    +#define neorv32_uart0_available()   neorv32_uart_available(NEORV32_UART0)
     
    +#define neorv32_uart0_get_rx_fifo_depth()   neorv32_uart_get_rx_fifo_depth(NEORV32_UART0)
     
    +#define neorv32_uart0_get_tx_fifo_depth()   neorv32_uart_get_tx_fifo_depth(NEORV32_UART0)
     
    +#define neorv32_uart0_setup(baudrate, irq_mask)   neorv32_uart_setup(NEORV32_UART0, baudrate, irq_mask)
     
    +#define neorv32_uart0_disable()   neorv32_uart_disable(NEORV32_UART0)
     
    +#define neorv32_uart0_enable()   neorv32_uart_enable(NEORV32_UART0)
     
    +#define neorv32_uart0_rtscts_disable()   neorv32_uart_rtscts_disable(NEORV32_UART0)
     
    +#define neorv32_uart0_rtscts_enable()   neorv32_uart_rtscts_enable(NEORV32_UART0)
     
    +#define neorv32_uart0_putc(c)   neorv32_uart_putc(NEORV32_UART0, c)
     
    +#define neorv32_uart0_rx_clear()   neorv32_uart_rx_clear(NEORV32_UART0)
     
    +#define neorv32_uart0_tx_clear()   neorv32_uart_tx_clear(NEORV32_UART0)
     
    +#define neorv32_uart0_tx_busy()   neorv32_uart_tx_busy(NEORV32_UART0)
     
    +#define neorv32_uart0_getc()   neorv32_uart_getc(NEORV32_UART0)
     
    +#define neorv32_uart0_char_received()   neorv32_uart_char_received(NEORV32_UART0)
     
    +#define neorv32_uart0_char_received_get()   neorv32_uart_char_received_get(NEORV32_UART0)
     
    +#define neorv32_uart0_puts(s)   neorv32_uart_puts(NEORV32_UART0, s)
     
    +#define neorv32_uart0_printf(...)   neorv32_uart_printf(NEORV32_UART0, __VA_ARGS__)
     
    +#define neorv32_uart0_scan(buffer, max_size, echo)   neorv32_uart_scan(NEORV32_UART0, buffer, max_size, echo)
     
    +#define neorv32_uart1_available()   neorv32_uart_available(NEORV32_UART1)
     
    +#define neorv32_uart1_get_rx_fifo_depth()   neorv32_uart_get_rx_fifo_depth(NEORV32_UART1)
     
    +#define neorv32_uart1_get_tx_fifo_depth()   neorv32_uart_get_tx_fifo_depth(NEORV32_UART1)
     
    +#define neorv32_uart1_setup(baudrate, irq_mask)   neorv32_uart_setup(NEORV32_UART1, baudrate, irq_mask)
     
    +#define neorv32_uart1_disable()   neorv32_uart_disable(NEORV32_UART1)
     
    +#define neorv32_uart1_enable()   neorv32_uart_enable(NEORV32_UART1)
     
    +#define neorv32_uart1_rtscts_disable()   neorv32_uart_rtscts_disable(NEORV32_UART1)
     
    +#define neorv32_uart1_rtscts_enable()   neorv32_uart_rtscts_enable(NEORV32_UART1)
     
    +#define neorv32_uart1_putc(c)   neorv32_uart_putc(NEORV32_UART1, c)
     
    +#define neorv32_uart1_rx_clear()   neorv32_uart_rx_clear(NEORV32_UART1)
     
    +#define neorv32_uart1_tx_clear()   neorv32_uart_tx_clear(NEORV32_UART1)
     
    +#define neorv32_uart1_tx_busy()   neorv32_uart_tx_busy(NEORV32_UART1)
     
    +#define neorv32_uart1_getc()   neorv32_uart_getc(NEORV32_UART1)
     
    +#define neorv32_uart1_char_received()   neorv32_uart_char_received(NEORV32_UART1)
     
    +#define neorv32_uart1_char_received_get()   neorv32_uart_char_received_get(NEORV32_UART1)
     
    +#define neorv32_uart1_puts(s)   neorv32_uart_puts(NEORV32_UART1, s)
     
    +#define neorv32_uart1_printf(...)   neorv32_uart_printf(NEORV32_UART1, __VA_ARGS__)
     
    +#define neorv32_uart1_scan(buffer, max_size, echo)   neorv32_uart_scan(NEORV32_UART1, buffer, max_size, echo)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_uart_available (neorv32_uart_t *UARTx)
     
    int neorv32_uart_get_rx_fifo_depth (neorv32_uart_t *UARTx)
     
    int neorv32_uart_get_tx_fifo_depth (neorv32_uart_t *UARTx)
     
    void neorv32_uart_setup (neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask)
     
    void neorv32_uart_enable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_disable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_rtscts_enable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_rtscts_disable (neorv32_uart_t *UARTx)
     
    void neorv32_uart_putc (neorv32_uart_t *UARTx, char c)
     
    void neorv32_uart_rx_clear (neorv32_uart_t *UARTx)
     
    void neorv32_uart_tx_clear (neorv32_uart_t *UARTx)
     
    int neorv32_uart_tx_busy (neorv32_uart_t *UARTx)
     
    char neorv32_uart_getc (neorv32_uart_t *UARTx)
     
    int neorv32_uart_char_received (neorv32_uart_t *UARTx)
     
    char neorv32_uart_char_received_get (neorv32_uart_t *UARTx)
     
    void neorv32_uart_puts (neorv32_uart_t *UARTx, const char *s)
     
    void neorv32_uart_vprintf (neorv32_uart_t *UARTx, const char *format, va_list args)
     
    void neorv32_uart_printf (neorv32_uart_t *UARTx, const char *format,...)
     
    int neorv32_uart_scan (neorv32_uart_t *UARTx, char *buffer, int max_size, int echo)
     
    + + + + + + + + + +

    IO Device: Primary/Secondary Universal Asynchronous Receiver and Transmitter (UART0 / UART1)

    #define NEORV32_UART0   ((neorv32_uart_t*) (NEORV32_UART0_BASE))
     
    #define NEORV32_UART1   ((neorv32_uart_t*) (NEORV32_UART1_BASE))
     
    enum  NEORV32_UART_CTRL_enum {
    +  UART_CTRL_EN = 0 +, UART_CTRL_SIM_MODE = 1 +, UART_CTRL_HWFC_EN = 2 +, UART_CTRL_PRSC0 = 3 +,
    +  UART_CTRL_PRSC1 = 4 +, UART_CTRL_PRSC2 = 5 +, UART_CTRL_BAUD0 = 6 +, UART_CTRL_BAUD1 = 7 +,
    +  UART_CTRL_BAUD2 = 8 +, UART_CTRL_BAUD3 = 9 +, UART_CTRL_BAUD4 = 10 +, UART_CTRL_BAUD5 = 11 +,
    +  UART_CTRL_BAUD6 = 12 +, UART_CTRL_BAUD7 = 13 +, UART_CTRL_BAUD8 = 14 +, UART_CTRL_BAUD9 = 15 +,
    +  UART_CTRL_RX_NEMPTY = 16 +, UART_CTRL_RX_HALF = 17 +, UART_CTRL_RX_FULL = 18 +, UART_CTRL_TX_EMPTY = 19 +,
    +  UART_CTRL_TX_NHALF = 20 +, UART_CTRL_TX_FULL = 21 +, UART_CTRL_IRQ_RX_NEMPTY = 22 +, UART_CTRL_IRQ_RX_HALF = 23 +,
    +  UART_CTRL_IRQ_RX_FULL = 24 +, UART_CTRL_IRQ_TX_EMPTY = 25 +, UART_CTRL_IRQ_TX_NHALF = 26 +, UART_CTRL_RX_CLR = 28 +,
    +  UART_CTRL_TX_CLR = 29 +, UART_CTRL_RX_OVER = 30 +, UART_CTRL_TX_BUSY = 31 +
    + }
     
    enum  NEORV32_UART_DATA_enum {
    +  UART_DATA_RTX_LSB = 0 +, UART_DATA_RTX_MSB = 7 +, UART_DATA_RX_FIFO_SIZE_LSB = 8 +, UART_DATA_RX_FIFO_SIZE_MSB = 11 +,
    +  UART_DATA_TX_FIFO_SIZE_LSB = 12 +, UART_DATA_TX_FIFO_SIZE_MSB = 15 +
    + }
     
    +

    Detailed Description

    +

    Universal asynchronous receiver/transmitter (UART0/UART1) HW driver header file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_UART0

    + +
    +
    + + + + +
    #define NEORV32_UART0   ((neorv32_uart_t*) (NEORV32_UART0_BASE))
    +
    +

    UART0 module hardware access (neorv32_uart_t)

    + +
    +
    + +

    ◆ NEORV32_UART1

    + +
    +
    + + + + +
    #define NEORV32_UART1   ((neorv32_uart_t*) (NEORV32_UART1_BASE))
    +
    +

    UART1 module hardware access (neorv32_uart_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_UART_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_UART_CTRL_enum
    +
    +

    UART control register bits

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    UART_CTRL_EN 

    UART control register(0) (r/w): UART global enable

    +
    UART_CTRL_SIM_MODE 

    UART control register(1) (r/w): Simulation output override enable

    +
    UART_CTRL_HWFC_EN 

    UART control register(2) (r/w): Enable RTS/CTS hardware flow-control

    +
    UART_CTRL_PRSC0 

    UART control register(3) (r/w): clock prescaler select bit 0

    +
    UART_CTRL_PRSC1 

    UART control register(4) (r/w): clock prescaler select bit 1

    +
    UART_CTRL_PRSC2 

    UART control register(5) (r/w): clock prescaler select bit 2

    +
    UART_CTRL_BAUD0 

    UART control register(6) (r/w): BAUD rate divisor, bit 0

    +
    UART_CTRL_BAUD1 

    UART control register(7) (r/w): BAUD rate divisor, bit 1

    +
    UART_CTRL_BAUD2 

    UART control register(8) (r/w): BAUD rate divisor, bit 2

    +
    UART_CTRL_BAUD3 

    UART control register(9) (r/w): BAUD rate divisor, bit 3

    +
    UART_CTRL_BAUD4 

    UART control register(10) (r/w): BAUD rate divisor, bit 4

    +
    UART_CTRL_BAUD5 

    UART control register(11) (r/w): BAUD rate divisor, bit 5

    +
    UART_CTRL_BAUD6 

    UART control register(12) (r/w): BAUD rate divisor, bit 6

    +
    UART_CTRL_BAUD7 

    UART control register(13) (r/w): BAUD rate divisor, bit 7

    +
    UART_CTRL_BAUD8 

    UART control register(14) (r/w): BAUD rate divisor, bit 8

    +
    UART_CTRL_BAUD9 

    UART control register(15) (r/w): BAUD rate divisor, bit 9

    +
    UART_CTRL_RX_NEMPTY 

    UART control register(16) (r/-): RX FIFO not empty

    +
    UART_CTRL_RX_HALF 

    UART control register(17) (r/-): RX FIFO at least half-full

    +
    UART_CTRL_RX_FULL 

    UART control register(18) (r/-): RX FIFO full

    +
    UART_CTRL_TX_EMPTY 

    UART control register(19) (r/-): TX FIFO empty

    +
    UART_CTRL_TX_NHALF 

    UART control register(20) (r/-): TX FIFO not at least half-full

    +
    UART_CTRL_TX_FULL 

    UART control register(21) (r/-): TX FIFO full

    +
    UART_CTRL_IRQ_RX_NEMPTY 

    UART control register(22) (r/w): Fire IRQ if RX FIFO not empty

    +
    UART_CTRL_IRQ_RX_HALF 

    UART control register(23) (r/w): Fire IRQ if RX FIFO at least half-full

    +
    UART_CTRL_IRQ_RX_FULL 

    UART control register(24) (r/w): Fire IRQ if RX FIFO full

    +
    UART_CTRL_IRQ_TX_EMPTY 

    UART control register(25) (r/w): Fire IRQ if TX FIFO empty

    +
    UART_CTRL_IRQ_TX_NHALF 

    UART control register(26) (r/w): Fire IRQ if TX FIFO not at least half-full

    +
    UART_CTRL_RX_CLR 

    UART control register(28) (r/w): Clear RX FIFO, flag auto-clears

    +
    UART_CTRL_TX_CLR 

    UART control register(29) (r/w): Clear TX FIFO, flag auto-clears

    +
    UART_CTRL_RX_OVER 

    UART control register(30) (r/-): RX FIFO overflow

    +
    UART_CTRL_TX_BUSY 

    UART control register(31) (r/-): Transmitter busy or TX FIFO not empty

    +
    + +
    +
    + +

    ◆ NEORV32_UART_DATA_enum

    + +
    +
    + + + + +
    enum NEORV32_UART_DATA_enum
    +
    +

    UART data register bits

    + + + + + + + +
    Enumerator
    UART_DATA_RTX_LSB 

    UART data register(0) (r/w): UART receive/transmit data, LSB

    +
    UART_DATA_RTX_MSB 

    UART data register(7) (r/w): UART receive/transmit data, MSB

    +
    UART_DATA_RX_FIFO_SIZE_LSB 

    UART data register(8) (r/-): log2(RX FIFO size), LSB

    +
    UART_DATA_RX_FIFO_SIZE_MSB 

    UART data register(11) (r/-): log2(RX FIFO size), MSB

    +
    UART_DATA_TX_FIFO_SIZE_LSB 

    UART data register(12) (r/-): log2(RX FIFO size), LSB

    +
    UART_DATA_TX_FIFO_SIZE_MSB 

    UART data register(15) (r/-): log2(RX FIFO size), MSB

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_uart_available()

    + +
    +
    + + + + + + + +
    int neorv32_uart_available (neorv32_uart_t * UARTx)
    +
    +

    Check if UART unit was synthesized.

    +
    Parameters
    + + +
    [in,out]Hardwarehandle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    0 if UART0/1 was not synthesized, 1 if UART0/1 is available.
    + +
    +
    + +

    ◆ neorv32_uart_char_received()

    + +
    +
    + + + + + + + +
    int neorv32_uart_char_received (neorv32_uart_t * UARTx)
    +
    +

    Check if UART has received a char.

    +
    Note
    This function is non-blocking.
    +
    +Use neorv32_uart_char_received_get(void) to get the char.
    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    1 when a char has been received, 0 otherwise.
    + +
    +
    + +

    ◆ neorv32_uart_char_received_get()

    + +
    +
    + + + + + + + +
    char neorv32_uart_char_received_get (neorv32_uart_t * UARTx)
    +
    +

    Get a received char from UART.

    +
    Note
    This function is non-blocking.
    +
    +Should only be used in combination with neorv32_uart_char_received(void).
    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    Received char.
    + +
    +
    + +

    ◆ neorv32_uart_disable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_disable (neorv32_uart_t * UARTx)
    +
    +

    Disable UART.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_enable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_enable (neorv32_uart_t * UARTx)
    +
    +

    Enable UART.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_get_rx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_uart_get_rx_fifo_depth (neorv32_uart_t * UARTx)
    +
    +

    Get UART RX FIFO depth.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    FIFO depth (number of entries)
    + +
    +
    + +

    ◆ neorv32_uart_get_tx_fifo_depth()

    + +
    +
    + + + + + + + +
    int neorv32_uart_get_tx_fifo_depth (neorv32_uart_t * UARTx)
    +
    +

    Get UART TX FIFO depth.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    FIFO depth (number of entries)
    + +
    +
    + +

    ◆ neorv32_uart_getc()

    + +
    +
    + + + + + + + +
    char neorv32_uart_getc (neorv32_uart_t * UARTx)
    +
    +

    Get char from UART.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    Received char.
    + +
    +
    + +

    ◆ neorv32_uart_printf()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_uart_printf (neorv32_uart_t * UARTx,
    const char * format,
    ... )
    +
    +

    Custom version of 'printf' printing to UART.

    +
    Warning
    : This functions only provides a minimal subset of the 'printf' formating features!
    +
    Note
    This function is blocking.
    +
    Parameters
    + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]formatPointer to format string. See neorv32_uart_vprintf.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_putc()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_uart_putc (neorv32_uart_t * UARTx,
    char c )
    +
    +

    Send single char via UART.

    +
    Parameters
    + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]cChar to be send.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_puts()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_uart_puts (neorv32_uart_t * UARTx,
    const char * s )
    +
    +

    Print string (zero-terminated) via UART. Print full line break "\r\n" for every '
    +'.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]sPointer to string.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_rtscts_disable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_rtscts_disable (neorv32_uart_t * UARTx)
    +
    +

    Disable RTS/CTS hardware flow-control.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_rtscts_enable()

    + +
    +
    + + + + + + + +
    void neorv32_uart_rtscts_enable (neorv32_uart_t * UARTx)
    +
    +

    Enable RTS/CTS hardware flow-control.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_rx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_uart_rx_clear (neorv32_uart_t * UARTx)
    +
    +

    Clear RX FIFO.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_scan()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    int neorv32_uart_scan (neorv32_uart_t * UARTx,
    char * buffer,
    int max_size,
    int echo )
    +
    +

    Simplified custom version of 'scanf' reading from UART.

    +
    Note
    This function is blocking.
    +
    Parameters
    + + + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in,out]bufferPointer to array of chars to store string.
    [in]max_sizeMaximum number of chars to sample.
    [in]echoEcho UART input when 1.
    +
    +
    +
    Returns
    Number of chars read.
    + +
    +
    + +

    ◆ neorv32_uart_setup()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_uart_setup (neorv32_uart_t * UARTx,
    uint32_t baudrate,
    uint32_t irq_mask )
    +
    +

    Reset, configure and enable UART.

    +
    Parameters
    + + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]baudrateTargeted BAUD rate (e.g. 19200).
    [in]irq_maskInterrupt configuration mask (CTRL's irq_* bits).
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_tx_busy()

    + +
    +
    + + + + + + + +
    int neorv32_uart_tx_busy (neorv32_uart_t * UARTx)
    +
    +

    Check if UART TX is busy (transmitter busy or data left in TX buffer).

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    +
    Returns
    0 if idle, 1 if busy
    + +
    +
    + +

    ◆ neorv32_uart_tx_clear()

    + +
    +
    + + + + + + + +
    void neorv32_uart_tx_clear (neorv32_uart_t * UARTx)
    +
    +

    Clear TX FIFO.

    +
    Parameters
    + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    +
    +
    + +
    +
    + +

    ◆ neorv32_uart_vprintf()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void neorv32_uart_vprintf (neorv32_uart_t * UARTx,
    const char * format,
    va_list args )
    +
    +

    Custom version of 'vprintf' printing to UART.

    +
    Warning
    : This functions only provides a minimal subset of the 'vprintf' formating features!
    +
    Note
    This function is blocking.
    +
    Parameters
    + + + + +
    [in,out]UARTxHardware handle to UART register struct, neorv32_uart_t.
    [in]formatPointer to format string.
    [in]argsA value identifying a variable arguments list.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__uart_8h_source.html b/sw/neorv32__uart_8h_source.html new file mode 100644 index 0000000000..626d32d65d --- /dev/null +++ b/sw/neorv32__uart_8h_source.html @@ -0,0 +1,296 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_uart.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_uart.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_uart_h
    +
    17#define neorv32_uart_h
    +
    18
    +
    19#include <stdint.h>
    +
    20#include <stdarg.h>
    +
    21
    +
    22
    +
    23/**********************************************************************/
    +
    +
    28typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    29 uint32_t CTRL;
    +
    30 uint32_t DATA;
    + +
    +
    32
    +
    34#define NEORV32_UART0 ((neorv32_uart_t*) (NEORV32_UART0_BASE))
    +
    35
    +
    37#define NEORV32_UART1 ((neorv32_uart_t*) (NEORV32_UART1_BASE))
    +
    38
    + +
    76
    + +
    91/**********************************************************************/
    + + + +
    98void neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask);
    + + + + +
    103void neorv32_uart_putc(neorv32_uart_t *UARTx, char c);
    + + + + + + +
    110void neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s);
    +
    111void neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args);
    +
    112void neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format, ...);
    +
    113int neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo);
    +
    117/**********************************************************************/
    +
    121#define neorv32_uart0_available() neorv32_uart_available(NEORV32_UART0)
    +
    122#define neorv32_uart0_get_rx_fifo_depth() neorv32_uart_get_rx_fifo_depth(NEORV32_UART0)
    +
    123#define neorv32_uart0_get_tx_fifo_depth() neorv32_uart_get_tx_fifo_depth(NEORV32_UART0)
    +
    124#define neorv32_uart0_setup(baudrate, irq_mask) neorv32_uart_setup(NEORV32_UART0, baudrate, irq_mask)
    +
    125#define neorv32_uart0_disable() neorv32_uart_disable(NEORV32_UART0)
    +
    126#define neorv32_uart0_enable() neorv32_uart_enable(NEORV32_UART0)
    +
    127#define neorv32_uart0_rtscts_disable() neorv32_uart_rtscts_disable(NEORV32_UART0)
    +
    128#define neorv32_uart0_rtscts_enable() neorv32_uart_rtscts_enable(NEORV32_UART0)
    +
    129#define neorv32_uart0_putc(c) neorv32_uart_putc(NEORV32_UART0, c)
    +
    130#define neorv32_uart0_rx_clear() neorv32_uart_rx_clear(NEORV32_UART0)
    +
    131#define neorv32_uart0_tx_clear() neorv32_uart_tx_clear(NEORV32_UART0)
    +
    132#define neorv32_uart0_tx_busy() neorv32_uart_tx_busy(NEORV32_UART0)
    +
    133#define neorv32_uart0_getc() neorv32_uart_getc(NEORV32_UART0)
    +
    134#define neorv32_uart0_char_received() neorv32_uart_char_received(NEORV32_UART0)
    +
    135#define neorv32_uart0_char_received_get() neorv32_uart_char_received_get(NEORV32_UART0)
    +
    136#define neorv32_uart0_puts(s) neorv32_uart_puts(NEORV32_UART0, s)
    +
    137#define neorv32_uart0_printf(...) neorv32_uart_printf(NEORV32_UART0, __VA_ARGS__)
    +
    138#define neorv32_uart0_scan(buffer, max_size, echo) neorv32_uart_scan(NEORV32_UART0, buffer, max_size, echo)
    +
    139
    +
    140#define neorv32_uart1_available() neorv32_uart_available(NEORV32_UART1)
    +
    141#define neorv32_uart1_get_rx_fifo_depth() neorv32_uart_get_rx_fifo_depth(NEORV32_UART1)
    +
    142#define neorv32_uart1_get_tx_fifo_depth() neorv32_uart_get_tx_fifo_depth(NEORV32_UART1)
    +
    143#define neorv32_uart1_setup(baudrate, irq_mask) neorv32_uart_setup(NEORV32_UART1, baudrate, irq_mask)
    +
    144#define neorv32_uart1_disable() neorv32_uart_disable(NEORV32_UART1)
    +
    145#define neorv32_uart1_enable() neorv32_uart_enable(NEORV32_UART1)
    +
    146#define neorv32_uart1_rtscts_disable() neorv32_uart_rtscts_disable(NEORV32_UART1)
    +
    147#define neorv32_uart1_rtscts_enable() neorv32_uart_rtscts_enable(NEORV32_UART1)
    +
    148#define neorv32_uart1_putc(c) neorv32_uart_putc(NEORV32_UART1, c)
    +
    149#define neorv32_uart1_rx_clear() neorv32_uart_rx_clear(NEORV32_UART1)
    +
    150#define neorv32_uart1_tx_clear() neorv32_uart_tx_clear(NEORV32_UART1)
    +
    151#define neorv32_uart1_tx_busy() neorv32_uart_tx_busy(NEORV32_UART1)
    +
    152#define neorv32_uart1_getc() neorv32_uart_getc(NEORV32_UART1)
    +
    153#define neorv32_uart1_char_received() neorv32_uart_char_received(NEORV32_UART1)
    +
    154#define neorv32_uart1_char_received_get() neorv32_uart_char_received_get(NEORV32_UART1)
    +
    155#define neorv32_uart1_puts(s) neorv32_uart_puts(NEORV32_UART1, s)
    +
    156#define neorv32_uart1_printf(...) neorv32_uart_printf(NEORV32_UART1, __VA_ARGS__)
    +
    157#define neorv32_uart1_scan(buffer, max_size, echo) neorv32_uart_scan(NEORV32_UART1, buffer, max_size, echo)
    +
    161#endif // neorv32_uart_h
    +
    int neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:128
    +
    void neorv32_uart_tx_clear(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:209
    +
    char neorv32_uart_getc(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:240
    +
    void neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s)
    Definition neorv32_uart.c:293
    +
    void neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:162
    +
    void neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:173
    +
    void neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args)
    Definition neorv32_uart.c:315
    +
    void neorv32_uart_putc(neorv32_uart_t *UARTx, char c)
    Definition neorv32_uart.c:185
    +
    void neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask)
    Definition neorv32_uart.c:55
    +
    char neorv32_uart_char_received_get(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:279
    +
    int neorv32_uart_tx_busy(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:221
    +
    void neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...)
    Definition neorv32_uart.c:398
    +
    int neorv32_uart_available(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:34
    +
    int neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo)
    Definition neorv32_uart.c:418
    +
    NEORV32_UART_CTRL_enum
    Definition neorv32_uart.h:40
    +
    @ UART_CTRL_BAUD8
    Definition neorv32_uart.h:55
    +
    @ UART_CTRL_TX_BUSY
    Definition neorv32_uart.h:74
    +
    @ UART_CTRL_IRQ_TX_EMPTY
    Definition neorv32_uart.h:68
    +
    @ UART_CTRL_PRSC0
    Definition neorv32_uart.h:44
    +
    @ UART_CTRL_BAUD1
    Definition neorv32_uart.h:48
    +
    @ UART_CTRL_RX_NEMPTY
    Definition neorv32_uart.h:58
    +
    @ UART_CTRL_BAUD2
    Definition neorv32_uart.h:49
    +
    @ UART_CTRL_TX_FULL
    Definition neorv32_uart.h:63
    +
    @ UART_CTRL_EN
    Definition neorv32_uart.h:41
    +
    @ UART_CTRL_RX_HALF
    Definition neorv32_uart.h:59
    +
    @ UART_CTRL_TX_CLR
    Definition neorv32_uart.h:72
    +
    @ UART_CTRL_SIM_MODE
    Definition neorv32_uart.h:42
    +
    @ UART_CTRL_RX_FULL
    Definition neorv32_uart.h:60
    +
    @ UART_CTRL_IRQ_RX_NEMPTY
    Definition neorv32_uart.h:65
    +
    @ UART_CTRL_BAUD3
    Definition neorv32_uart.h:50
    +
    @ UART_CTRL_TX_NHALF
    Definition neorv32_uart.h:62
    +
    @ UART_CTRL_BAUD5
    Definition neorv32_uart.h:52
    +
    @ UART_CTRL_BAUD9
    Definition neorv32_uart.h:56
    +
    @ UART_CTRL_IRQ_TX_NHALF
    Definition neorv32_uart.h:69
    +
    @ UART_CTRL_RX_OVER
    Definition neorv32_uart.h:73
    +
    @ UART_CTRL_BAUD4
    Definition neorv32_uart.h:51
    +
    @ UART_CTRL_PRSC2
    Definition neorv32_uart.h:46
    +
    @ UART_CTRL_BAUD6
    Definition neorv32_uart.h:53
    +
    @ UART_CTRL_BAUD7
    Definition neorv32_uart.h:54
    +
    @ UART_CTRL_PRSC1
    Definition neorv32_uart.h:45
    +
    @ UART_CTRL_IRQ_RX_HALF
    Definition neorv32_uart.h:66
    +
    @ UART_CTRL_TX_EMPTY
    Definition neorv32_uart.h:61
    +
    @ UART_CTRL_HWFC_EN
    Definition neorv32_uart.h:43
    +
    @ UART_CTRL_BAUD0
    Definition neorv32_uart.h:47
    +
    @ UART_CTRL_IRQ_RX_FULL
    Definition neorv32_uart.h:67
    +
    @ UART_CTRL_RX_CLR
    Definition neorv32_uart.h:71
    +
    NEORV32_UART_DATA_enum
    Definition neorv32_uart.h:78
    +
    @ UART_DATA_RTX_MSB
    Definition neorv32_uart.h:80
    +
    @ UART_DATA_RX_FIFO_SIZE_LSB
    Definition neorv32_uart.h:82
    +
    @ UART_DATA_TX_FIFO_SIZE_LSB
    Definition neorv32_uart.h:85
    +
    @ UART_DATA_RX_FIFO_SIZE_MSB
    Definition neorv32_uart.h:83
    +
    @ UART_DATA_TX_FIFO_SIZE_MSB
    Definition neorv32_uart.h:86
    +
    @ UART_DATA_RTX_LSB
    Definition neorv32_uart.h:79
    +
    int neorv32_uart_char_received(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:259
    +
    void neorv32_uart_disable(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:151
    +
    int neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:114
    +
    void neorv32_uart_enable(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:140
    +
    void neorv32_uart_rx_clear(neorv32_uart_t *UARTx)
    Definition neorv32_uart.c:198
    +
    Definition neorv32_uart.h:28
    +
    uint32_t CTRL
    Definition neorv32_uart.h:29
    +
    uint32_t DATA
    Definition neorv32_uart.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__wdt_8c.html b/sw/neorv32__wdt_8c.html new file mode 100644 index 0000000000..d1ed7617a7 --- /dev/null +++ b/sw/neorv32__wdt_8c.html @@ -0,0 +1,254 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_wdt.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_wdt.c File Reference
    +
    +
    + +

    Direct Memory Access Controller (DMA) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + +

    +Functions

    int neorv32_wdt_available (void)
     
    void neorv32_wdt_setup (uint32_t timeout, int lock, int debug_en, int sleep_en, int strict)
     
    int neorv32_wdt_disable (void)
     
    void neorv32_wdt_feed (void)
     
    int neorv32_wdt_get_cause (void)
     
    +

    Detailed Description

    +

    Direct Memory Access Controller (DMA) HW driver source file.

    +

    Watchdog Timer (WDT) HW driver source file.

    +
    Note
    These functions should only be used if the DMA controller was synthesized (IO_DMA_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +
    Note
    These functions should only be used if the WDT unit was synthesized (IO_WDT_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_wdt_available()

    + +
    +
    + + + + + + + +
    int neorv32_wdt_available (void )
    +
    +

    Check if WDT unit was synthesized.

    +
    Returns
    0 if WDT was not synthesized, 1 if WDT is available.
    + +
    +
    + +

    ◆ neorv32_wdt_disable()

    + +
    +
    + + + + + + + +
    int neorv32_wdt_disable (void )
    +
    +

    Disable watchdog timer.

    +
    Returns
    Returns 0 if WDT is really deactivated, -1 otherwise.
    + +
    +
    + +

    ◆ neorv32_wdt_feed()

    + +
    +
    + + + + + + + +
    void neorv32_wdt_feed (void )
    +
    +

    Feed watchdog (reset timeout counter).

    + +
    +
    + +

    ◆ neorv32_wdt_get_cause()

    + +
    +
    + + + + + + + +
    int neorv32_wdt_get_cause (void )
    +
    +

    Get cause of last system reset.

    +
    Returns
    Cause of last reset (0: external reset, 1: OCD reset, 2: WDT reset).
    + +
    +
    + +

    ◆ neorv32_wdt_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_wdt_setup (uint32_t timeout,
    int lock,
    int debug_en,
    int sleep_en,
    int strict )
    +
    +

    Configure and enable watchdog timer. The WDT control register bits are listed in NEORV32_WDT_CTRL_enum.

    +
    Warning
    Once the lock bit is set it can only be removed by a hardware reset!
    +
    Parameters
    + + + + + + +
    [in]timeout24-bit timeout value. A WDT IRQ is triggered when the internal counter reaches 'timeout/2'. A system hardware reset is triggered when the internal counter reaches 'timeout'.
    [in]lockControl register will be locked when 1 (until next reset).
    [in]debug_enAllow watchdog to continue operation even when CPU is in debug mode.
    [in]sleep_enAllow watchdog to continue operation even when CPU is in sleep mode.
    [in]strictForce hardware reset if reset password is incorrect.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__wdt_8h.html b/sw/neorv32__wdt_8h.html new file mode 100644 index 0000000000..a658384eaa --- /dev/null +++ b/sw/neorv32__wdt_8h.html @@ -0,0 +1,383 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_wdt.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_wdt.h File Reference
    +
    +
    + +

    Watchdog Timer (WDT) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_wdt_t
     
    + + + +

    +Macros

    #define WDT_PASSWORD   (0x709D1AB3)
     
    + + + +

    +Enumerations

    enum  NEORV32_WDT_RCAUSE_enum { WDT_RCAUSE_EXT = 0b00 +, WDT_RCAUSE_OCD = 0b01 +, WDT_RCAUSE_WDT = 0b10 + }
     
    + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_wdt_available (void)
     
    void neorv32_wdt_setup (uint32_t timeout, int lock, int debug_en, int sleep_en, int strict)
     
    int neorv32_wdt_disable (void)
     
    void neorv32_wdt_feed (void)
     
    int neorv32_wdt_get_cause (void)
     
    + + + + + +

    IO Device: Watchdog Timer (WDT)

    #define NEORV32_WDT   ((neorv32_wdt_t*) (NEORV32_WDT_BASE))
     
    enum  NEORV32_WDT_CTRL_enum {
    +  WDT_CTRL_EN = 0 +, WDT_CTRL_LOCK = 1 +, WDT_CTRL_DBEN = 2 +, WDT_CTRL_SEN = 3 +,
    +  WDT_CTRL_STRICT = 4 +, WDT_CTRL_RCAUSE_LO = 5 +, WDT_CTRL_RCAUSE_HI = 6 +, WDT_CTRL_TIMEOUT_LSB = 8 +,
    +  WDT_CTRL_TIMEOUT_MSB = 31 +
    + }
     
    +

    Detailed Description

    +

    Watchdog Timer (WDT) HW driver header file.

    +
    Note
    These functions should only be used if the WDT unit was synthesized (IO_WDT_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_WDT

    + +
    +
    + + + + +
    #define NEORV32_WDT   ((neorv32_wdt_t*) (NEORV32_WDT_BASE))
    +
    +

    WDT module hardware access (neorv32_wdt_t)

    + +
    +
    + +

    ◆ WDT_PASSWORD

    + +
    +
    + + + + +
    #define WDT_PASSWORD   (0x709D1AB3)
    +
    +

    Reset Password

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_WDT_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_WDT_CTRL_enum
    +
    +

    WDT control register bits

    + + + + + + + + + + +
    Enumerator
    WDT_CTRL_EN 

    WDT control register(0) (r/w): Watchdog enable

    +
    WDT_CTRL_LOCK 

    WDT control register(1) (r/w): Lock write access to control register, clears on reset only

    +
    WDT_CTRL_DBEN 

    WDT control register(2) (r/w): Allow WDT to continue operation even when CPU is in debug mode

    +
    WDT_CTRL_SEN 

    WDT control register(3) (r/w): Allow WDT to continue operation even when CPU is in sleep mode

    +
    WDT_CTRL_STRICT 

    WDT control register(4) (r/w): Force hardware reset if reset password is incorrect or if write attempt to locked CTRL register

    +
    WDT_CTRL_RCAUSE_LO 

    WDT control register(5) (r/-): Cause of last system reset - low

    +
    WDT_CTRL_RCAUSE_HI 

    WDT control register(5) (r/-): Cause of last system reset - high

    +
    WDT_CTRL_TIMEOUT_LSB 

    WDT control register(8) (r/w): Timeout value, LSB

    +
    WDT_CTRL_TIMEOUT_MSB 

    WDT control register(31) (r/w): Timeout value, MSB

    +
    + +
    +
    + +

    ◆ NEORV32_WDT_RCAUSE_enum

    + +
    +
    + + + + +
    enum NEORV32_WDT_RCAUSE_enum
    +
    +

    Reset Cause

    + + + + +
    Enumerator
    WDT_RCAUSE_EXT 

    Reset caused by external signal/pin

    +
    WDT_RCAUSE_OCD 

    Reset caused by on-chip debugger

    +
    WDT_RCAUSE_WDT 

    Reset caused by watchdog timer

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_wdt_available()

    + +
    +
    + + + + + + + +
    int neorv32_wdt_available (void )
    +
    +

    Check if WDT unit was synthesized.

    +
    Returns
    0 if WDT was not synthesized, 1 if WDT is available.
    + +
    +
    + +

    ◆ neorv32_wdt_disable()

    + +
    +
    + + + + + + + +
    int neorv32_wdt_disable (void )
    +
    +

    Disable watchdog timer.

    +
    Returns
    Returns 0 if WDT is really deactivated, -1 otherwise.
    + +
    +
    + +

    ◆ neorv32_wdt_feed()

    + +
    +
    + + + + + + + +
    void neorv32_wdt_feed (void )
    +
    +

    Feed watchdog (reset timeout counter).

    + +
    +
    + +

    ◆ neorv32_wdt_get_cause()

    + +
    +
    + + + + + + + +
    int neorv32_wdt_get_cause (void )
    +
    +

    Get cause of last system reset.

    +
    Returns
    Cause of last reset (0: external reset, 1: OCD reset, 2: WDT reset).
    + +
    +
    + +

    ◆ neorv32_wdt_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_wdt_setup (uint32_t timeout,
    int lock,
    int debug_en,
    int sleep_en,
    int strict )
    +
    +

    Configure and enable watchdog timer. The WDT control register bits are listed in NEORV32_WDT_CTRL_enum.

    +
    Warning
    Once the lock bit is set it can only be removed by a hardware reset!
    +
    Parameters
    + + + + + + +
    [in]timeout24-bit timeout value. A WDT IRQ is triggered when the internal counter reaches 'timeout/2'. A system hardware reset is triggered when the internal counter reaches 'timeout'.
    [in]lockControl register will be locked when 1 (until next reset).
    [in]debug_enAllow watchdog to continue operation even when CPU is in debug mode.
    [in]sleep_enAllow watchdog to continue operation even when CPU is in sleep mode.
    [in]strictForce hardware reset if reset password is incorrect.
    +
    +
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__wdt_8h_source.html b/sw/neorv32__wdt_8h_source.html new file mode 100644 index 0000000000..fec1a6895c --- /dev/null +++ b/sw/neorv32__wdt_8h_source.html @@ -0,0 +1,183 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_wdt.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_wdt.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_wdt_h
    +
    19#define neorv32_wdt_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 uint32_t RESET;
    + +
    +
    33
    +
    35#define NEORV32_WDT ((neorv32_wdt_t*) (NEORV32_WDT_BASE))
    +
    36
    + +
    53/**********************************************************************/
    +
    56#define WDT_PASSWORD (0x709D1AB3)
    +
    57
    +
    58
    +
    59/**********************************************************************/
    + +
    67
    +
    68
    +
    69/**********************************************************************/
    +
    73int neorv32_wdt_available(void);
    +
    74void neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict);
    +
    75int neorv32_wdt_disable(void);
    +
    76void neorv32_wdt_feed(void);
    +
    77int neorv32_wdt_get_cause(void);
    +
    81#endif // neorv32_wdt_h
    +
    NEORV32_WDT_CTRL_enum
    Definition neorv32_wdt.h:38
    +
    @ WDT_CTRL_EN
    Definition neorv32_wdt.h:39
    +
    @ WDT_CTRL_RCAUSE_LO
    Definition neorv32_wdt.h:44
    +
    @ WDT_CTRL_TIMEOUT_MSB
    Definition neorv32_wdt.h:48
    +
    @ WDT_CTRL_STRICT
    Definition neorv32_wdt.h:43
    +
    @ WDT_CTRL_TIMEOUT_LSB
    Definition neorv32_wdt.h:47
    +
    @ WDT_CTRL_DBEN
    Definition neorv32_wdt.h:41
    +
    @ WDT_CTRL_RCAUSE_HI
    Definition neorv32_wdt.h:45
    +
    @ WDT_CTRL_SEN
    Definition neorv32_wdt.h:42
    +
    @ WDT_CTRL_LOCK
    Definition neorv32_wdt.h:40
    +
    void neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict)
    Definition neorv32_wdt.c:49
    +
    void neorv32_wdt_feed(void)
    Definition neorv32_wdt.c:93
    +
    int neorv32_wdt_available(void)
    Definition neorv32_wdt.c:26
    +
    NEORV32_WDT_RCAUSE_enum
    Definition neorv32_wdt.h:62
    +
    @ WDT_RCAUSE_OCD
    Definition neorv32_wdt.h:64
    +
    @ WDT_RCAUSE_WDT
    Definition neorv32_wdt.h:65
    +
    @ WDT_RCAUSE_EXT
    Definition neorv32_wdt.h:63
    +
    int neorv32_wdt_get_cause(void)
    Definition neorv32_wdt.c:104
    +
    int neorv32_wdt_disable(void)
    Definition neorv32_wdt.c:74
    +
    Definition neorv32_wdt.h:29
    +
    uint32_t RESET
    Definition neorv32_wdt.h:31
    +
    uint32_t CTRL
    Definition neorv32_wdt.h:30
    +
    + + +
    + + diff --git a/sw/neorv32__xip_8c.html b/sw/neorv32__xip_8c.html new file mode 100644 index 0000000000..1abc5b8756 --- /dev/null +++ b/sw/neorv32__xip_8c.html @@ -0,0 +1,312 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_xip.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_xip.c File Reference
    +
    +
    + +

    Execute in place module (XIP) HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + +

    +Functions

    int neorv32_xip_available (void)
     
    void neorv32_xip_setup (int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd)
     
    int neorv32_xip_start (int abytes)
     
    void neorv32_xip_highspeed_enable (void)
     
    void neorv32_xip_highspeed_disable (void)
     
    uint32_t neorv32_xip_get_clock_speed (void)
     
    void neorv32_xip_spi_trans (int nbytes, uint64_t *rtx_data)
     
    +

    Detailed Description

    +

    Execute in place module (XIP) HW driver source file.

    +
    Note
    These functions should only be used if the XIP module was synthesized (IO_XIP_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ neorv32_xip_available()

    + +
    +
    + + + + + + + +
    int neorv32_xip_available (void )
    +
    +

    Check if XIP module was synthesized.

    +
    Returns
    0 if XIP was not synthesized, 1 if XIP is available.
    + +
    +
    + +

    ◆ neorv32_xip_get_clock_speed()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_xip_get_clock_speed (void )
    +
    +

    Get configured clock speed in Hz.

    +
    Returns
    Actual configured XIP clock speed in Hz.
    + +
    +
    + +

    ◆ neorv32_xip_highspeed_disable()

    + +
    +
    + + + + + + + +
    void neorv32_xip_highspeed_disable (void )
    +
    +

    Disable high-speed SPI mode.

    + +
    +
    + +

    ◆ neorv32_xip_highspeed_enable()

    + +
    +
    + + + + + + + +
    void neorv32_xip_highspeed_enable (void )
    +
    +

    Enable high-speed SPI mode (running at half of the processor clock).

    +
    Note
    High-speed SPI mode ignores the programmed clock prescaler configuration.
    + +
    +
    + +

    ◆ neorv32_xip_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_xip_setup (int prsc,
    int cdiv,
    int cpol,
    int cpha,
    uint8_t rd_cmd )
    +
    +

    Configure XIP module: configure SPI/flash properties.

    +
    Warning
    This will reset the XIP module overriding the CTRL register.
    +
    Note
    This function will also send 64 dummy clocks via the SPI port (with chip-select disabled).
    +
    Parameters
    + + + + + +
    [in]prscSPI clock prescaler select (0..7). @prama[in] cdiv Clock divider (0..15).
    [in]cpolSPI clock polarity (0/1).
    [in]cphaSPI clock phase(0/1).
    [in]rd_cmdSPI flash read byte command.
    +
    +
    + +
    +
    + +

    ◆ neorv32_xip_spi_trans()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_xip_spi_trans (int nbytes,
    uint64_t * rtx_data )
    +
    +

    Direct SPI access to the XIP flash.

    +
    Warning
    This function can only be used BEFORE the XIP-mode is activated!
    +
    Note
    This function is blocking.
    +
    Parameters
    + + + +
    [in]nbytesNumber of bytes to transfer (1..8).
    [in,out]rtx_dataPointer to 64-bit TX/RX data (MSB-aligned for sending, LSB-aligned for receiving (only 32-bit)).
    +
    +
    +
    Returns
    0 if valid transfer, 1 if transfer configuration error.
    + +
    +
    + +

    ◆ neorv32_xip_start()

    + +
    +
    + + + + + + + +
    int neorv32_xip_start (int abytes)
    +
    +

    Enable XIP mode (to allow CPU to transparently fetch data & instructions).

    +
    Parameters
    + + +
    [in]abytesNumber of address bytes used to access the SPI flash (1,2,3,4).
    +
    +
    +
    Returns
    0 if XIP configuration is OK, -1 if configuration error.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__xip_8h.html b/sw/neorv32__xip_8h.html new file mode 100644 index 0000000000..308ddb65ef --- /dev/null +++ b/sw/neorv32__xip_8h.html @@ -0,0 +1,433 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xip.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_xip.h File Reference
    +
    +
    + +

    Execute in place module (XIP) HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_xip_t
     
    + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_xip_available (void)
     
    void neorv32_xip_setup (int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd)
     
    int neorv32_xip_start (int abytes)
     
    void neorv32_xip_highspeed_enable (void)
     
    void neorv32_xip_highspeed_disable (void)
     
    uint32_t neorv32_xip_get_clock_speed (void)
     
    void neorv32_xip_spi_trans (int nbytes, uint64_t *rtx_data)
     
    + + + + + +

    IO Device: Execute In Place Module (XIP)

    #define NEORV32_XIP   ((neorv32_xip_t*) (NEORV32_XIP_BASE))
     
    enum  NEORV32_XIP_CTRL_enum {
    +  XIP_CTRL_EN = 0 +, XIP_CTRL_PRSC0 = 1 +, XIP_CTRL_PRSC1 = 2 +, XIP_CTRL_PRSC2 = 3 +,
    +  XIP_CTRL_CPOL = 4 +, XIP_CTRL_CPHA = 5 +, XIP_CTRL_SPI_NBYTES_LSB = 6 +, XIP_CTRL_SPI_NBYTES_MSB = 9 +,
    +  XIP_CTRL_XIP_EN = 10 +, XIP_CTRL_XIP_ABYTES_LSB = 11 +, XIP_CTRL_XIP_ABYTES_MSB = 12 +, XIP_CTRL_RD_CMD_LSB = 13 +,
    +  XIP_CTRL_RD_CMD_MSB = 20 +, XIP_CTRL_SPI_CSEN = 21 +, XIP_CTRL_HIGHSPEED = 22 +, XIP_CTRL_CDIV0 = 23 +,
    +  XIP_CTRL_CDIV1 = 24 +, XIP_CTRL_CDIV2 = 25 +, XIP_CTRL_CDIV3 = 26 +, XIP_CTRL_BURST_EN = 29 +,
    +  XIP_CTRL_PHY_BUSY = 30 +, XIP_CTRL_XIP_BUSY = 31 +
    + }
     
    +

    Detailed Description

    +

    Execute in place module (XIP) HW driver header file.

    +
    Note
    These functions should only be used if the XIP module was synthesized (IO_XIP_EN = true).
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_XIP

    + +
    +
    + + + + +
    #define NEORV32_XIP   ((neorv32_xip_t*) (NEORV32_XIP_BASE))
    +
    +

    XIP module hardware access (neorv32_xip_t)

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ NEORV32_XIP_CTRL_enum

    + +
    +
    + + + + +
    enum NEORV32_XIP_CTRL_enum
    +
    +

    XIP control/data register bits

    + + + + + + + + + + + + + + + + + + + + + + + +
    Enumerator
    XIP_CTRL_EN 

    XIP control register( 0) (r/w): XIP module enable

    +
    XIP_CTRL_PRSC0 

    XIP control register( 1) (r/w): Clock prescaler select bit 0

    +
    XIP_CTRL_PRSC1 

    XIP control register( 2) (r/w): Clock prescaler select bit 1

    +
    XIP_CTRL_PRSC2 

    XIP control register( 3) (r/w): Clock prescaler select bit 2

    +
    XIP_CTRL_CPOL 

    XIP control register( 4) (r/w): SPI (idle) clock polarity

    +
    XIP_CTRL_CPHA 

    XIP control register( 5) (r/w): SPI clock phase

    +
    XIP_CTRL_SPI_NBYTES_LSB 

    XIP control register( 6) (r/w): Number of bytes in SPI transmission, LSB

    +
    XIP_CTRL_SPI_NBYTES_MSB 

    XIP control register( 9) (r/w): Number of bytes in SPI transmission, MSB

    +
    XIP_CTRL_XIP_EN 

    XIP control register(10) (r/w): XIP access enable

    +
    XIP_CTRL_XIP_ABYTES_LSB 

    XIP control register(11) (r/w): Number XIP address bytes (minus 1), LSB

    +
    XIP_CTRL_XIP_ABYTES_MSB 

    XIP control register(12) (r/w): Number XIP address bytes (minus 1), MSB

    +
    XIP_CTRL_RD_CMD_LSB 

    XIP control register(13) (r/w): SPI flash read command, LSB

    +
    XIP_CTRL_RD_CMD_MSB 

    XIP control register(20) (r/w): SPI flash read command, MSB

    +
    XIP_CTRL_SPI_CSEN 

    XIP control register(21) (r/w): SPI chip-select enable

    +
    XIP_CTRL_HIGHSPEED 

    XIP control register(22) (r/w): SPI high-speed mode enable (ignoring XIP_CTRL_PRSC)

    +
    XIP_CTRL_CDIV0 

    XIP control register(23) (r/w): Clock divider bit 0

    +
    XIP_CTRL_CDIV1 

    XIP control register(24) (r/w): Clock divider bit 1

    +
    XIP_CTRL_CDIV2 

    XIP control register(25) (r/w): Clock divider bit 2

    +
    XIP_CTRL_CDIV3 

    XIP control register(26) (r/w): Clock divider bit 3

    +
    XIP_CTRL_BURST_EN 

    XIP control register(29) (r/-): Burst mode enabled (set if XIP cache is implemented)

    +
    XIP_CTRL_PHY_BUSY 

    XIP control register(30) (r/-): SPI PHY is busy

    +
    XIP_CTRL_XIP_BUSY 

    XIP control register(31) (r/-): XIP access in progress

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_xip_available()

    + +
    +
    + + + + + + + +
    int neorv32_xip_available (void )
    +
    +

    Check if XIP module was synthesized.

    +
    Returns
    0 if XIP was not synthesized, 1 if XIP is available.
    + +
    +
    + +

    ◆ neorv32_xip_get_clock_speed()

    + +
    +
    + + + + + + + +
    uint32_t neorv32_xip_get_clock_speed (void )
    +
    +

    Get configured clock speed in Hz.

    +
    Returns
    Actual configured XIP clock speed in Hz.
    + +
    +
    + +

    ◆ neorv32_xip_highspeed_disable()

    + +
    +
    + + + + + + + +
    void neorv32_xip_highspeed_disable (void )
    +
    +

    Disable high-speed SPI mode.

    + +
    +
    + +

    ◆ neorv32_xip_highspeed_enable()

    + +
    +
    + + + + + + + +
    void neorv32_xip_highspeed_enable (void )
    +
    +

    Enable high-speed SPI mode (running at half of the processor clock).

    +
    Note
    High-speed SPI mode ignores the programmed clock prescaler configuration.
    + +
    +
    + +

    ◆ neorv32_xip_setup()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void neorv32_xip_setup (int prsc,
    int cdiv,
    int cpol,
    int cpha,
    uint8_t rd_cmd )
    +
    +

    Configure XIP module: configure SPI/flash properties.

    +
    Warning
    This will reset the XIP module overriding the CTRL register.
    +
    Note
    This function will also send 64 dummy clocks via the SPI port (with chip-select disabled).
    +
    Parameters
    + + + + + +
    [in]prscSPI clock prescaler select (0..7). @prama[in] cdiv Clock divider (0..15).
    [in]cpolSPI clock polarity (0/1).
    [in]cphaSPI clock phase(0/1).
    [in]rd_cmdSPI flash read byte command.
    +
    +
    + +
    +
    + +

    ◆ neorv32_xip_spi_trans()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_xip_spi_trans (int nbytes,
    uint64_t * rtx_data )
    +
    +

    Direct SPI access to the XIP flash.

    +
    Warning
    This function can only be used BEFORE the XIP-mode is activated!
    +
    Note
    This function is blocking.
    +
    Parameters
    + + + +
    [in]nbytesNumber of bytes to transfer (1..8).
    [in,out]rtx_dataPointer to 64-bit TX/RX data (MSB-aligned for sending, LSB-aligned for receiving (only 32-bit)).
    +
    +
    +
    Returns
    0 if valid transfer, 1 if transfer configuration error.
    + +
    +
    + +

    ◆ neorv32_xip_start()

    + +
    +
    + + + + + + + +
    int neorv32_xip_start (int abytes)
    +
    +

    Enable XIP mode (to allow CPU to transparently fetch data & instructions).

    +
    Parameters
    + + +
    [in]abytesNumber of address bytes used to access the SPI flash (1,2,3,4).
    +
    +
    +
    Returns
    0 if XIP configuration is OK, -1 if configuration error.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__xip_8h_source.html b/sw/neorv32__xip_8h_source.html new file mode 100644 index 0000000000..fc0878b395 --- /dev/null +++ b/sw/neorv32__xip_8h_source.html @@ -0,0 +1,199 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xip.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_xip.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    18#ifndef neorv32_xip_h
    +
    19#define neorv32_xip_h
    +
    20
    +
    21#include <stdint.h>
    +
    22
    +
    23
    +
    24/**********************************************************************/
    +
    +
    29typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    30 uint32_t CTRL;
    +
    31 const uint32_t reserved;
    +
    32 uint32_t DATA_LO;
    +
    33 uint32_t DATA_HI;
    + +
    +
    35
    +
    37#define NEORV32_XIP ((neorv32_xip_t*) (NEORV32_XIP_BASE))
    +
    38
    + +
    68/**********************************************************************/
    +
    72int neorv32_xip_available(void);
    +
    73void neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd);
    +
    74int neorv32_xip_start(int abytes);
    + + +
    77uint32_t neorv32_xip_get_clock_speed(void);
    +
    78void neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data);
    +
    82#endif // neorv32_xip_h
    +
    int neorv32_xip_start(int abytes)
    Definition neorv32_xip.c:86
    +
    void neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd)
    Definition neorv32_xip.c:49
    +
    void neorv32_xip_highspeed_enable(void)
    Definition neorv32_xip.c:116
    +
    NEORV32_XIP_CTRL_enum
    Definition neorv32_xip.h:40
    +
    @ XIP_CTRL_SPI_NBYTES_LSB
    Definition neorv32_xip.h:47
    +
    @ XIP_CTRL_EN
    Definition neorv32_xip.h:41
    +
    @ XIP_CTRL_XIP_BUSY
    Definition neorv32_xip.h:63
    +
    @ XIP_CTRL_RD_CMD_MSB
    Definition neorv32_xip.h:53
    +
    @ XIP_CTRL_XIP_EN
    Definition neorv32_xip.h:49
    +
    @ XIP_CTRL_CDIV2
    Definition neorv32_xip.h:58
    +
    @ XIP_CTRL_XIP_ABYTES_MSB
    Definition neorv32_xip.h:51
    +
    @ XIP_CTRL_SPI_CSEN
    Definition neorv32_xip.h:54
    +
    @ XIP_CTRL_SPI_NBYTES_MSB
    Definition neorv32_xip.h:48
    +
    @ XIP_CTRL_XIP_ABYTES_LSB
    Definition neorv32_xip.h:50
    +
    @ XIP_CTRL_CDIV3
    Definition neorv32_xip.h:59
    +
    @ XIP_CTRL_PRSC0
    Definition neorv32_xip.h:42
    +
    @ XIP_CTRL_CDIV1
    Definition neorv32_xip.h:57
    +
    @ XIP_CTRL_PHY_BUSY
    Definition neorv32_xip.h:62
    +
    @ XIP_CTRL_BURST_EN
    Definition neorv32_xip.h:61
    +
    @ XIP_CTRL_RD_CMD_LSB
    Definition neorv32_xip.h:52
    +
    @ XIP_CTRL_PRSC2
    Definition neorv32_xip.h:44
    +
    @ XIP_CTRL_CPOL
    Definition neorv32_xip.h:45
    +
    @ XIP_CTRL_HIGHSPEED
    Definition neorv32_xip.h:55
    +
    @ XIP_CTRL_CPHA
    Definition neorv32_xip.h:46
    +
    @ XIP_CTRL_PRSC1
    Definition neorv32_xip.h:43
    +
    @ XIP_CTRL_CDIV0
    Definition neorv32_xip.h:56
    +
    uint32_t neorv32_xip_get_clock_speed(void)
    Definition neorv32_xip.c:136
    +
    void neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data)
    Definition neorv32_xip.c:167
    +
    void neorv32_xip_highspeed_disable(void)
    Definition neorv32_xip.c:125
    +
    int neorv32_xip_available(void)
    Definition neorv32_xip.c:26
    +
    Definition neorv32_xip.h:29
    +
    uint32_t DATA_HI
    Definition neorv32_xip.h:33
    +
    uint32_t CTRL
    Definition neorv32_xip.h:30
    +
    const uint32_t reserved
    Definition neorv32_xip.h:31
    +
    uint32_t DATA_LO
    Definition neorv32_xip.h:32
    +
    + + +
    + + diff --git a/sw/neorv32__xirq_8c.html b/sw/neorv32__xirq_8c.html new file mode 100644 index 0000000000..465355fcfc --- /dev/null +++ b/sw/neorv32__xirq_8c.html @@ -0,0 +1,479 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/neorv32_xirq.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_xirq.c File Reference
    +
    +
    + +

    External Interrupt controller HW driver source file. +More...

    +
    #include "neorv32.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    static void __neorv32_xirq_core (void)
     
    static void __neorv32_xirq_dummy_handler (void)
     
    int neorv32_xirq_available (void)
     
    int neorv32_xirq_setup (void)
     
    void neorv32_xirq_global_enable (void)
     
    void neorv32_xirq_global_disable (void)
     
    int neorv32_xirq_get_num (void)
     
    void neorv32_xirq_setup_trigger (int channel, int config)
     
    void neorv32_xirq_clear_pending (int channel)
     
    void neorv32_xirq_channel_enable (int channel)
     
    void neorv32_xirq_channel_disable (int channel)
     
    int neorv32_xirq_install (int channel, void(*handler)(void))
     
    int neorv32_xirq_uninstall (int channel)
     
    + + + +

    +Variables

    static uint32_t __neorv32_xirq_vector_lut [32]
     
    +

    Detailed Description

    +

    External Interrupt controller HW driver source file.

    +
    Note
    These functions should only be used if the XIRQ controller was synthesized.
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Function Documentation

    + +

    ◆ __neorv32_xirq_core()

    + +
    +
    + + + + + +
    + + + + + + + +
    static void __neorv32_xirq_core (void )
    +
    +static
    +
    +

    This is the actual second-level (F)IRQ handler for the XIRQ. It will call the previously installed handler if an XIRQ fires.

    + +
    +
    + +

    ◆ __neorv32_xirq_dummy_handler()

    + +
    +
    + + + + + +
    + + + + + + + +
    static void __neorv32_xirq_dummy_handler (void )
    +
    +static
    +
    +

    XIRQ dummy handler.

    + +
    +
    + +

    ◆ neorv32_xirq_available()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_available (void )
    +
    +

    Check if external interrupt controller was synthesized.

    +
    Returns
    0 if XIRQ was not synthesized, 1 if EXTIRQ is available.
    + +
    +
    + +

    ◆ neorv32_xirq_channel_disable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_channel_disable (int channel)
    +
    +

    Disable IRQ channel.

    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_channel_enable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_channel_enable (int channel)
    +
    +

    Enable IRQ channel.

    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_clear_pending()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_clear_pending (int channel)
    +
    +

    Clear pending interrupt.

    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_get_num()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_get_num (void )
    +
    +

    Get number of implemented XIRQ channels

    +
    Returns
    Number of implemented channels (0..32).
    + +
    +
    + +

    ◆ neorv32_xirq_global_disable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_global_disable (void )
    +
    +

    Globally disable XIRQ interrupts (via according FIRQ channel).

    +
    Note
    Triggered / triggering XIRQ will remain pending.
    + +
    +
    + +

    ◆ neorv32_xirq_global_enable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_global_enable (void )
    +
    +

    Globally enable XIRQ interrupts (via according FIRQ channel).

    +
    Note
    Triggered / triggering XIRQ will remain pending.
    + +
    +
    + +

    ◆ neorv32_xirq_install()

    + +
    +
    + + + + + + + + + + + +
    int neorv32_xirq_install (int channel,
    void(* handler )(void) )
    +
    +

    Install interrupt handler function for XIRQ channel.

    +
    Parameters
    + + + +
    [in]channelXIRQ interrupt channel (0..31).
    [in]handlerThe actual handler function for the specified interrupt (function MUST be of type "void function(void);").
    +
    +
    +
    Returns
    0 if success, 1 if error.
    + +
    +
    + +

    ◆ neorv32_xirq_setup()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_setup (void )
    +
    +

    Initialize XIRQ controller.

    +
    Note
    All interrupt channels will be deactivated, all pending IRQs will be deleted and all handler addresses will be deleted.
    +
    Returns
    0 if success, != 0 if error.
    + +
    +
    + +

    ◆ neorv32_xirq_setup_trigger()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_xirq_setup_trigger (int channel,
    int config )
    +
    +

    Configure a channel's trigger type.

    +
    Parameters
    + + + +
    [in]channelXIRQ interrupt channel (0..31).
    [in]configTrigger type: 00 = low-level, 01 = high-level, 10 = falling-edge, 11 = rising-edge.
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_uninstall()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_uninstall (int channel)
    +
    +

    Uninstall interrupt handler function for XIRQ channel.

    +
    Note
    This will also deactivate the according XIRQ channel.
    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    +
    Returns
    0 if success, 1 if error.
    + +
    +
    +

    Variable Documentation

    + +

    ◆ __neorv32_xirq_vector_lut

    + +
    +
    + + + + + +
    + + + + +
    uint32_t __neorv32_xirq_vector_lut[32]
    +
    +static
    +
    +

    The >private< trap vector look-up table of the XIRQ.

    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__xirq_8h.html b/sw/neorv32__xirq_8h.html new file mode 100644 index 0000000000..92737d19ab --- /dev/null +++ b/sw/neorv32__xirq_8h.html @@ -0,0 +1,491 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xirq.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    neorv32_xirq.h File Reference
    +
    +
    + +

    External Interrupt controller HW driver header file. +More...

    +
    #include <stdint.h>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  neorv32_xirq_t
     
    + + + + + + + + + + + + + +

    +Macros

    IO Device: External Interrupt Controller (XIRQ)
    #define NEORV32_XIRQ   ((neorv32_xirq_t*) (NEORV32_XIRQ_BASE))
     
    #define XIRQ_TRIGGER_LEVEL_LOW   (0b00)
     
    #define XIRQ_TRIGGER_LEVEL_HIGH   (0b01)
     
    #define XIRQ_TRIGGER_EDGE_FALLING   (0b10)
     
    #define XIRQ_TRIGGER_EDGE_RISING   (0b11)
     
    + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    Prototypes
    int neorv32_xirq_available (void)
     
    int neorv32_xirq_setup (void)
     
    void neorv32_xirq_global_enable (void)
     
    void neorv32_xirq_global_disable (void)
     
    int neorv32_xirq_get_num (void)
     
    void neorv32_xirq_setup_trigger (int channel, int config)
     
    void neorv32_xirq_clear_pending (int channel)
     
    void neorv32_xirq_channel_enable (int channel)
     
    void neorv32_xirq_channel_disable (int channel)
     
    int neorv32_xirq_install (int channel, void(*handler)(void))
     
    int neorv32_xirq_uninstall (int channel)
     
    +

    Detailed Description

    +

    External Interrupt controller HW driver header file.

    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +

    Macro Definition Documentation

    + +

    ◆ NEORV32_XIRQ

    + +
    +
    + + + + +
    #define NEORV32_XIRQ   ((neorv32_xirq_t*) (NEORV32_XIRQ_BASE))
    +
    +

    XIRQ module hardware access (neorv32_xirq_t)

    + +
    +
    + +

    ◆ XIRQ_TRIGGER_EDGE_FALLING

    + +
    +
    + + + + +
    #define XIRQ_TRIGGER_EDGE_FALLING   (0b10)
    +
    +

    XIRQ trigger configuration

    + +
    +
    + +

    ◆ XIRQ_TRIGGER_EDGE_RISING

    + +
    +
    + + + + +
    #define XIRQ_TRIGGER_EDGE_RISING   (0b11)
    +
    +

    XIRQ trigger configuration

    + +
    +
    + +

    ◆ XIRQ_TRIGGER_LEVEL_HIGH

    + +
    +
    + + + + +
    #define XIRQ_TRIGGER_LEVEL_HIGH   (0b01)
    +
    +

    XIRQ trigger configuration

    + +
    +
    + +

    ◆ XIRQ_TRIGGER_LEVEL_LOW

    + +
    +
    + + + + +
    #define XIRQ_TRIGGER_LEVEL_LOW   (0b00)
    +
    +

    XIRQ trigger configuration

    + +
    +
    +

    Function Documentation

    + +

    ◆ neorv32_xirq_available()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_available (void )
    +
    +

    Check if external interrupt controller was synthesized.

    +
    Returns
    0 if XIRQ was not synthesized, 1 if EXTIRQ is available.
    + +
    +
    + +

    ◆ neorv32_xirq_channel_disable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_channel_disable (int channel)
    +
    +

    Disable IRQ channel.

    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_channel_enable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_channel_enable (int channel)
    +
    +

    Enable IRQ channel.

    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_clear_pending()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_clear_pending (int channel)
    +
    +

    Clear pending interrupt.

    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_get_num()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_get_num (void )
    +
    +

    Get number of implemented XIRQ channels

    +
    Returns
    Number of implemented channels (0..32).
    + +
    +
    + +

    ◆ neorv32_xirq_global_disable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_global_disable (void )
    +
    +

    Globally disable XIRQ interrupts (via according FIRQ channel).

    +
    Note
    Triggered / triggering XIRQ will remain pending.
    + +
    +
    + +

    ◆ neorv32_xirq_global_enable()

    + +
    +
    + + + + + + + +
    void neorv32_xirq_global_enable (void )
    +
    +

    Globally enable XIRQ interrupts (via according FIRQ channel).

    +
    Note
    Triggered / triggering XIRQ will remain pending.
    + +
    +
    + +

    ◆ neorv32_xirq_install()

    + +
    +
    + + + + + + + + + + + +
    int neorv32_xirq_install (int channel,
    void(* handler )(void) )
    +
    +

    Install interrupt handler function for XIRQ channel.

    +
    Parameters
    + + + +
    [in]channelXIRQ interrupt channel (0..31).
    [in]handlerThe actual handler function for the specified interrupt (function MUST be of type "void function(void);").
    +
    +
    +
    Returns
    0 if success, 1 if error.
    + +
    +
    + +

    ◆ neorv32_xirq_setup()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_setup (void )
    +
    +

    Initialize XIRQ controller.

    +
    Note
    All interrupt channels will be deactivated, all pending IRQs will be deleted and all handler addresses will be deleted.
    +
    Returns
    0 if success, != 0 if error.
    + +
    +
    + +

    ◆ neorv32_xirq_setup_trigger()

    + +
    +
    + + + + + + + + + + + +
    void neorv32_xirq_setup_trigger (int channel,
    int config )
    +
    +

    Configure a channel's trigger type.

    +
    Parameters
    + + + +
    [in]channelXIRQ interrupt channel (0..31).
    [in]configTrigger type: 00 = low-level, 01 = high-level, 10 = falling-edge, 11 = rising-edge.
    +
    +
    + +
    +
    + +

    ◆ neorv32_xirq_uninstall()

    + +
    +
    + + + + + + + +
    int neorv32_xirq_uninstall (int channel)
    +
    +

    Uninstall interrupt handler function for XIRQ channel.

    +
    Note
    This will also deactivate the according XIRQ channel.
    +
    Parameters
    + + +
    [in]channelXIRQ interrupt channel (0..31).
    +
    +
    +
    Returns
    0 if success, 1 if error.
    + +
    +
    +
    + + +
    + + diff --git a/sw/neorv32__xirq_8h_source.html b/sw/neorv32__xirq_8h_source.html new file mode 100644 index 0000000000..09e0acd2fa --- /dev/null +++ b/sw/neorv32__xirq_8h_source.html @@ -0,0 +1,170 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/include/neorv32_xirq.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    neorv32_xirq.h
    +
    +
    +Go to the documentation of this file.
    1// ================================================================================ //
    +
    2// The NEORV32 RISC-V Processor - https://github.com/stnolting/neorv32 //
    +
    3// Copyright (c) NEORV32 contributors. //
    +
    4// Copyright (c) 2020 - 2024 Stephan Nolting. All rights reserved. //
    +
    5// Licensed under the BSD-3-Clause license, see LICENSE for details. //
    +
    6// SPDX-License-Identifier: BSD-3-Clause //
    +
    7// ================================================================================ //
    +
    8
    +
    16#ifndef neorv32_xirq_h
    +
    17#define neorv32_xirq_h
    +
    18
    +
    19#include <stdint.h>
    +
    20
    +
    21
    +
    22/**********************************************************************/
    +
    +
    27typedef volatile struct __attribute__((packed,aligned(4))) {
    +
    28 uint32_t EIE;
    +
    29 uint32_t EIP;
    +
    30 uint32_t ESC;
    +
    31 uint32_t TTYP;
    +
    32 uint32_t TPOL;
    +
    33 const uint32_t reserved0;
    +
    34 const uint32_t reserved1;
    +
    35 const uint32_t reserved2;
    + +
    +
    37
    +
    39#define NEORV32_XIRQ ((neorv32_xirq_t*) (NEORV32_XIRQ_BASE))
    +
    43/**********************************************************************/
    +
    47#define XIRQ_TRIGGER_LEVEL_LOW (0b00) // low-level
    +
    48#define XIRQ_TRIGGER_LEVEL_HIGH (0b01) // high-level
    +
    49#define XIRQ_TRIGGER_EDGE_FALLING (0b10) // falling-edge
    +
    50#define XIRQ_TRIGGER_EDGE_RISING (0b11) // rising-edge
    +
    54/**********************************************************************/
    + +
    59int neorv32_xirq_setup(void);
    + + +
    62int neorv32_xirq_get_num(void);
    +
    63void neorv32_xirq_setup_trigger(int channel, int config);
    +
    64void neorv32_xirq_clear_pending(int channel);
    +
    65void neorv32_xirq_channel_enable(int channel);
    +
    66void neorv32_xirq_channel_disable(int channel);
    +
    67int neorv32_xirq_install(int channel, void (*handler)(void));
    +
    68int neorv32_xirq_uninstall(int channel);
    +
    72#endif // neorv32_xirq_h
    +
    void neorv32_xirq_setup_trigger(int channel, int config)
    Definition neorv32_xirq.c:157
    +
    int neorv32_xirq_uninstall(int channel)
    Definition neorv32_xirq.c:242
    +
    int neorv32_xirq_get_num(void)
    Definition neorv32_xirq.c:126
    +
    void neorv32_xirq_global_enable(void)
    Definition neorv32_xirq.c:102
    +
    void neorv32_xirq_clear_pending(int channel)
    Definition neorv32_xirq.c:185
    +
    int neorv32_xirq_install(int channel, void(*handler)(void))
    Definition neorv32_xirq.c:223
    +
    int neorv32_xirq_setup(void)
    Definition neorv32_xirq.c:81
    +
    int neorv32_xirq_available(void)
    Definition neorv32_xirq.c:62
    +
    void neorv32_xirq_channel_enable(int channel)
    Definition neorv32_xirq.c:197
    +
    void neorv32_xirq_global_disable(void)
    Definition neorv32_xirq.c:114
    +
    void neorv32_xirq_channel_disable(int channel)
    Definition neorv32_xirq.c:209
    +
    Definition neorv32_xirq.h:27
    +
    uint32_t TPOL
    Definition neorv32_xirq.h:32
    +
    uint32_t EIP
    Definition neorv32_xirq.h:29
    +
    const uint32_t reserved0
    Definition neorv32_xirq.h:33
    +
    uint32_t TTYP
    Definition neorv32_xirq.h:31
    +
    const uint32_t reserved1
    Definition neorv32_xirq.h:34
    +
    uint32_t ESC
    Definition neorv32_xirq.h:30
    +
    uint32_t EIE
    Definition neorv32_xirq.h:28
    +
    const uint32_t reserved2
    Definition neorv32_xirq.h:35
    +
    + + +
    + + diff --git a/sw/neorv32_logo_small.png b/sw/neorv32_logo_small.png new file mode 100644 index 0000000000..457f55e5a7 Binary files /dev/null and b/sw/neorv32_logo_small.png differ diff --git a/sw/onewire__aux_8h_source.html b/sw/onewire__aux_8h_source.html new file mode 100644 index 0000000000..041facce22 --- /dev/null +++ b/sw/onewire__aux_8h_source.html @@ -0,0 +1,401 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/demo_onewire/onewire_aux.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    onewire_aux.h
    +
    +
    +
    1// APPLICATION NOTE 187 "1-Wire Search Algorithm" by Maxim Integrated
    +
    2// https://www.maximintegrated.com/en/design/technical-documents/app-notes/1/187.html
    +
    3// modified for the NEORV32 Processor
    +
    4
    +
    5#ifndef onewire_aux_h
    +
    6#define onewire_aux_h
    +
    7
    +
    8#include <neorv32.h>
    +
    9
    +
    10// definitions
    +
    11#define FALSE 0
    +
    12#define TRUE 1
    +
    13
    +
    14static unsigned char dscrc_table[] = {
    +
    15 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65,
    +
    16 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220,
    +
    17 35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98,
    +
    18 190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255,
    +
    19 70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7,
    +
    20 219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154,
    +
    21 101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36,
    +
    22 248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185,
    +
    23 140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205,
    +
    24 17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80,
    +
    25 175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238,
    +
    26 50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115,
    +
    27 202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139,
    +
    28 87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22,
    +
    29 233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168,
    +
    30 116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53};
    +
    31
    +
    32// method declarations
    +
    33int OWFirst();
    +
    34int OWNext();
    +
    35int OWVerify();
    +
    36void OWTargetSetup(unsigned char family_code);
    +
    37void OWFamilySkipSetup();
    +
    38int OWSearch();
    +
    39unsigned char docrc8(unsigned char value);
    +
    40
    +
    41// global search state
    +
    42unsigned char ROM_NO[8];
    +
    43int LastDiscrepancy;
    +
    44int LastFamilyDiscrepancy;
    +
    45int LastDeviceFlag;
    +
    46unsigned char crc8;
    +
    47
    +
    48//--------------------------------------------------------------------------
    +
    49// Find the 'first' devices on the 1-Wire bus
    +
    50// Return TRUE : device found, ROM number in ROM_NO buffer
    +
    51// FALSE : no device present
    +
    52//
    +
    53int OWFirst()
    +
    54{
    +
    55 // reset the search state
    +
    56 LastDiscrepancy = 0;
    +
    57 LastDeviceFlag = FALSE;
    +
    58 LastFamilyDiscrepancy = 0;
    +
    59
    +
    60 return OWSearch();
    +
    61}
    +
    62
    +
    63//--------------------------------------------------------------------------
    +
    64// Find the 'next' devices on the 1-Wire bus
    +
    65// Return TRUE : device found, ROM number in ROM_NO buffer
    +
    66// FALSE : device not found, end of search
    +
    67//
    +
    68int OWNext()
    +
    69{
    +
    70 // leave the search state alone
    +
    71 return OWSearch();
    +
    72}
    +
    73
    +
    74//--------------------------------------------------------------------------
    +
    75// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing
    +
    76// search state.
    +
    77// Return TRUE : device found, ROM number in ROM_NO buffer
    +
    78// FALSE : device not found, end of search
    +
    79//
    +
    80int OWSearch()
    +
    81{
    +
    82 int id_bit_number;
    +
    83 int last_zero, rom_byte_number, search_result;
    +
    84 int id_bit, cmp_id_bit;
    +
    85 unsigned char rom_byte_mask, search_direction;
    +
    86
    +
    87 // initialize for search
    +
    88 id_bit_number = 1;
    +
    89 last_zero = 0;
    +
    90 rom_byte_number = 0;
    +
    91 rom_byte_mask = 1;
    +
    92 search_result = 0;
    +
    93 crc8 = 0;
    +
    94
    +
    95 // if the last call was not the last one
    +
    96 if (!LastDeviceFlag)
    +
    97 {
    +
    98 // 1-Wire reset
    + +
    100 {
    +
    101 // reset the search
    +
    102 LastDiscrepancy = 0;
    +
    103 LastDeviceFlag = FALSE;
    +
    104 LastFamilyDiscrepancy = 0;
    +
    105 return FALSE;
    +
    106 }
    +
    107
    +
    108 // issue the search command
    + +
    110
    +
    111 // loop to do the search
    +
    112 do
    +
    113 {
    +
    114 // read a bit and its complement
    + + +
    117
    +
    118 // check for no devices on 1-wire
    +
    119 if ((id_bit == 1) && (cmp_id_bit == 1))
    +
    120 break;
    +
    121 else
    +
    122 {
    +
    123 // all devices coupled have 0 or 1
    +
    124 if (id_bit != cmp_id_bit)
    +
    125 search_direction = id_bit; // bit write value for search
    +
    126 else
    +
    127 {
    +
    128 // if this discrepancy if before the Last Discrepancy
    +
    129 // on a previous next then pick the same as last time
    +
    130 if (id_bit_number < LastDiscrepancy)
    +
    131 search_direction = ((ROM_NO[rom_byte_number] & rom_byte_mask) > 0);
    +
    132 else
    +
    133 // if equal to last pick 1, if not then pick 0
    +
    134 search_direction = (id_bit_number == LastDiscrepancy);
    +
    135
    +
    136 // if 0 was picked then record its position in LastZero
    +
    137 if (search_direction == 0)
    +
    138 {
    +
    139 last_zero = id_bit_number;
    +
    140
    +
    141 // check for Last discrepancy in family
    +
    142 if (last_zero < 9)
    +
    143 LastFamilyDiscrepancy = last_zero;
    +
    144 }
    +
    145 }
    +
    146
    +
    147 // set or clear the bit in the ROM byte rom_byte_number
    +
    148 // with mask rom_byte_mask
    +
    149 if (search_direction == 1)
    +
    150 ROM_NO[rom_byte_number] |= rom_byte_mask;
    +
    151 else
    +
    152 ROM_NO[rom_byte_number] &= ~rom_byte_mask;
    +
    153
    +
    154 // serial number search direction write bit
    +
    155 neorv32_onewire_write_bit_blocking(search_direction);
    +
    156
    +
    157 // increment the byte counter id_bit_number
    +
    158 // and shift the mask rom_byte_mask
    +
    159 id_bit_number++;
    +
    160 rom_byte_mask <<= 1;
    +
    161
    +
    162 // if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask
    +
    163 if (rom_byte_mask == 0)
    +
    164 {
    +
    165 docrc8(ROM_NO[rom_byte_number]); // accumulate the CRC
    +
    166 rom_byte_number++;
    +
    167 rom_byte_mask = 1;
    +
    168 }
    +
    169 }
    +
    170 }
    +
    171 while(rom_byte_number < 8); // loop until through all ROM bytes 0-7
    +
    172
    +
    173 // if the search was successful then
    +
    174 if (!((id_bit_number < 65) || (crc8 != 0)))
    +
    175 {
    +
    176 // search successful so set LastDiscrepancy,LastDeviceFlag,search_result
    +
    177 LastDiscrepancy = last_zero;
    +
    178
    +
    179 // check for last device
    +
    180 if (LastDiscrepancy == 0)
    +
    181 LastDeviceFlag = TRUE;
    +
    182
    +
    183 search_result = TRUE;
    +
    184 }
    +
    185 }
    +
    186
    +
    187 // if no device found then reset counters so next 'search' will be like a first
    +
    188 if (!search_result || !ROM_NO[0])
    +
    189 {
    +
    190 LastDiscrepancy = 0;
    +
    191 LastDeviceFlag = FALSE;
    +
    192 LastFamilyDiscrepancy = 0;
    +
    193 search_result = FALSE;
    +
    194 }
    +
    195
    +
    196 return search_result;
    +
    197}
    +
    198
    +
    199//--------------------------------------------------------------------------
    +
    200// Verify the device with the ROM number in ROM_NO buffer is present.
    +
    201// Return TRUE : device verified present
    +
    202// FALSE : device not present
    +
    203//
    +
    204int OWVerify()
    +
    205{
    +
    206 unsigned char rom_backup[8];
    +
    207 int i,rslt,ld_backup,ldf_backup,lfd_backup;
    +
    208
    +
    209 // keep a backup copy of the current state
    +
    210 for (i = 0; i < 8; i++)
    +
    211 rom_backup[i] = ROM_NO[i];
    +
    212 ld_backup = LastDiscrepancy;
    +
    213 ldf_backup = LastDeviceFlag;
    +
    214 lfd_backup = LastFamilyDiscrepancy;
    +
    215
    +
    216 // set search to find the same device
    +
    217 LastDiscrepancy = 64;
    +
    218 LastDeviceFlag = FALSE;
    +
    219
    +
    220 if (OWSearch())
    +
    221 {
    +
    222 // check if same device found
    +
    223 rslt = TRUE;
    +
    224 for (i = 0; i < 8; i++)
    +
    225 {
    +
    226 if (rom_backup[i] != ROM_NO[i])
    +
    227 {
    +
    228 rslt = FALSE;
    +
    229 break;
    +
    230 }
    +
    231 }
    +
    232 }
    +
    233 else
    +
    234 rslt = FALSE;
    +
    235
    +
    236 // restore the search state
    +
    237 for (i = 0; i < 8; i++)
    +
    238 ROM_NO[i] = rom_backup[i];
    +
    239 LastDiscrepancy = ld_backup;
    +
    240 LastDeviceFlag = ldf_backup;
    +
    241 LastFamilyDiscrepancy = lfd_backup;
    +
    242
    +
    243 // return the result of the verify
    +
    244 return rslt;
    +
    245}
    +
    246
    +
    247//--------------------------------------------------------------------------
    +
    248// Setup the search to find the device type 'family_code' on the next call
    +
    249// to OWNext() if it is present.
    +
    250//
    +
    251void OWTargetSetup(unsigned char family_code)
    +
    252{
    +
    253 int i;
    +
    254
    +
    255 // set the search state to find SearchFamily type devices
    +
    256 ROM_NO[0] = family_code;
    +
    257 for (i = 1; i < 8; i++)
    +
    258 ROM_NO[i] = 0;
    +
    259 LastDiscrepancy = 64;
    +
    260 LastFamilyDiscrepancy = 0;
    +
    261 LastDeviceFlag = FALSE;
    +
    262}
    +
    263
    +
    264//--------------------------------------------------------------------------
    +
    265// Setup the search to skip the current device type on the next call
    +
    266// to OWNext().
    +
    267//
    +
    268void OWFamilySkipSetup()
    +
    269{
    +
    270 // set the Last discrepancy to last family discrepancy
    +
    271 LastDiscrepancy = LastFamilyDiscrepancy;
    +
    272 LastFamilyDiscrepancy = 0;
    +
    273
    +
    274 // check for end of list
    +
    275 if (LastDiscrepancy == 0)
    +
    276 LastDeviceFlag = TRUE;
    +
    277}
    +
    278
    +
    279//--------------------------------------------------------------------------
    +
    280// Calculate the CRC8 of the byte value provided with the current
    +
    281// global 'crc8' value.
    +
    282// Returns current global crc8 value
    +
    283//
    +
    284unsigned char docrc8(unsigned char value)
    +
    285{
    +
    286 // See Application Note 27
    +
    287
    +
    288 // TEST BUILD
    +
    289 crc8 = dscrc_table[crc8 ^ value];
    +
    290 return crc8;
    +
    291}
    +
    292
    +
    293#endif // onewire_aux_h
    +
    Main NEORV32 core library / driver / HAL include file.
    +
    void neorv32_onewire_write_bit_blocking(uint8_t bit)
    Definition neorv32_onewire.c:327
    +
    void neorv32_onewire_write_byte_blocking(uint8_t byte)
    Definition neorv32_onewire.c:364
    +
    uint8_t neorv32_onewire_read_bit_blocking(void)
    Definition neorv32_onewire.c:307
    +
    int neorv32_onewire_reset_blocking(void)
    Definition neorv32_onewire.c:287
    +
    + + +
    + + diff --git a/sw/open.png b/sw/open.png new file mode 100644 index 0000000000..30f75c7efe Binary files /dev/null and b/sw/open.png differ diff --git a/sw/pages.html b/sw/pages.html new file mode 100644 index 0000000000..a8a9c6f295 --- /dev/null +++ b/sw/pages.html @@ -0,0 +1,104 @@ + + + + + + + +NEORV32 Software Framework Documentation: Related Pages + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    + + +
     README
    +
    +
    + + +
    + + diff --git a/sw/plus.svg b/sw/plus.svg new file mode 100644 index 0000000000..0752016553 --- /dev/null +++ b/sw/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sw/plusd.svg b/sw/plusd.svg new file mode 100644 index 0000000000..0c65bfe946 --- /dev/null +++ b/sw/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/sw/processor__check_2main_8c.html b/sw/processor__check_2main_8c.html new file mode 100644 index 0000000000..839579e508 --- /dev/null +++ b/sw/processor__check_2main_8c.html @@ -0,0 +1,460 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/example/processor_check/main.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    main.c File Reference
    +
    +
    + +

    CPU/Processor test/verification program. +More...

    +
    #include <neorv32.h>
    +#include <string.h>
    +
    + + + + + + + + + + + + + + + + + +

    +Macros

    User configuration
    +#define BAUD_RATE   (19200)
     
    +#define ADDR_UNALIGNED_1   (0x00000001UL)
     
    +#define ADDR_UNALIGNED_3   (0x00000003UL)
     
    +#define ADDR_UNREACHABLE   (NEORV32_DM_BASE)
     
    +#define EXT_MEM_BASE   (0xF0000000UL)
     
    UART print macros
    +#define PRINT_STANDARD(...)   neorv32_uart0_printf(__VA_ARGS__)
     
    +#define PRINT_CRITICAL(...)   neorv32_uart0_printf(__VA_ARGS__)
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void sim_irq_trigger (uint32_t sel)
     
    void global_trap_handler (void)
     
    void rte_service_handler (void)
     
    void vectored_irq_table (void)
     
    void vectored_global_handler (void)
     
    void vectored_mei_handler (void)
     
    void hw_breakpoint_handler (void)
     
    void trigger_module_dummy (void)
     
    void xirq_trap_handler0 (void)
     
    void xirq_trap_handler1 (void)
     
    void test_ok (void)
     
    void test_fail (void)
     
    int main ()
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    +const uint32_t mcause_never_c = 0x80000000UL
     
    +volatile int cnt_fail = 0
     
    +volatile int cnt_ok = 0
     
    +volatile int cnt_test = 0
     
    +volatile uint32_t num_hpm_cnts_global = 0
     
    +volatile int vectored_mei_handler_ack = 0
     
    +volatile uint32_t xirq_trap_handler_ack = 0
     
    +volatile uint32_t hw_brk_mscratch_ok = 0
     
    +volatile uint32_t dma_src
     
    +volatile uint32_t store_access_addr [2]
     
    +volatile uint32_t amo_var
     
    +volatile uint32_t pmp_access [2]
     
    +volatile uint32_t trap_cnt
     
    +volatile uint32_t pmp_num_regions
     
    +

    Detailed Description

    +

    CPU/Processor test/verification program.

    +
    Author
    Stephan Nolting
    +

    Function Documentation

    + +

    ◆ global_trap_handler()

    + +
    +
    + + + + + + + +
    void global_trap_handler (void )
    +
    +

    Trap handler for ALL exceptions/interrupts.

    + +
    +
    + +

    ◆ hw_breakpoint_handler()

    + +
    +
    + + + + + + + +
    void hw_breakpoint_handler (void )
    +
    +

    Hardware-breakpoint trap handler

    + +
    +
    + +

    ◆ main()

    + +
    +
    + + + + + + + +
    int main (void )
    +
    +

    High-level CPU/processor test program.

    +
    Warning
    This test is intended for simulation only.
    +
    +This test requires all optional extensions/modules to be enabled.
    +
    Returns
    0 if execution was successful
    + +
    +
    + +

    ◆ rte_service_handler()

    + +
    +
    + + + + + + + +
    void rte_service_handler (void )
    +
    +

    RTE's ecall "system service handler"; modifies application context to provide "system services"

    + +
    +
    + +

    ◆ sim_irq_trigger()

    + +
    +
    + + + + + + + +
    void sim_irq_trigger (uint32_t sel)
    +
    +

    Simulation-based function to set/clear CPU interrupts (MSI, MEI).

    +
    Parameters
    + + +
    [in]selIRQ select mask (bit positions according to NEORV32_CSR_MIE_enum).
    +
    +
    + +
    +
    + +

    ◆ test_fail()

    + +
    +
    + + + + + + + +
    void test_fail (void )
    +
    +

    Test results helper function: Shows "[FAIL]" and increments global cnt_fail

    + +
    +
    + +

    ◆ test_ok()

    + +
    +
    + + + + + + + +
    void test_ok (void )
    +
    +

    Test results helper function: Shows "[ok]" and increments global cnt_ok

    + +
    +
    + +

    ◆ trigger_module_dummy()

    + +
    +
    + + + + + + + +
    void trigger_module_dummy (void )
    +
    +

    Test function for the trigger module

    + +
    +
    + +

    ◆ vectored_global_handler()

    + +
    +
    + + + + + + + +
    void vectored_global_handler (void )
    +
    +

    Vectored trap handler for ALL exceptions/interrupts.

    + +
    +
    + +

    ◆ vectored_irq_table()

    + +
    +
    + + + + + + + +
    void vectored_irq_table (void )
    +
    +

    Vectored mtvec mode jump table.

    + +
    +
    + +

    ◆ vectored_mei_handler()

    + +
    +
    + + + + + + + +
    void vectored_mei_handler (void )
    +
    +

    Machine external interrupt handler.

    + +
    +
    + +

    ◆ xirq_trap_handler0()

    + +
    +
    + + + + + + + +
    void xirq_trap_handler0 (void )
    +
    +

    XIRQ handler channel 0.

    + +
    +
    + +

    ◆ xirq_trap_handler1()

    + +
    +
    + + + + + + + +
    void xirq_trap_handler1 (void )
    +
    +

    XIRQ handler channel 1.

    + +
    +
    +
    + + +
    + + diff --git a/sw/resize.js b/sw/resize.js new file mode 100644 index 0000000000..7d8cdc7d4f --- /dev/null +++ b/sw/resize.js @@ -0,0 +1,145 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + } + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/sw/search/all_0.js b/sw/search/all_0.js new file mode 100644 index 0000000000..7b0e67ce96 --- /dev/null +++ b/sw/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['1_20overview_0',['1. Overview',['../md_README.html#autotoc_md1',1,'']]] +]; diff --git a/sw/search/all_1.js b/sw/search/all_1.js new file mode 100644 index 0000000000..bf3dd22bfa --- /dev/null +++ b/sw/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2_20features_0',['2. Features',['../md_README.html#autotoc_md4',1,'']]] +]; diff --git a/sw/search/all_10.js b/sw/search/all_10.js new file mode 100644 index 0000000000..f6d15f15af --- /dev/null +++ b/sw/search/all_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['key_0',['key',['../demo__cfu_2main_8c.html#ab5c498f9da12ab2d6ddc89bf4a46dec6',1,'main.c']]], + ['key_20features_1',['Key Features',['../md_README.html#autotoc_md2',1,'']]] +]; diff --git a/sw/search/all_11.js b/sw/search/all_11.js new file mode 100644 index 0000000000..eefde675d0 --- /dev/null +++ b/sw/search/all_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['legal_0',[':copyright: Legal',['../md_README.html#autotoc_md13',1,'']]] +]; diff --git a/sw/search/all_12.js b/sw/search/all_12.js new file mode 100644 index 0000000000..be69f8f3f6 --- /dev/null +++ b/sw/search/all_12.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['main_0',['main',['../bootloader_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void): bootloader.c'],['../atomic__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../bus__explorer_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__blink__led_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__cfs_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__cfu_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__crc_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__dma_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__emulate__unaligned_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__gptmr_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__hpm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__mtime_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__neopixel_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__newlib_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__onewire_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__pwm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__sdi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__slink_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__spi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__spi__irq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__trng_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void): main.c'],['../demo__twi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__wdt_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__xip_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__xirq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../float__corner__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../floating__point__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../game__of__life_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void): main.c'],['../hello__world_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../processor__check_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c']]], + ['main_2ec_1',['main.c',['../atomic__test_2main_8c.html',1,'(Global Namespace)'],['../bus__explorer_2main_8c.html',1,'(Global Namespace)'],['../demo__blink__led_2main_8c.html',1,'(Global Namespace)'],['../demo__cfs_2main_8c.html',1,'(Global Namespace)'],['../demo__cfu_2main_8c.html',1,'(Global Namespace)'],['../demo__crc_2main_8c.html',1,'(Global Namespace)'],['../demo__dma_2main_8c.html',1,'(Global Namespace)'],['../demo__emulate__unaligned_2main_8c.html',1,'(Global Namespace)'],['../demo__gptmr_2main_8c.html',1,'(Global Namespace)'],['../demo__hpm_2main_8c.html',1,'(Global Namespace)'],['../demo__mtime_2main_8c.html',1,'(Global Namespace)'],['../demo__neopixel_2main_8c.html',1,'(Global Namespace)'],['../demo__newlib_2main_8c.html',1,'(Global Namespace)'],['../demo__onewire_2main_8c.html',1,'(Global Namespace)'],['../demo__pwm_2main_8c.html',1,'(Global Namespace)'],['../demo__sdi_2main_8c.html',1,'(Global Namespace)'],['../demo__slink_2main_8c.html',1,'(Global Namespace)'],['../demo__spi_2main_8c.html',1,'(Global Namespace)'],['../demo__spi__irq_2main_8c.html',1,'(Global Namespace)'],['../demo__trng_2main_8c.html',1,'(Global Namespace)'],['../demo__twi_2main_8c.html',1,'(Global Namespace)'],['../demo__wdt_2main_8c.html',1,'(Global Namespace)'],['../demo__xip_2main_8c.html',1,'(Global Namespace)'],['../demo__xirq_2main_8c.html',1,'(Global Namespace)'],['../float__corner__test_2main_8c.html',1,'(Global Namespace)'],['../floating__point__test_2main_8c.html',1,'(Global Namespace)'],['../game__of__life_2main_8c.html',1,'(Global Namespace)'],['../hello__world_2main_8c.html',1,'(Global Namespace)'],['../processor__check_2main_8c.html',1,'(Global Namespace)']]], + ['main_5fdestructor_5ftest_2',['main_destructor_test',['../demo__newlib_2main_8c.html#a7076a1dfd3c18c91fcf665ce54b087b3',1,'main.c']]], + ['max_5fintensity_3',['MAX_INTENSITY',['../demo__neopixel_2main_8c.html#a1d1d5e7ff16f25b68fdf779befd298f7',1,'main.c']]], + ['mem_4',['MEM',['../structneorv32__sysinfo__t.html#a51eee92b1824c1b19eb0a83a0a9c7d4c',1,'neorv32_sysinfo_t']]], + ['minutes_5',['minutes',['../structdate__t.html#a2ab79834ebae42979e359bf30ad5f67a',1,'date_t']]], + ['mode_6',['MODE',['../structneorv32__crc__t.html#ad720502701f16e6e952bbcaee980017c',1,'neorv32_crc_t']]], + ['month_7',['month',['../structdate__t.html#a1a97f6a755cd4209a0880cf811d52c7b',1,'date_t']]], + ['mtime_5firq_5fhandler_8',['mtime_irq_handler',['../demo__mtime_2main_8c.html#a329137855a7c2e098715a0771c5585d7',1,'main.c']]] +]; diff --git a/sw/search/all_13.js b/sw/search/all_13.js new file mode 100644 index 0000000000..78013c7f69 --- /dev/null +++ b/sw/search/all_13.js @@ -0,0 +1,442 @@ +var searchData= +[ + ['neoled_5fctrl_5fbufs_5f0_0',['NEOLED_CTRL_BUFS_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f1_1',['NEOLED_CTRL_BUFS_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f2_2',['NEOLED_CTRL_BUFS_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f3_3',['NEOLED_CTRL_BUFS_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fen_4',['NEOLED_CTRL_EN',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5firq_5fconf_5',['NEOLED_CTRL_IRQ_CONF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fmode_6',['NEOLED_CTRL_MODE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc0_7',['NEOLED_CTRL_PRSC0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc1_8',['NEOLED_CTRL_PRSC1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc2_9',['NEOLED_CTRL_PRSC2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fstrobe_10',['NEOLED_CTRL_STROBE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f0_11',['NEOLED_CTRL_T_ONE_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f1_12',['NEOLED_CTRL_T_ONE_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f2_13',['NEOLED_CTRL_T_ONE_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f3_14',['NEOLED_CTRL_T_ONE_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f4_15',['NEOLED_CTRL_T_ONE_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f0_16',['NEOLED_CTRL_T_TOT_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f1_17',['NEOLED_CTRL_T_TOT_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f2_18',['NEOLED_CTRL_T_TOT_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f3_19',['NEOLED_CTRL_T_TOT_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f4_20',['NEOLED_CTRL_T_TOT_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f0_21',['NEOLED_CTRL_T_ZERO_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f1_22',['NEOLED_CTRL_T_ZERO_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f2_23',['NEOLED_CTRL_T_ZERO_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f3_24',['NEOLED_CTRL_T_ZERO_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f4_25',['NEOLED_CTRL_T_ZERO_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fbusy_26',['NEOLED_CTRL_TX_BUSY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fempty_27',['NEOLED_CTRL_TX_EMPTY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5ffull_28',['NEOLED_CTRL_TX_FULL',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fhalf_29',['NEOLED_CTRL_TX_HALF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73',1,'neorv32_neoled.h']]], + ['neoled_5ffirq_5fenable_30',['NEOLED_FIRQ_ENABLE',['../neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8',1,'neorv32.h']]], + ['neoled_5ffirq_5fpending_31',['NEOLED_FIRQ_PENDING',['../neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab',1,'neorv32.h']]], + ['neoled_5frte_5fid_32',['NEOLED_RTE_ID',['../neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58',1,'neorv32.h']]], + ['neoled_5ftrap_5fcode_33',['NEOLED_TRAP_CODE',['../neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21',1,'neorv32.h']]], + ['neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_34',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_35',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_36',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_37',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['neorv32_20cpu_20a_20the_20core_38',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['neorv32_20processor_20a_20the_20soc_39',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['neorv32_20project_20a_20an_20introduction_40',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['neorv32_20risc_20v_20processor_41',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['neorv32_20ug_20user_20guide_20a_20getting_20started_42',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['neorv32_2eh_43',['neorv32.h',['../neorv32_8h.html',1,'']]], + ['neorv32_5faux_2ec_44',['neorv32_aux.c',['../neorv32__aux_8c.html',1,'']]], + ['neorv32_5faux_2eh_45',['neorv32_aux.h',['../neorv32__aux_8h.html',1,'']]], + ['neorv32_5faux_5fdate2unixtime_46',['neorv32_aux_date2unixtime',['../neorv32__aux_8c.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date): neorv32_aux.c'],['../neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date): neorv32_aux.c']]], + ['neorv32_5faux_5fhexstr2uint64_47',['neorv32_aux_hexstr2uint64',['../neorv32__aux_8c.html#aec4703f369e1567c22f140d2ec9daafc',1,'neorv32_aux_hexstr2uint64(char *buffer, uint8_t length): neorv32_aux.c'],['../neorv32__aux_8h.html#aec4703f369e1567c22f140d2ec9daafc',1,'neorv32_aux_hexstr2uint64(char *buffer, uint8_t length): neorv32_aux.c']]], + ['neorv32_5faux_5funixtime2date_48',['neorv32_aux_unixtime2date',['../neorv32__aux_8c.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date): neorv32_aux.c'],['../neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date): neorv32_aux.c']]], + ['neorv32_5faux_5fxorshift32_49',['neorv32_aux_xorshift32',['../neorv32__aux_8c.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void): neorv32_aux.c'],['../neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void): neorv32_aux.c']]], + ['neorv32_5fbss_5fend_5fc_50',['neorv32_bss_end_c',['../neorv32_8h.html#a2b97ce46531debb80ee0ecf6a5295c0a',1,'neorv32.h']]], + ['neorv32_5fbss_5fstart_5fc_51',['neorv32_bss_start_c',['../neorv32_8h.html#abf941bf72d5e6288b4bf7f3c456d8551',1,'neorv32.h']]], + ['neorv32_5fcfs_52',['NEORV32_CFS',['../neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2',1,'neorv32_cfs.h']]], + ['neorv32_5fcfs_2ec_53',['neorv32_cfs.c',['../neorv32__cfs_8c.html',1,'']]], + ['neorv32_5fcfs_2eh_54',['neorv32_cfs.h',['../neorv32__cfs_8h.html',1,'']]], + ['neorv32_5fcfs_5favailable_55',['neorv32_cfs_available',['../neorv32__cfs_8c.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void): neorv32_cfs.c'],['../neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void): neorv32_cfs.c']]], + ['neorv32_5fcfs_5fbase_56',['NEORV32_CFS_BASE',['../neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f',1,'neorv32.h']]], + ['neorv32_5fcfs_5ft_57',['neorv32_cfs_t',['../structneorv32__cfs__t.html',1,'']]], + ['neorv32_5fcfu_5fr3_5finstr_58',['neorv32_cfu_r3_instr',['../neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr4_5finstr_59',['neorv32_cfu_r4_instr',['../neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr5_5finstr_5fa_60',['neorv32_cfu_r5_instr_a',['../neorv32__cpu__cfu_8h.html#a65198d9caf04a5cd3a72accc2cecf870',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr5_5finstr_5fb_61',['neorv32_cfu_r5_instr_b',['../neorv32__cpu__cfu_8h.html#ab3affefbff898567c6c02c4d10765b04',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fclock_5fprsc_5fenum_62',['NEORV32_CLOCK_PRSC_enum',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73',1,'neorv32.h']]], + ['neorv32_5fcpu_2ec_63',['neorv32_cpu.c',['../neorv32__cpu_8c.html',1,'']]], + ['neorv32_5fcpu_2eh_64',['neorv32_cpu.h',['../neorv32__cpu_8h.html',1,'']]], + ['neorv32_5fcpu_5famo_2ec_65',['neorv32_cpu_amo.c',['../neorv32__cpu__amo_8c.html',1,'']]], + ['neorv32_5fcpu_5famo_2eh_66',['neorv32_cpu_amo.h',['../neorv32__cpu__amo_8h.html',1,'']]], + ['neorv32_5fcpu_5famoaddw_67',['neorv32_cpu_amoaddw',['../neorv32__cpu__amo_8c.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoandw_68',['neorv32_cpu_amoandw',['../neorv32__cpu__amo_8c.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famolr_69',['neorv32_cpu_amolr',['../neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famomaxuw_70',['neorv32_cpu_amomaxuw',['../neorv32__cpu__amo_8c.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famomaxw_71',['neorv32_cpu_amomaxw',['../neorv32__cpu__amo_8c.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominuw_72',['neorv32_cpu_amominuw',['../neorv32__cpu__amo_8c.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominw_73',['neorv32_cpu_amominw',['../neorv32__cpu__amo_8c.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoorw_74',['neorv32_cpu_amoorw',['../neorv32__cpu__amo_8c.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famosc_75',['neorv32_cpu_amosc',['../neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famoswapw_76',['neorv32_cpu_amoswapw',['../neorv32__cpu__amo_8c.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoxorw_77',['neorv32_cpu_amoxorw',['../neorv32__cpu__amo_8c.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5fcfu_2ec_78',['neorv32_cpu_cfu.c',['../neorv32__cpu__cfu_8c.html',1,'']]], + ['neorv32_5fcpu_5fcfu_2eh_79',['neorv32_cpu_cfu.h',['../neorv32__cpu__cfu_8h.html',1,'']]], + ['neorv32_5fcpu_5fcfu_5favailable_80',['neorv32_cpu_cfu_available',['../neorv32__cpu__cfu_8c.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void): neorv32_cpu_cfu.c'],['../neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void): neorv32_cpu_cfu.c']]], + ['neorv32_5fcpu_5fcsr_2eh_81',['neorv32_cpu_csr.h',['../neorv32__cpu__csr_8h.html',1,'']]], + ['neorv32_5fcpu_5fcsr_5fclr_82',['neorv32_cpu_csr_clr',['../neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fread_83',['neorv32_cpu_csr_read',['../neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fset_84',['neorv32_cpu_csr_set',['../neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fwrite_85',['neorv32_cpu_csr_write',['../neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fdelay_5fms_86',['neorv32_cpu_delay_ms',['../neorv32__cpu_8c.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms): neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fclk_5ffrom_5fprsc_87',['neorv32_cpu_get_clk_from_prsc',['../neorv32__cpu_8c.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fcycle_88',['neorv32_cpu_get_cycle',['../neorv32__cpu_8c.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5finstret_89',['neorv32_cpu_get_instret',['../neorv32__cpu_8c.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fgoto_5fuser_5fmode_90',['neorv32_cpu_goto_user_mode',['../neorv32__cpu_8c.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fnum_5fcounters_91',['neorv32_cpu_hpm_get_num_counters',['../neorv32__cpu_8c.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fsize_92',['neorv32_cpu_hpm_get_size',['../neorv32__cpu_8c.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fload_5fsigned_5fbyte_93',['neorv32_cpu_load_signed_byte',['../neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5fsigned_5fhalf_94',['neorv32_cpu_load_signed_half',['../neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fbyte_95',['neorv32_cpu_load_unsigned_byte',['../neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fhalf_96',['neorv32_cpu_load_unsigned_half',['../neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fword_97',['neorv32_cpu_load_unsigned_word',['../neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fpmp_5fconfigure_5fregion_98',['neorv32_cpu_pmp_configure_region',['../neorv32__cpu_8c.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config): neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fgranularity_99',['neorv32_cpu_pmp_get_granularity',['../neorv32__cpu_8c.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fnum_5fregions_100',['neorv32_cpu_pmp_get_num_regions',['../neorv32__cpu_8c.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fmcycle_101',['neorv32_cpu_set_mcycle',['../neorv32__cpu_8c.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fminstret_102',['neorv32_cpu_set_minstret',['../neorv32__cpu_8c.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fsleep_103',['neorv32_cpu_sleep',['../neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fbyte_104',['neorv32_cpu_store_unsigned_byte',['../neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fhalf_105',['neorv32_cpu_store_unsigned_half',['../neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fword_106',['neorv32_cpu_store_unsigned_word',['../neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e',1,'neorv32_cpu.h']]], + ['neorv32_5fcrc_107',['NEORV32_CRC',['../neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271',1,'neorv32_crc.h']]], + ['neorv32_5fcrc_2ec_108',['neorv32_crc.c',['../neorv32__crc_8c.html',1,'']]], + ['neorv32_5fcrc_2eh_109',['neorv32_crc.h',['../neorv32__crc_8h.html',1,'']]], + ['neorv32_5fcrc_5favailable_110',['neorv32_crc_available',['../neorv32__crc_8c.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void): neorv32_crc.c'],['../neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void): neorv32_crc.c']]], + ['neorv32_5fcrc_5fbase_111',['NEORV32_CRC_BASE',['../neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d',1,'neorv32.h']]], + ['neorv32_5fcrc_5fblock_112',['neorv32_crc_block',['../neorv32__crc_8c.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length): neorv32_crc.c'],['../neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length): neorv32_crc.c']]], + ['neorv32_5fcrc_5fget_113',['neorv32_crc_get',['../neorv32__crc_8c.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void): neorv32_crc.c'],['../neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void): neorv32_crc.c']]], + ['neorv32_5fcrc_5fmode_5fenum_114',['NEORV32_CRC_MODE_enum',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447',1,'neorv32_crc.h']]], + ['neorv32_5fcrc_5fsetup_115',['neorv32_crc_setup',['../neorv32__crc_8c.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start): neorv32_crc.c'],['../neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start): neorv32_crc.c']]], + ['neorv32_5fcrc_5fsingle_116',['neorv32_crc_single',['../neorv32__crc_8c.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte): neorv32_crc.c'],['../neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte): neorv32_crc.c']]], + ['neorv32_5fcrc_5ft_117',['neorv32_crc_t',['../structneorv32__crc__t.html',1,'']]], + ['neorv32_5fcsr_5fenum_118',['NEORV32_CSR_enum',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5ffflags_5fenum_119',['NEORV32_CSR_FFLAGS_enum',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmcountinhibit_5fenum_120',['NEORV32_CSR_MCOUNTINHIBIT_enum',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmie_5fenum_121',['NEORV32_CSR_MIE_enum',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmip_5fenum_122',['NEORV32_CSR_MIP_enum',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmisa_5fenum_123',['NEORV32_CSR_MISA_enum',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmstatus_5fenum_124',['NEORV32_CSR_MSTATUS_enum',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fxisa_5fenum_125',['NEORV32_CSR_XISA_enum',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fdata_5fend_5fc_126',['neorv32_data_end_c',['../neorv32_8h.html#af2fdfc2478b9ec99aa62ac2c901d49f8',1,'neorv32.h']]], + ['neorv32_5fdata_5fstart_5fc_127',['neorv32_data_start_c',['../neorv32_8h.html#ae1b7b218a835fbc0ea131a651d248f1d',1,'neorv32.h']]], + ['neorv32_5fdm_5fbase_128',['NEORV32_DM_BASE',['../neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d',1,'neorv32.h']]], + ['neorv32_5fdma_129',['NEORV32_DMA',['../neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639',1,'neorv32_dma.h']]], + ['neorv32_5fdma_2eh_130',['neorv32_dma.h',['../neorv32__dma_8h.html',1,'']]], + ['neorv32_5fdma_5favailable_131',['neorv32_dma_available',['../neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fbase_132',['NEORV32_DMA_BASE',['../neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008',1,'neorv32.h']]], + ['neorv32_5fdma_5fctrl_5fenum_133',['NEORV32_DMA_CTRL_enum',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fdisable_134',['neorv32_dma_disable',['../neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fdone_135',['neorv32_dma_done',['../neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fenable_136',['neorv32_dma_enable',['../neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fdisable_137',['neorv32_dma_fence_disable',['../neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fenable_138',['neorv32_dma_fence_enable',['../neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fstatus_139',['neorv32_dma_status',['../neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fstatus_5fenum_140',['NEORV32_DMA_STATUS_enum',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5ft_141',['neorv32_dma_t',['../structneorv32__dma__t.html',1,'']]], + ['neorv32_5fdma_5ftransfer_142',['neorv32_dma_transfer',['../neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ftransfer_5fauto_143',['neorv32_dma_transfer_auto',['../neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fttype_5fenum_144',['NEORV32_DMA_TTYPE_enum',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9',1,'neorv32_dma.h']]], + ['neorv32_5fdmem_5fbegin_5fc_145',['neorv32_dmem_begin_c',['../neorv32_8h.html#a27ab61f8f53b6e781182c7855ec9e9a8',1,'neorv32.h']]], + ['neorv32_5fexception_5fcodes_5fenum_146',['NEORV32_EXCEPTION_CODES_enum',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fexecutable_5fenum_147',['NEORV32_EXECUTABLE_enum',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feb',1,'bootloader.c']]], + ['neorv32_5fgpio_148',['NEORV32_GPIO',['../neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445',1,'neorv32_gpio.h']]], + ['neorv32_5fgpio_2ec_149',['neorv32_gpio.c',['../neorv32__gpio_8c.html',1,'']]], + ['neorv32_5fgpio_2eh_150',['neorv32_gpio.h',['../neorv32__gpio_8h.html',1,'']]], + ['neorv32_5fgpio_5favailable_151',['neorv32_gpio_available',['../neorv32__gpio_8c.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fbase_152',['NEORV32_GPIO_BASE',['../neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4',1,'neorv32.h']]], + ['neorv32_5fgpio_5fpin_5fget_153',['neorv32_gpio_pin_get',['../neorv32__gpio_8c.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin): neorv32_gpio.c'],['../neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5fset_154',['neorv32_gpio_pin_set',['../neorv32__gpio_8c.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5ftoggle_155',['neorv32_gpio_pin_toggle',['../neorv32__gpio_8c.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fget_156',['neorv32_gpio_port_get',['../neorv32__gpio_8c.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void): neorv32_gpio.c'],['../neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fset_157',['neorv32_gpio_port_set',['../neorv32__gpio_8c.html#a8dc7846945e4609fc96d81caee99ac00',1,'neorv32_gpio_port_set(uint64_t port_data): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df',1,'neorv32_gpio_port_set(uint64_t d): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5ftoggle_158',['neorv32_gpio_port_toggle',['../neorv32__gpio_8c.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle): neorv32_gpio.c']]], + ['neorv32_5fgpio_5ft_159',['neorv32_gpio_t',['../structneorv32__gpio__t.html',1,'']]], + ['neorv32_5fgptmr_160',['NEORV32_GPTMR',['../neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2',1,'neorv32_gptmr.h']]], + ['neorv32_5fgptmr_2ec_161',['neorv32_gptmr.c',['../neorv32__gptmr_8c.html',1,'']]], + ['neorv32_5fgptmr_2eh_162',['neorv32_gptmr.h',['../neorv32__gptmr_8h.html',1,'']]], + ['neorv32_5fgptmr_5favailable_163',['neorv32_gptmr_available',['../neorv32__gptmr_8c.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fbase_164',['NEORV32_GPTMR_BASE',['../neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0',1,'neorv32.h']]], + ['neorv32_5fgptmr_5fctrl_5fenum_165',['NEORV32_GPTMR_CTRL_enum',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988',1,'neorv32_gptmr.h']]], + ['neorv32_5fgptmr_5fdisable_166',['neorv32_gptmr_disable',['../neorv32__gptmr_8c.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fenable_167',['neorv32_gptmr_enable',['../neorv32__gptmr_8c.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5firq_5fack_168',['neorv32_gptmr_irq_ack',['../neorv32__gptmr_8c.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fsetup_169',['neorv32_gptmr_setup',['../neorv32__gptmr_8c.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5ft_170',['neorv32_gptmr_t',['../structneorv32__gptmr__t.html',1,'']]], + ['neorv32_5fheap_5fbegin_5fc_171',['neorv32_heap_begin_c',['../neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c',1,'neorv32.h']]], + ['neorv32_5fheap_5fend_5fc_172',['neorv32_heap_end_c',['../neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5',1,'neorv32.h']]], + ['neorv32_5fheap_5fsize_5fc_173',['neorv32_heap_size_c',['../neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5',1,'neorv32.h']]], + ['neorv32_5fhpmcnt_5fevent_5fenum_174',['NEORV32_HPMCNT_EVENT_enum',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fimem_5fbegin_5fc_175',['neorv32_imem_begin_c',['../neorv32_8h.html#a507732c61c2ee78bf8d1bfbfe3448f8f',1,'neorv32.h']]], + ['neorv32_5fintrinsics_2eh_176',['neorv32_intrinsics.h',['../neorv32__intrinsics_8h.html',1,'']]], + ['neorv32_5flegacy_2eh_177',['neorv32_legacy.h',['../neorv32__legacy_8h.html',1,'']]], + ['neorv32_5fmtime_178',['NEORV32_MTIME',['../neorv32__mtime_8h.html#a68935be182e0081039326a9f344a36b3',1,'neorv32_mtime.h']]], + ['neorv32_5fmtime_2ec_179',['neorv32_mtime.c',['../neorv32__mtime_8c.html',1,'']]], + ['neorv32_5fmtime_2eh_180',['neorv32_mtime.h',['../neorv32__mtime_8h.html',1,'']]], + ['neorv32_5fmtime_5favailable_181',['neorv32_mtime_available',['../neorv32__mtime_8c.html#ab2b49a0594c66692aedf76ff9935581c',1,'neorv32_mtime_available(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#ab2b49a0594c66692aedf76ff9935581c',1,'neorv32_mtime_available(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fbase_182',['NEORV32_MTIME_BASE',['../neorv32_8h.html#ab98f762df259a2bbc28d19d2acfe9e23',1,'neorv32.h']]], + ['neorv32_5fmtime_5fget_5ftime_183',['neorv32_mtime_get_time',['../neorv32__mtime_8c.html#adedbbdeb71c06d2d60d3af73451de01e',1,'neorv32_mtime_get_time(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#adedbbdeb71c06d2d60d3af73451de01e',1,'neorv32_mtime_get_time(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fget_5ftimecmp_184',['neorv32_mtime_get_timecmp',['../neorv32__mtime_8c.html#acb3cc18ff8421ebd6ef471e089c23491',1,'neorv32_mtime_get_timecmp(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#acb3cc18ff8421ebd6ef471e089c23491',1,'neorv32_mtime_get_timecmp(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fget_5funixtime_185',['neorv32_mtime_get_unixtime',['../neorv32__mtime_8c.html#a50d08fcc3d91fc2d88b9a6a80c656f1a',1,'neorv32_mtime_get_unixtime(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a50d08fcc3d91fc2d88b9a6a80c656f1a',1,'neorv32_mtime_get_unixtime(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fset_5ftime_186',['neorv32_mtime_set_time',['../neorv32__mtime_8c.html#a1c30809d6e887f022a7794f720243015',1,'neorv32_mtime_set_time(uint64_t time): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a1c30809d6e887f022a7794f720243015',1,'neorv32_mtime_set_time(uint64_t time): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fset_5ftimecmp_187',['neorv32_mtime_set_timecmp',['../neorv32__mtime_8c.html#a81ff371c1aa10901264873316ee84a49',1,'neorv32_mtime_set_timecmp(uint64_t timecmp): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a81ff371c1aa10901264873316ee84a49',1,'neorv32_mtime_set_timecmp(uint64_t timecmp): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fset_5funixtime_188',['neorv32_mtime_set_unixtime',['../neorv32__mtime_8c.html#a022c3292c6e75095bb3ffd4c42fd4bfa',1,'neorv32_mtime_set_unixtime(uint64_t unixtime): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a022c3292c6e75095bb3ffd4c42fd4bfa',1,'neorv32_mtime_set_unixtime(uint64_t unixtime): neorv32_mtime.c']]], + ['neorv32_5fmtime_5ft_189',['neorv32_mtime_t',['../structneorv32__mtime__t.html',1,'']]], + ['neorv32_5fneoled_190',['NEORV32_NEOLED',['../neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a',1,'neorv32_neoled.h']]], + ['neorv32_5fneoled_2ec_191',['neorv32_neoled.c',['../neorv32__neoled_8c.html',1,'']]], + ['neorv32_5fneoled_2eh_192',['neorv32_neoled.h',['../neorv32__neoled_8h.html',1,'']]], + ['neorv32_5fneoled_5favailable_193',['neorv32_neoled_available',['../neorv32__neoled_8c.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fbase_194',['NEORV32_NEOLED_BASE',['../neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99',1,'neorv32.h']]], + ['neorv32_5fneoled_5fctrl_5fenum_195',['NEORV32_NEOLED_CTRL_enum',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412',1,'neorv32_neoled.h']]], + ['neorv32_5fneoled_5fdisable_196',['neorv32_neoled_disable',['../neorv32__neoled_8c.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fenable_197',['neorv32_neoled_enable',['../neorv32__neoled_8c.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fget_5fbuffer_5fsize_198',['neorv32_neoled_get_buffer_size',['../neorv32__neoled_8c.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fset_5fmode_199',['neorv32_neoled_set_mode',['../neorv32__neoled_8c.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_200',['neorv32_neoled_setup',['../neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode): neorv32_neoled.c'],['../neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_5fws2812_201',['neorv32_neoled_setup_ws2812',['../neorv32__neoled_8c.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode): neorv32_neoled.c'],['../neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fblocking_202',['neorv32_neoled_strobe_blocking',['../neorv32__neoled_8c.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fnonblocking_203',['neorv32_neoled_strobe_nonblocking',['../neorv32__neoled_8c.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5ft_204',['neorv32_neoled_t',['../structneorv32__neoled__t.html',1,'']]], + ['neorv32_5fneoled_5fwrite_5fblocking_205',['neorv32_neoled_write_blocking',['../neorv32__neoled_8c.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fwrite_5fnonblocking_206',['neorv32_neoled_write_nonblocking',['../neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6',1,'neorv32_neoled.h']]], + ['neorv32_5fonewire_207',['NEORV32_ONEWIRE',['../neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_2ec_208',['neorv32_onewire.c',['../neorv32__onewire_8c.html',1,'']]], + ['neorv32_5fonewire_2eh_209',['neorv32_onewire.h',['../neorv32__onewire_8h.html',1,'']]], + ['neorv32_5fonewire_5favailable_210',['neorv32_onewire_available',['../neorv32__onewire_8c.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fbase_211',['NEORV32_ONEWIRE_BASE',['../neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00',1,'neorv32.h']]], + ['neorv32_5fonewire_5fbusy_212',['neorv32_onewire_busy',['../neorv32__onewire_8c.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fctrl_5fenum_213',['NEORV32_ONEWIRE_CTRL_enum',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fdata_5fenum_214',['NEORV32_ONEWIRE_DATA_enum',['../neorv32__onewire_8h.html#ae770490afa8662fb8577065531d51368',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fdisable_215',['neorv32_onewire_disable',['../neorv32__onewire_8c.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fenable_216',['neorv32_onewire_enable',['../neorv32__onewire_8c.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_217',['neorv32_onewire_read_bit',['../neorv32__onewire_8c.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fblocking_218',['neorv32_onewire_read_bit_blocking',['../neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fget_219',['neorv32_onewire_read_bit_get',['../neorv32__onewire_8c.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_220',['neorv32_onewire_read_byte',['../neorv32__onewire_8c.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fblocking_221',['neorv32_onewire_read_byte_blocking',['../neorv32__onewire_8c.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fget_222',['neorv32_onewire_read_byte_get',['../neorv32__onewire_8c.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_223',['neorv32_onewire_reset',['../neorv32__onewire_8c.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fblocking_224',['neorv32_onewire_reset_blocking',['../neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fget_5fpresence_225',['neorv32_onewire_reset_get_presence',['../neorv32__onewire_8c.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsense_226',['neorv32_onewire_sense',['../neorv32__onewire_8c.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsetup_227',['neorv32_onewire_setup',['../neorv32__onewire_8c.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base): neorv32_onewire.c']]], + ['neorv32_5fonewire_5ft_228',['neorv32_onewire_t',['../structneorv32__onewire__t.html',1,'']]], + ['neorv32_5fonewire_5fwrite_5fbit_229',['neorv32_onewire_write_bit',['../neorv32__onewire_8c.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbit_5fblocking_230',['neorv32_onewire_write_bit_blocking',['../neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_231',['neorv32_onewire_write_byte',['../neorv32__onewire_8c.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_5fblocking_232',['neorv32_onewire_write_byte_blocking',['../neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte): neorv32_onewire.c'],['../neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte): neorv32_onewire.c']]], + ['neorv32_5fpmp_5fmodes_5fenum_233',['NEORV32_PMP_MODES_enum',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fpmpcfg_5fattributes_5fenum_234',['NEORV32_PMPCFG_ATTRIBUTES_enum',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fpmw_5fget_5fnum_5fchannels_235',['neorv32_pmw_get_num_channels',['../neorv32__pwm_8c.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_236',['NEORV32_PWM',['../neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51',1,'neorv32_pwm.h']]], + ['neorv32_5fpwm_2ec_237',['neorv32_pwm.c',['../neorv32__pwm_8c.html',1,'']]], + ['neorv32_5fpwm_2eh_238',['neorv32_pwm.h',['../neorv32__pwm_8h.html',1,'']]], + ['neorv32_5fpwm_5favailable_239',['neorv32_pwm_available',['../neorv32__pwm_8c.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fbase_240',['NEORV32_PWM_BASE',['../neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725',1,'neorv32.h']]], + ['neorv32_5fpwm_5fctrl_5fenum_241',['NEORV32_PWM_CTRL_enum',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7d',1,'neorv32_pwm.h']]], + ['neorv32_5fpwm_5fdisable_242',['neorv32_pwm_disable',['../neorv32__pwm_8c.html#a8f16fdc6e048899305a3234f42fe272f',1,'neorv32_pwm_disable(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a8f16fdc6e048899305a3234f42fe272f',1,'neorv32_pwm_disable(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fenable_243',['neorv32_pwm_enable',['../neorv32__pwm_8c.html#abc62a63dc139b185cdf53d0267501288',1,'neorv32_pwm_enable(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#abc62a63dc139b185cdf53d0267501288',1,'neorv32_pwm_enable(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fget_244',['neorv32_pwm_get',['../neorv32__pwm_8c.html#a64f66ae4f9689a650a70f3c5b45802b6',1,'neorv32_pwm_get(int channel): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a64f66ae4f9689a650a70f3c5b45802b6',1,'neorv32_pwm_get(int channel): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fset_245',['neorv32_pwm_set',['../neorv32__pwm_8c.html#aa24bc867effa7756bfbe7818d85aface',1,'neorv32_pwm_set(int channel, uint8_t dc): neorv32_pwm.c'],['../neorv32__pwm_8h.html#aa24bc867effa7756bfbe7818d85aface',1,'neorv32_pwm_set(int channel, uint8_t dc): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fsetup_246',['neorv32_pwm_setup',['../neorv32__pwm_8c.html#a5502d483de07d2d8c42e2388ed987069',1,'neorv32_pwm_setup(int prsc): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a5502d483de07d2d8c42e2388ed987069',1,'neorv32_pwm_setup(int prsc): neorv32_pwm.c']]], + ['neorv32_5fpwm_5ft_247',['neorv32_pwm_t',['../structneorv32__pwm__t.html',1,'']]], + ['neorv32_5frte_2ec_248',['neorv32_rte.c',['../neorv32__rte_8c.html',1,'']]], + ['neorv32_5frte_2eh_249',['neorv32_rte.h',['../neorv32__rte_8h.html',1,'']]], + ['neorv32_5frte_5fcontext_5fget_250',['neorv32_rte_context_get',['../neorv32__rte_8c.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x): neorv32_rte.c'],['../neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x): neorv32_rte.c']]], + ['neorv32_5frte_5fcontext_5fput_251',['neorv32_rte_context_put',['../neorv32__rte_8c.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data): neorv32_rte.c'],['../neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data): neorv32_rte.c']]], + ['neorv32_5frte_5fdebug_5fhandler_252',['neorv32_rte_debug_handler',['../neorv32__rte_8c.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void): neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5finstall_253',['neorv32_rte_handler_install',['../neorv32__rte_8c.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)): neorv32_rte.c'],['../neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)): neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5funinstall_254',['neorv32_rte_handler_uninstall',['../neorv32__rte_8c.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id): neorv32_rte.c'],['../neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id): neorv32_rte.c']]], + ['neorv32_5frte_5fnum_5ftraps_255',['NEORV32_RTE_NUM_TRAPS',['../neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59',1,'neorv32_rte.h']]], + ['neorv32_5frte_5fprint_5fabout_256',['neorv32_rte_print_about',['../neorv32__rte_8c.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void): neorv32_rte.c'],['../neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fconfig_257',['neorv32_rte_print_hw_config',['../neorv32__rte_8c.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fversion_258',['neorv32_rte_print_hw_version',['../neorv32__rte_8c.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void): neorv32_rte.c'],['../neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flicense_259',['neorv32_rte_print_license',['../neorv32__rte_8c.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void): neorv32_rte.c'],['../neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flogo_260',['neorv32_rte_print_logo',['../neorv32__rte_8c.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void): neorv32_rte.c']]], + ['neorv32_5frte_5fsetup_261',['neorv32_rte_setup',['../neorv32__rte_8c.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void): neorv32_rte.c']]], + ['neorv32_5frte_5ftrap_5fenum_262',['NEORV32_RTE_TRAP_enum',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a',1,'neorv32_rte.h']]], + ['neorv32_5fsdi_263',['NEORV32_SDI',['../neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928',1,'neorv32_sdi.h']]], + ['neorv32_5fsdi_2ec_264',['neorv32_sdi.c',['../neorv32__sdi_8c.html',1,'']]], + ['neorv32_5fsdi_2eh_265',['neorv32_sdi.h',['../neorv32__sdi_8h.html',1,'']]], + ['neorv32_5fsdi_5favailable_266',['neorv32_sdi_available',['../neorv32__sdi_8c.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fbase_267',['NEORV32_SDI_BASE',['../neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb',1,'neorv32.h']]], + ['neorv32_5fsdi_5fcheck_5fcs_268',['neorv32_sdi_check_cs',['../neorv32__sdi_8c.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fctrl_5fenum_269',['NEORV32_SDI_CTRL_enum',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6',1,'neorv32_sdi.h']]], + ['neorv32_5fsdi_5fdisable_270',['neorv32_sdi_disable',['../neorv32__sdi_8c.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fenable_271',['neorv32_sdi_enable',['../neorv32__sdi_8c.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_272',['neorv32_sdi_get',['../neorv32__sdi_8c.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_5ffifo_5fdepth_273',['neorv32_sdi_get_fifo_depth',['../neorv32__sdi_8c.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fput_274',['neorv32_sdi_put',['../neorv32__sdi_8c.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data): neorv32_sdi.c'],['../neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fsetup_275',['neorv32_sdi_setup',['../neorv32__sdi_8c.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask): neorv32_sdi.c']]], + ['neorv32_5fsdi_5ft_276',['neorv32_sdi_t',['../structneorv32__sdi__t.html',1,'']]], + ['neorv32_5fslink_277',['NEORV32_SLINK',['../neorv32__slink_8h.html#a6380d894432de119a20993096db534df',1,'neorv32_slink.h']]], + ['neorv32_5fslink_2ec_278',['neorv32_slink.c',['../neorv32__slink_8c.html',1,'']]], + ['neorv32_5fslink_2eh_279',['neorv32_slink.h',['../neorv32__slink_8h.html',1,'']]], + ['neorv32_5fslink_5favailable_280',['neorv32_slink_available',['../neorv32__slink_8c.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void): neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fbase_281',['NEORV32_SLINK_BASE',['../neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc',1,'neorv32.h']]], + ['neorv32_5fslink_5fcheck_5flast_282',['neorv32_slink_check_last',['../neorv32__slink_8c.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void): neorv32_slink.c'],['../neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fctrl_5fenum_283',['NEORV32_SLINK_CTRL_enum',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5fget_284',['neorv32_slink_get',['../neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5frx_5ffifo_5fdepth_285',['neorv32_slink_get_rx_fifo_depth',['../neorv32__slink_8c.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void): neorv32_slink.c'],['../neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5fsrc_286',['neorv32_slink_get_src',['../neorv32__slink_8c.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void): neorv32_slink.c'],['../neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5ftx_5ffifo_5fdepth_287',['neorv32_slink_get_tx_fifo_depth',['../neorv32__slink_8c.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void): neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fput_288',['neorv32_slink_put',['../neorv32__slink_8c.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data): neorv32_slink.c'],['../neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data): neorv32_slink.c']]], + ['neorv32_5fslink_5fput_5flast_289',['neorv32_slink_put_last',['../neorv32__slink_8c.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data): neorv32_slink.c'],['../neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data): neorv32_slink.c']]], + ['neorv32_5fslink_5froute_5fenum_290',['NEORV32_SLINK_ROUTE_enum',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5frx_5fclear_291',['neorv32_slink_rx_clear',['../neorv32__slink_8c.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void): neorv32_slink.c']]], + ['neorv32_5fslink_5frx_5fstatus_292',['neorv32_slink_rx_status',['../neorv32__slink_8c.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fset_5fdst_293',['neorv32_slink_set_dst',['../neorv32__slink_8c.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst): neorv32_slink.c'],['../neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst): neorv32_slink.c']]], + ['neorv32_5fslink_5fsetup_294',['neorv32_slink_setup',['../neorv32__slink_8c.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq): neorv32_slink.c'],['../neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq): neorv32_slink.c']]], + ['neorv32_5fslink_5fstatus_5fenum_295',['NEORV32_SLINK_STATUS_enum',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5ft_296',['neorv32_slink_t',['../structneorv32__slink__t.html',1,'']]], + ['neorv32_5fslink_5ftx_5fclear_297',['neorv32_slink_tx_clear',['../neorv32__slink_8c.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void): neorv32_slink.c']]], + ['neorv32_5fslink_5ftx_5fstatus_298',['neorv32_slink_tx_status',['../neorv32__slink_8c.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void): neorv32_slink.c']]], + ['neorv32_5fspi_299',['NEORV32_SPI',['../neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22',1,'neorv32_spi.h']]], + ['neorv32_5fspi_2ec_300',['neorv32_spi.c',['../neorv32__spi_8c.html',1,'']]], + ['neorv32_5fspi_2eh_301',['neorv32_spi.h',['../neorv32__spi_8h.html',1,'']]], + ['neorv32_5fspi_5favailable_302',['neorv32_spi_available',['../neorv32__spi_8c.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fbase_303',['NEORV32_SPI_BASE',['../neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7',1,'neorv32.h']]], + ['neorv32_5fspi_5fbusy_304',['neorv32_spi_busy',['../neorv32__spi_8c.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcheck_5fcs_305',['neorv32_spi_check_cs',['../neorv32__spi_8c.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_306',['neorv32_spi_cs_dis',['../neorv32__spi_8c.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void): neorv32_spi.c'],['../neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_5fnonblocking_307',['neorv32_spi_cs_dis_nonblocking',['../neorv32__spi_8c.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void): neorv32_spi.c'],['../neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_308',['neorv32_spi_cs_en',['../neorv32__spi_8c.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs): neorv32_spi.c'],['../neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_5fnonblocking_309',['neorv32_spi_cs_en_nonblocking',['../neorv32__spi_8c.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs): neorv32_spi.c'],['../neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs): neorv32_spi.c']]], + ['neorv32_5fspi_5fctrl_5fenum_310',['NEORV32_SPI_CTRL_enum',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fdata_5fenum_311',['NEORV32_SPI_DATA_enum',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fdisable_312',['neorv32_spi_disable',['../neorv32__spi_8c.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fenable_313',['neorv32_spi_enable',['../neorv32__spi_8c.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fclock_5fspeed_314',['neorv32_spi_get_clock_speed',['../neorv32__spi_8c.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5ffifo_5fdepth_315',['neorv32_spi_get_fifo_depth',['../neorv32__spi_8c.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void): neorv32_spi.c'],['../neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fnonblocking_316',['neorv32_spi_get_nonblocking',['../neorv32__spi_8c.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void): neorv32_spi.c'],['../neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fdisable_317',['neorv32_spi_highspeed_disable',['../neorv32__spi_8c.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fenable_318',['neorv32_spi_highspeed_enable',['../neorv32__spi_8c.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5finit_319',['neorv32_spi_init',['../neorv32__spi__irq_8c.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5firq_2ec_320',['neorv32_spi_irq.c',['../neorv32__spi__irq_8c.html',1,'']]], + ['neorv32_5fspi_5firq_2eh_321',['neorv32_spi_irq.h',['../neorv32__spi__irq_8h.html',1,'']]], + ['neorv32_5fspi_5fisr_322',['neorv32_spi_isr',['../neorv32__spi__irq_8c.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fput_5fnonblocking_323',['neorv32_spi_put_nonblocking',['../neorv32__spi_8c.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data): neorv32_spi.c'],['../neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data): neorv32_spi.c']]], + ['neorv32_5fspi_5frw_324',['neorv32_spi_rw',['../neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5frw_5fbusy_325',['neorv32_spi_rw_busy',['../neorv32__spi__irq_8c.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fsetup_326',['neorv32_spi_setup',['../neorv32__spi_8c.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask): neorv32_spi.c'],['../neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask): neorv32_spi.c']]], + ['neorv32_5fspi_5ft_327',['neorv32_spi_t',['../structneorv32__spi__t.html',1,'']]], + ['neorv32_5fspi_5ftrans_328',['neorv32_spi_trans',['../neorv32__spi_8c.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data): neorv32_spi.c'],['../neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data): neorv32_spi.c']]], + ['neorv32_5fstack_5fend_5fc_329',['neorv32_stack_end_c',['../neorv32_8h.html#ae4ee3e9f7de4c3ee4df804b23812a6ea',1,'neorv32.h']]], + ['neorv32_5fsysinfo_5fbase_330',['NEORV32_SYSINFO_BASE',['../neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536',1,'neorv32.h']]], + ['neorv32_5fsysinfo_5ft_331',['neorv32_sysinfo_t',['../structneorv32__sysinfo__t.html',1,'']]], + ['neorv32_5ftrng_332',['NEORV32_TRNG',['../neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_2ec_333',['neorv32_trng.c',['../neorv32__trng_8c.html',1,'']]], + ['neorv32_5ftrng_2eh_334',['neorv32_trng.h',['../neorv32__trng_8h.html',1,'']]], + ['neorv32_5ftrng_5favailable_335',['neorv32_trng_available',['../neorv32__trng_8c.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void): neorv32_trng.c'],['../neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fbase_336',['NEORV32_TRNG_BASE',['../neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2',1,'neorv32.h']]], + ['neorv32_5ftrng_5fcheck_5fsim_5fmode_337',['neorv32_trng_check_sim_mode',['../neorv32__trng_8c.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void): neorv32_trng.c'],['../neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fctrl_5fenum_338',['NEORV32_TRNG_CTRL_enum',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_5fdisable_339',['neorv32_trng_disable',['../neorv32__trng_8c.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void): neorv32_trng.c'],['../neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fenable_340',['neorv32_trng_enable',['../neorv32__trng_8c.html#a8b8a1771e37a152792264561b93228fa',1,'neorv32_trng_enable(int irq_sel): neorv32_trng.c'],['../neorv32__trng_8h.html#a8b8a1771e37a152792264561b93228fa',1,'neorv32_trng_enable(int irq_sel): neorv32_trng.c']]], + ['neorv32_5ftrng_5ffifo_5fclear_341',['neorv32_trng_fifo_clear',['../neorv32__trng_8c.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void): neorv32_trng.c'],['../neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_342',['neorv32_trng_get',['../neorv32__trng_8c.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data): neorv32_trng.c'],['../neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data): neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_5ffifo_5fdepth_343',['neorv32_trng_get_fifo_depth',['../neorv32__trng_8c.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void): neorv32_trng.c'],['../neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5ft_344',['neorv32_trng_t',['../structneorv32__trng__t.html',1,'']]], + ['neorv32_5ftwi_345',['NEORV32_TWI',['../neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_2ec_346',['neorv32_twi.c',['../neorv32__twi_8c.html',1,'']]], + ['neorv32_5ftwi_2eh_347',['neorv32_twi.h',['../neorv32__twi_8h.html',1,'']]], + ['neorv32_5ftwi_5favailable_348',['neorv32_twi_available',['../neorv32__twi_8c.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void): neorv32_twi.c'],['../neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fbase_349',['NEORV32_TWI_BASE',['../neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c',1,'neorv32.h']]], + ['neorv32_5ftwi_5fbusy_350',['neorv32_twi_busy',['../neorv32__twi_8c.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fctrl_5fenum_351',['NEORV32_TWI_CTRL_enum',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fdcmd_5fenum_352',['NEORV32_TWI_DCMD_enum',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fdisable_353',['neorv32_twi_disable',['../neorv32__twi_8c.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void): neorv32_twi.c'],['../neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fenable_354',['neorv32_twi_enable',['../neorv32__twi_8c.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_355',['neorv32_twi_generate_start',['../neorv32__twi_8c.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_5fnonblocking_356',['neorv32_twi_generate_start_nonblocking',['../neorv32__twi_8c.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void): neorv32_twi.c'],['../neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_357',['neorv32_twi_generate_stop',['../neorv32__twi_8c.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void): neorv32_twi.c'],['../neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_5fnonblocking_358',['neorv32_twi_generate_stop_nonblocking',['../neorv32__twi_8c.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void): neorv32_twi.c'],['../neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_359',['neorv32_twi_get',['../neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data): neorv32_twi.c'],['../neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data): neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_5ffifo_5fdepth_360',['neorv32_twi_get_fifo_depth',['../neorv32__twi_8c.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fsend_5fnonblocking_361',['neorv32_twi_send_nonblocking',['../neorv32__twi_8c.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack): neorv32_twi.c'],['../neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack): neorv32_twi.c']]], + ['neorv32_5ftwi_5fsetup_362',['neorv32_twi_setup',['../neorv32__twi_8c.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr): neorv32_twi.c'],['../neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr): neorv32_twi.c']]], + ['neorv32_5ftwi_5ft_363',['neorv32_twi_t',['../structneorv32__twi__t.html',1,'']]], + ['neorv32_5ftwi_5ftrans_364',['neorv32_twi_trans',['../neorv32__twi_8c.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack): neorv32_twi.c'],['../neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack): neorv32_twi.c']]], + ['neorv32_5fuart_2ec_365',['neorv32_uart.c',['../neorv32__uart_8c.html',1,'']]], + ['neorv32_5fuart_2eh_366',['neorv32_uart.h',['../neorv32__uart_8h.html',1,'']]], + ['neorv32_5fuart0_367',['NEORV32_UART0',['../neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb',1,'neorv32_uart.h']]], + ['neorv32_5fuart0_5fbase_368',['NEORV32_UART0_BASE',['../neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94',1,'neorv32.h']]], + ['neorv32_5fuart1_369',['NEORV32_UART1',['../neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d',1,'neorv32_uart.h']]], + ['neorv32_5fuart1_5fbase_370',['NEORV32_UART1_BASE',['../neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700',1,'neorv32.h']]], + ['neorv32_5fuart_5favailable_371',['neorv32_uart_available',['../neorv32__uart_8c.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_372',['neorv32_uart_char_received',['../neorv32__uart_8c.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_5fget_373',['neorv32_uart_char_received_get',['../neorv32__uart_8c.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fctrl_5fenum_374',['NEORV32_UART_CTRL_enum',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc',1,'neorv32_uart.h']]], + ['neorv32_5fuart_5fdata_5fenum_375',['NEORV32_UART_DATA_enum',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2',1,'neorv32_uart.h']]], + ['neorv32_5fuart_5fdisable_376',['neorv32_uart_disable',['../neorv32__uart_8c.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fenable_377',['neorv32_uart_enable',['../neorv32__uart_8c.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5frx_5ffifo_5fdepth_378',['neorv32_uart_get_rx_fifo_depth',['../neorv32__uart_8c.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5ftx_5ffifo_5fdepth_379',['neorv32_uart_get_tx_fifo_depth',['../neorv32__uart_8c.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fgetc_380',['neorv32_uart_getc',['../neorv32__uart_8c.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fprintf_381',['neorv32_uart_printf',['../neorv32__uart_8c.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...): neorv32_uart.c'],['../neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...): neorv32_uart.c']]], + ['neorv32_5fuart_5fputc_382',['neorv32_uart_putc',['../neorv32__uart_8c.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c): neorv32_uart.c'],['../neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c): neorv32_uart.c']]], + ['neorv32_5fuart_5fputs_383',['neorv32_uart_puts',['../neorv32__uart_8c.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s): neorv32_uart.c'],['../neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s): neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fdisable_384',['neorv32_uart_rtscts_disable',['../neorv32__uart_8c.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fenable_385',['neorv32_uart_rtscts_enable',['../neorv32__uart_8c.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5frx_5fclear_386',['neorv32_uart_rx_clear',['../neorv32__uart_8c.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fscan_387',['neorv32_uart_scan',['../neorv32__uart_8c.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo): neorv32_uart.c'],['../neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo): neorv32_uart.c']]], + ['neorv32_5fuart_5fsetup_388',['neorv32_uart_setup',['../neorv32__uart_8c.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask): neorv32_uart.c'],['../neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask): neorv32_uart.c']]], + ['neorv32_5fuart_5ft_389',['neorv32_uart_t',['../structneorv32__uart__t.html',1,'']]], + ['neorv32_5fuart_5ftx_5fbusy_390',['neorv32_uart_tx_busy',['../neorv32__uart_8c.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5ftx_5fclear_391',['neorv32_uart_tx_clear',['../neorv32__uart_8c.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fvprintf_392',['neorv32_uart_vprintf',['../neorv32__uart_8c.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args): neorv32_uart.c'],['../neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args): neorv32_uart.c']]], + ['neorv32_5fwdt_393',['NEORV32_WDT',['../neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_2ec_394',['neorv32_wdt.c',['../neorv32__wdt_8c.html',1,'']]], + ['neorv32_5fwdt_2eh_395',['neorv32_wdt.h',['../neorv32__wdt_8h.html',1,'']]], + ['neorv32_5fwdt_5favailable_396',['neorv32_wdt_available',['../neorv32__wdt_8c.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5fbase_397',['NEORV32_WDT_BASE',['../neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea',1,'neorv32.h']]], + ['neorv32_5fwdt_5fctrl_5fenum_398',['NEORV32_WDT_CTRL_enum',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5fdisable_399',['neorv32_wdt_disable',['../neorv32__wdt_8c.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5ffeed_400',['neorv32_wdt_feed',['../neorv32__wdt_8c.html#a2e4df2b352d11c31063ef2fc16c510ad',1,'neorv32_wdt_feed(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a2e4df2b352d11c31063ef2fc16c510ad',1,'neorv32_wdt_feed(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5fget_5fcause_401',['neorv32_wdt_get_cause',['../neorv32__wdt_8c.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5frcause_5fenum_402',['NEORV32_WDT_RCAUSE_enum',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5fsetup_403',['neorv32_wdt_setup',['../neorv32__wdt_8c.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict): neorv32_wdt.c']]], + ['neorv32_5fwdt_5ft_404',['neorv32_wdt_t',['../structneorv32__wdt__t.html',1,'']]], + ['neorv32_5fxip_405',['NEORV32_XIP',['../neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e',1,'neorv32_xip.h']]], + ['neorv32_5fxip_2ec_406',['neorv32_xip.c',['../neorv32__xip_8c.html',1,'']]], + ['neorv32_5fxip_2eh_407',['neorv32_xip.h',['../neorv32__xip_8h.html',1,'']]], + ['neorv32_5fxip_5favailable_408',['neorv32_xip_available',['../neorv32__xip_8c.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void): neorv32_xip.c'],['../neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fbase_409',['NEORV32_XIP_BASE',['../neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe',1,'neorv32.h']]], + ['neorv32_5fxip_5fctrl_5fenum_410',['NEORV32_XIP_CTRL_enum',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb',1,'neorv32_xip.h']]], + ['neorv32_5fxip_5fget_5fclock_5fspeed_411',['neorv32_xip_get_clock_speed',['../neorv32__xip_8c.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void): neorv32_xip.c'],['../neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fdisable_412',['neorv32_xip_highspeed_disable',['../neorv32__xip_8c.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void): neorv32_xip.c'],['../neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fenable_413',['neorv32_xip_highspeed_enable',['../neorv32__xip_8c.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void): neorv32_xip.c'],['../neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fsetup_414',['neorv32_xip_setup',['../neorv32__xip_8c.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd): neorv32_xip.c'],['../neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd): neorv32_xip.c']]], + ['neorv32_5fxip_5fspi_5ftrans_415',['neorv32_xip_spi_trans',['../neorv32__xip_8c.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data): neorv32_xip.c'],['../neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data): neorv32_xip.c']]], + ['neorv32_5fxip_5fstart_416',['neorv32_xip_start',['../neorv32__xip_8c.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes): neorv32_xip.c'],['../neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes): neorv32_xip.c']]], + ['neorv32_5fxip_5ft_417',['neorv32_xip_t',['../structneorv32__xip__t.html',1,'']]], + ['neorv32_5fxirq_418',['NEORV32_XIRQ',['../neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4',1,'neorv32_xirq.h']]], + ['neorv32_5fxirq_2ec_419',['neorv32_xirq.c',['../neorv32__xirq_8c.html',1,'']]], + ['neorv32_5fxirq_2eh_420',['neorv32_xirq.h',['../neorv32__xirq_8h.html',1,'']]], + ['neorv32_5fxirq_5favailable_421',['neorv32_xirq_available',['../neorv32__xirq_8c.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fbase_422',['NEORV32_XIRQ_BASE',['../neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1',1,'neorv32.h']]], + ['neorv32_5fxirq_5fchannel_5fdisable_423',['neorv32_xirq_channel_disable',['../neorv32__xirq_8c.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fchannel_5fenable_424',['neorv32_xirq_channel_enable',['../neorv32__xirq_8c.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fclear_5fpending_425',['neorv32_xirq_clear_pending',['../neorv32__xirq_8c.html#a83ecaf568a6f6bcb1e1efdb1eef6df9c',1,'neorv32_xirq_clear_pending(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a83ecaf568a6f6bcb1e1efdb1eef6df9c',1,'neorv32_xirq_clear_pending(int channel): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fget_5fnum_426',['neorv32_xirq_get_num',['../neorv32__xirq_8c.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fdisable_427',['neorv32_xirq_global_disable',['../neorv32__xirq_8c.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fenable_428',['neorv32_xirq_global_enable',['../neorv32__xirq_8c.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5finstall_429',['neorv32_xirq_install',['../neorv32__xirq_8c.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_430',['neorv32_xirq_setup',['../neorv32__xirq_8c.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_5ftrigger_431',['neorv32_xirq_setup_trigger',['../neorv32__xirq_8c.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config): neorv32_xirq.c']]], + ['neorv32_5fxirq_5ft_432',['neorv32_xirq_t',['../structneorv32__xirq__t.html',1,'']]], + ['neorv32_5fxirq_5funinstall_433',['neorv32_xirq_uninstall',['../neorv32__xirq_8c.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel): neorv32_xirq.c']]], + ['neorv32_5fzfinx_5fextension_5fintrinsics_2eh_434',['neorv32_zfinx_extension_intrinsics.h',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html',1,'']]], + ['num_5fcells_5fx_435',['NUM_CELLS_X',['../game__of__life_2main_8c.html#a78c5b500f0f057bcaedf6fedeca7c537',1,'main.c']]], + ['num_5fcells_5fy_436',['NUM_CELLS_Y',['../game__of__life_2main_8c.html#aed77778557404b38bebb05b5830368b4',1,'main.c']]], + ['num_5fleds_5f24bit_437',['NUM_LEDS_24BIT',['../demo__neopixel_2main_8c.html#aa1dddb8d6b3b4d2f19afc3c09e2ff572',1,'main.c']]], + ['num_5ftest_5fcases_438',['NUM_TEST_CASES',['../atomic__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES: main.c'],['../float__corner__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES: main.c'],['../floating__point__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES: main.c']]] +]; diff --git a/sw/search/all_14.js b/sw/search/all_14.js new file mode 100644 index 0000000000..d74d0dbc09 --- /dev/null +++ b/sw/search/all_14.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['onewire_5fctrl_5fbusy_0',['ONEWIRE_CTRL_BUSY',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv0_1',['ONEWIRE_CTRL_CLKDIV0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv1_2',['ONEWIRE_CTRL_CLKDIV1',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831afa1476a5e04eb4eabf4d7a595eca2df9',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv2_3',['ONEWIRE_CTRL_CLKDIV2',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aec9f056072e1db747e74a5c695d2a1df',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv3_4',['ONEWIRE_CTRL_CLKDIV3',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab8600bd09d74e39869259881b84ebfbf',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv4_5',['ONEWIRE_CTRL_CLKDIV4',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a32af8c86e7166e02e801727bd261c179',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv5_6',['ONEWIRE_CTRL_CLKDIV5',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a789d65fd9b0ab17bffd0d6de9d2e132a',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv6_7',['ONEWIRE_CTRL_CLKDIV6',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a27f040454bebc6218b490f7160ea2312',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv7_8',['ONEWIRE_CTRL_CLKDIV7',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fen_9',['ONEWIRE_CTRL_EN',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fpresence_10',['ONEWIRE_CTRL_PRESENCE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a92e1ff9fa10319d64c8d2c6a6d61b37e',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc0_11',['ONEWIRE_CTRL_PRSC0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc1_12',['ONEWIRE_CTRL_PRSC1',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fsense_13',['ONEWIRE_CTRL_SENSE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftrig_5fbit_14',['ONEWIRE_CTRL_TRIG_BIT',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a7ecbccef9e77e68caf22ed2c416e1f77',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftrig_5fbyte_15',['ONEWIRE_CTRL_TRIG_BYTE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acfd8a56f668ca55dbbaa1714b1235dfe',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftrig_5frst_16',['ONEWIRE_CTRL_TRIG_RST',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a98624ec944e0413a208cdf54bbbf4c75',1,'neorv32_onewire.h']]], + ['onewire_5fdata_5flsb_17',['ONEWIRE_DATA_LSB',['../neorv32__onewire_8h.html#ae770490afa8662fb8577065531d51368a6ad35475e3f80a8c68ce0caa9c3754a5',1,'neorv32_onewire.h']]], + ['onewire_5fdata_5fmsb_18',['ONEWIRE_DATA_MSB',['../neorv32__onewire_8h.html#ae770490afa8662fb8577065531d51368af967429634efb019ada46bf75f373aa3',1,'neorv32_onewire.h']]], + ['onewire_5ffirq_5fenable_19',['ONEWIRE_FIRQ_ENABLE',['../neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb',1,'neorv32.h']]], + ['onewire_5ffirq_5fpending_20',['ONEWIRE_FIRQ_PENDING',['../neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0',1,'neorv32.h']]], + ['onewire_5frte_5fid_21',['ONEWIRE_RTE_ID',['../neorv32_8h.html#a142f4a1c754edfab292706618d427b94',1,'neorv32.h']]], + ['onewire_5ftrap_5fcode_22',['ONEWIRE_TRAP_CODE',['../neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081',1,'neorv32.h']]], + ['output_23',['OUTPUT',['../structneorv32__gpio__t.html#abaf7de4f79adfc3debcde93fa4a921bb',1,'neorv32_gpio_t']]], + ['overview_24',['1. Overview',['../md_README.html#autotoc_md1',1,'']]] +]; diff --git a/sw/search/all_15.js b/sw/search/all_15.js new file mode 100644 index 0000000000..1c38806efe --- /dev/null +++ b/sw/search/all_15.js @@ -0,0 +1,39 @@ +var searchData= +[ + ['performance_0',['4. Performance',['../md_README.html#autotoc_md6',1,'']]], + ['plain_5fdata_5fhw_1',['plain_data_hw',['../demo__cfu_2main_8c.html#aee8dde13fe2f5ac52dd6075e2fe1eab5',1,'main.c']]], + ['plain_5fdata_5fsw_2',['plain_data_sw',['../demo__cfu_2main_8c.html#a72ba1460776ad684028448ca51810bbe',1,'main.c']]], + ['pmp_5fna4_3',['PMP_NA4',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892',1,'neorv32_cpu_csr.h']]], + ['pmp_5fnapot_4',['PMP_NAPOT',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820',1,'neorv32_cpu_csr.h']]], + ['pmp_5foff_5',['PMP_OFF',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4',1,'neorv32_cpu_csr.h']]], + ['pmp_5ftor_6',['PMP_TOR',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5flsb_7',['PMPCFG_A_LSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5fmsb_8',['PMPCFG_A_MSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fl_9',['PMPCFG_L',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fr_10',['PMPCFG_R',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fw_11',['PMPCFG_W',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fx_12',['PMPCFG_X',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d',1,'neorv32_cpu_csr.h']]], + ['poly_13',['POLY',['../structneorv32__crc__t.html#a9bbcab843ddba4f9772d07478947a661',1,'neorv32_crc_t']]], + ['pop_5fcount_14',['pop_count',['../game__of__life_2main_8c.html#aac4bec7738b12f5a4b4d7a3a6cb1ab8d',1,'main.c']]], + ['print_5fgetc_15',['PRINT_GETC',['../bootloader_8c.html#a999b04603115ce08b0cb33e333312480',1,'bootloader.c']]], + ['print_5fhelp_16',['print_help',['../bootloader_8c.html#a402ea961bfc2ffeee61e3a7c330b1559',1,'bootloader.c']]], + ['print_5fhex_5fbyte_17',['print_hex_byte',['../demo__twi_2main_8c.html#a2ebc688bc1dad328693fc0974b378fa0',1,'main.c']]], + ['print_5fhex_5fword_18',['print_hex_word',['../bootloader_8c.html#a70b7d5c3b3ae97e4e72e84c4bc28fb8a',1,'bootloader.c']]], + ['print_5fputc_19',['PRINT_PUTC',['../bootloader_8c.html#aa7afbe8348ebd1a876a4d247553292e9',1,'bootloader.c']]], + ['print_5frandom_5fdata_20',['print_random_data',['../demo__trng_2main_8c.html#a64205d97b57c99dc5e95b8621827f4a4',1,'main.c']]], + ['print_5freport_21',['print_report',['../atomic__test_2main_8c.html#a99377a057d14aaa9b45f8cab890e8cf7',1,'print_report(int num_err, int num_tests): main.c'],['../float__corner__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err): main.c'],['../floating__point__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err): main.c']]], + ['print_5ftext_22',['PRINT_TEXT',['../bootloader_8c.html#a0e5a66f68ecc7a6f42088f349707e852',1,'bootloader.c']]], + ['print_5funiverse_23',['print_universe',['../game__of__life_2main_8c.html#a9a455dea83a25f656fcc5217ad513dac',1,'main.c']]], + ['print_5fxnum_24',['PRINT_XNUM',['../bootloader_8c.html#a2f5cc04cf9c85f5d2958b384e053053b',1,'bootloader.c']]], + ['processor_25',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['processor_20a_20the_20soc_26',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['project_20a_20an_20introduction_27',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['project_20status_28',['Project Status',['../md_README.html#autotoc_md3',1,'']]], + ['ptrspibuf_29',['ptrSpiBuf',['../structt__neorv32__spi.html#a487a6510820871ff8d0da7699463f6d9',1,'t_neorv32_spi']]], + ['putchar_30',['putchar',['../neorv32__uart_8c.html#a07036e93939040c563e862a6a31b65bc',1,'neorv32_uart.c']]], + ['pwm_5fctrl_5fen_31',['PWM_CTRL_EN',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7dafb99fba508460086efdd495d4649c65a',1,'neorv32_pwm.h']]], + ['pwm_5fctrl_5fprsc0_32',['PWM_CTRL_PRSC0',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7da01ab6de6ac34be1ed68f22e17acbe274',1,'neorv32_pwm.h']]], + ['pwm_5fctrl_5fprsc1_33',['PWM_CTRL_PRSC1',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7daa6fca8a4eecfb99b8f0fa99e187e30bb',1,'neorv32_pwm.h']]], + ['pwm_5fctrl_5fprsc2_34',['PWM_CTRL_PRSC2',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7da0fd36a63fd4c37ef3bc4732518ebf13d',1,'neorv32_pwm.h']]], + ['pwm_5fmax_35',['PWM_MAX',['../demo__pwm_2main_8c.html#a391fa1e490bd712720989b58fa0d9904',1,'main.c']]] +]; diff --git a/sw/search/all_16.js b/sw/search/all_16.js new file mode 100644 index 0000000000..c7d58cd92b --- /dev/null +++ b/sw/search/all_16.js @@ -0,0 +1,103 @@ +var searchData= +[ + ['ram_5fbuffer_0',['ram_buffer',['../demo__xip_2main_8c.html#acc95e55a622d79c2a398397d1f9b8033',1,'main.c']]], + ['read_5fbyte_1',['read_byte',['../demo__onewire_2main_8c.html#a951a31029af34715f20856eb82432637',1,'main.c']]], + ['read_5fmemory_2',['read_memory',['../bus__explorer_2main_8c.html#afc9b1ab3db46eccf51d55c715fa2fbd4',1,'main.c']]], + ['readme_3',['README',['../md_README.html',1,'']]], + ['record_4',['record',['../structrecord.html',1,'']]], + ['reg_5',['REG',['../structneorv32__cfs__t.html#a48d3e81b207f4dcce0b0cc901583dc4d',1,'neorv32_cfs_t']]], + ['repetition_5fcount_5ftest_6',['repetition_count_test',['../demo__trng_2main_8c.html#af37eae672fee5e81f00a1dbf51b7e417',1,'main.c']]], + ['reserved_7',['reserved',['../structneorv32__xip__t.html#aacb77d586c3caec518e8e0024cfe745c',1,'neorv32_xip_t']]], + ['reserved0_8',['reserved0',['../structneorv32__xirq__t.html#a9be02c0398fab5763a3afbd7a018f092',1,'neorv32_xirq_t']]], + ['reserved1_9',['reserved1',['../structneorv32__xirq__t.html#ac4c999cf3da75e39753619f917d9d654',1,'neorv32_xirq_t']]], + ['reserved2_10',['reserved2',['../structneorv32__xirq__t.html#afba6ed500e1448719783923975b2dc64',1,'neorv32_xirq_t']]], + ['reset_11',['RESET',['../structneorv32__wdt__t.html#a0a273e8ca2bd92547bf7727ec65a9449',1,'neorv32_wdt_t']]], + ['results_12',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]], + ['risc_20v_20processor_13',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['riscv_5femulate_5ffadds_14',['riscv_emulate_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffclasss_15',['riscv_emulate_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fsw_16',['riscv_emulate_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fswu_17',['riscv_emulate_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fws_18',['riscv_emulate_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fwus_19',['riscv_emulate_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffdivs_20',['riscv_emulate_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffeqs_21',['riscv_emulate_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffles_22',['riscv_emulate_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5fflts_23',['riscv_emulate_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmadds_24',['riscv_emulate_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmaxs_25',['riscv_emulate_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmins_26',['riscv_emulate_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmsubs_27',['riscv_emulate_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmuls_28',['riscv_emulate_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmadds_29',['riscv_emulate_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmsubs_30',['riscv_emulate_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjns_31',['riscv_emulate_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjs_32',['riscv_emulate_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjxs_33',['riscv_emulate_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsqrts_34',['riscv_emulate_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsubs_35',['riscv_emulate_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffadds_36',['riscv_intrinsic_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffclasss_37',['riscv_intrinsic_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fsw_38',['riscv_intrinsic_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fswu_39',['riscv_intrinsic_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fws_40',['riscv_intrinsic_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fwus_41',['riscv_intrinsic_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffdivs_42',['riscv_intrinsic_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffeqs_43',['riscv_intrinsic_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffles_44',['riscv_intrinsic_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5fflts_45',['riscv_intrinsic_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmadds_46',['riscv_intrinsic_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmaxs_47',['riscv_intrinsic_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmins_48',['riscv_intrinsic_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmsubs_49',['riscv_intrinsic_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmuls_50',['riscv_intrinsic_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmadds_51',['riscv_intrinsic_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmsubs_52',['riscv_intrinsic_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjns_53',['riscv_intrinsic_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjs_54',['riscv_intrinsic_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjxs_55',['riscv_intrinsic_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsqrts_56',['riscv_intrinsic_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsubs_57',['riscv_intrinsic_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['route_58',['ROUTE',['../structneorv32__slink__t.html#a0b2417a1a587da45909ce2a948f90e22',1,'neorv32_slink_t']]], + ['rte_5fservice_5fhandler_59',['rte_service_handler',['../processor__check_2main_8c.html#a349743a03307abb5130a3e89d903971b',1,'main.c']]], + ['rte_5ftrap_5fbreakpoint_60',['RTE_TRAP_BREAKPOINT',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f0_61',['RTE_TRAP_FIRQ_0',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f1_62',['RTE_TRAP_FIRQ_1',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f10_63',['RTE_TRAP_FIRQ_10',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f11_64',['RTE_TRAP_FIRQ_11',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f12_65',['RTE_TRAP_FIRQ_12',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f13_66',['RTE_TRAP_FIRQ_13',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f14_67',['RTE_TRAP_FIRQ_14',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f15_68',['RTE_TRAP_FIRQ_15',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f2_69',['RTE_TRAP_FIRQ_2',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f3_70',['RTE_TRAP_FIRQ_3',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f4_71',['RTE_TRAP_FIRQ_4',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f5_72',['RTE_TRAP_FIRQ_5',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f6_73',['RTE_TRAP_FIRQ_6',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f7_74',['RTE_TRAP_FIRQ_7',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f8_75',['RTE_TRAP_FIRQ_8',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f9_76',['RTE_TRAP_FIRQ_9',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5faccess_77',['RTE_TRAP_I_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fillegal_78',['RTE_TRAP_I_ILLEGAL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fmisaligned_79',['RTE_TRAP_I_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5faccess_80',['RTE_TRAP_L_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5fmisaligned_81',['RTE_TRAP_L_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmei_82',['RTE_TRAP_MEI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmenv_5fcall_83',['RTE_TRAP_MENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmsi_84',['RTE_TRAP_MSI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmti_85',['RTE_TRAP_MTI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5faccess_86',['RTE_TRAP_S_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5fmisaligned_87',['RTE_TRAP_S_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fuenv_5fcall_88',['RTE_TRAP_UENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc',1,'neorv32_rte.h']]], + ['run_5faddsub_5ftests_89',['RUN_ADDSUB_TESTS',['../float__corner__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS: main.c'],['../floating__point__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS: main.c']]], + ['run_5fclassify_5ftests_90',['RUN_CLASSIFY_TESTS',['../float__corner__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS: main.c'],['../floating__point__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS: main.c']]], + ['run_5fcompare_5ftests_91',['RUN_COMPARE_TESTS',['../float__corner__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS: main.c'],['../floating__point__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS: main.c']]], + ['run_5fconv_5ftests_92',['RUN_CONV_TESTS',['../float__corner__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS: main.c'],['../floating__point__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS: main.c']]], + ['run_5fcsr_5ftests_93',['RUN_CSR_TESTS',['../floating__point__test_2main_8c.html#a7ec330b668b5b24d666d7769ccecfee3',1,'main.c']]], + ['run_5fexc_5ftests_94',['RUN_EXC_TESTS',['../floating__point__test_2main_8c.html#a1a1af220e72c69b03d13b2df53650e10',1,'main.c']]], + ['run_5fminmax_5ftests_95',['RUN_MINMAX_TESTS',['../float__corner__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS: main.c'],['../floating__point__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS: main.c']]], + ['run_5fmul_5ftests_96',['RUN_MUL_TESTS',['../float__corner__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS: main.c'],['../floating__point__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS: main.c']]], + ['run_5fsgninj_5ftests_97',['RUN_SGNINJ_TESTS',['../float__corner__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS: main.c'],['../floating__point__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS: main.c']]], + ['run_5ftiming_5ftests_98',['RUN_TIMING_TESTS',['../float__corner__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS: main.c'],['../floating__point__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS: main.c']]], + ['run_5funavail_5ftests_99',['RUN_UNAVAIL_TESTS',['../float__corner__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS: main.c'],['../floating__point__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS: main.c']]] +]; diff --git a/sw/search/all_17.js b/sw/search/all_17.js new file mode 100644 index 0000000000..49e1b05f3e --- /dev/null +++ b/sw/search/all_17.js @@ -0,0 +1,161 @@ +var searchData= +[ + ['save_5fexe_0',['save_exe',['../bootloader_8c.html#ababfffe8e7036179e150ad3b9bda3a74',1,'bootloader.c']]], + ['scan_5fbus_1',['scan_bus',['../demo__onewire_2main_8c.html#ac07c9cfd80ac2e24be9dac6cf943b7de',1,'main.c']]], + ['scan_5ftwi_2',['scan_twi',['../demo__twi_2main_8c.html#aace46ee34e954f9ebee5873beb0785f1',1,'main.c']]], + ['sdi_5fctrl_5fcs_5factive_3',['SDI_CTRL_CS_ACTIVE',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5fen_4',['SDI_CTRL_EN',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5flsb_5',['SDI_CTRL_FIFO_LSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5fmsb_6',['SDI_CTRL_FIFO_MSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5favail_7',['SDI_CTRL_IRQ_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5ffull_8',['SDI_CTRL_IRQ_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5fhalf_9',['SDI_CTRL_IRQ_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fempty_10',['SDI_CTRL_IRQ_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fnhalf_11',['SDI_CTRL_IRQ_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5favail_12',['SDI_CTRL_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5ffull_13',['SDI_CTRL_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5fhalf_14',['SDI_CTRL_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fempty_15',['SDI_CTRL_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5ffull_16',['SDI_CTRL_TX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fnhalf_17',['SDI_CTRL_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9',1,'neorv32_sdi.h']]], + ['sdi_5ffirq_5fenable_18',['SDI_FIRQ_ENABLE',['../neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f',1,'neorv32.h']]], + ['sdi_5ffirq_5fpending_19',['SDI_FIRQ_PENDING',['../neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede',1,'neorv32.h']]], + ['sdi_5fget_20',['sdi_get',['../demo__sdi_2main_8c.html#aa25f620a5631e862252be1d5429e8585',1,'main.c']]], + ['sdi_5fput_21',['sdi_put',['../demo__sdi_2main_8c.html#ae3dc843520a800d7ba2b5d6be03d9c3d',1,'main.c']]], + ['sdi_5frte_5fid_22',['SDI_RTE_ID',['../neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf',1,'neorv32.h']]], + ['sdi_5ftrap_5fcode_23',['SDI_TRAP_CODE',['../neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79',1,'neorv32.h']]], + ['seconds_24',['seconds',['../structdate__t.html#a1071948e7754cb415da9714d59a315bf',1,'date_t']]], + ['send_5ftwi_25',['send_twi',['../demo__twi_2main_8c.html#aa94edd4f55a3ac18913f661f4bc16fb1',1,'main.c']]], + ['set_5fcell_26',['set_cell',['../game__of__life_2main_8c.html#a5315eb56128f1ca40d9f4d477c345dd7',1,'main.c']]], + ['set_5fclock_27',['set_clock',['../demo__twi_2main_8c.html#acee0c1770467f85a150d072ac7e1252f',1,'main.c']]], + ['setup_5faccess_28',['setup_access',['../bus__explorer_2main_8c.html#a2b6196c2e97a7f7702c0068780304ec1',1,'main.c']]], + ['show_5f1wire_5fcommands_29',['show_1wire_commands',['../demo__onewire_2main_8c.html#a29d5831498c2eaf0415d6f01efb9e7ce',1,'main.c']]], + ['show_5farrays_30',['show_arrays',['../demo__dma_2main_8c.html#a8ad0c7bfd07edb6d42d86b166347206b',1,'main.c']]], + ['show_5fhelp_31',['show_help',['../demo__onewire_2main_8c.html#af25820ed386a66a0d6bb4dcdd2204704',1,'main.c']]], + ['silent_5fmode_32',['SILENT_MODE',['../atomic__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE: main.c'],['../float__corner__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE: main.c'],['../floating__point__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE: main.c']]], + ['sim_5firq_5ftrigger_33',['sim_irq_trigger',['../processor__check_2main_8c.html#ada24f2cd9d2d384265517f539711de62',1,'main.c']]], + ['slink_5fctrl_5fen_34',['SLINK_CTRL_EN',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5ffull_35',['SLINK_CTRL_IRQ_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fhalf_36',['SLINK_CTRL_IRQ_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fnempty_37',['SLINK_CTRL_IRQ_RX_NEMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fempty_38',['SLINK_CTRL_IRQ_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnfull_39',['SLINK_CTRL_IRQ_TX_NFULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnhalf_40',['SLINK_CTRL_IRQ_TX_NHALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fclr_41',['SLINK_CTRL_RX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fempty_42',['SLINK_CTRL_RX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5flsb_43',['SLINK_CTRL_RX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5fmsb_44',['SLINK_CTRL_RX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffull_45',['SLINK_CTRL_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fhalf_46',['SLINK_CTRL_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5flast_47',['SLINK_CTRL_RX_LAST',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fclr_48',['SLINK_CTRL_TX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fempty_49',['SLINK_CTRL_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5flsb_50',['SLINK_CTRL_TX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5fmsb_51',['SLINK_CTRL_TX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffull_52',['SLINK_CTRL_TX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fhalf_53',['SLINK_CTRL_TX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fempty_54',['SLINK_FIFO_EMPTY',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c',1,'neorv32_slink.h']]], + ['slink_5ffifo_5ffull_55',['SLINK_FIFO_FULL',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fhalf_56',['SLINK_FIFO_HALF',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9',1,'neorv32_slink.h']]], + ['slink_5ffirq_5fhandler_57',['slink_firq_handler',['../demo__slink_2main_8c.html#a48c79e20ed1d4138d61b5593bdbe537a',1,'main.c']]], + ['slink_5froute_5fdst_5flsb_58',['SLINK_ROUTE_DST_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80',1,'neorv32_slink.h']]], + ['slink_5froute_5fdst_5fmsb_59',['SLINK_ROUTE_DST_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5flsb_60',['SLINK_ROUTE_SRC_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5fmsb_61',['SLINK_ROUTE_SRC_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983',1,'neorv32_slink.h']]], + ['slink_5frx_5ffirq_5fenable_62',['SLINK_RX_FIRQ_ENABLE',['../neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77',1,'neorv32.h']]], + ['slink_5frx_5ffirq_5fpending_63',['SLINK_RX_FIRQ_PENDING',['../neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526',1,'neorv32.h']]], + ['slink_5frx_5frte_5fid_64',['SLINK_RX_RTE_ID',['../neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d',1,'neorv32.h']]], + ['slink_5frx_5ftrap_5fcode_65',['SLINK_RX_TRAP_CODE',['../neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fenable_66',['SLINK_TX_FIRQ_ENABLE',['../neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fpending_67',['SLINK_TX_FIRQ_PENDING',['../neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e',1,'neorv32.h']]], + ['slink_5ftx_5frte_5fid_68',['SLINK_TX_RTE_ID',['../neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43',1,'neorv32.h']]], + ['slink_5ftx_5ftrap_5fcode_69',['SLINK_TX_TRAP_CODE',['../neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd',1,'neorv32.h']]], + ['soc_70',['SOC',['../structneorv32__sysinfo__t.html#ac43abe3b416da3a2895d1d06537a14c3',1,'neorv32_sysinfo_t']]], + ['soc_71',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['software_20ecosystem_72',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['software_20framework_20a_20the_20software_20ecosystem_73',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['spi_5fboot_5fbase_5faddr_74',['SPI_BOOT_BASE_ADDR',['../bootloader_8c.html#a418adcf57119600c3580fd2297d28de0',1,'bootloader.c']]], + ['spi_5fcs_75',['spi_cs',['../demo__spi_2main_8c.html#a6f94991b8943a141ed4124585222470d',1,'main.c']]], + ['spi_5fcs_5factive_76',['SPI_CS_ACTIVE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fbusy_77',['SPI_CTRL_BUSY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv0_78',['SPI_CTRL_CDIV0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv1_79',['SPI_CTRL_CDIV1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv2_80',['SPI_CTRL_CDIV2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv3_81',['SPI_CTRL_CDIV3',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpha_82',['SPI_CTRL_CPHA',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpol_83',['SPI_CTRL_CPOL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fen_84',['SPI_CTRL_EN',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5flsb_85',['SPI_CTRL_FIFO_LSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5fmsb_86',['SPI_CTRL_FIFO_MSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fhighspeed_87',['SPI_CTRL_HIGHSPEED',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5fidle_88',['SPI_CTRL_IRQ_IDLE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5frx_5favail_89',['SPI_CTRL_IRQ_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fempty_90',['SPI_CTRL_IRQ_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fhalf_91',['SPI_CTRL_IRQ_TX_HALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc0_92',['SPI_CTRL_PRSC0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc1_93',['SPI_CTRL_PRSC1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc2_94',['SPI_CTRL_PRSC2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a',1,'neorv32_spi.h']]], + ['spi_5fctrl_5frx_5favail_95',['SPI_CTRL_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fempty_96',['SPI_CTRL_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5ffull_97',['SPI_CTRL_TX_FULL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fnhalf_98',['SPI_CTRL_TX_NHALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcmd_99',['SPI_DATA_CMD',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcsen_100',['SPI_DATA_CSEN',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2',1,'neorv32_spi.h']]], + ['spi_5fdata_5flsb_101',['SPI_DATA_LSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fmsb_102',['SPI_DATA_MSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600',1,'neorv32_spi.h']]], + ['spi_5fen_103',['SPI_EN',['../bootloader_8c.html#aea75cf0485ce0a4ea320eba994859686',1,'bootloader.c']]], + ['spi_5ffirq_5fenable_104',['SPI_FIRQ_ENABLE',['../neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626',1,'neorv32.h']]], + ['spi_5ffirq_5fpending_105',['SPI_FIRQ_PENDING',['../neorv32_8h.html#ab2f58f746febb29a9828447c733f8043',1,'neorv32.h']]], + ['spi_5fflash_5faddr_5fbytes_106',['SPI_FLASH_ADDR_BYTES',['../bootloader_8c.html#afe60a31c8561952f2f734fd67e6f7406',1,'bootloader.c']]], + ['spi_5fflash_5fcheck_107',['spi_flash_check',['../bootloader_8c.html#a1919595ed2232aebb3e774b916ab1662',1,'bootloader.c']]], + ['spi_5fflash_5fclk_5fprsc_108',['SPI_FLASH_CLK_PRSC',['../bootloader_8c.html#a709071a651213770b4efe6e6e055ec3d',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_109',['SPI_FLASH_CMD',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12e',1,'main.c']]], + ['spi_5fflash_5fcmd_5fenum_110',['SPI_FLASH_CMD_enum',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fed',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fpage_5fprogram_111',['SPI_FLASH_CMD_PAGE_PROGRAM',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fread_112',['SPI_FLASH_CMD_READ',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ: main.c']]], + ['spi_5fflash_5fcmd_5fread_5fstatus_113',['SPI_FLASH_CMD_READ_STATUS',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS: main.c']]], + ['spi_5fflash_5fcmd_5fsector_5ferase_114',['SPI_FLASH_CMD_SECTOR_ERASE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE: main.c']]], + ['spi_5fflash_5fcmd_5fwake_115',['SPI_FLASH_CMD_WAKE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fwrite_116',['SPI_FLASH_CMD_WRITE',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1',1,'main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fdisable_117',['SPI_FLASH_CMD_WRITE_DISABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE: main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fenable_118',['SPI_FLASH_CMD_WRITE_ENABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE: main.c']]], + ['spi_5fflash_5fcs_119',['SPI_FLASH_CS',['../bootloader_8c.html#aa2132454aada86216009f3af206899b1',1,'bootloader.c']]], + ['spi_5fflash_5ferase_5fsector_120',['spi_flash_erase_sector',['../bootloader_8c.html#a0d877f0611dfcee32a483c8a3660eb1b',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fbyte_121',['spi_flash_read_byte',['../bootloader_8c.html#a09e72e2debdd94929b2be4c7713d5e17',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fstatus_122',['spi_flash_read_status',['../bootloader_8c.html#a005966cd0b32f3d5c041028c4b1c99f5',1,'bootloader.c']]], + ['spi_5fflash_5fsector_5fsize_123',['SPI_FLASH_SECTOR_SIZE',['../bootloader_8c.html#a00924a8ba223b2ca0e7031259b292c84',1,'bootloader.c']]], + ['spi_5fflash_5fsreg_124',['SPI_FLASH_SREG',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08e',1,'main.c']]], + ['spi_5fflash_5fsreg_5fenum_125',['SPI_FLASH_SREG_enum',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136f',1,'bootloader.c']]], + ['spi_5fflash_5fsreg_5fwel_126',['SPI_FLASH_SREG_WEL',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1',1,'main.c']]], + ['spi_5fflash_5fsreg_5fwip_127',['SPI_FLASH_SREG_WIP',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4',1,'main.c']]], + ['spi_5fflash_5fwakeup_128',['spi_flash_wakeup',['../bootloader_8c.html#a1fbdccc60f05756213c9f3d64bac6d47',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5faddr_129',['spi_flash_write_addr',['../bootloader_8c.html#a6a8caddda6e729d747726471b0b0f742',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fbyte_130',['spi_flash_write_byte',['../bootloader_8c.html#a006c27b7d80897b78ab8cd83a391331f',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fdisable_131',['spi_flash_write_disable',['../bootloader_8c.html#a82d26a2d6293ed7fd44a5c622adfbd45',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fenable_132',['spi_flash_write_enable',['../bootloader_8c.html#a9642e28ef2baec5b356ad9a70970d0e6',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fword_133',['spi_flash_write_word',['../bootloader_8c.html#a717c72166af7c2ff7e73bd0b47128338',1,'bootloader.c']]], + ['spi_5firq_5fhandler_134',['spi_irq_handler',['../demo__spi__irq_2main_8c.html#a7e266cc5247c999948dacc2102bd184a',1,'main.c']]], + ['spi_5frte_5fid_135',['SPI_RTE_ID',['../neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd',1,'neorv32.h']]], + ['spi_5fsetup_136',['spi_setup',['../demo__spi_2main_8c.html#a755192be6c3cf9904564b0eee99de445',1,'main.c']]], + ['spi_5ftrans_137',['spi_trans',['../demo__spi_2main_8c.html#a13e10b34fbbffca6c31f0ce25b3f8432',1,'main.c']]], + ['spi_5ftrap_5fcode_138',['SPI_TRAP_CODE',['../neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4',1,'neorv32.h']]], + ['src_5fbase_139',['SRC_BASE',['../structneorv32__dma__t.html#a3b214d1a373c7f15b374e113d7110b42',1,'neorv32_dma_t']]], + ['sreg_140',['SREG',['../structneorv32__crc__t.html#abf2b419f2aefdb6f2a6b81a02cb8612d',1,'neorv32_crc_t']]], + ['start_5fapp_141',['start_app',['../bootloader_8c.html#ae8de91537ac2782f0f0ebc3b2d4fb1df',1,'bootloader.c']]], + ['started_142',['Started',['../md_README.html#autotoc_md7',1,'5. Getting Started'],['../md_README.html#autotoc_md12',1,':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!']]], + ['status_143',['Project Status',['../md_README.html#autotoc_md3',1,'']]], + ['status_5fled_5fen_144',['STATUS_LED_EN',['../bootloader_8c.html#aa9696325b450773c7a87c991abca3a54',1,'bootloader.c']]], + ['status_5fled_5fpin_145',['STATUS_LED_PIN',['../bootloader_8c.html#a089a71f836911c71b3f73fdd3b4b890b',1,'bootloader.c']]], + ['stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_146',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_147',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_148',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_149',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20getting_20started_150',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['str_151',['str',['../bootloader_8c.html#af6cf19e40e97afb5a7c29f7b439d091d',1,'bootloader.c']]], + ['subnormal_5fflush_152',['subnormal_flush',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['subwords16_5ft_153',['subwords16_t',['../unionsubwords16__t.html',1,'']]], + ['subwords32_5ft_154',['subwords32_t',['../unionsubwords32__t.html',1,'']]], + ['subwords64_5ft_155',['subwords64_t',['../unionsubwords64__t.html',1,'']]], + ['syscalls_2ec_156',['syscalls.c',['../syscalls_8c.html',1,'']]], + ['system_5ferror_157',['system_error',['../bootloader_8c.html#a3bdfe2f25b1bfb42f80624ffff22ab01',1,'bootloader.c']]] +]; diff --git a/sw/search/all_18.js b/sw/search/all_18.js new file mode 100644 index 0000000000..2e096554d0 --- /dev/null +++ b/sw/search/all_18.js @@ -0,0 +1,91 @@ +var searchData= +[ + ['t_5fneorv32_5fspi_0',['t_neorv32_spi',['../structt__neorv32__spi.html',1,'']]], + ['test_5ffail_1',['test_fail',['../processor__check_2main_8c.html#a1e0a5d63896fa26a6c25c0012fc6b938',1,'main.c']]], + ['test_5fok_2',['test_ok',['../processor__check_2main_8c.html#ae61d39109b2747429ec3a3c1b5533598',1,'main.c']]], + ['testcases_3',['TESTCASES',['../demo__cfs_2main_8c.html#a906949f076e3e0d0082af3c3b1acb518',1,'main.c']]], + ['the_20core_4',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['the_20neorv32_20risc_20v_20processor_5',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['the_20soc_6',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['the_20software_20ecosystem_7',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['thres_8',['THRES',['../structneorv32__gptmr__t.html#a666ebcbea13dafcf1987629f3e0092ee',1,'neorv32_gptmr_t']]], + ['time_5fdec_5fhw_9',['time_dec_hw',['../demo__cfu_2main_8c.html#acb6dd9d6ab74ac94f174a11ff3ad76af',1,'main.c']]], + ['time_5fdec_5fsw_10',['time_dec_sw',['../demo__cfu_2main_8c.html#a2d3853c367c3bce99e787c0df445030a',1,'main.c']]], + ['time_5fenc_5fhw_11',['time_enc_hw',['../demo__cfu_2main_8c.html#a094212e3731a9aecbd278fac243de6ec',1,'main.c']]], + ['time_5fenc_5fsw_12',['time_enc_sw',['../demo__cfu_2main_8c.html#ad424a26173bd8d84b8d1cae94a55f248',1,'main.c']]], + ['time_5fhi_13',['TIME_HI',['../structneorv32__mtime__t.html#a1ffe0be2c45f5d7aa2686abf40cd1693',1,'neorv32_mtime_t']]], + ['time_5flo_14',['TIME_LO',['../structneorv32__mtime__t.html#acccaa3dd87a57ebd5f7ae504771e904e',1,'neorv32_mtime_t']]], + ['timecmp_5fhi_15',['TIMECMP_HI',['../structneorv32__mtime__t.html#af05df268c8f699401cf752e4249ba422',1,'neorv32_mtime_t']]], + ['timecmp_5flo_16',['TIMECMP_LO',['../structneorv32__mtime__t.html#ab5fa56ca5c2f9d547f58d169d6da96e5',1,'neorv32_mtime_t']]], + ['tpol_17',['TPOL',['../structneorv32__xirq__t.html#a5fe0036a2cada585228b60aaa780e92a',1,'neorv32_xirq_t']]], + ['trap_5fcode_5fbreakpoint_18',['TRAP_CODE_BREAKPOINT',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f0_19',['TRAP_CODE_FIRQ_0',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f1_20',['TRAP_CODE_FIRQ_1',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f10_21',['TRAP_CODE_FIRQ_10',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f11_22',['TRAP_CODE_FIRQ_11',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f12_23',['TRAP_CODE_FIRQ_12',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f13_24',['TRAP_CODE_FIRQ_13',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f14_25',['TRAP_CODE_FIRQ_14',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f15_26',['TRAP_CODE_FIRQ_15',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f2_27',['TRAP_CODE_FIRQ_2',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f3_28',['TRAP_CODE_FIRQ_3',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f4_29',['TRAP_CODE_FIRQ_4',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f5_30',['TRAP_CODE_FIRQ_5',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f6_31',['TRAP_CODE_FIRQ_6',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f7_32',['TRAP_CODE_FIRQ_7',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f8_33',['TRAP_CODE_FIRQ_8',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f9_34',['TRAP_CODE_FIRQ_9',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5faccess_35',['TRAP_CODE_I_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fillegal_36',['TRAP_CODE_I_ILLEGAL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fmisaligned_37',['TRAP_CODE_I_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5faccess_38',['TRAP_CODE_L_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5fmisaligned_39',['TRAP_CODE_L_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmei_40',['TRAP_CODE_MEI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmenv_5fcall_41',['TRAP_CODE_MENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmsi_42',['TRAP_CODE_MSI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmti_43',['TRAP_CODE_MTI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5faccess_44',['TRAP_CODE_S_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5fmisaligned_45',['TRAP_CODE_S_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fuenv_5fcall_46',['TRAP_CODE_UENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02',1,'neorv32_cpu_csr.h']]], + ['trap_5fhandler_5femulate_5famo_47',['trap_handler_emulate_amo',['../atomic__test_2main_8c.html#aafcbf639ae4f66e5dfe9dea511a59f9d',1,'main.c']]], + ['trap_5fhandler_5femulate_5funaligned_5flw_48',['trap_handler_emulate_unaligned_lw',['../demo__emulate__unaligned_2main_8c.html#a07da42351229525998965b219e827460',1,'main.c']]], + ['trigger_5fmodule_5fdummy_49',['trigger_module_dummy',['../processor__check_2main_8c.html#ac91bfdd45696444673dc7d6b1b644082',1,'main.c']]], + ['trng_5fctrl_5fdata_5flsb_50',['TRNG_CTRL_DATA_LSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa50bb6e10e245a977dcf29a7a138776c6',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fdata_5fmsb_51',['TRNG_CTRL_DATA_MSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa95620874acc9393a05d670824c0bbed2',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fen_52',['TRNG_CTRL_EN',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fclr_53',['TRNG_CTRL_FIFO_CLR',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5flsb_54',['TRNG_CTRL_FIFO_LSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fmsb_55',['TRNG_CTRL_FIFO_MSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5',1,'neorv32_trng.h']]], + ['trng_5fctrl_5firq_5fsel_56',['TRNG_CTRL_IRQ_SEL',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa968a770fe6b172183dd97818e09c63da',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fsim_5fmode_57',['TRNG_CTRL_SIM_MODE',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fvalid_58',['TRNG_CTRL_VALID',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa2e0079358668db409fb763eaccb93da9',1,'neorv32_trng.h']]], + ['trng_5ffirq_5fenable_59',['TRNG_FIRQ_ENABLE',['../neorv32_8h.html#a2896d832852c016eb85210b523642f11',1,'neorv32.h']]], + ['trng_5ffirq_5fpending_60',['TRNG_FIRQ_PENDING',['../neorv32_8h.html#a9c387ca4e2736a27056c11819947c84a',1,'neorv32.h']]], + ['trng_5frte_5fid_61',['TRNG_RTE_ID',['../neorv32_8h.html#afaa705a674acf3fd6c8cb294eaf11c5e',1,'neorv32.h']]], + ['trng_5ftrap_5fcode_62',['TRNG_TRAP_CODE',['../neorv32_8h.html#a11e34802c61a01fd6cba46e3f92d5ac1',1,'neorv32.h']]], + ['ttyp_63',['TTYP',['../structneorv32__xirq__t.html#ab7117c210b5f0a8ebc369eeba6a4a5bc',1,'neorv32_xirq_t']]], + ['ttype_64',['TTYPE',['../structneorv32__dma__t.html#a70c28642195765409d97b941e98f47ca',1,'neorv32_dma_t']]], + ['twi_5fctrl_5fbusy_65',['TWI_CTRL_BUSY',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv0_66',['TWI_CTRL_CDIV0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv1_67',['TWI_CTRL_CDIV1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv2_68',['TWI_CTRL_CDIV2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv3_69',['TWI_CTRL_CDIV3',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fclkstr_70',['TWI_CTRL_CLKSTR',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fen_71',['TWI_CTRL_EN',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5flsb_72',['TWI_CTRL_FIFO_LSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5fmsb_73',['TWI_CTRL_FIFO_MSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc0_74',['TWI_CTRL_PRSC0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc1_75',['TWI_CTRL_PRSC1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc2_76',['TWI_CTRL_PRSC2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5frx_5favail_77',['TWI_CTRL_RX_AVAIL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ftx_5ffull_78',['TWI_CTRL_TX_FULL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fack_79',['TWI_DCMD_ACK',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5fhi_80',['TWI_DCMD_CMD_HI',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5flo_81',['TWI_DCMD_CMD_LO',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5flsb_82',['TWI_DCMD_LSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fmsb_83',['TWI_DCMD_MSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d',1,'neorv32_twi.h']]], + ['twi_5ffirq_5fenable_84',['TWI_FIRQ_ENABLE',['../neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7',1,'neorv32.h']]], + ['twi_5ffirq_5fpending_85',['TWI_FIRQ_PENDING',['../neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff',1,'neorv32.h']]], + ['twi_5frte_5fid_86',['TWI_RTE_ID',['../neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c',1,'neorv32.h']]], + ['twi_5ftrap_5fcode_87',['TWI_TRAP_CODE',['../neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47',1,'neorv32.h']]] +]; diff --git a/sw/search/all_19.js b/sw/search/all_19.js new file mode 100644 index 0000000000..e0e5baac41 --- /dev/null +++ b/sw/search/all_19.js @@ -0,0 +1,70 @@ +var searchData= +[ + ['uart0_5frx_5ffirq_5fenable_0',['UART0_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9',1,'neorv32.h']]], + ['uart0_5frx_5ffirq_5fpending_1',['UART0_RX_FIRQ_PENDING',['../neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701',1,'neorv32.h']]], + ['uart0_5frx_5frte_5fid_2',['UART0_RX_RTE_ID',['../neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1',1,'neorv32.h']]], + ['uart0_5frx_5ftrap_5fcode_3',['UART0_RX_TRAP_CODE',['../neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fenable_4',['UART0_TX_FIRQ_ENABLE',['../neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fpending_5',['UART0_TX_FIRQ_PENDING',['../neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9',1,'neorv32.h']]], + ['uart0_5ftx_5frte_5fid_6',['UART0_TX_RTE_ID',['../neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58',1,'neorv32.h']]], + ['uart0_5ftx_5ftrap_5fcode_7',['UART0_TX_TRAP_CODE',['../neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fenable_8',['UART1_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fpending_9',['UART1_RX_FIRQ_PENDING',['../neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20',1,'neorv32.h']]], + ['uart1_5frx_5frte_5fid_10',['UART1_RX_RTE_ID',['../neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b',1,'neorv32.h']]], + ['uart1_5frx_5ftrap_5fcode_11',['UART1_RX_TRAP_CODE',['../neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fenable_12',['UART1_TX_FIRQ_ENABLE',['../neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fpending_13',['UART1_TX_FIRQ_PENDING',['../neorv32_8h.html#ac4060532b7aa390623f54720460a2680',1,'neorv32.h']]], + ['uart1_5ftx_5frte_5fid_14',['UART1_TX_RTE_ID',['../neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3',1,'neorv32.h']]], + ['uart1_5ftx_5ftrap_5fcode_15',['UART1_TX_TRAP_CODE',['../neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd',1,'neorv32.h']]], + ['uart_5fbaud_16',['UART_BAUD',['../bootloader_8c.html#a1fac9153314479ad0ad495d752f0224a',1,'bootloader.c']]], + ['uart_5fctrl_5fbaud0_17',['UART_CTRL_BAUD0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud1_18',['UART_CTRL_BAUD1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud2_19',['UART_CTRL_BAUD2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud3_20',['UART_CTRL_BAUD3',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud4_21',['UART_CTRL_BAUD4',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud5_22',['UART_CTRL_BAUD5',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud6_23',['UART_CTRL_BAUD6',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud7_24',['UART_CTRL_BAUD7',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud8_25',['UART_CTRL_BAUD8',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud9_26',['UART_CTRL_BAUD9',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fen_27',['UART_CTRL_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fhwfc_5fen_28',['UART_CTRL_HWFC_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5ffull_29',['UART_CTRL_IRQ_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fhalf_30',['UART_CTRL_IRQ_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fnempty_31',['UART_CTRL_IRQ_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fempty_32',['UART_CTRL_IRQ_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fnhalf_33',['UART_CTRL_IRQ_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc0_34',['UART_CTRL_PRSC0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc1_35',['UART_CTRL_PRSC1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc2_36',['UART_CTRL_PRSC2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fclr_37',['UART_CTRL_RX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5ffull_38',['UART_CTRL_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fhalf_39',['UART_CTRL_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fnempty_40',['UART_CTRL_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fover_41',['UART_CTRL_RX_OVER',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fsim_5fmode_42',['UART_CTRL_SIM_MODE',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fbusy_43',['UART_CTRL_TX_BUSY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fclr_44',['UART_CTRL_TX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fempty_45',['UART_CTRL_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5ffull_46',['UART_CTRL_TX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fnhalf_47',['UART_CTRL_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5flsb_48',['UART_DATA_RTX_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5fmsb_49',['UART_DATA_RTX_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5flsb_50',['UART_DATA_RX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5fmsb_51',['UART_DATA_RX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5flsb_52',['UART_DATA_TX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5fmsb_53',['UART_DATA_TX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529',1,'neorv32_uart.h']]], + ['uart_5fen_54',['UART_EN',['../bootloader_8c.html#af1c2f103ac6e3183f08b39099fab2be9',1,'bootloader.c']]], + ['uart_5fget_5fexecutable_55',['uart_get_executable',['../demo__xip_2main_8c.html#a0458656f8a108ff31f4bbbd005f029a0',1,'main.c']]], + ['uart_5fget_5fword_56',['uart_get_word',['../demo__xip_2main_8c.html#a3043d09bdc155f57f45cd91e0cd4d15b',1,'main.c']]], + ['uart_5fhw_5fhandshake_5fen_57',['UART_HW_HANDSHAKE_EN',['../bootloader_8c.html#a20e93d623ce07939c3fdd53898f9d583',1,'bootloader.c']]], + ['ug_20user_20guide_20a_20getting_20started_58',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['uint16fifo_59',['uint16Fifo',['../structt__neorv32__spi.html#a71fb3f91af197e1abdbe97d62130ad0f',1,'t_neorv32_spi']]], + ['uint32read_60',['uint32Read',['../structt__neorv32__spi.html#a5750a54f8312ec2fed349eb9fbeff323',1,'t_neorv32_spi']]], + ['uint32total_61',['uint32Total',['../structt__neorv32__spi.html#aa4d96f72e57fb6930ab43de6fb0a85ae',1,'t_neorv32_spi']]], + ['uint32write_62',['uint32Write',['../structt__neorv32__spi.html#aa89b7a769e54e331798e4d68d02a7b43',1,'t_neorv32_spi']]], + ['uint8csn_63',['uint8Csn',['../structt__neorv32__spi.html#a435c266758a440d32de4344472e3514a',1,'t_neorv32_spi']]], + ['uint8isbusy_64',['uint8IsBusy',['../structt__neorv32__spi.html#a8ed31f9393bee5b963e08582b6c517ed',1,'t_neorv32_spi']]], + ['universe_65',['universe',['../game__of__life_2main_8c.html#ae0b5214cf0cd93049e9df8a95a09d826',1,'main.c']]], + ['user_20guide_20a_20getting_20started_66',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/all_1a.js b/sw/search/all_1a.js new file mode 100644 index 0000000000..922a76a9be --- /dev/null +++ b/sw/search/all_1a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['v_20processor_0',['The NEORV32 RISC-V Processor',['../md_README.html#autotoc_md0',1,'']]], + ['vectored_5fglobal_5fhandler_1',['vectored_global_handler',['../processor__check_2main_8c.html#a9504ca74fdb80711a88d2a16d4cb4cf4',1,'main.c']]], + ['vectored_5firq_5ftable_2',['vectored_irq_table',['../processor__check_2main_8c.html#a0d695ebfaae3b4614ddb62640cbf8b7b',1,'main.c']]], + ['vectored_5fmei_5fhandler_3',['vectored_mei_handler',['../processor__check_2main_8c.html#a1a455bede4ab48f32d3ed0868e398044',1,'main.c']]], + ['verify_5fresult_4',['verify_result',['../float__corner__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res): main.c'],['../floating__point__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res): main.c']]] +]; diff --git a/sw/search/all_1b.js b/sw/search/all_1b.js new file mode 100644 index 0000000000..fcd963d5e9 --- /dev/null +++ b/sw/search/all_1b.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['wdt_5fctrl_5fdben_0',['WDT_CTRL_DBEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fen_1',['WDT_CTRL_EN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5flock_2',['WDT_CTRL_LOCK',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5fhi_3',['WDT_CTRL_RCAUSE_HI',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5flo_4',['WDT_CTRL_RCAUSE_LO',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fsen_5',['WDT_CTRL_SEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fstrict_6',['WDT_CTRL_STRICT',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5flsb_7',['WDT_CTRL_TIMEOUT_LSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5fmsb_8',['WDT_CTRL_TIMEOUT_MSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7',1,'neorv32_wdt.h']]], + ['wdt_5fpassword_9',['WDT_PASSWORD',['../neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5fext_10',['WDT_RCAUSE_EXT',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5focd_11',['WDT_RCAUSE_OCD',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5fwdt_12',['WDT_RCAUSE_WDT',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a974e73fb98b6a3591c214eba6071fd3c',1,'neorv32_wdt.h']]], + ['wdt_5ftimeout_5fs_13',['WDT_TIMEOUT_S',['../demo__wdt_2main_8c.html#a01af3905e60b1869f669315f4a1297f5',1,'main.c']]], + ['weekday_14',['weekday',['../structdate__t.html#a44167cd71416886e55048310af6d4e1b',1,'date_t']]], + ['write_5fbyte_15',['write_byte',['../demo__onewire_2main_8c.html#a28283848f09bf8feebc860a51545f487',1,'main.c']]], + ['write_5fmemory_16',['write_memory',['../bus__explorer_2main_8c.html#a96729fb5279642ac56c8e6a513789b45',1,'main.c']]] +]; diff --git a/sw/search/all_1c.js b/sw/search/all_1c.js new file mode 100644 index 0000000000..5faa061518 --- /dev/null +++ b/sw/search/all_1c.js @@ -0,0 +1,50 @@ +var searchData= +[ + ['xip_5fclk_5fprsc_0',['XIP_CLK_PRSC',['../demo__xip_2main_8c.html#aec72efe062dbdb149ae6d4f8b1be6793',1,'main.c']]], + ['xip_5fctrl_5fburst_5fen_1',['XIP_CTRL_BURST_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv0_2',['XIP_CTRL_CDIV0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv1_3',['XIP_CTRL_CDIV1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv2_4',['XIP_CTRL_CDIV2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv3_5',['XIP_CTRL_CDIV3',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpha_6',['XIP_CTRL_CPHA',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpol_7',['XIP_CTRL_CPOL',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fen_8',['XIP_CTRL_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fhighspeed_9',['XIP_CTRL_HIGHSPEED',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fphy_5fbusy_10',['XIP_CTRL_PHY_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc0_11',['XIP_CTRL_PRSC0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc1_12',['XIP_CTRL_PRSC1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc2_13',['XIP_CTRL_PRSC2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5flsb_14',['XIP_CTRL_RD_CMD_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5fmsb_15',['XIP_CTRL_RD_CMD_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fcsen_16',['XIP_CTRL_SPI_CSEN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5flsb_17',['XIP_CTRL_SPI_NBYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5fmsb_18',['XIP_CTRL_SPI_NBYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5flsb_19',['XIP_CTRL_XIP_ABYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5fmsb_20',['XIP_CTRL_XIP_ABYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fbusy_21',['XIP_CTRL_XIP_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fen_22',['XIP_CTRL_XIP_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937',1,'neorv32_xip.h']]], + ['xip_5fen_23',['XIP_EN',['../bootloader_8c.html#a2cf31934b909299fb93bb5eebdbc7c9e',1,'bootloader.c']]], + ['xip_5fflash_5faccess_5fcheck_24',['xip_flash_access_check',['../demo__xip_2main_8c.html#a23bd7bd7b0808d919fd09ac0a8258498',1,'main.c']]], + ['xip_5fflash_5ferase_5fsector_25',['xip_flash_erase_sector',['../demo__xip_2main_8c.html#a9e0b2714126b6699ddb65485c93293e4',1,'main.c']]], + ['xip_5fflash_5fprogram_26',['xip_flash_program',['../demo__xip_2main_8c.html#a4ddfa8fdc072cadeef18a4a10bc8b174',1,'main.c']]], + ['xip_5fmem_5fbase_5faddress_27',['XIP_MEM_BASE_ADDRESS',['../neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f',1,'neorv32.h']]], + ['xirq_5ffirq_5fenable_28',['XIRQ_FIRQ_ENABLE',['../neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334',1,'neorv32.h']]], + ['xirq_5ffirq_5fpending_29',['XIRQ_FIRQ_PENDING',['../neorv32_8h.html#a866768963f8648363dce40de9f34d61b',1,'neorv32.h']]], + ['xirq_5fhandler_5fch0_30',['xirq_handler_ch0',['../demo__xirq_2main_8c.html#a8874ccfc0b56171c359b5c2ceaf2bd80',1,'main.c']]], + ['xirq_5fhandler_5fch1_31',['xirq_handler_ch1',['../demo__xirq_2main_8c.html#abfe0c0bc47a683ba55df2aed63a12d4b',1,'main.c']]], + ['xirq_5fhandler_5fch2_32',['xirq_handler_ch2',['../demo__xirq_2main_8c.html#ae8e3b3236aa2303c2b5e6e421b72cf73',1,'main.c']]], + ['xirq_5fhandler_5fch3_33',['xirq_handler_ch3',['../demo__xirq_2main_8c.html#a99e9ae3088f39995c852b2c53ec21266',1,'main.c']]], + ['xirq_5frte_5fid_34',['XIRQ_RTE_ID',['../neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5',1,'neorv32.h']]], + ['xirq_5ftrap_5fcode_35',['XIRQ_TRAP_CODE',['../neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a',1,'neorv32.h']]], + ['xirq_5ftrap_5fhandler0_36',['xirq_trap_handler0',['../processor__check_2main_8c.html#aa4fe70578c4dccabe1e31fae941378cb',1,'main.c']]], + ['xirq_5ftrap_5fhandler1_37',['xirq_trap_handler1',['../processor__check_2main_8c.html#a277cb06ef74e4cfe1ef783069f9b6527',1,'main.c']]], + ['xirq_5ftrigger_5fedge_5ffalling_38',['XIRQ_TRIGGER_EDGE_FALLING',['../neorv32__xirq_8h.html#a59316ffc7ee1aacf1d55d460bdca4d04',1,'neorv32_xirq.h']]], + ['xirq_5ftrigger_5fedge_5frising_39',['XIRQ_TRIGGER_EDGE_RISING',['../neorv32__xirq_8h.html#ab7a05371e4dc3de3a9be11c59f5376ee',1,'neorv32_xirq.h']]], + ['xirq_5ftrigger_5flevel_5fhigh_40',['XIRQ_TRIGGER_LEVEL_HIGH',['../neorv32__xirq_8h.html#a9b10e89b2e257e1af410bff89f29911c',1,'neorv32_xirq.h']]], + ['xirq_5ftrigger_5flevel_5flow_41',['XIRQ_TRIGGER_LEVEL_LOW',['../neorv32__xirq_8h.html#a8bc89e6a47b4d0d95fb2afac4cdc9292',1,'neorv32_xirq.h']]], + ['xstr_42',['xstr',['../bootloader_8c.html#aff6b53dd58cea43d24393a9a2f79e772',1,'bootloader.c']]], + ['xtea_5fcycles_43',['XTEA_CYCLES',['../demo__cfu_2main_8c.html#a34755f457331741d24090b3819b5d416',1,'main.c']]], + ['xtea_5fdelta_44',['xtea_delta',['../demo__cfu_2main_8c.html#a26da64691624f3c899f2394a427d6593',1,'main.c']]], + ['xtea_5fsw_5fdecipher_45',['xtea_sw_decipher',['../demo__cfu_2main_8c.html#a0e980c5d81b1eca90b8073e54099bdb0',1,'main.c']]], + ['xtea_5fsw_5fencipher_46',['xtea_sw_encipher',['../demo__cfu_2main_8c.html#a8dc502bf508491eed1f39c4acf040efb',1,'main.c']]] +]; diff --git a/sw/search/all_1d.js b/sw/search/all_1d.js new file mode 100644 index 0000000000..e613d54073 --- /dev/null +++ b/sw/search/all_1d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['year_0',['year',['../structdate__t.html#aabab1b1efd94b69bfb28b639c612dd4f',1,'date_t']]] +]; diff --git a/sw/search/all_2.js b/sw/search/all_2.js new file mode 100644 index 0000000000..5446ba6c31 --- /dev/null +++ b/sw/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3_20fpga_20implementation_20results_0',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]] +]; diff --git a/sw/search/all_3.js b/sw/search/all_3.js new file mode 100644 index 0000000000..c0b02ef08a --- /dev/null +++ b/sw/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['4_20performance_0',['4. Performance',['../md_README.html#autotoc_md6',1,'']]] +]; diff --git a/sw/search/all_4.js b/sw/search/all_4.js new file mode 100644 index 0000000000..45ecc7f21c --- /dev/null +++ b/sw/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['5_20getting_20started_0',['5. Getting Started',['../md_README.html#autotoc_md7',1,'']]] +]; diff --git a/sw/search/all_5.js b/sw/search/all_5.js new file mode 100644 index 0000000000..aecbaf92b7 --- /dev/null +++ b/sw/search/all_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['_3aabacus_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_0',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['_3acopyright_3a_20legal_1',[':copyright: Legal',['../md_README.html#autotoc_md13',1,'']]], + ['_3adesktop_5fcomputer_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_2',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['_3aemail_3a_20contact_3',[':email: Contact',['../md_README.html#autotoc_md14',1,'']]], + ['_3afloppy_5fdisk_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_4',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['_3amag_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_5',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['_3arocket_3a_20a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20getting_20started_6',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/all_6.js b/sw/search/all_6.js new file mode 100644 index 0000000000..2075d82f64 --- /dev/null +++ b/sw/search/all_6.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['_5f_5fcrt0_5fbss_5fend_0',['__crt0_bss_end',['../neorv32_8h.html#a8997b81eab05d1082c55876240bc2b44',1,'neorv32.h']]], + ['_5f_5fcrt0_5fbss_5fstart_1',['__crt0_bss_start',['../neorv32_8h.html#a3bbafc9807e0575d8b68c0a4e131440e',1,'neorv32.h']]], + ['_5f_5fcrt0_5fcopy_5fdata_5fdst_5fbegin_2',['__crt0_copy_data_dst_begin',['../neorv32_8h.html#a4f751aa26ed3681b0610aa88184fb432',1,'neorv32.h']]], + ['_5f_5fcrt0_5fcopy_5fdata_5fdst_5fend_3',['__crt0_copy_data_dst_end',['../neorv32_8h.html#acf015e26f2fae15fabeb663ad7f5ad53',1,'neorv32.h']]], + ['_5f_5fcrt0_5fdmem_5fbegin_4',['__crt0_dmem_begin',['../neorv32_8h.html#a9cc3f1d0f7842997cc6e9f3d79015bbe',1,'neorv32.h']]], + ['_5f_5fcrt0_5fimem_5fbegin_5',['__crt0_imem_begin',['../neorv32_8h.html#a71f154e24ea886f2b866b812960b802b',1,'neorv32.h']]], + ['_5f_5fcrt0_5fmax_5fheap_6',['__crt0_max_heap',['../neorv32_8h.html#aaa2cb9e7075a852870fd67eff2861b18',1,'neorv32.h']]], + ['_5f_5fcrt0_5fstack_5fend_7',['__crt0_stack_end',['../neorv32_8h.html#abf19d14b018d3bb45966d31e7902bf9e',1,'neorv32.h']]], + ['_5f_5fheap_5fend_8',['__heap_end',['../neorv32_8h.html#ae6ef7c715931df8bdc331577da14119b',1,'neorv32.h']]], + ['_5f_5fheap_5fstart_9',['__heap_start',['../neorv32_8h.html#a0eaa3dcfb1db0c72534046feb9fa9b60',1,'neorv32.h']]], + ['_5f_5fneorv32_5frte_5fcore_10',['__neorv32_rte_core',['../neorv32__rte_8c.html#a53f1e006f0bf61deb7ad018f35228873',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5frte_5fprint_5fhex_5fword_11',['__neorv32_rte_print_hex_word',['../neorv32__rte_8c.html#a01bf6c01f5a8cda2132b9ac98824edc1',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5frte_5fvector_5flut_12',['__neorv32_rte_vector_lut',['../neorv32__rte_8c.html#a2c8272b4628edddb943bcfad829b561a',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5fuart_5fitoa_13',['__neorv32_uart_itoa',['../neorv32__uart_8c.html#a3543435827204d82755b0a23bdea1296',1,'neorv32_uart.c']]], + ['_5f_5fneorv32_5fuart_5ftohex_14',['__neorv32_uart_tohex',['../neorv32__uart_8c.html#aefa844cd170e50e088c42829029060f3',1,'neorv32_uart.c']]], + ['_5f_5fneorv32_5fuart_5ftouppercase_15',['__neorv32_uart_touppercase',['../neorv32__uart_8c.html#adf807d0476b475276b8b29924297cda9',1,'neorv32_uart.c']]], + ['_5f_5fneorv32_5fxirq_5fcore_16',['__neorv32_xirq_core',['../neorv32__xirq_8c.html#a14661d628dd31e6bfce89376c6614627',1,'neorv32_xirq.c']]], + ['_5f_5fneorv32_5fxirq_5fdummy_5fhandler_17',['__neorv32_xirq_dummy_handler',['../neorv32__xirq_8c.html#ae4d9362b23a1341c595a4cd239a87091',1,'neorv32_xirq.c']]], + ['_5f_5fneorv32_5fxirq_5fvector_5flut_18',['__neorv32_xirq_vector_lut',['../neorv32__xirq_8c.html#a76d73c3bf372989703c685a9e8d229ac',1,'neorv32_xirq.c']]], + ['_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_19',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_20',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['_5foverview_20neorv32_20project_20a_20an_20introduction_21',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_22',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]] +]; diff --git a/sw/search/all_7.js b/sw/search/all_7.js new file mode 100644 index 0000000000..f459a92129 --- /dev/null +++ b/sw/search/all_7.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['a_20an_20introduction_0',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['a_20getting_20started_1',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_2',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_3',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_4',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_5',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['a_20href_20https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20getting_20started_6',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['a_20the_20core_7',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['a_20the_20soc_8',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['a_20the_20software_20ecosystem_9',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['adaptive_5fproportion_5ftest_10',['adaptive_proportion_test',['../demo__trng_2main_8c.html#a23a91e6fe2cc44f3c29baf0d331e05db',1,'main.c']]], + ['amo_5fvar_11',['amo_var',['../atomic__test_2main_8c.html#a9141e95a5f98420ddf8a43e6d20ff6dc',1,'main.c']]], + ['an_20introduction_12',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['auto_5fboot_5ftimeout_13',['AUTO_BOOT_TIMEOUT',['../bootloader_8c.html#af6fcb607a9c320da869b72aa30893a69',1,'bootloader.c']]], + ['aux_5fprint_5fhex_5fbyte_14',['aux_print_hex_byte',['../bus__explorer_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte): main.c'],['../demo__spi_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte): main.c']]] +]; diff --git a/sw/search/all_8.js b/sw/search/all_8.js new file mode 100644 index 0000000000..f2f7c3f55e --- /dev/null +++ b/sw/search/all_8.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['baud_5frate_0',['BAUD_RATE',['../atomic__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../bus__explorer_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__cfs_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__cfu_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__crc_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__dma_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__emulate__unaligned_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__gptmr_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__hpm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__neopixel_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__newlib_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__onewire_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__pwm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__sdi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__slink_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__spi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__spi__irq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__trng_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__twi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__wdt_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__xip_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__xirq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../float__corner__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../floating__point__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../game__of__life_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../hello__world_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c']]], + ['binary_5fvalue_1',['binary_value',['../unionfloat__conv__t.html#a59ad19d41b1d973a6bda9032e1937606',1,'float_conv_t']]], + ['bootloader_2ec_2',['bootloader.c',['../bootloader_8c.html',1,'']]], + ['bootloader_5fbase_5faddress_3',['BOOTLOADER_BASE_ADDRESS',['../neorv32_8h.html#abd8c9b7d79f49de1722611b2835cde58',1,'neorv32.h']]], + ['bootloader_5ftrap_5fhandler_4',['bootloader_trap_handler',['../bootloader_8c.html#af13b4b3d5e6597feacf331e6d16b08e9',1,'bootloader.c']]], + ['buffer_5fsize_5',['BUFFER_SIZE',['../demo__xip_2main_8c.html#a6b20d41d6252e9871430c242cb1a56e7',1,'main.c']]] +]; diff --git a/sw/search/all_9.js b/sw/search/all_9.js new file mode 100644 index 0000000000..fc0168e256 --- /dev/null +++ b/sw/search/all_9.js @@ -0,0 +1,267 @@ +var searchData= +[ + ['cache_0',['CACHE',['../structneorv32__sysinfo__t.html#ada99a36ccda38b254d5b6a84883101f6',1,'neorv32_sysinfo_t']]], + ['cell_5falive_1',['CELL_ALIVE',['../game__of__life_2main_8c.html#afa6488273e16792d9c3da5e40e3f572d',1,'main.c']]], + ['cell_5fdead_2',['CELL_DEAD',['../game__of__life_2main_8c.html#abe6bebcf1cb4f5b4d522c1706eb48663',1,'main.c']]], + ['cfs_5ffirq_5fenable_3',['CFS_FIRQ_ENABLE',['../neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627',1,'neorv32.h']]], + ['cfs_5ffirq_5fpending_4',['CFS_FIRQ_PENDING',['../neorv32_8h.html#aae182648a2c23d070b9db0295388e001',1,'neorv32.h']]], + ['cfs_5frte_5fid_5',['CFS_RTE_ID',['../neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea',1,'neorv32.h']]], + ['cfs_5ftrap_5fcode_6',['CFS_TRAP_CODE',['../neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26',1,'neorv32.h']]], + ['check_5fresult_7',['check_result',['../atomic__test_2main_8c.html#a4f4c6d8481b4100f90955ba5a70428a4',1,'main.c']]], + ['clear_5funiverse_8',['clear_universe',['../game__of__life_2main_8c.html#a819f10c5b644a07eeb069b6e7f12050e',1,'main.c']]], + ['clk_9',['CLK',['../structneorv32__sysinfo__t.html#afc225843ee31efff6350415b5aaae761',1,'neorv32_sysinfo_t']]], + ['clk_5fprsc_5f1024_10',['CLK_PRSC_1024',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17',1,'neorv32.h']]], + ['clk_5fprsc_5f128_11',['CLK_PRSC_128',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e',1,'neorv32.h']]], + ['clk_5fprsc_5f2_12',['CLK_PRSC_2',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05',1,'neorv32.h']]], + ['clk_5fprsc_5f2048_13',['CLK_PRSC_2048',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79',1,'neorv32.h']]], + ['clk_5fprsc_5f4_14',['CLK_PRSC_4',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1',1,'neorv32.h']]], + ['clk_5fprsc_5f4096_15',['CLK_PRSC_4096',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee',1,'neorv32.h']]], + ['clk_5fprsc_5f64_16',['CLK_PRSC_64',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da',1,'neorv32.h']]], + ['clk_5fprsc_5f8_17',['CLK_PRSC_8',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9',1,'neorv32.h']]], + ['compute_5frate_18',['compute_rate',['../demo__trng_2main_8c.html#abbde1237eed617466fb971a78c3acd1e',1,'main.c']]], + ['contact_19',[':email: Contact',['../md_README.html#autotoc_md14',1,'']]], + ['core_20',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['count_21',['COUNT',['../structneorv32__gptmr__t.html#a1abc5bae1dffc64006e965d4570da479',1,'neorv32_gptmr_t']]], + ['cpu_20a_20the_20core_22',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['crc_5fmode16_23',['CRC_MODE16',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f',1,'neorv32_crc.h']]], + ['crc_5fmode32_24',['CRC_MODE32',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa',1,'neorv32_crc.h']]], + ['crc_5fmode8_25',['CRC_MODE8',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a',1,'neorv32_crc.h']]], + ['csr_5fcfureg0_26',['CSR_CFUREG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg1_27',['CSR_CFUREG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg2_28',['CSR_CFUREG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg3_29',['CSR_CFUREG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycle_30',['CSR_CYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycleh_31',['CSR_CYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db',1,'neorv32_cpu_csr.h']]], + ['csr_5fdcsr_32',['CSR_DCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9',1,'neorv32_cpu_csr.h']]], + ['csr_5fdpc_33',['CSR_DPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b',1,'neorv32_cpu_csr.h']]], + ['csr_5fdscratch0_34',['CSR_DSCRATCH0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7',1,'neorv32_cpu_csr.h']]], + ['csr_5ffcsr_35',['CSR_FCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_36',['CSR_FFLAGS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fdz_37',['CSR_FFLAGS_DZ',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnv_38',['CSR_FFLAGS_NV',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnx_39',['CSR_FFLAGS_NX',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fof_40',['CSR_FFLAGS_OF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fuf_41',['CSR_FFLAGS_UF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819',1,'neorv32_cpu_csr.h']]], + ['csr_5ffrm_42',['CSR_FRM',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter10_43',['CSR_HPMCOUNTER10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa407e701bdbb9d26f84684b811c008a9',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter10h_44',['CSR_HPMCOUNTER10H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae56e95d6d6dd63ff6f5b4192cf48c88b',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter11_45',['CSR_HPMCOUNTER11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9fd1ff4e8a42992c0a3ec02c397dd7f8',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter11h_46',['CSR_HPMCOUNTER11H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2af8c5dcc87d92bcce392fb5b3aa065e',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter12_47',['CSR_HPMCOUNTER12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae58f15a95aa41126819effe046ced804',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter12h_48',['CSR_HPMCOUNTER12H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a74359db2583feb7119d4bcaa926242a0',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter13_49',['CSR_HPMCOUNTER13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a24d8617a6ff2c1e49c9a73853ad9e450',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter13h_50',['CSR_HPMCOUNTER13H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4fa22699e96d6da8665077e3c95891ef',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter14_51',['CSR_HPMCOUNTER14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa47ed1a4a4f9fcabceed0d6d626d0aaf',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter14h_52',['CSR_HPMCOUNTER14H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a03f29e792be2854efc9e66d710b78a1d',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter15_53',['CSR_HPMCOUNTER15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7277a8f929a5a250f7227fbbdf545dbc',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter15h_54',['CSR_HPMCOUNTER15H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a11169bd08920d40c8f94fd29e1d33eff',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter3_55',['CSR_HPMCOUNTER3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ee699d5b2886c54c92992f66b109b67',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter3h_56',['CSR_HPMCOUNTER3H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaa3e6a1ac8999be42d7c13891546bb50',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter4_57',['CSR_HPMCOUNTER4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98ed49716d0d89712863e7a542d38d2a',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter4h_58',['CSR_HPMCOUNTER4H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8837ff8d2741639aa69da59659f9a080',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter5_59',['CSR_HPMCOUNTER5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab2376c3b7c3ec0b44105ec1ed951bfb0',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter5h_60',['CSR_HPMCOUNTER5H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad489feaa5ad1feb00d3df71d3e5b0cac',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter6_61',['CSR_HPMCOUNTER6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa2f644a4f54ba3834bafa738208c0803',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter6h_62',['CSR_HPMCOUNTER6H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a438a65757b85f182dfb1f2a06c9ad520',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter7_63',['CSR_HPMCOUNTER7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a125c4d0051548dea9104808b7bee1316',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter7h_64',['CSR_HPMCOUNTER7H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6332d4ff090aa7c302d191219e846fff',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter8_65',['CSR_HPMCOUNTER8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acac87125f8c723cc5df4d4169a82852b',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter8h_66',['CSR_HPMCOUNTER8H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa8ce8fc8a57dd82872d02b4113249a77',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter9_67',['CSR_HPMCOUNTER9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab45ebb3bd861074a15cc2ad874756e8f',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter9h_68',['CSR_HPMCOUNTER9H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acdf793b30919e7fa1b85995abe531a20',1,'neorv32_cpu_csr.h']]], + ['csr_5finstret_69',['CSR_INSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66',1,'neorv32_cpu_csr.h']]], + ['csr_5finstreth_70',['CSR_INSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmarchid_71',['CSR_MARCHID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcause_72',['CSR_MCAUSE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmconfigptr_73',['CSR_MCONFIGPTR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_74',['CSR_MCOUNTEREN',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_75',['CSR_MCOUNTINHIBIT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fcy_76',['CSR_MCOUNTINHIBIT_CY',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm10_77',['CSR_MCOUNTINHIBIT_HPM10',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm11_78',['CSR_MCOUNTINHIBIT_HPM11',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm12_79',['CSR_MCOUNTINHIBIT_HPM12',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm13_80',['CSR_MCOUNTINHIBIT_HPM13',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm14_81',['CSR_MCOUNTINHIBIT_HPM14',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm15_82',['CSR_MCOUNTINHIBIT_HPM15',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm16_83',['CSR_MCOUNTINHIBIT_HPM16',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm17_84',['CSR_MCOUNTINHIBIT_HPM17',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm18_85',['CSR_MCOUNTINHIBIT_HPM18',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm19_86',['CSR_MCOUNTINHIBIT_HPM19',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm20_87',['CSR_MCOUNTINHIBIT_HPM20',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm21_88',['CSR_MCOUNTINHIBIT_HPM21',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm22_89',['CSR_MCOUNTINHIBIT_HPM22',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm23_90',['CSR_MCOUNTINHIBIT_HPM23',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm24_91',['CSR_MCOUNTINHIBIT_HPM24',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm25_92',['CSR_MCOUNTINHIBIT_HPM25',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm26_93',['CSR_MCOUNTINHIBIT_HPM26',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm27_94',['CSR_MCOUNTINHIBIT_HPM27',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm28_95',['CSR_MCOUNTINHIBIT_HPM28',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm29_96',['CSR_MCOUNTINHIBIT_HPM29',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm3_97',['CSR_MCOUNTINHIBIT_HPM3',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm30_98',['CSR_MCOUNTINHIBIT_HPM30',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm31_99',['CSR_MCOUNTINHIBIT_HPM31',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm4_100',['CSR_MCOUNTINHIBIT_HPM4',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm5_101',['CSR_MCOUNTINHIBIT_HPM5',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm6_102',['CSR_MCOUNTINHIBIT_HPM6',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm7_103',['CSR_MCOUNTINHIBIT_HPM7',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm8_104',['CSR_MCOUNTINHIBIT_HPM8',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm9_105',['CSR_MCOUNTINHIBIT_HPM9',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fir_106',['CSR_MCOUNTINHIBIT_IR',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycle_107',['CSR_MCYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycleh_108',['CSR_MCYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfg_109',['CSR_MENVCFG',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfgh_110',['CSR_MENVCFGH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmepc_111',['CSR_MEPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhartid_112',['CSR_MHARTID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10_113',['CSR_MHPMCOUNTER10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10h_114',['CSR_MHPMCOUNTER10H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11_115',['CSR_MHPMCOUNTER11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11h_116',['CSR_MHPMCOUNTER11H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12_117',['CSR_MHPMCOUNTER12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12h_118',['CSR_MHPMCOUNTER12H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13_119',['CSR_MHPMCOUNTER13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13h_120',['CSR_MHPMCOUNTER13H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14_121',['CSR_MHPMCOUNTER14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14h_122',['CSR_MHPMCOUNTER14H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15_123',['CSR_MHPMCOUNTER15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15h_124',['CSR_MHPMCOUNTER15H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3_125',['CSR_MHPMCOUNTER3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3h_126',['CSR_MHPMCOUNTER3H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4_127',['CSR_MHPMCOUNTER4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4h_128',['CSR_MHPMCOUNTER4H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5_129',['CSR_MHPMCOUNTER5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5h_130',['CSR_MHPMCOUNTER5H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6_131',['CSR_MHPMCOUNTER6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6h_132',['CSR_MHPMCOUNTER6H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7_133',['CSR_MHPMCOUNTER7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7h_134',['CSR_MHPMCOUNTER7H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8_135',['CSR_MHPMCOUNTER8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8h_136',['CSR_MHPMCOUNTER8H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9_137',['CSR_MHPMCOUNTER9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9h_138',['CSR_MHPMCOUNTER9H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent10_139',['CSR_MHPMEVENT10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent11_140',['CSR_MHPMEVENT11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent12_141',['CSR_MHPMEVENT12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent13_142',['CSR_MHPMEVENT13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent14_143',['CSR_MHPMEVENT14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent15_144',['CSR_MHPMEVENT15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent3_145',['CSR_MHPMEVENT3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent4_146',['CSR_MHPMEVENT4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent5_147',['CSR_MHPMEVENT5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent6_148',['CSR_MHPMEVENT6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent7_149',['CSR_MHPMEVENT7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent8_150',['CSR_MHPMEVENT8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent9_151',['CSR_MHPMEVENT9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_152',['CSR_MIE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq0e_153',['CSR_MIE_FIRQ0E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq10e_154',['CSR_MIE_FIRQ10E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq11e_155',['CSR_MIE_FIRQ11E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq12e_156',['CSR_MIE_FIRQ12E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq13e_157',['CSR_MIE_FIRQ13E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq14e_158',['CSR_MIE_FIRQ14E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq15e_159',['CSR_MIE_FIRQ15E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq1e_160',['CSR_MIE_FIRQ1E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq2e_161',['CSR_MIE_FIRQ2E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq3e_162',['CSR_MIE_FIRQ3E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq4e_163',['CSR_MIE_FIRQ4E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq5e_164',['CSR_MIE_FIRQ5E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq6e_165',['CSR_MIE_FIRQ6E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq7e_166',['CSR_MIE_FIRQ7E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq8e_167',['CSR_MIE_FIRQ8E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq9e_168',['CSR_MIE_FIRQ9E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmeie_169',['CSR_MIE_MEIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmsie_170',['CSR_MIE_MSIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmtie_171',['CSR_MIE_MTIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083',1,'neorv32_cpu_csr.h']]], + ['csr_5fmimpid_172',['CSR_MIMPID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstret_173',['CSR_MINSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstreth_174',['CSR_MINSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_175',['CSR_MIP',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq0p_176',['CSR_MIP_FIRQ0P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq10p_177',['CSR_MIP_FIRQ10P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq11p_178',['CSR_MIP_FIRQ11P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq12p_179',['CSR_MIP_FIRQ12P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq13p_180',['CSR_MIP_FIRQ13P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq14p_181',['CSR_MIP_FIRQ14P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq15p_182',['CSR_MIP_FIRQ15P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq1p_183',['CSR_MIP_FIRQ1P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq2p_184',['CSR_MIP_FIRQ2P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq3p_185',['CSR_MIP_FIRQ3P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq4p_186',['CSR_MIP_FIRQ4P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq5p_187',['CSR_MIP_FIRQ5P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq6p_188',['CSR_MIP_FIRQ6P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq7p_189',['CSR_MIP_FIRQ7P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq8p_190',['CSR_MIP_FIRQ8P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq9p_191',['CSR_MIP_FIRQ9P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmeip_192',['CSR_MIP_MEIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmsip_193',['CSR_MIP_MSIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmtip_194',['CSR_MIP_MTIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_195',['CSR_MISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fa_196',['CSR_MISA_A',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca89412df9f99d2a0ddc4665446397f1a2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fb_197',['CSR_MISA_B',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fc_198',['CSR_MISA_C',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fd_199',['CSR_MISA_D',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca1dd1be1071450f9b00a817bce19fa665',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fe_200',['CSR_MISA_E',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5ff_201',['CSR_MISA_F',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca9ec2cae2b948de1043540a4ca1665c40',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fi_202',['CSR_MISA_I',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fm_203',['CSR_MISA_M',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5fhi_204',['CSR_MISA_MXL_HI',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5flo_205',['CSR_MISA_MXL_LO',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fu_206',['CSR_MISA_U',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fx_207',['CSR_MISA_X',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193',1,'neorv32_cpu_csr.h']]], + ['csr_5fmscratch_208',['CSR_MSCRATCH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_209',['CSR_MSTATUS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmie_210',['CSR_MSTATUS_MIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpie_211',['CSR_MSTATUS_MPIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fh_212',['CSR_MSTATUS_MPP_H',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fl_213',['CSR_MSTATUS_MPP_L',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmprv_214',['CSR_MSTATUS_MPRV',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5ftw_215',['CSR_MSTATUS_TW',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatush_216',['CSR_MSTATUSH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtinst_217',['CSR_MTINST',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtval_218',['CSR_MTVAL',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtvec_219',['CSR_MTVEC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21',1,'neorv32_cpu_csr.h']]], + ['csr_5fmvendorid_220',['CSR_MVENDORID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_221',['CSR_MXISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastmul_222',['CSR_MXISA_FASTMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastshift_223',['CSR_MXISA_FASTSHIFT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fis_5fsim_224',['CSR_MXISA_IS_SIM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5frfhwrst_225',['CSR_MXISA_RFHWRST',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdext_226',['CSR_MXISA_SDEXT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdtrig_227',['CSR_MXISA_SDTRIG',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsmpmp_228',['CSR_MXISA_SMPMP',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzfinx_229',['CSR_MXISA_ZFINX',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicntr_230',['CSR_MXISA_ZICNTR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicond_231',['CSR_MXISA_ZICOND',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicsr_232',['CSR_MXISA_ZICSR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzifencei_233',['CSR_MXISA_ZIFENCEI',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzihpm_234',['CSR_MXISA_ZIHPM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzmmul_235',['CSR_MXISA_ZMMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzxcfu_236',['CSR_MXISA_ZXCFU',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr0_237',['CSR_PMPADDR0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr1_238',['CSR_PMPADDR1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr10_239',['CSR_PMPADDR10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr11_240',['CSR_PMPADDR11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr12_241',['CSR_PMPADDR12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr13_242',['CSR_PMPADDR13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr14_243',['CSR_PMPADDR14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr15_244',['CSR_PMPADDR15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr2_245',['CSR_PMPADDR2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr3_246',['CSR_PMPADDR3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr4_247',['CSR_PMPADDR4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr5_248',['CSR_PMPADDR5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr6_249',['CSR_PMPADDR6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr7_250',['CSR_PMPADDR7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr8_251',['CSR_PMPADDR8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr9_252',['CSR_PMPADDR9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg0_253',['CSR_PMPCFG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg1_254',['CSR_PMPCFG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg2_255',['CSR_PMPCFG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg3_256',['CSR_PMPCFG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata1_257',['CSR_TDATA1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata2_258',['CSR_TDATA2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc',1,'neorv32_cpu_csr.h']]], + ['csr_5ftinfo_259',['CSR_TINFO',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b',1,'neorv32_cpu_csr.h']]], + ['csr_5ftselect_260',['CSR_TSELECT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d',1,'neorv32_cpu_csr.h']]], + ['ctrl_261',['CTRL',['../structneorv32__dma__t.html#a8480d6ad3ba5063cdf21dca286711569',1,'neorv32_dma_t::CTRL'],['../structneorv32__gptmr__t.html#a3c477ccb24ed12122d9d90244431c7e9',1,'neorv32_gptmr_t::CTRL'],['../structneorv32__neoled__t.html#adfe7618c002ff88dd22e65fcedfd6139',1,'neorv32_neoled_t::CTRL'],['../structneorv32__onewire__t.html#a310df3bab43e4438417b2ff948f4712a',1,'neorv32_onewire_t::CTRL'],['../structneorv32__pwm__t.html#ab86705332ebd9c45635c3195c6b3dcc5',1,'neorv32_pwm_t::CTRL'],['../structneorv32__sdi__t.html#af494f25cbcd8478cf384eb868e447303',1,'neorv32_sdi_t::CTRL'],['../structneorv32__slink__t.html#a39ece6aeeea6982002e164902a1e784f',1,'neorv32_slink_t::CTRL'],['../structneorv32__spi__t.html#a34fa748f0e3ceb75822c0a5553bd0420',1,'neorv32_spi_t::CTRL'],['../structneorv32__trng__t.html#ae2ff37ce30fb85ef59d9012534bc7e67',1,'neorv32_trng_t::CTRL'],['../structneorv32__twi__t.html#a148a1c681a2632881b25ee41652b5304',1,'neorv32_twi_t::CTRL'],['../structneorv32__uart__t.html#a0a6227aeea38335d2b9a9da46b35451b',1,'neorv32_uart_t::CTRL'],['../structneorv32__wdt__t.html#a6ae41e28d08b0f06118c499f52b56f41',1,'neorv32_wdt_t::CTRL'],['../structneorv32__xip__t.html#a7ead9d6a4f784d766a6b2755c6d35235',1,'neorv32_xip_t::CTRL']]], + ['cypher_5fdata_5fhw_262',['cypher_data_hw',['../demo__cfu_2main_8c.html#a9ad2780a4cfe0d9cb4f1a846a92063ae',1,'main.c']]], + ['cypher_5fdata_5fsw_263',['cypher_data_sw',['../demo__cfu_2main_8c.html#a33b2d9298edf94c5961e67a59c371d00',1,'main.c']]] +]; diff --git a/sw/search/all_a.js b/sw/search/all_a.js new file mode 100644 index 0000000000..e31f40f90a --- /dev/null +++ b/sw/search/all_a.js @@ -0,0 +1,51 @@ +var searchData= +[ + ['data_0',['DATA',['../structneorv32__crc__t.html#a47f286612848f597859aaef0d2d5da4d',1,'neorv32_crc_t::DATA'],['../structneorv32__neoled__t.html#a995fb1d63a9dfb3f20d715932781c1de',1,'neorv32_neoled_t::DATA'],['../structneorv32__onewire__t.html#a2c04aa736b901940ed65b96202c8af7a',1,'neorv32_onewire_t::DATA'],['../structneorv32__sdi__t.html#a3ea6903c0924d0a1b633b6a2b0ae44f1',1,'neorv32_sdi_t::DATA'],['../structneorv32__slink__t.html#a8af7d4ea9787cf94c599c82133c6aa74',1,'neorv32_slink_t::DATA'],['../structneorv32__spi__t.html#a3901bad351213e34820197a33d589f1e',1,'neorv32_spi_t::DATA'],['../structneorv32__uart__t.html#a38eec82aae9ed522a0d2afb9a9560036',1,'neorv32_uart_t::DATA']]], + ['data_5fblock_1',['data_block',['../demo__emulate__unaligned_2main_8c.html#a556f675911f865ead06c36072b1b9c3b',1,'main.c']]], + ['data_5fhi_2',['DATA_HI',['../structneorv32__xip__t.html#a516ab9c075ef6d1fb741e243db7703b2',1,'neorv32_xip_t']]], + ['data_5flast_3',['DATA_LAST',['../structneorv32__slink__t.html#ada8f10141d2161b83a5a367722ed6a77',1,'neorv32_slink_t']]], + ['data_5flo_4',['DATA_LO',['../structneorv32__xip__t.html#ad64048bb3544e712b1c668c2ef343ccb',1,'neorv32_xip_t']]], + ['data_5fnum_5',['DATA_NUM',['../demo__cfu_2main_8c.html#ac637695e266f3af7799e352b374412ad',1,'main.c']]], + ['date_5ft_6',['date_t',['../structdate__t.html',1,'']]], + ['day_7',['day',['../structdate__t.html#a482ad87226bae7841dfec63e035aeace',1,'date_t']]], + ['dc_8',['DC',['../structneorv32__pwm__t.html#a6d29528ca60921a6ef8e5bcde81925e7',1,'neorv32_pwm_t']]], + ['dcmd_9',['DCMD',['../structneorv32__twi__t.html#ae311e0827bdb178c6dd8c4535b80d5cb',1,'neorv32_twi_t']]], + ['debug_5finfo_10',['DEBUG_INFO',['../demo__emulate__unaligned_2main_8c.html#a4407b4d6eae3ba7fe9538b1242a7e165',1,'main.c']]], + ['dma_5fcmd_5fb2b_11',['DMA_CMD_B2B',['../neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2sw_12',['DMA_CMD_B2SW',['../neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2uw_13',['DMA_CMD_B2UW',['../neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5fconst_14',['DMA_CMD_DST_CONST',['../neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5finc_15',['DMA_CMD_DST_INC',['../neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fendian_16',['DMA_CMD_ENDIAN',['../neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5fconst_17',['DMA_CMD_SRC_CONST',['../neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5finc_18',['DMA_CMD_SRC_INC',['../neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fw2w_19',['DMA_CMD_W2W',['../neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fauto_20',['DMA_CTRL_AUTO',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fbusy_21',['DMA_CTRL_BUSY',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fdone_22',['DMA_CTRL_DONE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fen_23',['DMA_CTRL_EN',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5frd_24',['DMA_CTRL_ERROR_RD',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5fwr_25',['DMA_CTRL_ERROR_WR',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffence_26',['DMA_CTRL_FENCE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5flsb_27',['DMA_CTRL_FIRQ_SEL_LSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5fmsb_28',['DMA_CTRL_FIRQ_SEL_MSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5ftype_29',['DMA_CTRL_FIRQ_TYPE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe',1,'neorv32_dma.h']]], + ['dma_5ffirq_5fenable_30',['DMA_FIRQ_ENABLE',['../neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65',1,'neorv32.h']]], + ['dma_5ffirq_5fhandler_31',['dma_firq_handler',['../demo__dma_2main_8c.html#aefcc5abb86a652587ff69be120a66487',1,'main.c']]], + ['dma_5ffirq_5fpending_32',['DMA_FIRQ_PENDING',['../neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf',1,'neorv32.h']]], + ['dma_5frte_5fid_33',['DMA_RTE_ID',['../neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113',1,'neorv32.h']]], + ['dma_5fstatus_5fbusy_34',['DMA_STATUS_BUSY',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5frd_35',['DMA_STATUS_ERR_RD',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5fwr_36',['DMA_STATUS_ERR_WR',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8',1,'neorv32_dma.h']]], + ['dma_5fstatus_5fidle_37',['DMA_STATUS_IDLE',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f',1,'neorv32_dma.h']]], + ['dma_5ftrap_5fcode_38',['DMA_TRAP_CODE',['../neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784',1,'neorv32.h']]], + ['dma_5fttype_5fdst_5finc_39',['DMA_TTYPE_DST_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da',1,'neorv32_dma.h']]], + ['dma_5fttype_5fendian_40',['DMA_TTYPE_ENDIAN',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5flsb_41',['DMA_TTYPE_NUM_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5fmsb_42',['DMA_TTYPE_NUM_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5flsb_43',['DMA_TTYPE_QSEL_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5fmsb_44',['DMA_TTYPE_QSEL_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5',1,'neorv32_dma.h']]], + ['dma_5fttype_5fsrc_5finc_45',['DMA_TTYPE_SRC_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec',1,'neorv32_dma.h']]], + ['dst_5fbase_46',['DST_BASE',['../structneorv32__dma__t.html#aee8a6cf3cbd9fe3c5995f046ffb9a1c0',1,'neorv32_dma_t']]], + ['dump_5fmemory_47',['dump_memory',['../bus__explorer_2main_8c.html#a6405739c6012158151eb082c31c312da',1,'main.c']]] +]; diff --git a/sw/search/all_b.js b/sw/search/all_b.js new file mode 100644 index 0000000000..b7205745f6 --- /dev/null +++ b/sw/search/all_b.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['ecosystem_0',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['eie_1',['EIE',['../structneorv32__xirq__t.html#aef3c2b491207abd68bf6392f97096a74',1,'neorv32_xirq_t']]], + ['eip_2',['EIP',['../structneorv32__xirq__t.html#a788d8004f3b85fb66e947415d8fcc058',1,'neorv32_xirq_t']]], + ['error_5fchecksum_3',['ERROR_CHECKSUM',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985',1,'bootloader.c']]], + ['error_5fcodes_5fenum_4',['ERROR_CODES_enum',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088',1,'bootloader.c']]], + ['error_5fflash_5',['ERROR_FLASH',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c',1,'bootloader.c']]], + ['error_5fmessage_6',['error_message',['../bootloader_8c.html#a6fea855ffe2fa0cd5ea9f98c0d5adc4d',1,'bootloader.c']]], + ['error_5fsignature_7',['ERROR_SIGNATURE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa',1,'bootloader.c']]], + ['error_5fsize_8',['ERROR_SIZE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d',1,'bootloader.c']]], + ['esc_9',['ESC',['../structneorv32__xirq__t.html#ae4f7f3f41210ff329b6f82d5dfada88a',1,'neorv32_xirq_t']]], + ['exe_5favailable_10',['exe_available',['../bootloader_8c.html#a0f9fcfdf758260b9b79b6eda063dd87a',1,'bootloader.c']]], + ['exe_5fbase_5faddr_11',['EXE_BASE_ADDR',['../bootloader_8c.html#a18936dc79b9e5aa84df016b046a6b977',1,'bootloader.c']]], + ['exe_5foffset_5fchecksum_12',['EXE_OFFSET_CHECKSUM',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4',1,'bootloader.c']]], + ['exe_5foffset_5fdata_13',['EXE_OFFSET_DATA',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6',1,'bootloader.c']]], + ['exe_5foffset_5fsignature_14',['EXE_OFFSET_SIGNATURE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f',1,'bootloader.c']]], + ['exe_5foffset_5fsize_15',['EXE_OFFSET_SIZE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe',1,'bootloader.c']]], + ['exe_5fsignature_16',['EXE_SIGNATURE',['../bootloader_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE: bootloader.c'],['../demo__xip_2main_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE: main.c']]], + ['exe_5fstream_5fflash_17',['EXE_STREAM_FLASH',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114',1,'bootloader.c']]], + ['exe_5fstream_5fsource_5fenum_18',['EXE_STREAM_SOURCE_enum',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83',1,'bootloader.c']]], + ['exe_5fstream_5fuart_19',['EXE_STREAM_UART',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f',1,'bootloader.c']]] +]; diff --git a/sw/search/all_c.js b/sw/search/all_c.js new file mode 100644 index 0000000000..e0b5a3e998 --- /dev/null +++ b/sw/search/all_c.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['features_0',['Features',['../md_README.html#autotoc_md4',1,'2. Features'],['../md_README.html#autotoc_md2',1,'Key Features']]], + ['flash_5fabytes_1',['FLASH_ABYTES',['../demo__xip_2main_8c.html#af9b3c37c806499fc435302f5bce6a122',1,'main.c']]], + ['flash_5fbase_2',['FLASH_BASE',['../demo__xip_2main_8c.html#a23a9099a5f8fc9c6e253c0eecb2be8db',1,'main.c']]], + ['flash_5fsreg_5fbusy_3',['FLASH_SREG_BUSY',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9',1,'bootloader.c']]], + ['flash_5fsreg_5fwel_4',['FLASH_SREG_WEL',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9',1,'bootloader.c']]], + ['float_5fconv_5ft_5',['float_conv_t',['../unionfloat__conv__t.html',1,'']]], + ['float_5fvalue_6',['float_value',['../unionfloat__conv__t.html#a95f2e38b437bd8d4e8de7f61d7474788',1,'float_conv_t']]], + ['fpga_20implementation_20results_7',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]], + ['framework_20a_20the_20software_20ecosystem_8',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]] +]; diff --git a/sw/search/all_d.js b/sw/search/all_d.js new file mode 100644 index 0000000000..5c3f53821a --- /dev/null +++ b/sw/search/all_d.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['gen_5fdelay_0',['GEN_DELAY',['../game__of__life_2main_8c.html#a3f33bf77abbf35c245956489f8f7e3a7',1,'main.c']]], + ['generate_5fhistogram_1',['generate_histogram',['../demo__trng_2main_8c.html#a4e49f5e3feb4bd5755f919cd3310b506',1,'main.c']]], + ['get_5fcell_2',['get_cell',['../game__of__life_2main_8c.html#a6bd541a19c62ea9ec620eaad3f218d16',1,'main.c']]], + ['get_5fexe_3',['get_exe',['../bootloader_8c.html#ac18819795adb6dbdd52b0587e7fbb569',1,'bootloader.c']]], + ['get_5fexe_5fword_4',['get_exe_word',['../bootloader_8c.html#ac58d9f7dc79a549bde1cb50f619c19af',1,'bootloader.c']]], + ['get_5fneighborhood_5',['get_neighborhood',['../game__of__life_2main_8c.html#a977190adaa24a3f49fca1540b51d25a0',1,'main.c']]], + ['get_5ftest_5fvector_6',['get_test_vector',['../float__corner__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void): main.c'],['../floating__point__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void): main.c']]], + ['getchar_7',['getchar',['../neorv32__uart_8c.html#a3e29caa20f7cffe18f410f01278905a8',1,'neorv32_uart.c']]], + ['getting_20started_8',['Getting Started',['../md_README.html#autotoc_md7',1,'5. Getting Started'],['../md_README.html#autotoc_md12',1,':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!']]], + ['getting_5fexe_9',['getting_exe',['../bootloader_8c.html#a5fa6b109bf211d1768f84c9d38eef240',1,'bootloader.c']]], + ['github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_10',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_11',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_12',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_13',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['github_20io_20neorv32_20ug_20user_20guide_20a_20getting_20started_14',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['global_5ftrap_5fhandler_15',['global_trap_handler',['../processor__check_2main_8c.html#a9a64ce0ee69c4c32cecc8b2b2746604c',1,'main.c']]], + ['gptmr_5fctrl_5fen_16',['GPTMR_CTRL_EN',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fclr_17',['GPTMR_CTRL_IRQ_CLR',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fpnd_18',['GPTMR_CTRL_IRQ_PND',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fmode_19',['GPTMR_CTRL_MODE',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc0_20',['GPTMR_CTRL_PRSC0',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc1_21',['GPTMR_CTRL_PRSC1',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc2_22',['GPTMR_CTRL_PRSC2',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833',1,'neorv32_gptmr.h']]], + ['gptmr_5ffirq_5fenable_23',['GPTMR_FIRQ_ENABLE',['../neorv32_8h.html#a0a59186908b498cb92273b7767966e26',1,'neorv32.h']]], + ['gptmr_5ffirq_5fhandler_24',['gptmr_firq_handler',['../demo__gptmr_2main_8c.html#a2bd89412466a65329711bfd5c29199c9',1,'main.c']]], + ['gptmr_5ffirq_5fpending_25',['GPTMR_FIRQ_PENDING',['../neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8',1,'neorv32.h']]], + ['gptmr_5frte_5fid_26',['GPTMR_RTE_ID',['../neorv32_8h.html#aac38deeef36de0a474ab238a3054f860',1,'neorv32.h']]], + ['gptmr_5ftrap_5fcode_27',['GPTMR_TRAP_CODE',['../neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1',1,'neorv32.h']]], + ['guide_20a_20getting_20started_28',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/sw/search/all_e.js b/sw/search/all_e.js new file mode 100644 index 0000000000..658d38f72c --- /dev/null +++ b/sw/search/all_e.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['hexdump_0',['hexdump',['../bus__explorer_2main_8c.html#a02640a99db37b8d92b9edffc9720a210',1,'main.c']]], + ['hours_1',['hours',['../structdate__t.html#a39a23695634a2814d827984f4eea54eb',1,'date_t']]], + ['hpmcnt_5fevent_5fbranch_2',['HPMCNT_EVENT_BRANCH',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fbranched_3',['HPMCNT_EVENT_BRANCHED',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcompr_4',['HPMCNT_EVENT_COMPR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcy_5',['HPMCNT_EVENT_CY',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fir_6',['HPMCNT_EVENT_IR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fload_7',['HPMCNT_EVENT_LOAD',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fstore_8',['HPMCNT_EVENT_STORE',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftm_9',['HPMCNT_EVENT_TM',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftrap_10',['HPMCNT_EVENT_TRAP',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5falu_11',['HPMCNT_EVENT_WAIT_ALU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5fdis_12',['HPMCNT_EVENT_WAIT_DIS',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5flsu_13',['HPMCNT_EVENT_WAIT_LSU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b',1,'neorv32_cpu_csr.h']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_14',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_15',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_16',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_17',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['href_20https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20getting_20started_18',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['hsv2rgb_19',['hsv2rgb',['../demo__neopixel_2main_8c.html#a2736ec755f9e10c80bf66f727f870ffc',1,'main.c']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_20',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_21',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_22',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_23',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['https_3a_20stnolting_20github_20io_20neorv32_20ug_20user_20guide_20a_20getting_20started_24',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['hw_5fbreakpoint_5fhandler_25',['hw_breakpoint_handler',['../processor__check_2main_8c.html#a31d9e432f6a368e6222f5e0907eeb6f4',1,'main.c']]] +]; diff --git a/sw/search/all_f.js b/sw/search/all_f.js new file mode 100644 index 0000000000..9133a18dbd --- /dev/null +++ b/sw/search/all_f.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['implementation_20results_0',['3. FPGA Implementation Results',['../md_README.html#autotoc_md5',1,'']]], + ['input_1',['INPUT',['../structneorv32__gpio__t.html#a208ee622d43fee3574072f19a98c8808',1,'neorv32_gpio_t']]], + ['input_5fdata_2',['input_data',['../demo__cfu_2main_8c.html#a2e2ccb9136736a673dbef71f207e97a0',1,'main.c']]], + ['introduction_3',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['io_20neorv32_20_5fneorv32_5fcentral_5fprocessing_5funit_5fcpu_20neorv32_20cpu_20a_20the_20core_4',[':abacus: <a href="https://stnolting.github.io/neorv32/#_neorv32_central_processing_unit_cpu" >NEORV32 CPU</a> - The Core',['../md_README.html#autotoc_md10',1,'']]], + ['io_20neorv32_20_5fneorv32_5fprocessor_5fsoc_20neorv32_20processor_20a_20the_20soc_5',[':desktop_computer: <a href="https://stnolting.github.io/neorv32/#_neorv32_processor_soc" >NEORV32 Processor</a> - The SoC',['../md_README.html#autotoc_md9',1,'']]], + ['io_20neorv32_20_5foverview_20neorv32_20project_20a_20an_20introduction_6',[':mag: <a href="https://stnolting.github.io/neorv32/#_overview" >NEORV32 Project</a> - An Introduction',['../md_README.html#autotoc_md8',1,'']]], + ['io_20neorv32_20_5fsoftware_5fframework_20software_20framework_20a_20the_20software_20ecosystem_7',[':floppy_disk: <a href="https://stnolting.github.io/neorv32/#_software_framework" >Software Framework</a> - The Software Ecosystem',['../md_README.html#autotoc_md11',1,'']]], + ['io_20neorv32_20ug_20user_20guide_20a_20getting_20started_8',[':rocket: <a href="https://stnolting.github.io/neorv32/ug/" >User Guide</a> - Getting Started!',['../md_README.html#autotoc_md12',1,'']]], + ['io_5fbase_5faddress_9',['IO_BASE_ADDRESS',['../neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c',1,'neorv32.h']]] +]; diff --git a/sw/search/classes_0.js b/sw/search/classes_0.js new file mode 100644 index 0000000000..17705b744a --- /dev/null +++ b/sw/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['date_5ft_0',['date_t',['../structdate__t.html',1,'']]] +]; diff --git a/sw/search/classes_1.js b/sw/search/classes_1.js new file mode 100644 index 0000000000..089b78ab05 --- /dev/null +++ b/sw/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['float_5fconv_5ft_0',['float_conv_t',['../unionfloat__conv__t.html',1,'']]] +]; diff --git a/sw/search/classes_2.js b/sw/search/classes_2.js new file mode 100644 index 0000000000..bb9cfe19a3 --- /dev/null +++ b/sw/search/classes_2.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['neorv32_5fcfs_5ft_0',['neorv32_cfs_t',['../structneorv32__cfs__t.html',1,'']]], + ['neorv32_5fcrc_5ft_1',['neorv32_crc_t',['../structneorv32__crc__t.html',1,'']]], + ['neorv32_5fdma_5ft_2',['neorv32_dma_t',['../structneorv32__dma__t.html',1,'']]], + ['neorv32_5fgpio_5ft_3',['neorv32_gpio_t',['../structneorv32__gpio__t.html',1,'']]], + ['neorv32_5fgptmr_5ft_4',['neorv32_gptmr_t',['../structneorv32__gptmr__t.html',1,'']]], + ['neorv32_5fmtime_5ft_5',['neorv32_mtime_t',['../structneorv32__mtime__t.html',1,'']]], + ['neorv32_5fneoled_5ft_6',['neorv32_neoled_t',['../structneorv32__neoled__t.html',1,'']]], + ['neorv32_5fonewire_5ft_7',['neorv32_onewire_t',['../structneorv32__onewire__t.html',1,'']]], + ['neorv32_5fpwm_5ft_8',['neorv32_pwm_t',['../structneorv32__pwm__t.html',1,'']]], + ['neorv32_5fsdi_5ft_9',['neorv32_sdi_t',['../structneorv32__sdi__t.html',1,'']]], + ['neorv32_5fslink_5ft_10',['neorv32_slink_t',['../structneorv32__slink__t.html',1,'']]], + ['neorv32_5fspi_5ft_11',['neorv32_spi_t',['../structneorv32__spi__t.html',1,'']]], + ['neorv32_5fsysinfo_5ft_12',['neorv32_sysinfo_t',['../structneorv32__sysinfo__t.html',1,'']]], + ['neorv32_5ftrng_5ft_13',['neorv32_trng_t',['../structneorv32__trng__t.html',1,'']]], + ['neorv32_5ftwi_5ft_14',['neorv32_twi_t',['../structneorv32__twi__t.html',1,'']]], + ['neorv32_5fuart_5ft_15',['neorv32_uart_t',['../structneorv32__uart__t.html',1,'']]], + ['neorv32_5fwdt_5ft_16',['neorv32_wdt_t',['../structneorv32__wdt__t.html',1,'']]], + ['neorv32_5fxip_5ft_17',['neorv32_xip_t',['../structneorv32__xip__t.html',1,'']]], + ['neorv32_5fxirq_5ft_18',['neorv32_xirq_t',['../structneorv32__xirq__t.html',1,'']]] +]; diff --git a/sw/search/classes_3.js b/sw/search/classes_3.js new file mode 100644 index 0000000000..6ef84e426d --- /dev/null +++ b/sw/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['record_0',['record',['../structrecord.html',1,'']]] +]; diff --git a/sw/search/classes_4.js b/sw/search/classes_4.js new file mode 100644 index 0000000000..8321706b36 --- /dev/null +++ b/sw/search/classes_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['subwords16_5ft_0',['subwords16_t',['../unionsubwords16__t.html',1,'']]], + ['subwords32_5ft_1',['subwords32_t',['../unionsubwords32__t.html',1,'']]], + ['subwords64_5ft_2',['subwords64_t',['../unionsubwords64__t.html',1,'']]] +]; diff --git a/sw/search/classes_5.js b/sw/search/classes_5.js new file mode 100644 index 0000000000..1dc259cfb2 --- /dev/null +++ b/sw/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['t_5fneorv32_5fspi_0',['t_neorv32_spi',['../structt__neorv32__spi.html',1,'']]] +]; diff --git a/sw/search/close.svg b/sw/search/close.svg new file mode 100644 index 0000000000..337d6cc132 --- /dev/null +++ b/sw/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/sw/search/defines_0.js b/sw/search/defines_0.js new file mode 100644 index 0000000000..33ed6086d0 --- /dev/null +++ b/sw/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['auto_5fboot_5ftimeout_0',['AUTO_BOOT_TIMEOUT',['../bootloader_8c.html#af6fcb607a9c320da869b72aa30893a69',1,'bootloader.c']]] +]; diff --git a/sw/search/defines_1.js b/sw/search/defines_1.js new file mode 100644 index 0000000000..fd5d2ad6c3 --- /dev/null +++ b/sw/search/defines_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['baud_5frate_0',['BAUD_RATE',['../atomic__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../bus__explorer_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__cfs_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__cfu_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__crc_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__dma_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__emulate__unaligned_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__gptmr_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__hpm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__neopixel_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__newlib_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__onewire_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__pwm_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__sdi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__slink_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__spi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__spi__irq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__trng_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__twi_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__wdt_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__xip_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../demo__xirq_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../float__corner__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../floating__point__test_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../game__of__life_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c'],['../hello__world_2main_8c.html#ad4455691936f92fdd6c37566fc58ba1f',1,'BAUD_RATE: main.c']]], + ['bootloader_5fbase_5faddress_1',['BOOTLOADER_BASE_ADDRESS',['../neorv32_8h.html#abd8c9b7d79f49de1722611b2835cde58',1,'neorv32.h']]], + ['buffer_5fsize_2',['BUFFER_SIZE',['../demo__xip_2main_8c.html#a6b20d41d6252e9871430c242cb1a56e7',1,'main.c']]] +]; diff --git a/sw/search/defines_10.js b/sw/search/defines_10.js new file mode 100644 index 0000000000..b96b4efdea --- /dev/null +++ b/sw/search/defines_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['wdt_5fpassword_0',['WDT_PASSWORD',['../neorv32__wdt_8h.html#af2a2bd9c74bdba1b46bd92025bd00ab6',1,'neorv32_wdt.h']]], + ['wdt_5ftimeout_5fs_1',['WDT_TIMEOUT_S',['../demo__wdt_2main_8c.html#a01af3905e60b1869f669315f4a1297f5',1,'main.c']]] +]; diff --git a/sw/search/defines_11.js b/sw/search/defines_11.js new file mode 100644 index 0000000000..c6258db8b7 --- /dev/null +++ b/sw/search/defines_11.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['xip_5fclk_5fprsc_0',['XIP_CLK_PRSC',['../demo__xip_2main_8c.html#aec72efe062dbdb149ae6d4f8b1be6793',1,'main.c']]], + ['xip_5fen_1',['XIP_EN',['../bootloader_8c.html#a2cf31934b909299fb93bb5eebdbc7c9e',1,'bootloader.c']]], + ['xip_5fmem_5fbase_5faddress_2',['XIP_MEM_BASE_ADDRESS',['../neorv32_8h.html#aa01bea676e878a9e87ca10ce2d91e51f',1,'neorv32.h']]], + ['xirq_5ffirq_5fenable_3',['XIRQ_FIRQ_ENABLE',['../neorv32_8h.html#afe0cb262d517c7da73d6b5dc78886334',1,'neorv32.h']]], + ['xirq_5ffirq_5fpending_4',['XIRQ_FIRQ_PENDING',['../neorv32_8h.html#a866768963f8648363dce40de9f34d61b',1,'neorv32.h']]], + ['xirq_5frte_5fid_5',['XIRQ_RTE_ID',['../neorv32_8h.html#a95387d3482ec8e5c1d734805fdf64fa5',1,'neorv32.h']]], + ['xirq_5ftrap_5fcode_6',['XIRQ_TRAP_CODE',['../neorv32_8h.html#a16b9a7444833b5581df073661deb8f3a',1,'neorv32.h']]], + ['xirq_5ftrigger_5fedge_5ffalling_7',['XIRQ_TRIGGER_EDGE_FALLING',['../neorv32__xirq_8h.html#a59316ffc7ee1aacf1d55d460bdca4d04',1,'neorv32_xirq.h']]], + ['xirq_5ftrigger_5fedge_5frising_8',['XIRQ_TRIGGER_EDGE_RISING',['../neorv32__xirq_8h.html#ab7a05371e4dc3de3a9be11c59f5376ee',1,'neorv32_xirq.h']]], + ['xirq_5ftrigger_5flevel_5fhigh_9',['XIRQ_TRIGGER_LEVEL_HIGH',['../neorv32__xirq_8h.html#a9b10e89b2e257e1af410bff89f29911c',1,'neorv32_xirq.h']]], + ['xirq_5ftrigger_5flevel_5flow_10',['XIRQ_TRIGGER_LEVEL_LOW',['../neorv32__xirq_8h.html#a8bc89e6a47b4d0d95fb2afac4cdc9292',1,'neorv32_xirq.h']]], + ['xstr_11',['xstr',['../bootloader_8c.html#aff6b53dd58cea43d24393a9a2f79e772',1,'bootloader.c']]], + ['xtea_5fcycles_12',['XTEA_CYCLES',['../demo__cfu_2main_8c.html#a34755f457331741d24090b3819b5d416',1,'main.c']]] +]; diff --git a/sw/search/defines_2.js b/sw/search/defines_2.js new file mode 100644 index 0000000000..a05b8ec2f4 --- /dev/null +++ b/sw/search/defines_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cell_5falive_0',['CELL_ALIVE',['../game__of__life_2main_8c.html#afa6488273e16792d9c3da5e40e3f572d',1,'main.c']]], + ['cell_5fdead_1',['CELL_DEAD',['../game__of__life_2main_8c.html#abe6bebcf1cb4f5b4d522c1706eb48663',1,'main.c']]], + ['cfs_5ffirq_5fenable_2',['CFS_FIRQ_ENABLE',['../neorv32_8h.html#ace79ee46daf3a1b689d9fe79dfcd6627',1,'neorv32.h']]], + ['cfs_5ffirq_5fpending_3',['CFS_FIRQ_PENDING',['../neorv32_8h.html#aae182648a2c23d070b9db0295388e001',1,'neorv32.h']]], + ['cfs_5frte_5fid_4',['CFS_RTE_ID',['../neorv32_8h.html#a095f41fbefaa7acc1bfdd65cd3ce06ea',1,'neorv32.h']]], + ['cfs_5ftrap_5fcode_5',['CFS_TRAP_CODE',['../neorv32_8h.html#aae6b2ae3fba20ff80bfb59735f179c26',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_3.js b/sw/search/defines_3.js new file mode 100644 index 0000000000..df151d2df5 --- /dev/null +++ b/sw/search/defines_3.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['data_5fnum_0',['DATA_NUM',['../demo__cfu_2main_8c.html#ac637695e266f3af7799e352b374412ad',1,'main.c']]], + ['debug_5finfo_1',['DEBUG_INFO',['../demo__emulate__unaligned_2main_8c.html#a4407b4d6eae3ba7fe9538b1242a7e165',1,'main.c']]], + ['dma_5fcmd_5fb2b_2',['DMA_CMD_B2B',['../neorv32__dma_8h.html#a5e01d4454c97eb8e4ecd1455090bbfa9',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2sw_3',['DMA_CMD_B2SW',['../neorv32__dma_8h.html#adfecb3debff251070e4f6eb809412129',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fb2uw_4',['DMA_CMD_B2UW',['../neorv32__dma_8h.html#aeb63f99217f14d1ddde35c1f6c104e72',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5fconst_5',['DMA_CMD_DST_CONST',['../neorv32__dma_8h.html#a6a0ce532aad39e6489e9d52bcb6f4cd2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fdst_5finc_6',['DMA_CMD_DST_INC',['../neorv32__dma_8h.html#a61caa2602c6b148af55d990e3c0ae6be',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fendian_7',['DMA_CMD_ENDIAN',['../neorv32__dma_8h.html#a18fb7faa0a35f562821ca854d7c648b4',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5fconst_8',['DMA_CMD_SRC_CONST',['../neorv32__dma_8h.html#ae380022d8b8fb70da91f0892f2bc32c8',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fsrc_5finc_9',['DMA_CMD_SRC_INC',['../neorv32__dma_8h.html#acc081d58b53d1eddd2bff35b128d7da2',1,'neorv32_dma.h']]], + ['dma_5fcmd_5fw2w_10',['DMA_CMD_W2W',['../neorv32__dma_8h.html#a13a16ba8d6daf9c82312bf4d392d15a8',1,'neorv32_dma.h']]], + ['dma_5ffirq_5fenable_11',['DMA_FIRQ_ENABLE',['../neorv32_8h.html#ace46f95dec73b33bf2535eb653bf8f65',1,'neorv32.h']]], + ['dma_5ffirq_5fpending_12',['DMA_FIRQ_PENDING',['../neorv32_8h.html#a1fa2b25383e6d05cf26f3517091ddbbf',1,'neorv32.h']]], + ['dma_5frte_5fid_13',['DMA_RTE_ID',['../neorv32_8h.html#a568b54ba7dfdae736d8d685dc4d32113',1,'neorv32.h']]], + ['dma_5ftrap_5fcode_14',['DMA_TRAP_CODE',['../neorv32_8h.html#ad2e81443af8a4ce2db3a4e3c1a8fb784',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_4.js b/sw/search/defines_4.js new file mode 100644 index 0000000000..d208589ed0 --- /dev/null +++ b/sw/search/defines_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['exe_5fbase_5faddr_0',['EXE_BASE_ADDR',['../bootloader_8c.html#a18936dc79b9e5aa84df016b046a6b977',1,'bootloader.c']]], + ['exe_5fsignature_1',['EXE_SIGNATURE',['../bootloader_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE: bootloader.c'],['../demo__xip_2main_8c.html#a0035ad41f622dbfc2412318a8ed39257',1,'EXE_SIGNATURE: main.c']]] +]; diff --git a/sw/search/defines_5.js b/sw/search/defines_5.js new file mode 100644 index 0000000000..c614565b25 --- /dev/null +++ b/sw/search/defines_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flash_5fabytes_0',['FLASH_ABYTES',['../demo__xip_2main_8c.html#af9b3c37c806499fc435302f5bce6a122',1,'main.c']]], + ['flash_5fbase_1',['FLASH_BASE',['../demo__xip_2main_8c.html#a23a9099a5f8fc9c6e253c0eecb2be8db',1,'main.c']]] +]; diff --git a/sw/search/defines_6.js b/sw/search/defines_6.js new file mode 100644 index 0000000000..59cec1265e --- /dev/null +++ b/sw/search/defines_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['gen_5fdelay_0',['GEN_DELAY',['../game__of__life_2main_8c.html#a3f33bf77abbf35c245956489f8f7e3a7',1,'main.c']]], + ['gptmr_5ffirq_5fenable_1',['GPTMR_FIRQ_ENABLE',['../neorv32_8h.html#a0a59186908b498cb92273b7767966e26',1,'neorv32.h']]], + ['gptmr_5ffirq_5fpending_2',['GPTMR_FIRQ_PENDING',['../neorv32_8h.html#a4a3164d123ddddd07750f868e67d82d8',1,'neorv32.h']]], + ['gptmr_5frte_5fid_3',['GPTMR_RTE_ID',['../neorv32_8h.html#aac38deeef36de0a474ab238a3054f860',1,'neorv32.h']]], + ['gptmr_5ftrap_5fcode_4',['GPTMR_TRAP_CODE',['../neorv32_8h.html#a445543c36d1f78477aa8ea4841c720a1',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_7.js b/sw/search/defines_7.js new file mode 100644 index 0000000000..d6cd67517a --- /dev/null +++ b/sw/search/defines_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['io_5fbase_5faddress_0',['IO_BASE_ADDRESS',['../neorv32_8h.html#a1eb0cb7fed7e154e15cb4009880a879c',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_8.js b/sw/search/defines_8.js new file mode 100644 index 0000000000..d735f4ec41 --- /dev/null +++ b/sw/search/defines_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['max_5fintensity_0',['MAX_INTENSITY',['../demo__neopixel_2main_8c.html#a1d1d5e7ff16f25b68fdf779befd298f7',1,'main.c']]] +]; diff --git a/sw/search/defines_9.js b/sw/search/defines_9.js new file mode 100644 index 0000000000..9198c4b32b --- /dev/null +++ b/sw/search/defines_9.js @@ -0,0 +1,66 @@ +var searchData= +[ + ['neoled_5ffirq_5fenable_0',['NEOLED_FIRQ_ENABLE',['../neorv32_8h.html#a8d0409818600c0b2acfe8253e8f027b8',1,'neorv32.h']]], + ['neoled_5ffirq_5fpending_1',['NEOLED_FIRQ_PENDING',['../neorv32_8h.html#aded7d7f5f4ba3a6d90f9a29e62a8cfab',1,'neorv32.h']]], + ['neoled_5frte_5fid_2',['NEOLED_RTE_ID',['../neorv32_8h.html#aca6cfc3f580c4dfe1e213009ee450c58',1,'neorv32.h']]], + ['neoled_5ftrap_5fcode_3',['NEOLED_TRAP_CODE',['../neorv32_8h.html#ab4a2ac455d7426992de6877ea7325f21',1,'neorv32.h']]], + ['neorv32_5fbss_5fend_5fc_4',['neorv32_bss_end_c',['../neorv32_8h.html#a2b97ce46531debb80ee0ecf6a5295c0a',1,'neorv32.h']]], + ['neorv32_5fbss_5fstart_5fc_5',['neorv32_bss_start_c',['../neorv32_8h.html#abf941bf72d5e6288b4bf7f3c456d8551',1,'neorv32.h']]], + ['neorv32_5fcfs_6',['NEORV32_CFS',['../neorv32__cfs_8h.html#a6c101b306bd096f78d351e39b308d3e2',1,'neorv32_cfs.h']]], + ['neorv32_5fcfs_5fbase_7',['NEORV32_CFS_BASE',['../neorv32_8h.html#a41d6f97daef61641da96b9f72f6b272f',1,'neorv32.h']]], + ['neorv32_5fcfu_5fr3_5finstr_8',['neorv32_cfu_r3_instr',['../neorv32__cpu__cfu_8h.html#a69d60ccd0cee950b08ce585c3f13b85c',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr4_5finstr_9',['neorv32_cfu_r4_instr',['../neorv32__cpu__cfu_8h.html#a046a640f7f4a7b1b99a824fb325e2079',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr5_5finstr_5fa_10',['neorv32_cfu_r5_instr_a',['../neorv32__cpu__cfu_8h.html#a65198d9caf04a5cd3a72accc2cecf870',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcfu_5fr5_5finstr_5fb_11',['neorv32_cfu_r5_instr_b',['../neorv32__cpu__cfu_8h.html#ab3affefbff898567c6c02c4d10765b04',1,'neorv32_cpu_cfu.h']]], + ['neorv32_5fcrc_12',['NEORV32_CRC',['../neorv32__crc_8h.html#a110962d2b370f9d7997e459d9fd34271',1,'neorv32_crc.h']]], + ['neorv32_5fcrc_5fbase_13',['NEORV32_CRC_BASE',['../neorv32_8h.html#a0e2377055bdc0f416b5ae4385610600d',1,'neorv32.h']]], + ['neorv32_5fdata_5fend_5fc_14',['neorv32_data_end_c',['../neorv32_8h.html#af2fdfc2478b9ec99aa62ac2c901d49f8',1,'neorv32.h']]], + ['neorv32_5fdata_5fstart_5fc_15',['neorv32_data_start_c',['../neorv32_8h.html#ae1b7b218a835fbc0ea131a651d248f1d',1,'neorv32.h']]], + ['neorv32_5fdm_5fbase_16',['NEORV32_DM_BASE',['../neorv32_8h.html#a9bf0149681677f7d87abf8f62e2d9a3d',1,'neorv32.h']]], + ['neorv32_5fdma_17',['NEORV32_DMA',['../neorv32__dma_8h.html#a0dcb61a0e0d2b45beb7818015adc8639',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fbase_18',['NEORV32_DMA_BASE',['../neorv32_8h.html#aa8d3a83ffad1e71f0832a5da78d62008',1,'neorv32.h']]], + ['neorv32_5fdmem_5fbegin_5fc_19',['neorv32_dmem_begin_c',['../neorv32_8h.html#a27ab61f8f53b6e781182c7855ec9e9a8',1,'neorv32.h']]], + ['neorv32_5fgpio_20',['NEORV32_GPIO',['../neorv32__gpio_8h.html#a1e35bbf26b9d1aa5373af0b9468eb445',1,'neorv32_gpio.h']]], + ['neorv32_5fgpio_5fbase_21',['NEORV32_GPIO_BASE',['../neorv32_8h.html#a7fd1e24d4de2eed7bf9cd5391562c7f4',1,'neorv32.h']]], + ['neorv32_5fgptmr_22',['NEORV32_GPTMR',['../neorv32__gptmr_8h.html#a9e047791588ff21fc4dc1b06456bdfd2',1,'neorv32_gptmr.h']]], + ['neorv32_5fgptmr_5fbase_23',['NEORV32_GPTMR_BASE',['../neorv32_8h.html#a0991b1a5ba1e8c3550eb9770d43589d0',1,'neorv32.h']]], + ['neorv32_5fheap_5fbegin_5fc_24',['neorv32_heap_begin_c',['../neorv32_8h.html#aca22a64c8c580dfde1676732d97ead7c',1,'neorv32.h']]], + ['neorv32_5fheap_5fend_5fc_25',['neorv32_heap_end_c',['../neorv32_8h.html#ac8b656bd05c05176638ea3f922228ca5',1,'neorv32.h']]], + ['neorv32_5fheap_5fsize_5fc_26',['neorv32_heap_size_c',['../neorv32_8h.html#a32904e45632a47e21f7c9d873720cdc5',1,'neorv32.h']]], + ['neorv32_5fimem_5fbegin_5fc_27',['neorv32_imem_begin_c',['../neorv32_8h.html#a507732c61c2ee78bf8d1bfbfe3448f8f',1,'neorv32.h']]], + ['neorv32_5fmtime_28',['NEORV32_MTIME',['../neorv32__mtime_8h.html#a68935be182e0081039326a9f344a36b3',1,'neorv32_mtime.h']]], + ['neorv32_5fmtime_5fbase_29',['NEORV32_MTIME_BASE',['../neorv32_8h.html#ab98f762df259a2bbc28d19d2acfe9e23',1,'neorv32.h']]], + ['neorv32_5fneoled_30',['NEORV32_NEOLED',['../neorv32__neoled_8h.html#a3ccc1097bc70f92235d693b612fa994a',1,'neorv32_neoled.h']]], + ['neorv32_5fneoled_5fbase_31',['NEORV32_NEOLED_BASE',['../neorv32_8h.html#a559fdce92e8af5efc426c8fc48d14f99',1,'neorv32.h']]], + ['neorv32_5fonewire_32',['NEORV32_ONEWIRE',['../neorv32__onewire_8h.html#a6f119e35d7ac01f110987508ff3becc9',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fbase_33',['NEORV32_ONEWIRE_BASE',['../neorv32_8h.html#a8d0b612e52b77395a05d4f18af6fcf00',1,'neorv32.h']]], + ['neorv32_5fpwm_34',['NEORV32_PWM',['../neorv32__pwm_8h.html#ad4cb534c29e26fa56c10bef7afab8f51',1,'neorv32_pwm.h']]], + ['neorv32_5fpwm_5fbase_35',['NEORV32_PWM_BASE',['../neorv32_8h.html#afef7a6b121a788560b29e2ee2a58c725',1,'neorv32.h']]], + ['neorv32_5frte_5fnum_5ftraps_36',['NEORV32_RTE_NUM_TRAPS',['../neorv32__rte_8h.html#ad14a1ca41df1e9300bfd01aef07dce59',1,'neorv32_rte.h']]], + ['neorv32_5fsdi_37',['NEORV32_SDI',['../neorv32__sdi_8h.html#afd0921633d6523d9b7235055e9bbf928',1,'neorv32_sdi.h']]], + ['neorv32_5fsdi_5fbase_38',['NEORV32_SDI_BASE',['../neorv32_8h.html#a9b316ec038bd94ada42c9dab57a0a3cb',1,'neorv32.h']]], + ['neorv32_5fslink_39',['NEORV32_SLINK',['../neorv32__slink_8h.html#a6380d894432de119a20993096db534df',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5fbase_40',['NEORV32_SLINK_BASE',['../neorv32_8h.html#ab5e6dc57886cd5ed98b86f22fc37d7cc',1,'neorv32.h']]], + ['neorv32_5fspi_41',['NEORV32_SPI',['../neorv32__spi_8h.html#a5f3afc4e268670c54d90df67fa38ca22',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fbase_42',['NEORV32_SPI_BASE',['../neorv32_8h.html#aa466dc5eace7351bd438606f0f7475a7',1,'neorv32.h']]], + ['neorv32_5fstack_5fend_5fc_43',['neorv32_stack_end_c',['../neorv32_8h.html#ae4ee3e9f7de4c3ee4df804b23812a6ea',1,'neorv32.h']]], + ['neorv32_5fsysinfo_5fbase_44',['NEORV32_SYSINFO_BASE',['../neorv32_8h.html#a5aa936f38782232c7ed3eab1283ee536',1,'neorv32.h']]], + ['neorv32_5ftrng_45',['NEORV32_TRNG',['../neorv32__trng_8h.html#a9794ff3746eb5321ad9c2bf522ea26dd',1,'neorv32_trng.h']]], + ['neorv32_5ftrng_5fbase_46',['NEORV32_TRNG_BASE',['../neorv32_8h.html#ab4846cd153e8a23deec45d81cc8372a2',1,'neorv32.h']]], + ['neorv32_5ftwi_47',['NEORV32_TWI',['../neorv32__twi_8h.html#a2769c2fe5e0de01b12fe4a5fad029768',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fbase_48',['NEORV32_TWI_BASE',['../neorv32_8h.html#a4a741408a4bb0938e03b99555306db9c',1,'neorv32.h']]], + ['neorv32_5fuart0_49',['NEORV32_UART0',['../neorv32__uart_8h.html#a4c880a6b27e46f459e750425258b1bdb',1,'neorv32_uart.h']]], + ['neorv32_5fuart0_5fbase_50',['NEORV32_UART0_BASE',['../neorv32_8h.html#a000b37f710043fe21e49b2fdbc039d94',1,'neorv32.h']]], + ['neorv32_5fuart1_51',['NEORV32_UART1',['../neorv32__uart_8h.html#aa2a9ded4523f001bf69935c80247fa2d',1,'neorv32_uart.h']]], + ['neorv32_5fuart1_5fbase_52',['NEORV32_UART1_BASE',['../neorv32_8h.html#a26a1defe18ce222b8b4ed1c760344700',1,'neorv32.h']]], + ['neorv32_5fwdt_53',['NEORV32_WDT',['../neorv32__wdt_8h.html#a78615b08cd799063011606d084fef46c',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5fbase_54',['NEORV32_WDT_BASE',['../neorv32_8h.html#a3012986cdd5748ee96bcc74cd7108dea',1,'neorv32.h']]], + ['neorv32_5fxip_55',['NEORV32_XIP',['../neorv32__xip_8h.html#a3d6f138a347c16883b51069428eb7c1e',1,'neorv32_xip.h']]], + ['neorv32_5fxip_5fbase_56',['NEORV32_XIP_BASE',['../neorv32_8h.html#ae0978315beac8399f96f520bda81c7fe',1,'neorv32.h']]], + ['neorv32_5fxirq_57',['NEORV32_XIRQ',['../neorv32__xirq_8h.html#a0c0886139e9837867202e5f6a83307c4',1,'neorv32_xirq.h']]], + ['neorv32_5fxirq_5fbase_58',['NEORV32_XIRQ_BASE',['../neorv32_8h.html#a942a897be2d4ae6820bee0f7bb3a0ff1',1,'neorv32.h']]], + ['num_5fcells_5fx_59',['NUM_CELLS_X',['../game__of__life_2main_8c.html#a78c5b500f0f057bcaedf6fedeca7c537',1,'main.c']]], + ['num_5fcells_5fy_60',['NUM_CELLS_Y',['../game__of__life_2main_8c.html#aed77778557404b38bebb05b5830368b4',1,'main.c']]], + ['num_5fleds_5f24bit_61',['NUM_LEDS_24BIT',['../demo__neopixel_2main_8c.html#aa1dddb8d6b3b4d2f19afc3c09e2ff572',1,'main.c']]], + ['num_5ftest_5fcases_62',['NUM_TEST_CASES',['../atomic__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES: main.c'],['../float__corner__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES: main.c'],['../floating__point__test_2main_8c.html#a83792c34853f1d2801b59ad46adc7e1e',1,'NUM_TEST_CASES: main.c']]] +]; diff --git a/sw/search/defines_a.js b/sw/search/defines_a.js new file mode 100644 index 0000000000..26b4983d3e --- /dev/null +++ b/sw/search/defines_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['onewire_5ffirq_5fenable_0',['ONEWIRE_FIRQ_ENABLE',['../neorv32_8h.html#a8bb1918679e32e898af2d485cfa44afb',1,'neorv32.h']]], + ['onewire_5ffirq_5fpending_1',['ONEWIRE_FIRQ_PENDING',['../neorv32_8h.html#a3853ef999f99ca062e6025038811d0f0',1,'neorv32.h']]], + ['onewire_5frte_5fid_2',['ONEWIRE_RTE_ID',['../neorv32_8h.html#a142f4a1c754edfab292706618d427b94',1,'neorv32.h']]], + ['onewire_5ftrap_5fcode_3',['ONEWIRE_TRAP_CODE',['../neorv32_8h.html#a3e7aaa405a7d1fcd71a36c4b6b5a4081',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_b.js b/sw/search/defines_b.js new file mode 100644 index 0000000000..1dc0612091 --- /dev/null +++ b/sw/search/defines_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['print_5fgetc_0',['PRINT_GETC',['../bootloader_8c.html#a999b04603115ce08b0cb33e333312480',1,'bootloader.c']]], + ['print_5fputc_1',['PRINT_PUTC',['../bootloader_8c.html#aa7afbe8348ebd1a876a4d247553292e9',1,'bootloader.c']]], + ['print_5ftext_2',['PRINT_TEXT',['../bootloader_8c.html#a0e5a66f68ecc7a6f42088f349707e852',1,'bootloader.c']]], + ['print_5fxnum_3',['PRINT_XNUM',['../bootloader_8c.html#a2f5cc04cf9c85f5d2958b384e053053b',1,'bootloader.c']]], + ['pwm_5fmax_4',['PWM_MAX',['../demo__pwm_2main_8c.html#a391fa1e490bd712720989b58fa0d9904',1,'main.c']]] +]; diff --git a/sw/search/defines_c.js b/sw/search/defines_c.js new file mode 100644 index 0000000000..b9ad18f545 --- /dev/null +++ b/sw/search/defines_c.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['run_5faddsub_5ftests_0',['RUN_ADDSUB_TESTS',['../float__corner__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS: main.c'],['../floating__point__test_2main_8c.html#a2d16b9e484b7af7897c7ae83f945ceca',1,'RUN_ADDSUB_TESTS: main.c']]], + ['run_5fclassify_5ftests_1',['RUN_CLASSIFY_TESTS',['../float__corner__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS: main.c'],['../floating__point__test_2main_8c.html#a7e134923925fa24fd1090281c3a416c3',1,'RUN_CLASSIFY_TESTS: main.c']]], + ['run_5fcompare_5ftests_2',['RUN_COMPARE_TESTS',['../float__corner__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS: main.c'],['../floating__point__test_2main_8c.html#a4ee0f6d28896a97d2c0cad866e77b874',1,'RUN_COMPARE_TESTS: main.c']]], + ['run_5fconv_5ftests_3',['RUN_CONV_TESTS',['../float__corner__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS: main.c'],['../floating__point__test_2main_8c.html#aa3b6c4d49be7372de9e771a0475306ac',1,'RUN_CONV_TESTS: main.c']]], + ['run_5fcsr_5ftests_4',['RUN_CSR_TESTS',['../floating__point__test_2main_8c.html#a7ec330b668b5b24d666d7769ccecfee3',1,'main.c']]], + ['run_5fexc_5ftests_5',['RUN_EXC_TESTS',['../floating__point__test_2main_8c.html#a1a1af220e72c69b03d13b2df53650e10',1,'main.c']]], + ['run_5fminmax_5ftests_6',['RUN_MINMAX_TESTS',['../float__corner__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS: main.c'],['../floating__point__test_2main_8c.html#aed386f612417aeeeac8b08db27d515e4',1,'RUN_MINMAX_TESTS: main.c']]], + ['run_5fmul_5ftests_7',['RUN_MUL_TESTS',['../float__corner__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS: main.c'],['../floating__point__test_2main_8c.html#a97323ecaf1ae85e68a736b06bc3b58f8',1,'RUN_MUL_TESTS: main.c']]], + ['run_5fsgninj_5ftests_8',['RUN_SGNINJ_TESTS',['../float__corner__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS: main.c'],['../floating__point__test_2main_8c.html#a94f0b0908f48f383145ed61ef8eb0713',1,'RUN_SGNINJ_TESTS: main.c']]], + ['run_5ftiming_5ftests_9',['RUN_TIMING_TESTS',['../float__corner__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS: main.c'],['../floating__point__test_2main_8c.html#a6969308bd3633928893a2666f1df66fc',1,'RUN_TIMING_TESTS: main.c']]], + ['run_5funavail_5ftests_10',['RUN_UNAVAIL_TESTS',['../float__corner__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS: main.c'],['../floating__point__test_2main_8c.html#a923de9c3e55322d85522740c0d0ff867',1,'RUN_UNAVAIL_TESTS: main.c']]] +]; diff --git a/sw/search/defines_d.js b/sw/search/defines_d.js new file mode 100644 index 0000000000..d459ef152a --- /dev/null +++ b/sw/search/defines_d.js @@ -0,0 +1,29 @@ +var searchData= +[ + ['sdi_5ffirq_5fenable_0',['SDI_FIRQ_ENABLE',['../neorv32_8h.html#a30cf20b6d704c50cc5c46238bb43646f',1,'neorv32.h']]], + ['sdi_5ffirq_5fpending_1',['SDI_FIRQ_PENDING',['../neorv32_8h.html#a68611c0dfbe331739eff10230ac3fede',1,'neorv32.h']]], + ['sdi_5frte_5fid_2',['SDI_RTE_ID',['../neorv32_8h.html#aa0ff72ea560d7e1462787dc31bd467cf',1,'neorv32.h']]], + ['sdi_5ftrap_5fcode_3',['SDI_TRAP_CODE',['../neorv32_8h.html#a68925ca3f482f148caedd36118fd8d79',1,'neorv32.h']]], + ['silent_5fmode_4',['SILENT_MODE',['../atomic__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE: main.c'],['../float__corner__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE: main.c'],['../floating__point__test_2main_8c.html#a87f296d7594bb8178cf76f0c045b7013',1,'SILENT_MODE: main.c']]], + ['slink_5frx_5ffirq_5fenable_5',['SLINK_RX_FIRQ_ENABLE',['../neorv32_8h.html#a8680ab1f14e512f21913572b35cbbf77',1,'neorv32.h']]], + ['slink_5frx_5ffirq_5fpending_6',['SLINK_RX_FIRQ_PENDING',['../neorv32_8h.html#a5c48d5c4effb47cdb019aa2da7c84526',1,'neorv32.h']]], + ['slink_5frx_5frte_5fid_7',['SLINK_RX_RTE_ID',['../neorv32_8h.html#a4fff18e72d10377cdcb8d2ac0a617a5d',1,'neorv32.h']]], + ['slink_5frx_5ftrap_5fcode_8',['SLINK_RX_TRAP_CODE',['../neorv32_8h.html#ab1fdaedb2c4c8753ef3be87c82568dda',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fenable_9',['SLINK_TX_FIRQ_ENABLE',['../neorv32_8h.html#a232fe0eb5665373b6e2b464bdc228df2',1,'neorv32.h']]], + ['slink_5ftx_5ffirq_5fpending_10',['SLINK_TX_FIRQ_PENDING',['../neorv32_8h.html#ac8e98b2af75c8e31f9815dee3dcbaf8e',1,'neorv32.h']]], + ['slink_5ftx_5frte_5fid_11',['SLINK_TX_RTE_ID',['../neorv32_8h.html#a4e039d13b8d3f20453e1bb6b40512e43',1,'neorv32.h']]], + ['slink_5ftx_5ftrap_5fcode_12',['SLINK_TX_TRAP_CODE',['../neorv32_8h.html#a7fbe28901775e284d5700086f0b0bfcd',1,'neorv32.h']]], + ['spi_5fboot_5fbase_5faddr_13',['SPI_BOOT_BASE_ADDR',['../bootloader_8c.html#a418adcf57119600c3580fd2297d28de0',1,'bootloader.c']]], + ['spi_5fen_14',['SPI_EN',['../bootloader_8c.html#aea75cf0485ce0a4ea320eba994859686',1,'bootloader.c']]], + ['spi_5ffirq_5fenable_15',['SPI_FIRQ_ENABLE',['../neorv32_8h.html#ab8fcd3f80c373eb0f9d0fc6bf64ca626',1,'neorv32.h']]], + ['spi_5ffirq_5fpending_16',['SPI_FIRQ_PENDING',['../neorv32_8h.html#ab2f58f746febb29a9828447c733f8043',1,'neorv32.h']]], + ['spi_5fflash_5faddr_5fbytes_17',['SPI_FLASH_ADDR_BYTES',['../bootloader_8c.html#afe60a31c8561952f2f734fd67e6f7406',1,'bootloader.c']]], + ['spi_5fflash_5fclk_5fprsc_18',['SPI_FLASH_CLK_PRSC',['../bootloader_8c.html#a709071a651213770b4efe6e6e055ec3d',1,'bootloader.c']]], + ['spi_5fflash_5fcs_19',['SPI_FLASH_CS',['../bootloader_8c.html#aa2132454aada86216009f3af206899b1',1,'bootloader.c']]], + ['spi_5fflash_5fsector_5fsize_20',['SPI_FLASH_SECTOR_SIZE',['../bootloader_8c.html#a00924a8ba223b2ca0e7031259b292c84',1,'bootloader.c']]], + ['spi_5frte_5fid_21',['SPI_RTE_ID',['../neorv32_8h.html#a4c1cd9ec9f80da2080e5d0d35cc524dd',1,'neorv32.h']]], + ['spi_5ftrap_5fcode_22',['SPI_TRAP_CODE',['../neorv32_8h.html#a83c212f1f5d8ee2a5921b3b2b19e9cc4',1,'neorv32.h']]], + ['status_5fled_5fen_23',['STATUS_LED_EN',['../bootloader_8c.html#aa9696325b450773c7a87c991abca3a54',1,'bootloader.c']]], + ['status_5fled_5fpin_24',['STATUS_LED_PIN',['../bootloader_8c.html#a089a71f836911c71b3f73fdd3b4b890b',1,'bootloader.c']]], + ['str_25',['str',['../bootloader_8c.html#af6cf19e40e97afb5a7c29f7b439d091d',1,'bootloader.c']]] +]; diff --git a/sw/search/defines_e.js b/sw/search/defines_e.js new file mode 100644 index 0000000000..a054ee04ad --- /dev/null +++ b/sw/search/defines_e.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['testcases_0',['TESTCASES',['../demo__cfs_2main_8c.html#a906949f076e3e0d0082af3c3b1acb518',1,'main.c']]], + ['trng_5ffirq_5fenable_1',['TRNG_FIRQ_ENABLE',['../neorv32_8h.html#a2896d832852c016eb85210b523642f11',1,'neorv32.h']]], + ['trng_5ffirq_5fpending_2',['TRNG_FIRQ_PENDING',['../neorv32_8h.html#a9c387ca4e2736a27056c11819947c84a',1,'neorv32.h']]], + ['trng_5frte_5fid_3',['TRNG_RTE_ID',['../neorv32_8h.html#afaa705a674acf3fd6c8cb294eaf11c5e',1,'neorv32.h']]], + ['trng_5ftrap_5fcode_4',['TRNG_TRAP_CODE',['../neorv32_8h.html#a11e34802c61a01fd6cba46e3f92d5ac1',1,'neorv32.h']]], + ['twi_5ffirq_5fenable_5',['TWI_FIRQ_ENABLE',['../neorv32_8h.html#a0913144fce247e24ccd0f178b9ac32b7',1,'neorv32.h']]], + ['twi_5ffirq_5fpending_6',['TWI_FIRQ_PENDING',['../neorv32_8h.html#a48b80113ca718fbdc50d75e1ec96a1ff',1,'neorv32.h']]], + ['twi_5frte_5fid_7',['TWI_RTE_ID',['../neorv32_8h.html#a1ac29f2f7bace5ba92b2b68a4541a60c',1,'neorv32.h']]], + ['twi_5ftrap_5fcode_8',['TWI_TRAP_CODE',['../neorv32_8h.html#a0afc1a759116d4d73a199ef769bced47',1,'neorv32.h']]] +]; diff --git a/sw/search/defines_f.js b/sw/search/defines_f.js new file mode 100644 index 0000000000..05bac95a4d --- /dev/null +++ b/sw/search/defines_f.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['uart0_5frx_5ffirq_5fenable_0',['UART0_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6b55ce6abe6b141000a6bb00949169e9',1,'neorv32.h']]], + ['uart0_5frx_5ffirq_5fpending_1',['UART0_RX_FIRQ_PENDING',['../neorv32_8h.html#a0b738b26abb2b951f1f5c5d9525d7701',1,'neorv32.h']]], + ['uart0_5frx_5frte_5fid_2',['UART0_RX_RTE_ID',['../neorv32_8h.html#ae8588cca20d5e36f74c5207c376389a1',1,'neorv32.h']]], + ['uart0_5frx_5ftrap_5fcode_3',['UART0_RX_TRAP_CODE',['../neorv32_8h.html#a7a849638eff31f2e1955bdc53d4fc84d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fenable_4',['UART0_TX_FIRQ_ENABLE',['../neorv32_8h.html#aff756a395771f22c5f412f23f177ea7d',1,'neorv32.h']]], + ['uart0_5ftx_5ffirq_5fpending_5',['UART0_TX_FIRQ_PENDING',['../neorv32_8h.html#addbe29166bb77bc045ad0e3db68e57e9',1,'neorv32.h']]], + ['uart0_5ftx_5frte_5fid_6',['UART0_TX_RTE_ID',['../neorv32_8h.html#a9dc37695ca169bc0eb93898e7aeeee58',1,'neorv32.h']]], + ['uart0_5ftx_5ftrap_5fcode_7',['UART0_TX_TRAP_CODE',['../neorv32_8h.html#ab50df423fdba86bb83bc5d90a4c3bb20',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fenable_8',['UART1_RX_FIRQ_ENABLE',['../neorv32_8h.html#a6c118c1784d8446360b00cde97437ca7',1,'neorv32.h']]], + ['uart1_5frx_5ffirq_5fpending_9',['UART1_RX_FIRQ_PENDING',['../neorv32_8h.html#a2e70d3a4e2973d224643813fcf315a20',1,'neorv32.h']]], + ['uart1_5frx_5frte_5fid_10',['UART1_RX_RTE_ID',['../neorv32_8h.html#ab1c351f5ea19ac9ea864155be9cc0b4b',1,'neorv32.h']]], + ['uart1_5frx_5ftrap_5fcode_11',['UART1_RX_TRAP_CODE',['../neorv32_8h.html#ad0b9eb2ee1f411d7fccdf4fe263214e1',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fenable_12',['UART1_TX_FIRQ_ENABLE',['../neorv32_8h.html#a0039bae3454a22e71d64e70d674f5d6a',1,'neorv32.h']]], + ['uart1_5ftx_5ffirq_5fpending_13',['UART1_TX_FIRQ_PENDING',['../neorv32_8h.html#ac4060532b7aa390623f54720460a2680',1,'neorv32.h']]], + ['uart1_5ftx_5frte_5fid_14',['UART1_TX_RTE_ID',['../neorv32_8h.html#a6af270d7ae8b1cde30e44eb9142491d3',1,'neorv32.h']]], + ['uart1_5ftx_5ftrap_5fcode_15',['UART1_TX_TRAP_CODE',['../neorv32_8h.html#a4cc50287c7a53982761a8116396ff7dd',1,'neorv32.h']]], + ['uart_5fbaud_16',['UART_BAUD',['../bootloader_8c.html#a1fac9153314479ad0ad495d752f0224a',1,'bootloader.c']]], + ['uart_5fen_17',['UART_EN',['../bootloader_8c.html#af1c2f103ac6e3183f08b39099fab2be9',1,'bootloader.c']]], + ['uart_5fhw_5fhandshake_5fen_18',['UART_HW_HANDSHAKE_EN',['../bootloader_8c.html#a20e93d623ce07939c3fdd53898f9d583',1,'bootloader.c']]] +]; diff --git a/sw/search/enums_0.js b/sw/search/enums_0.js new file mode 100644 index 0000000000..2e35050ee5 --- /dev/null +++ b/sw/search/enums_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['error_5fcodes_5fenum_0',['ERROR_CODES_enum',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088',1,'bootloader.c']]], + ['exe_5fstream_5fsource_5fenum_1',['EXE_STREAM_SOURCE_enum',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83',1,'bootloader.c']]] +]; diff --git a/sw/search/enums_1.js b/sw/search/enums_1.js new file mode 100644 index 0000000000..a97d9537a4 --- /dev/null +++ b/sw/search/enums_1.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['neorv32_5fclock_5fprsc_5fenum_0',['NEORV32_CLOCK_PRSC_enum',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73',1,'neorv32.h']]], + ['neorv32_5fcrc_5fmode_5fenum_1',['NEORV32_CRC_MODE_enum',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447',1,'neorv32_crc.h']]], + ['neorv32_5fcsr_5fenum_2',['NEORV32_CSR_enum',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5ffflags_5fenum_3',['NEORV32_CSR_FFLAGS_enum',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmcountinhibit_5fenum_4',['NEORV32_CSR_MCOUNTINHIBIT_enum',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmie_5fenum_5',['NEORV32_CSR_MIE_enum',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmip_5fenum_6',['NEORV32_CSR_MIP_enum',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21b',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmisa_5fenum_7',['NEORV32_CSR_MISA_enum',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830c',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fmstatus_5fenum_8',['NEORV32_CSR_MSTATUS_enum',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fcsr_5fxisa_5fenum_9',['NEORV32_CSR_XISA_enum',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fdma_5fctrl_5fenum_10',['NEORV32_DMA_CTRL_enum',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fstatus_5fenum_11',['NEORV32_DMA_STATUS_enum',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74b',1,'neorv32_dma.h']]], + ['neorv32_5fdma_5fttype_5fenum_12',['NEORV32_DMA_TTYPE_enum',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9',1,'neorv32_dma.h']]], + ['neorv32_5fexception_5fcodes_5fenum_13',['NEORV32_EXCEPTION_CODES_enum',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fexecutable_5fenum_14',['NEORV32_EXECUTABLE_enum',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feb',1,'bootloader.c']]], + ['neorv32_5fgptmr_5fctrl_5fenum_15',['NEORV32_GPTMR_CTRL_enum',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988',1,'neorv32_gptmr.h']]], + ['neorv32_5fhpmcnt_5fevent_5fenum_16',['NEORV32_HPMCNT_EVENT_enum',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfe',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fneoled_5fctrl_5fenum_17',['NEORV32_NEOLED_CTRL_enum',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412',1,'neorv32_neoled.h']]], + ['neorv32_5fonewire_5fctrl_5fenum_18',['NEORV32_ONEWIRE_CTRL_enum',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831',1,'neorv32_onewire.h']]], + ['neorv32_5fonewire_5fdata_5fenum_19',['NEORV32_ONEWIRE_DATA_enum',['../neorv32__onewire_8h.html#ae770490afa8662fb8577065531d51368',1,'neorv32_onewire.h']]], + ['neorv32_5fpmp_5fmodes_5fenum_20',['NEORV32_PMP_MODES_enum',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fpmpcfg_5fattributes_5fenum_21',['NEORV32_PMPCFG_ATTRIBUTES_enum',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930ea',1,'neorv32_cpu_csr.h']]], + ['neorv32_5fpwm_5fctrl_5fenum_22',['NEORV32_PWM_CTRL_enum',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7d',1,'neorv32_pwm.h']]], + ['neorv32_5frte_5ftrap_5fenum_23',['NEORV32_RTE_TRAP_enum',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70a',1,'neorv32_rte.h']]], + ['neorv32_5fsdi_5fctrl_5fenum_24',['NEORV32_SDI_CTRL_enum',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6',1,'neorv32_sdi.h']]], + ['neorv32_5fslink_5fctrl_5fenum_25',['NEORV32_SLINK_CTRL_enum',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5froute_5fenum_26',['NEORV32_SLINK_ROUTE_enum',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45',1,'neorv32_slink.h']]], + ['neorv32_5fslink_5fstatus_5fenum_27',['NEORV32_SLINK_STATUS_enum',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bf',1,'neorv32_slink.h']]], + ['neorv32_5fspi_5fctrl_5fenum_28',['NEORV32_SPI_CTRL_enum',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3b',1,'neorv32_spi.h']]], + ['neorv32_5fspi_5fdata_5fenum_29',['NEORV32_SPI_DATA_enum',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8',1,'neorv32_spi.h']]], + ['neorv32_5ftrng_5fctrl_5fenum_30',['NEORV32_TRNG_CTRL_enum',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1a',1,'neorv32_trng.h']]], + ['neorv32_5ftwi_5fctrl_5fenum_31',['NEORV32_TWI_CTRL_enum',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafa',1,'neorv32_twi.h']]], + ['neorv32_5ftwi_5fdcmd_5fenum_32',['NEORV32_TWI_DCMD_enum',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8',1,'neorv32_twi.h']]], + ['neorv32_5fuart_5fctrl_5fenum_33',['NEORV32_UART_CTRL_enum',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afc',1,'neorv32_uart.h']]], + ['neorv32_5fuart_5fdata_5fenum_34',['NEORV32_UART_DATA_enum',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2',1,'neorv32_uart.h']]], + ['neorv32_5fwdt_5fctrl_5fenum_35',['NEORV32_WDT_CTRL_enum',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23e',1,'neorv32_wdt.h']]], + ['neorv32_5fwdt_5frcause_5fenum_36',['NEORV32_WDT_RCAUSE_enum',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049',1,'neorv32_wdt.h']]], + ['neorv32_5fxip_5fctrl_5fenum_37',['NEORV32_XIP_CTRL_enum',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceb',1,'neorv32_xip.h']]] +]; diff --git a/sw/search/enums_2.js b/sw/search/enums_2.js new file mode 100644 index 0000000000..8e1c48fc01 --- /dev/null +++ b/sw/search/enums_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['spi_5fflash_5fcmd_0',['SPI_FLASH_CMD',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12e',1,'main.c']]], + ['spi_5fflash_5fcmd_5fenum_1',['SPI_FLASH_CMD_enum',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fed',1,'bootloader.c']]], + ['spi_5fflash_5fsreg_2',['SPI_FLASH_SREG',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08e',1,'main.c']]], + ['spi_5fflash_5fsreg_5fenum_3',['SPI_FLASH_SREG_enum',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136f',1,'bootloader.c']]] +]; diff --git a/sw/search/enumvalues_0.js b/sw/search/enumvalues_0.js new file mode 100644 index 0000000000..7d22d3b1fb --- /dev/null +++ b/sw/search/enumvalues_0.js @@ -0,0 +1,249 @@ +var searchData= +[ + ['clk_5fprsc_5f1024_0',['CLK_PRSC_1024',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a18aac15afd5ebd8d3a00dd6e513daf17',1,'neorv32.h']]], + ['clk_5fprsc_5f128_1',['CLK_PRSC_128',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a933045a5405de55781d687315f42054e',1,'neorv32.h']]], + ['clk_5fprsc_5f2_2',['CLK_PRSC_2',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73ad63d40139c50d76618cf1258cbdc0d05',1,'neorv32.h']]], + ['clk_5fprsc_5f2048_3',['CLK_PRSC_2048',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa138f0cad547028d5124f89d6dcc8c79',1,'neorv32.h']]], + ['clk_5fprsc_5f4_4',['CLK_PRSC_4',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a648249b3ab8c2500880c1e68b98f81d1',1,'neorv32.h']]], + ['clk_5fprsc_5f4096_5',['CLK_PRSC_4096',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a0f20c29722bf9afc478b1a286a6b7eee',1,'neorv32.h']]], + ['clk_5fprsc_5f64_6',['CLK_PRSC_64',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73a5990532893f2d9606e3c02aff60ca5da',1,'neorv32.h']]], + ['clk_5fprsc_5f8_7',['CLK_PRSC_8',['../neorv32_8h.html#a10022df4c223533b04d5aebe222e8b73aa4e3a6a5b3cd895f63b4544f63ce22c9',1,'neorv32.h']]], + ['crc_5fmode16_8',['CRC_MODE16',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447aa5cfd5d285b4cb8997c7e754491d050f',1,'neorv32_crc.h']]], + ['crc_5fmode32_9',['CRC_MODE32',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a7cf26bd4a7e8d6e45016633f650f00aa',1,'neorv32_crc.h']]], + ['crc_5fmode8_10',['CRC_MODE8',['../neorv32__crc_8h.html#a1ae84a58f475bafc2fc3f2c690fd6447a9409185edbae1bd0afdeda4e58aa6d1a',1,'neorv32_crc.h']]], + ['csr_5fcfureg0_11',['CSR_CFUREG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0e9cf0b99b8614ea0b870d38970281f',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg1_12',['CSR_CFUREG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a382304065a6db773f925b80b9447b8a8',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg2_13',['CSR_CFUREG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a427d7cf036b49efd46166c01f0504b68',1,'neorv32_cpu_csr.h']]], + ['csr_5fcfureg3_14',['CSR_CFUREG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aefefa1cff0cf5d01109486e5a8bebedf',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycle_15',['CSR_CYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaaf0f6b17a06d5922bcfdb47b382137e',1,'neorv32_cpu_csr.h']]], + ['csr_5fcycleh_16',['CSR_CYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa276bedb7dab28935163397b4879f6db',1,'neorv32_cpu_csr.h']]], + ['csr_5fdcsr_17',['CSR_DCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6bb3ba59a25803d6f98faad67609a9a9',1,'neorv32_cpu_csr.h']]], + ['csr_5fdpc_18',['CSR_DPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af4c98d949d2eb44f2518fdf314344d3b',1,'neorv32_cpu_csr.h']]], + ['csr_5fdscratch0_19',['CSR_DSCRATCH0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0f4a1ae740efd80d14d21e90f355e9d7',1,'neorv32_cpu_csr.h']]], + ['csr_5ffcsr_20',['CSR_FCSR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5e1abf46b4f55bd18e1d132b32696ab6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_21',['CSR_FFLAGS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a625f606c14fd4d7224d7109e10508e7a',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fdz_22',['CSR_FFLAGS_DZ',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba365f3f519bca34a349907c82c873d52b',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnv_23',['CSR_FFLAGS_NV',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba3ac330a4b03178e756c980eaa48ad165',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fnx_24',['CSR_FFLAGS_NX',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba91a314defd310786a9ed67f7ef2ef5a6',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fof_25',['CSR_FFLAGS_OF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204ba612390e07a065fa13eeaeac84af48c6e',1,'neorv32_cpu_csr.h']]], + ['csr_5ffflags_5fuf_26',['CSR_FFLAGS_UF',['../neorv32__cpu__csr_8h.html#afde0761e3150d82511136f56179c204babc6d405724563844569028f463885819',1,'neorv32_cpu_csr.h']]], + ['csr_5ffrm_27',['CSR_FRM',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7f198c465959dde37b7056dd06d45812',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter10_28',['CSR_HPMCOUNTER10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa407e701bdbb9d26f84684b811c008a9',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter10h_29',['CSR_HPMCOUNTER10H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae56e95d6d6dd63ff6f5b4192cf48c88b',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter11_30',['CSR_HPMCOUNTER11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9fd1ff4e8a42992c0a3ec02c397dd7f8',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter11h_31',['CSR_HPMCOUNTER11H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2af8c5dcc87d92bcce392fb5b3aa065e',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter12_32',['CSR_HPMCOUNTER12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae58f15a95aa41126819effe046ced804',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter12h_33',['CSR_HPMCOUNTER12H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a74359db2583feb7119d4bcaa926242a0',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter13_34',['CSR_HPMCOUNTER13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a24d8617a6ff2c1e49c9a73853ad9e450',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter13h_35',['CSR_HPMCOUNTER13H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4fa22699e96d6da8665077e3c95891ef',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter14_36',['CSR_HPMCOUNTER14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa47ed1a4a4f9fcabceed0d6d626d0aaf',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter14h_37',['CSR_HPMCOUNTER14H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a03f29e792be2854efc9e66d710b78a1d',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter15_38',['CSR_HPMCOUNTER15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7277a8f929a5a250f7227fbbdf545dbc',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter15h_39',['CSR_HPMCOUNTER15H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a11169bd08920d40c8f94fd29e1d33eff',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter3_40',['CSR_HPMCOUNTER3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ee699d5b2886c54c92992f66b109b67',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter3h_41',['CSR_HPMCOUNTER3H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaa3e6a1ac8999be42d7c13891546bb50',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter4_42',['CSR_HPMCOUNTER4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98ed49716d0d89712863e7a542d38d2a',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter4h_43',['CSR_HPMCOUNTER4H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8837ff8d2741639aa69da59659f9a080',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter5_44',['CSR_HPMCOUNTER5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab2376c3b7c3ec0b44105ec1ed951bfb0',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter5h_45',['CSR_HPMCOUNTER5H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad489feaa5ad1feb00d3df71d3e5b0cac',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter6_46',['CSR_HPMCOUNTER6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa2f644a4f54ba3834bafa738208c0803',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter6h_47',['CSR_HPMCOUNTER6H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a438a65757b85f182dfb1f2a06c9ad520',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter7_48',['CSR_HPMCOUNTER7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a125c4d0051548dea9104808b7bee1316',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter7h_49',['CSR_HPMCOUNTER7H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6332d4ff090aa7c302d191219e846fff',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter8_50',['CSR_HPMCOUNTER8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acac87125f8c723cc5df4d4169a82852b',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter8h_51',['CSR_HPMCOUNTER8H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa8ce8fc8a57dd82872d02b4113249a77',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter9_52',['CSR_HPMCOUNTER9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab45ebb3bd861074a15cc2ad874756e8f',1,'neorv32_cpu_csr.h']]], + ['csr_5fhpmcounter9h_53',['CSR_HPMCOUNTER9H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acdf793b30919e7fa1b85995abe531a20',1,'neorv32_cpu_csr.h']]], + ['csr_5finstret_54',['CSR_INSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8144da8cd8691ac54aa0712685865b66',1,'neorv32_cpu_csr.h']]], + ['csr_5finstreth_55',['CSR_INSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b66978d76260283007d399fc735d153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmarchid_56',['CSR_MARCHID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad95cb95266533123447ff0e917f890e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcause_57',['CSR_MCAUSE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e14b57fee5376741634db7980a5005b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmconfigptr_58',['CSR_MCONFIGPTR',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0545d0921b3f90d037dbb25bc5fcc2f9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcounteren_59',['CSR_MCOUNTEREN',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1860dd9579906c67a3565063043dcf78',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_60',['CSR_MCOUNTINHIBIT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3ce1dc0e2810f0df78feaa1c607a5ca6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fcy_61',['CSR_MCOUNTINHIBIT_CY',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea201ac39b0eba389b0d02c3951a3311a3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm10_62',['CSR_MCOUNTINHIBIT_HPM10',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea9517cd32744c5064fa30780f911cd22e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm11_63',['CSR_MCOUNTINHIBIT_HPM11',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeacaf997fe8b912596224e2bb632e6a806',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm12_64',['CSR_MCOUNTINHIBIT_HPM12',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d866a4c815d8ba890a1e00ce9600486',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm13_65',['CSR_MCOUNTINHIBIT_HPM13',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead9f6c4eb4284ee82b9e8d0c79f62b3ed',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm14_66',['CSR_MCOUNTINHIBIT_HPM14',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa83c0688869b1c43de0c4474e940f987',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm15_67',['CSR_MCOUNTINHIBIT_HPM15',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0b547cb5876c0e7956e3d062e0784085',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm16_68',['CSR_MCOUNTINHIBIT_HPM16',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea68aba71ea77aba4005fb24a945ef38e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm17_69',['CSR_MCOUNTINHIBIT_HPM17',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea8d57acf13a086635a63bc13ccdf479b3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm18_70',['CSR_MCOUNTINHIBIT_HPM18',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa680d196d2ba0e403801a860bb9d8ce0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm19_71',['CSR_MCOUNTINHIBIT_HPM19',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3683e296caafe771b6dd57f4cf86f3dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm20_72',['CSR_MCOUNTINHIBIT_HPM20',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaeb4b1b6abafd22eec0764d5503878cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm21_73',['CSR_MCOUNTINHIBIT_HPM21',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1dc0276a5354c805ac56fd46c5037d38',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm22_74',['CSR_MCOUNTINHIBIT_HPM22',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf1b6153a0c664367bfefb78b2ca8b34e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm23_75',['CSR_MCOUNTINHIBIT_HPM23',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea85c0c2b2a5101380dec72516dda1a904',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm24_76',['CSR_MCOUNTINHIBIT_HPM24',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea74ec85a2e94aa0b9e8af29401ef7ecb1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm25_77',['CSR_MCOUNTINHIBIT_HPM25',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaee2b5a2b7bd7ac07dae45900bc2faf46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm26_78',['CSR_MCOUNTINHIBIT_HPM26',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea141a4a211c496d2af1c79d8e8e0c2a74',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm27_79',['CSR_MCOUNTINHIBIT_HPM27',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea46def851d4582b4bcec1f9d8bafd58db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm28_80',['CSR_MCOUNTINHIBIT_HPM28',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea33d0fd3378ec3a2fcc3c8738c6cd2f32',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm29_81',['CSR_MCOUNTINHIBIT_HPM29',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaa39882f7dad9b7e16b317c75bad31382',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm3_82',['CSR_MCOUNTINHIBIT_HPM3',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeaf7020159e0ba346561bfba101d22c752',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm30_83',['CSR_MCOUNTINHIBIT_HPM30',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f45818fa4cb9033a3093987fa8515c7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm31_84',['CSR_MCOUNTINHIBIT_HPM31',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea1da1186ef2f4e7297a4fecaaccdc1d05',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm4_85',['CSR_MCOUNTINHIBIT_HPM4',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea40427b799da049413c5536afa623c61d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm5_86',['CSR_MCOUNTINHIBIT_HPM5',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea2769a6e6a75f2f903523e4e95a899bb6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm6_87',['CSR_MCOUNTINHIBIT_HPM6',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfead55b6af15841617d7dca3ab4fab893db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm7_88',['CSR_MCOUNTINHIBIT_HPM7',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea3b3571fceb687da2d3807b0e59bdf7ab',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm8_89',['CSR_MCOUNTINHIBIT_HPM8',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfeabd21344124eda4402523203185a58b8a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fhpm9_90',['CSR_MCOUNTINHIBIT_HPM9',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea0f207455df0fed75fa68ba49c435889a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcountinhibit_5fir_91',['CSR_MCOUNTINHIBIT_IR',['../neorv32__cpu__csr_8h.html#ab6886ca6858d57854495986ef9b5cbfea5f182f39f9a4b871a097a51e57865bfa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycle_92',['CSR_MCYCLE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a32c22641ed66c6d20902306a2b1fad77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmcycleh_93',['CSR_MCYCLEH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a28fcfd06ca1012c19cf053e57689687b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfg_94',['CSR_MENVCFG',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9c55619ffb05e84b7210e2d47326fa98',1,'neorv32_cpu_csr.h']]], + ['csr_5fmenvcfgh_95',['CSR_MENVCFGH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a46b8d3c288cbbfbf5a0af6e5cd8c5bc8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmepc_96',['CSR_MEPC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5d60a25a66754066589e8facb7d41153',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhartid_97',['CSR_MHARTID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6ba48e2306ae92f498552e1ea04d6790',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10_98',['CSR_MHPMCOUNTER10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a575e5342d8ec304c32dbbe99d6fd6c0f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter10h_99',['CSR_MHPMCOUNTER10H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1e41d2b27d7e8da14871852d81123cfd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11_100',['CSR_MHPMCOUNTER11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8840b3d4f45453fc96813ccb369a68e5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter11h_101',['CSR_MHPMCOUNTER11H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fd76fcfc0d0dd47e112786bea5e4071',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12_102',['CSR_MHPMCOUNTER12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1328a226d36d23cc81740397bde47a4e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter12h_103',['CSR_MHPMCOUNTER12H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a332ec2b0740f8e899a1b2ec86f7ee9f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13_104',['CSR_MHPMCOUNTER13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9bdd102877ff50d38c86c3d741aeb4b0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter13h_105',['CSR_MHPMCOUNTER13H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5de5c5a036dc594a554d37df9ccf657d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14_106',['CSR_MHPMCOUNTER14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49adae22d860d8162e15120051951e45229',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter14h_107',['CSR_MHPMCOUNTER14H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac65bab6fd71439600c8fc549171251fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15_108',['CSR_MHPMCOUNTER15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a20400929087fabba410a098667d2d4ff',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter15h_109',['CSR_MHPMCOUNTER15H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af609807e2917f73e27e5f27b38a0fa46',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3_110',['CSR_MHPMCOUNTER3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae0a96f499dcde474af6ee620fbb1ebdc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter3h_111',['CSR_MHPMCOUNTER3H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a252980a4da90c1f5c1ef85d164f72f25',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4_112',['CSR_MHPMCOUNTER4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9b84bd948dd52a7779b5fd16beddaab9',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter4h_113',['CSR_MHPMCOUNTER4H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e9cfbf3c2828dd4bd92d2b8a1c99f85',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5_114',['CSR_MHPMCOUNTER5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af15d389bb8f91c989df488d231666394',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter5h_115',['CSR_MHPMCOUNTER5H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7648dd0a47007d44a14e95ba47726599',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6_116',['CSR_MHPMCOUNTER6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af65b9e99b9cadb3cb8d37f97cdbfeb9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter6h_117',['CSR_MHPMCOUNTER6H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a49b7bc2df67a6c73a68757de9b218f77',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7_118',['CSR_MHPMCOUNTER7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a919f39b0d299feb80403b42a466de444',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter7h_119',['CSR_MHPMCOUNTER7H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac0183bb6f357ed33136493ae7ded987a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8_120',['CSR_MHPMCOUNTER8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a5a4cde90c547e913bddc719b3ab75e79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter8h_121',['CSR_MHPMCOUNTER8H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a9e75518df7d14a009e3a0d5588641ddc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9_122',['CSR_MHPMCOUNTER9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a18c2a249f1f7852f42f9e10dc59d46bb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmcounter9h_123',['CSR_MHPMCOUNTER9H',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7341886c7a4aed6fc7d8677c016a2cb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent10_124',['CSR_MHPMEVENT10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23850b1804966cde2c1e84cde752d512',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent11_125',['CSR_MHPMEVENT11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a7fb1de2019dd2b548084d5ca1630efbf',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent12_126',['CSR_MHPMEVENT12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad648b5ece209d47e9484fd7aa83e8e5f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent13_127',['CSR_MHPMEVENT13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8c31899b81bb5dba9b92a0f0ca71aea6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent14_128',['CSR_MHPMEVENT14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a964a6a50d0138447fad47e9c982a7ba4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent15_129',['CSR_MHPMEVENT15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06dfdeed757606529e4a99c033691b54',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent3_130',['CSR_MHPMEVENT3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4a93ac5ab276cfd2f9cd296c8ce1bff6',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent4_131',['CSR_MHPMEVENT4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ab5f998725e002ffc2ff516ee973fe459',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent5_132',['CSR_MHPMEVENT5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2524659ca2785af51af7acf9cd560a9d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent6_133',['CSR_MHPMEVENT6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a1cfa1e3bc3c8a1c9a86c251a510d11cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent7_134',['CSR_MHPMEVENT7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a2e53e6e01ca8d1b801f6dfba602f3f59',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent8_135',['CSR_MHPMEVENT8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad6296ca83bbe1280624f3c21adbd8a79',1,'neorv32_cpu_csr.h']]], + ['csr_5fmhpmevent9_136',['CSR_MHPMEVENT9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af6727a9bdd60ccf020812095b7396632',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_137',['CSR_MIE',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acc0f9f5f3b5702f1b57f2ba3b6b62610',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq0e_138',['CSR_MIE_FIRQ0E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a99f43f8bbfb29fba6224f081c363ac7d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq10e_139',['CSR_MIE_FIRQ10E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33affcb52dc57bb8c0cb1e7d3c1392d544a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq11e_140',['CSR_MIE_FIRQ11E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33af058342854a0becd3bcc33877d9244cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq12e_141',['CSR_MIE_FIRQ12E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a41f91a37f7e0c75c783312af6a72e943',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq13e_142',['CSR_MIE_FIRQ13E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a134ed02c7293008b21b1df472be8f11f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq14e_143',['CSR_MIE_FIRQ14E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a864d135708530016cfc52a65a1e4d79b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq15e_144',['CSR_MIE_FIRQ15E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33aa2dfa1183af312de2959dadd217fddc1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq1e_145',['CSR_MIE_FIRQ1E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ac1e1d44becec1b393f79a118ed3d8beb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq2e_146',['CSR_MIE_FIRQ2E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afc805280e20ffface116ca61e11645f7',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq3e_147',['CSR_MIE_FIRQ3E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a666066099d6cebadbef21d81c179e8db',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq4e_148',['CSR_MIE_FIRQ4E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a592939f1b7d79097f7f13d6ab0c268dc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq5e_149',['CSR_MIE_FIRQ5E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3079a8fbf3b8e376865bff76f2173698',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq6e_150',['CSR_MIE_FIRQ6E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a96315d6b5b9531bcbc1e78a3c9ab166a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq7e_151',['CSR_MIE_FIRQ7E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3d9d729940170609affbc6813054ebe8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq8e_152',['CSR_MIE_FIRQ8E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a396c6c4b425b3fff598e2f846052f98e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5ffirq9e_153',['CSR_MIE_FIRQ9E',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a06fdb61dab31c3490da6c37d47914f19',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmeie_154',['CSR_MIE_MEIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33ae8e4f0ee46abbbb3361de035a57b8324',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmsie_155',['CSR_MIE_MSIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33afd2f1c78c442c8c29ab075cacee0a27a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmie_5fmtie_156',['CSR_MIE_MTIE',['../neorv32__cpu__csr_8h.html#a0e9714690687badee43180c3cb62be33a3658e8663e94cd8eaa7201b7a850d083',1,'neorv32_cpu_csr.h']]], + ['csr_5fmimpid_157',['CSR_MIMPID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a06d39cf0f13d6401dcf426d56149c8cd',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstret_158',['CSR_MINSTRET',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a98f5e2cf2d5dbb0125a222b0065c86eb',1,'neorv32_cpu_csr.h']]], + ['csr_5fminstreth_159',['CSR_MINSTRETH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49afffb28b62b9baa127ae3bad919208988',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_160',['CSR_MIP',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49addb485275c954d1181d5bd4e4609082c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq0p_161',['CSR_MIP_FIRQ0P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba28a85ad8bd4c30fd3a91298dfa4fdb00',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq10p_162',['CSR_MIP_FIRQ10P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b50cfa8be461b088ea8506ce4c741ba',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq11p_163',['CSR_MIP_FIRQ11P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba69ea0d3d76d4cec398f3b96959cc3544',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq12p_164',['CSR_MIP_FIRQ12P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba03edd398920b817150d29107c0b40792',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq13p_165',['CSR_MIP_FIRQ13P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba14da6a2a962bf82970638a948ffbc570',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq14p_166',['CSR_MIP_FIRQ14P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad1e5e452a9c37561308765431f0260d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq15p_167',['CSR_MIP_FIRQ15P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba12da8c32d38d5a3539a0b766718bfd2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq1p_168',['CSR_MIP_FIRQ1P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba2b577b1da1074c29ad58005af1f91d52',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq2p_169',['CSR_MIP_FIRQ2P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21badf45c5a135431f958fa63574c1dfac6e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq3p_170',['CSR_MIP_FIRQ3P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba7512bb6c4841ddd477422b49ebb2a155',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq4p_171',['CSR_MIP_FIRQ4P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bab6421f242bb8a487a986346e11196eb8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq5p_172',['CSR_MIP_FIRQ5P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baaa55d19f9a47889bc364c94bda04b677',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq6p_173',['CSR_MIP_FIRQ6P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baffa7342631aa0526aaa44c0c549b1f3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq7p_174',['CSR_MIP_FIRQ7P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baad691486001a68f2375dcf5793ee795a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq8p_175',['CSR_MIP_FIRQ8P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21baf5bbd23d4f311f640db42e9015f87580',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5ffirq9p_176',['CSR_MIP_FIRQ9P',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21bad94c9691ce59b97fcfec14d345046c3e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmeip_177',['CSR_MIP_MEIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1d761ef98f88c40509168ac66b7a4872',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmsip_178',['CSR_MIP_MSIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba1470cfe04f9d3ce45b7156b2a7fae159',1,'neorv32_cpu_csr.h']]], + ['csr_5fmip_5fmtip_179',['CSR_MIP_MTIP',['../neorv32__cpu__csr_8h.html#a6301c554bf831b97fc28f9984a1ec21ba344943c62922561378d33ec51ac236e4',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_180',['CSR_MISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ade079242596ce14ce1ba9842ed29b84c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fa_181',['CSR_MISA_A',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca89412df9f99d2a0ddc4665446397f1a2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fb_182',['CSR_MISA_B',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cadd469404a928e012a298773ec46926ad',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fc_183',['CSR_MISA_C',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca886699013158c74810598fa2fd6b07fa',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fd_184',['CSR_MISA_D',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca1dd1be1071450f9b00a817bce19fa665',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fe_185',['CSR_MISA_E',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0ac798fd19cb7dbe1146afecda448fec',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5ff_186',['CSR_MISA_F',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca9ec2cae2b948de1043540a4ca1665c40',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fi_187',['CSR_MISA_I',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca6091fd2c7ae38ad33be68a0fdfa50cca',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fm_188',['CSR_MISA_M',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca317a631e4598532f5bffe8fb93aff94b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5fhi_189',['CSR_MISA_MXL_HI',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cafb3e4b08b87f5c161468a9e58ade12cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fmxl_5flo_190',['CSR_MISA_MXL_LO',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cab5a55e97b8511f42fe68559a38f7f138',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fu_191',['CSR_MISA_U',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830cacd9d71e674d3a6d04984b6df706d9deb',1,'neorv32_cpu_csr.h']]], + ['csr_5fmisa_5fx_192',['CSR_MISA_X',['../neorv32__cpu__csr_8h.html#afed7f00bbb39468f038d9ca6fbac830ca0b119a20be29fcae8fecf2a81c60d193',1,'neorv32_cpu_csr.h']]], + ['csr_5fmscratch_193',['CSR_MSCRATCH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae29976bb072639975ad0cdb985c7f004',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_194',['CSR_MSTATUS',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad0e5de789d6390f750b8af03cdd15450',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmie_195',['CSR_MSTATUS_MIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ae2603e365b3f1abfb46d53ed6b13dc56',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpie_196',['CSR_MSTATUS_MPIE',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485aaa1d482f828ac9cafc40fcfc298bec34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fh_197',['CSR_MSTATUS_MPP_H',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a8067c609c2360cab3bafa3c43e03dbf0',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmpp_5fl_198',['CSR_MSTATUS_MPP_L',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485af0ae9aca74144aa7dbdf656f71cc5c97',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5fmprv_199',['CSR_MSTATUS_MPRV',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485a75cefdbdef36b7fc248765b27c606a44',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatus_5ftw_200',['CSR_MSTATUS_TW',['../neorv32__cpu__csr_8h.html#a76b70a2334131e7589d84c1ee96de485ac94a070f3fe7962e8c49a81545cacf2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmstatush_201',['CSR_MSTATUSH',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ac2541060307369b2031e9ec07bbd0067',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtinst_202',['CSR_MTINST',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a4f229c169ada239033a1383412ce58c8',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtval_203',['CSR_MTVAL',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a76d30359e3b54197fb53f9939734cf1e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmtvec_204',['CSR_MTVEC',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa632d218400268df6dc6b289ff088d21',1,'neorv32_cpu_csr.h']]], + ['csr_5fmvendorid_205',['CSR_MVENDORID',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af5c5a21909aaca2b57f9a15f4bac246b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_206',['CSR_MXISA',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a396847bcf1634a1602ab117bfb57bdd2',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastmul_207',['CSR_MXISA_FASTMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a48e57689f8a5b51d9ee9d648da7efc64',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5ffastshift_208',['CSR_MXISA_FASTSHIFT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ad5ac9e2188757e6c42c159f0c5887868',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fis_5fsim_209',['CSR_MXISA_IS_SIM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a9b121ec0ad6271b6e07658f861015f6a',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5frfhwrst_210',['CSR_MXISA_RFHWRST',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6843c660d75f33e4252c7fccd4565a2d',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdext_211',['CSR_MXISA_SDEXT',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab6aec595e6aa5ce7c98c7806d23d7af5',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsdtrig_212',['CSR_MXISA_SDTRIG',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a59eae4272528f589f299ef9cce45af5b',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fsmpmp_213',['CSR_MXISA_SMPMP',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6938948290d86b0ad25923f35d6c86d3',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzfinx_214',['CSR_MXISA_ZFINX',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a56ec3195d0d27f362f58fadb2e037ed1',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicntr_215',['CSR_MXISA_ZICNTR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a42a3b78195741af4b6aeeb98cbea46fe',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicond_216',['CSR_MXISA_ZICOND',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ab1f289cfaa9f54f7831a2abcdf9fca2e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzicsr_217',['CSR_MXISA_ZICSR',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387accf1dd12be89e45df1423a5600789f2c',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzifencei_218',['CSR_MXISA_ZIFENCEI',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a6979d4389ed9f8605d338fc616d29f0e',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzihpm_219',['CSR_MXISA_ZIHPM',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387ac13e6883af3a9da18057462239b9fb34',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzmmul_220',['CSR_MXISA_ZMMUL',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387a79b2b4b20e08ad31b50724a7a27fb20f',1,'neorv32_cpu_csr.h']]], + ['csr_5fmxisa_5fzxcfu_221',['CSR_MXISA_ZXCFU',['../neorv32__cpu__csr_8h.html#af05490a8af176ab4ba945d327d448387af422ae3b5caba59e33a29b5d069597e0',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr0_222',['CSR_PMPADDR0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a8941071db6145d34fff842249c0dcb9f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr1_223',['CSR_PMPADDR1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6a2933f3a1fa243de02db8a795e3ca41',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr10_224',['CSR_PMPADDR10',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad97b6fe934a3bed6b02d0c8d81165d60',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr11_225',['CSR_PMPADDR11',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a3e5708c0f79cf58ae761b6bb8c2a4383',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr12_226',['CSR_PMPADDR12',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a23026793ee53c8d55d23f63195368a6b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr13_227',['CSR_PMPADDR13',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a30879e88b250d3e94d9d9e728ffcc2cc',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr14_228',['CSR_PMPADDR14',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a91a8b5008b4e08ab34c1516e21bf0ba8',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr15_229',['CSR_PMPADDR15',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a6879b4bf5d2db92d236b9091df4841f2',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr2_230',['CSR_PMPADDR2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aa0b8c0561e8a778dce9c3b86499ffc50',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr3_231',['CSR_PMPADDR3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a89bad989197e9358563557311b3c97e9',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr4_232',['CSR_PMPADDR4',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ace4529c53ad2d46767f86d920eada507',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr5_233',['CSR_PMPADDR5',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ad9e78f71409fd7783cc2ae7c28b5e42c',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr6_234',['CSR_PMPADDR6',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af57b5b7b57cd6e8b3489a27dfd702444',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr7_235',['CSR_PMPADDR7',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49ae8ea19cf3e527dbc0d36a43dfd1b7346',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr8_236',['CSR_PMPADDR8',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aec68bf7e26e44170c24599f7c6a8365b',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpaddr9_237',['CSR_PMPADDR9',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a54d38c8cf364d886eb7ac64463eedf77',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg0_238',['CSR_PMPCFG0',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af1a79349e46a4829af78d2cdfd0dc44f',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg1_239',['CSR_PMPCFG1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a22eea318ec1ac72cc14e133b71ef4b16',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg2_240',['CSR_PMPCFG2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a0c9492f6b956f088847f72b28e7b1446',1,'neorv32_cpu_csr.h']]], + ['csr_5fpmpcfg3_241',['CSR_PMPCFG3',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a067ed3778590ae97dc9b16069f0ed850',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata1_242',['CSR_TDATA1',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49a80eab0e17f5fe41edde485044674dc57',1,'neorv32_cpu_csr.h']]], + ['csr_5ftdata2_243',['CSR_TDATA2',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49acf336638697242b691b691dc56b9aadc',1,'neorv32_cpu_csr.h']]], + ['csr_5ftinfo_244',['CSR_TINFO',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49af67c819c104f7e3ec34f2cbb847cf83b',1,'neorv32_cpu_csr.h']]], + ['csr_5ftselect_245',['CSR_TSELECT',['../neorv32__cpu__csr_8h.html#ac065a8cc32eed9a69ea1798492a69f49aaae2f0b2e3f5a31dff933868873f6d5d',1,'neorv32_cpu_csr.h']]] +]; diff --git a/sw/search/enumvalues_1.js b/sw/search/enumvalues_1.js new file mode 100644 index 0000000000..e7a8b04b0c --- /dev/null +++ b/sw/search/enumvalues_1.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['dma_5fctrl_5fauto_0',['DMA_CTRL_AUTO',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5aeeb05d6365d94d92808df2490daa3b',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fbusy_1',['DMA_CTRL_BUSY',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a8e5ff34ac48eea4b352378bb2af47bcb',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fdone_2',['DMA_CTRL_DONE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a0d51df1bb87dc54d331891c5db787bcc',1,'neorv32_dma.h']]], + ['dma_5fctrl_5fen_3',['DMA_CTRL_EN',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a5f39deea0212f45423243c8100c40838',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5frd_4',['DMA_CTRL_ERROR_RD',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a539609fc4d80867b3eb98c78206f5f96',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ferror_5fwr_5',['DMA_CTRL_ERROR_WR',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4af7e038b0b0e3ac64f5a2c598eb9c5101',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffence_6',['DMA_CTRL_FENCE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4ace9fdcdfa8784abad30e033c273e7d00',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5flsb_7',['DMA_CTRL_FIRQ_SEL_LSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aaf040e663494b39b890d7171d0a584b9',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5fsel_5fmsb_8',['DMA_CTRL_FIRQ_SEL_MSB',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4a3eba1f7868f0c985effb69785ced011a',1,'neorv32_dma.h']]], + ['dma_5fctrl_5ffirq_5ftype_9',['DMA_CTRL_FIRQ_TYPE',['../neorv32__dma_8h.html#a6716eddb145b80ad38799da3b87cb2a4aeaf5ee8f6a84668aa15cd3e21f076afe',1,'neorv32_dma.h']]], + ['dma_5fstatus_5fbusy_10',['DMA_STATUS_BUSY',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bad0f66e962296f5451d73dc1cae1fdc0d',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5frd_11',['DMA_STATUS_ERR_RD',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74baed7242b847e3cc8cf20d7da99f9b1492',1,'neorv32_dma.h']]], + ['dma_5fstatus_5ferr_5fwr_12',['DMA_STATUS_ERR_WR',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74ba038b6ef194c3db158cb59168f763a7b8',1,'neorv32_dma.h']]], + ['dma_5fstatus_5fidle_13',['DMA_STATUS_IDLE',['../neorv32__dma_8h.html#a002cb188ea5156df0ba282e239a6e74bac9c380cd5729386e5f5673e20b86326f',1,'neorv32_dma.h']]], + ['dma_5fttype_5fdst_5finc_14',['DMA_TTYPE_DST_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9abb1293915b076e5d37be6724b44ab0da',1,'neorv32_dma.h']]], + ['dma_5fttype_5fendian_15',['DMA_TTYPE_ENDIAN',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a37ea8ef1e6b342db330d3885545fc802',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5flsb_16',['DMA_TTYPE_NUM_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a8dba4160c033c763f5102928c471e450',1,'neorv32_dma.h']]], + ['dma_5fttype_5fnum_5fmsb_17',['DMA_TTYPE_NUM_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a61553eee00ed2382565bf826074c44bd',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5flsb_18',['DMA_TTYPE_QSEL_LSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9afcfdedeca4c4a1def4905660811e31e2',1,'neorv32_dma.h']]], + ['dma_5fttype_5fqsel_5fmsb_19',['DMA_TTYPE_QSEL_MSB',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4217c9a8ac4ccc52bb45944f30a598c5',1,'neorv32_dma.h']]], + ['dma_5fttype_5fsrc_5finc_20',['DMA_TTYPE_SRC_INC',['../neorv32__dma_8h.html#a33187c5a074d62b46d2262e352edb8d9a4b99a30b851851f3388dd4e77effacec',1,'neorv32_dma.h']]] +]; diff --git a/sw/search/enumvalues_2.js b/sw/search/enumvalues_2.js new file mode 100644 index 0000000000..e6f7c9021e --- /dev/null +++ b/sw/search/enumvalues_2.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['error_5fchecksum_0',['ERROR_CHECKSUM',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a471ebe6c0766abc6fa4e82a09bfdb985',1,'bootloader.c']]], + ['error_5fflash_1',['ERROR_FLASH',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a684d6723fa25e7651e13d99fb249363c',1,'bootloader.c']]], + ['error_5fsignature_2',['ERROR_SIGNATURE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088ad41014563cb3ca69ab69b94d43e97caa',1,'bootloader.c']]], + ['error_5fsize_3',['ERROR_SIZE',['../bootloader_8c.html#aa0c639898508ff8e4fab6290101f3088a2d77ed1c715fb969a1faa01c71625f2d',1,'bootloader.c']]], + ['exe_5foffset_5fchecksum_4',['EXE_OFFSET_CHECKSUM',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febabc27a855096a70dca0f8bc148a123be4',1,'bootloader.c']]], + ['exe_5foffset_5fdata_5',['EXE_OFFSET_DATA',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febaea032c54a21057710ef2021638972ce6',1,'bootloader.c']]], + ['exe_5foffset_5fsignature_6',['EXE_OFFSET_SIGNATURE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2feba61100996f309c45b8b628ade2e3acc7f',1,'bootloader.c']]], + ['exe_5foffset_5fsize_7',['EXE_OFFSET_SIZE',['../bootloader_8c.html#a165a347c51d8aae06a564a2f297f2febacc430caa4bff2fef4568c757893fe2fe',1,'bootloader.c']]], + ['exe_5fstream_5fflash_8',['EXE_STREAM_FLASH',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83a98526cd8f81d570c57d98193b32cf114',1,'bootloader.c']]], + ['exe_5fstream_5fuart_9',['EXE_STREAM_UART',['../bootloader_8c.html#abcbf77626fdd0b475d245f836eab7a83ab149261ddf3f08e44e9d2538e384f58f',1,'bootloader.c']]] +]; diff --git a/sw/search/enumvalues_3.js b/sw/search/enumvalues_3.js new file mode 100644 index 0000000000..0df0a5b234 --- /dev/null +++ b/sw/search/enumvalues_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flash_5fsreg_5fbusy_0',['FLASH_SREG_BUSY',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa133cd87673ce9a612da494583e03dae9',1,'bootloader.c']]], + ['flash_5fsreg_5fwel_1',['FLASH_SREG_WEL',['../bootloader_8c.html#a97299f563ebc1fca4c663b025a15136fa22e8c983d74430ea0930e37781e88bf9',1,'bootloader.c']]] +]; diff --git a/sw/search/enumvalues_4.js b/sw/search/enumvalues_4.js new file mode 100644 index 0000000000..8d51681688 --- /dev/null +++ b/sw/search/enumvalues_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['gptmr_5fctrl_5fen_0',['GPTMR_CTRL_EN',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988abbfa7abcbd80b9c47e83e23e5cefaf90',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fclr_1',['GPTMR_CTRL_IRQ_CLR',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988aadb663ad9a0dfd37fc65dffc1a289b38',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5firq_5fpnd_2',['GPTMR_CTRL_IRQ_PND',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a3a868dc710ab9add083137e4e3fe888a',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fmode_3',['GPTMR_CTRL_MODE',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a473870880c0eca71578d6969e816af43',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc0_4',['GPTMR_CTRL_PRSC0',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988ae4716a7a9e356484a8e478f07920cde3',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc1_5',['GPTMR_CTRL_PRSC1',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a1e1e8e516fa4918441e3c77153940298',1,'neorv32_gptmr.h']]], + ['gptmr_5fctrl_5fprsc2_6',['GPTMR_CTRL_PRSC2',['../neorv32__gptmr_8h.html#a135b0750d4afed16e5867134e3843988a185861fbdc5f276735481237ad844833',1,'neorv32_gptmr.h']]] +]; diff --git a/sw/search/enumvalues_5.js b/sw/search/enumvalues_5.js new file mode 100644 index 0000000000..8580a871a3 --- /dev/null +++ b/sw/search/enumvalues_5.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['hpmcnt_5fevent_5fbranch_0',['HPMCNT_EVENT_BRANCH',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea9e1e2b50352b2555e9c64e76776919a6',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fbranched_1',['HPMCNT_EVENT_BRANCHED',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea0f15c5a824cb1678423ac4ef72a5f4f5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcompr_2',['HPMCNT_EVENT_COMPR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea685ed663611d988702ec59c254eb61dd',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fcy_3',['HPMCNT_EVENT_CY',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea2b683572525adc02ce0910031cfea914',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fir_4',['HPMCNT_EVENT_IR',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaab438295e5f00ffe4c2457a54ee9bfc4',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fload_5',['HPMCNT_EVENT_LOAD',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea1a06f216e1a12afa0b90d6e1218b3c91',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fstore_6',['HPMCNT_EVENT_STORE',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea6a942852e3cd85616a63addb8e9d76f2',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftm_7',['HPMCNT_EVENT_TM',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea578ef6fc107c22b5cb7be5950f695640',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5ftrap_8',['HPMCNT_EVENT_TRAP',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea3a4f5bf9251def87a71162dbcf9043c5',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5falu_9',['HPMCNT_EVENT_WAIT_ALU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeaffbb04d0053ebd079c6cacb4e5e7ed6b',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5fdis_10',['HPMCNT_EVENT_WAIT_DIS',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfeabcb123b5b150b4413e5fd48475faab27',1,'neorv32_cpu_csr.h']]], + ['hpmcnt_5fevent_5fwait_5flsu_11',['HPMCNT_EVENT_WAIT_LSU',['../neorv32__cpu__csr_8h.html#a5cb925a3e41efd5e767bb39b3ee60cfea67a59934bc66bc7ccf82d24fe8a18a3b',1,'neorv32_cpu_csr.h']]] +]; diff --git a/sw/search/enumvalues_6.js b/sw/search/enumvalues_6.js new file mode 100644 index 0000000000..9f98fd6357 --- /dev/null +++ b/sw/search/enumvalues_6.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['neoled_5fctrl_5fbufs_5f0_0',['NEOLED_CTRL_BUFS_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3bb5d0d1f78cebccbc8620a0194f43b8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f1_1',['NEOLED_CTRL_BUFS_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aed0a878e73ad501bed3bbe6905974368',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f2_2',['NEOLED_CTRL_BUFS_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ae7b9d45c4ef69ca15fa13aa107e68156',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fbufs_5f3_3',['NEOLED_CTRL_BUFS_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412ac1922a5311e91a74710eddbf86ccc1c1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fen_4',['NEOLED_CTRL_EN',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412af97ab77b33a250d87025c3dd3a21fea7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5firq_5fconf_5',['NEOLED_CTRL_IRQ_CONF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a37421074b86a260b276534b7c4949339',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fmode_6',['NEOLED_CTRL_MODE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf6779cbeae87ab55efc9573932fc865',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc0_7',['NEOLED_CTRL_PRSC0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a142ed3fd65e01f853666a1169f920ad0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc1_8',['NEOLED_CTRL_PRSC1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0f4178d81ec6fe9a8b0e30230d318a91',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fprsc2_9',['NEOLED_CTRL_PRSC2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3d8d54c05080fddb16df4176527bafa8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5fstrobe_10',['NEOLED_CTRL_STROBE',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a436ad310b025bd3000af37986c193de5',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f0_11',['NEOLED_CTRL_T_ONE_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a770df505d47353f6c9289059c416d9c8',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f1_12',['NEOLED_CTRL_T_ONE_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412aea15666ad4bb9eb1eba5dc9ed96114a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f2_13',['NEOLED_CTRL_T_ONE_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a4d362af8c630823b5104401a9c7d734e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f3_14',['NEOLED_CTRL_T_ONE_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a369f36e73783c2923d07ca333081a4a6',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fone_5fh_5f4_15',['NEOLED_CTRL_T_ONE_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0c15850d0ab005b075f1a317646e18b1',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f0_16',['NEOLED_CTRL_T_TOT_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a44d8f064decabc690ed1f092be2b049b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f1_17',['NEOLED_CTRL_T_TOT_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412addf4d6d1fd09f145d8aa497c4a7479c2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f2_18',['NEOLED_CTRL_T_TOT_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a42d09d42d39fc0eb2697853c99f4d5b0',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f3_19',['NEOLED_CTRL_T_TOT_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acbcd3c046b528e1900e86428da231df2',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5ftot_5f4_20',['NEOLED_CTRL_T_TOT_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a3f1a0ad71d9fd892829ec0246be343b3',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f0_21',['NEOLED_CTRL_T_ZERO_H_0',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a7285e332ec7c2b3aeb34290e3e60ded7',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f1_22',['NEOLED_CTRL_T_ZERO_H_1',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a1ef56b35c966786c42f2a2f800e30eae',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f2_23',['NEOLED_CTRL_T_ZERO_H_2',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a9d9411382d943c1659b6b761c462319b',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f3_24',['NEOLED_CTRL_T_ZERO_H_3',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412abf2ea111a4ff34b6cb4dd987c5692f5c',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ft_5fzero_5fh_5f4_25',['NEOLED_CTRL_T_ZERO_H_4',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a0d5d01b8d30119bb86c1d079f7d5a9ad',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fbusy_26',['NEOLED_CTRL_TX_BUSY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a55da98b018c7cc32cd1e80087ed9018e',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fempty_27',['NEOLED_CTRL_TX_EMPTY',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a23937f0a728da197590e1d383507cb23',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5ffull_28',['NEOLED_CTRL_TX_FULL',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412acfac5269688b2a03794dc17b11f1b983',1,'neorv32_neoled.h']]], + ['neoled_5fctrl_5ftx_5fhalf_29',['NEOLED_CTRL_TX_HALF',['../neorv32__neoled_8h.html#ab99c7fed050816eae0fa0315562e0412a16c09df2784cfb6fafffaeaf245f1b73',1,'neorv32_neoled.h']]] +]; diff --git a/sw/search/enumvalues_7.js b/sw/search/enumvalues_7.js new file mode 100644 index 0000000000..c6c6b72de6 --- /dev/null +++ b/sw/search/enumvalues_7.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['onewire_5fctrl_5fbusy_0',['ONEWIRE_CTRL_BUSY',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aac8933755e80d72e1e9c293198d831b9',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv0_1',['ONEWIRE_CTRL_CLKDIV0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acdfca08f34d7379aaf8505ba3425c6f5',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv1_2',['ONEWIRE_CTRL_CLKDIV1',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831afa1476a5e04eb4eabf4d7a595eca2df9',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv2_3',['ONEWIRE_CTRL_CLKDIV2',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aec9f056072e1db747e74a5c695d2a1df',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv3_4',['ONEWIRE_CTRL_CLKDIV3',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab8600bd09d74e39869259881b84ebfbf',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv4_5',['ONEWIRE_CTRL_CLKDIV4',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a32af8c86e7166e02e801727bd261c179',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv5_6',['ONEWIRE_CTRL_CLKDIV5',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a789d65fd9b0ab17bffd0d6de9d2e132a',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv6_7',['ONEWIRE_CTRL_CLKDIV6',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a27f040454bebc6218b490f7160ea2312',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fclkdiv7_8',['ONEWIRE_CTRL_CLKDIV7',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a8b19096f72ef96a7597fda9be625ed40',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fen_9',['ONEWIRE_CTRL_EN',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831ab87882c202f80185278c69e482f147da',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fpresence_10',['ONEWIRE_CTRL_PRESENCE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a92e1ff9fa10319d64c8d2c6a6d61b37e',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc0_11',['ONEWIRE_CTRL_PRSC0',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831abfed6417c3abd7ef94cd18a3b32c4393',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fprsc1_12',['ONEWIRE_CTRL_PRSC1',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831aee1e24261e263c70bf2e36dcafc9dc74',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5fsense_13',['ONEWIRE_CTRL_SENSE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831af992c94d0b9a7b7b92a5a23366b9a8c6',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftrig_5fbit_14',['ONEWIRE_CTRL_TRIG_BIT',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a7ecbccef9e77e68caf22ed2c416e1f77',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftrig_5fbyte_15',['ONEWIRE_CTRL_TRIG_BYTE',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831acfd8a56f668ca55dbbaa1714b1235dfe',1,'neorv32_onewire.h']]], + ['onewire_5fctrl_5ftrig_5frst_16',['ONEWIRE_CTRL_TRIG_RST',['../neorv32__onewire_8h.html#ade1a01f533843880868ec7496d116831a98624ec944e0413a208cdf54bbbf4c75',1,'neorv32_onewire.h']]], + ['onewire_5fdata_5flsb_17',['ONEWIRE_DATA_LSB',['../neorv32__onewire_8h.html#ae770490afa8662fb8577065531d51368a6ad35475e3f80a8c68ce0caa9c3754a5',1,'neorv32_onewire.h']]], + ['onewire_5fdata_5fmsb_18',['ONEWIRE_DATA_MSB',['../neorv32__onewire_8h.html#ae770490afa8662fb8577065531d51368af967429634efb019ada46bf75f373aa3',1,'neorv32_onewire.h']]] +]; diff --git a/sw/search/enumvalues_8.js b/sw/search/enumvalues_8.js new file mode 100644 index 0000000000..6cd1083c5d --- /dev/null +++ b/sw/search/enumvalues_8.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['pmp_5fna4_0',['PMP_NA4',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5aae0e0c33b0d034cb50286239f955d892',1,'neorv32_cpu_csr.h']]], + ['pmp_5fnapot_1',['PMP_NAPOT',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5ad555e9dfc0c00612bdea623617ff2820',1,'neorv32_cpu_csr.h']]], + ['pmp_5foff_2',['PMP_OFF',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a003ccfae4aae1dad4fd65d5d4c7737c4',1,'neorv32_cpu_csr.h']]], + ['pmp_5ftor_3',['PMP_TOR',['../neorv32__cpu__csr_8h.html#a8f2418fb5e2175f35ee2362469ce01f5a629a81a205abee94bad9d5bb5dfa26b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5flsb_4',['PMPCFG_A_LSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaae1e6440956ad6b7cbf6062aa50f43b1',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fa_5fmsb_5',['PMPCFG_A_MSB',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa67ad3243eeb74f86a01efbade76f21e4',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fl_6',['PMPCFG_L',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa59c294bc43d2117bb55e301eec683f14',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fr_7',['PMPCFG_R',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaad3aca82a2ab57364e83f677d3d4f71a6',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fw_8',['PMPCFG_W',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaa7689905760f917499b1151cced384d2f',1,'neorv32_cpu_csr.h']]], + ['pmpcfg_5fx_9',['PMPCFG_X',['../neorv32__cpu__csr_8h.html#abc0e8daad1e9beda4d9950452cc930eaaec94712deafba09c0cf956c6fd68fa8d',1,'neorv32_cpu_csr.h']]], + ['pwm_5fctrl_5fen_10',['PWM_CTRL_EN',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7dafb99fba508460086efdd495d4649c65a',1,'neorv32_pwm.h']]], + ['pwm_5fctrl_5fprsc0_11',['PWM_CTRL_PRSC0',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7da01ab6de6ac34be1ed68f22e17acbe274',1,'neorv32_pwm.h']]], + ['pwm_5fctrl_5fprsc1_12',['PWM_CTRL_PRSC1',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7daa6fca8a4eecfb99b8f0fa99e187e30bb',1,'neorv32_pwm.h']]], + ['pwm_5fctrl_5fprsc2_13',['PWM_CTRL_PRSC2',['../neorv32__pwm_8h.html#af350f93b601a92ef56516198d1570b7da0fd36a63fd4c37ef3bc4732518ebf13d',1,'neorv32_pwm.h']]] +]; diff --git a/sw/search/enumvalues_9.js b/sw/search/enumvalues_9.js new file mode 100644 index 0000000000..34d19a066c --- /dev/null +++ b/sw/search/enumvalues_9.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['rte_5ftrap_5fbreakpoint_0',['RTE_TRAP_BREAKPOINT',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa463611404367b5910c42dd31c0a218a2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f0_1',['RTE_TRAP_FIRQ_0',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab36a403cd7b833439ce7f9a708c33922',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f1_2',['RTE_TRAP_FIRQ_1',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab199b53a1458017fa5278e0aeecf41fd',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f10_3',['RTE_TRAP_FIRQ_10',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadebcc4d91aea1364b1481111f1060c52',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f11_4',['RTE_TRAP_FIRQ_11',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aab49ff0110481f22da22a085d2633a0e0',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f12_5',['RTE_TRAP_FIRQ_12',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaecea4f1d524a33d02324382357b2bcb9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f13_6',['RTE_TRAP_FIRQ_13',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa609613cf25bb8f2d0e323089d6798220',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f14_7',['RTE_TRAP_FIRQ_14',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaadd66d9b9c33a6869fa3c30e1e434313',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f15_8',['RTE_TRAP_FIRQ_15',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa1d18312227bfd5332ebcc1f74c979dbe',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f2_9',['RTE_TRAP_FIRQ_2',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa29ffa3108fadc78bf375773c3232c489',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f3_10',['RTE_TRAP_FIRQ_3',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa4a74188fd87ea17a594ac6fe8ddf71be',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f4_11',['RTE_TRAP_FIRQ_4',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8b39868bf91da54f9ec492918e0c01ff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f5_12',['RTE_TRAP_FIRQ_5',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa01f562418ddbbb6b84be168673deeea9',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f6_13',['RTE_TRAP_FIRQ_6',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aac9fb28ea8bafff182f12c29d2fad6998',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f7_14',['RTE_TRAP_FIRQ_7',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa73bb84f7b6c7528bec552ac1d3e9ccdb',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f8_15',['RTE_TRAP_FIRQ_8',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa3edbf47bd9a278e100bb808c8bb68308',1,'neorv32_rte.h']]], + ['rte_5ftrap_5ffirq_5f9_16',['RTE_TRAP_FIRQ_9',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa2cd04189d91465dad2bc2a8852406b76',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5faccess_17',['RTE_TRAP_I_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa931a4f314b04233924b01e8245153be4',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fillegal_18',['RTE_TRAP_I_ILLEGAL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa48f4d253b260784a1ffaaded508166e2',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fi_5fmisaligned_19',['RTE_TRAP_I_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaf647ff8d55d021379202879627c91d81',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5faccess_20',['RTE_TRAP_L_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa97047b024b72807a0b312979c9359dab',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fl_5fmisaligned_21',['RTE_TRAP_L_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa8e2cc9a533ebbc0e1d29c3ec8afbe61f',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmei_22',['RTE_TRAP_MEI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aad2a55d5586d33497fd21b1da8aa98fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmenv_5fcall_23',['RTE_TRAP_MENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaea6027bf0354c3120fa61c8094dd7a1d',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmsi_24',['RTE_TRAP_MSI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aadddffa9acdfcce80dd68ad4b26725174',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fmti_25',['RTE_TRAP_MTI',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aacf17d4b2454c43a1cb544e532d247fff',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5faccess_26',['RTE_TRAP_S_ACCESS',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aaa9b8334712ecad0500c7610a25741ec7',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fs_5fmisaligned_27',['RTE_TRAP_S_MISALIGNED',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa85934b3fd8b5268340f84810b3f67232',1,'neorv32_rte.h']]], + ['rte_5ftrap_5fuenv_5fcall_28',['RTE_TRAP_UENV_CALL',['../neorv32__rte_8h.html#ad28f86ab02d89ade2f0bc12e0a8ca70aa155f84a52bace69f81a99de59701decc',1,'neorv32_rte.h']]] +]; diff --git a/sw/search/enumvalues_a.js b/sw/search/enumvalues_a.js new file mode 100644 index 0000000000..16a897b327 --- /dev/null +++ b/sw/search/enumvalues_a.js @@ -0,0 +1,82 @@ +var searchData= +[ + ['sdi_5fctrl_5fcs_5factive_0',['SDI_CTRL_CS_ACTIVE',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ad288a52f2bdaa1ea6ddbadf7f32a3a63',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5fen_1',['SDI_CTRL_EN',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af6016d120844c2d8d8da4fccc09f9809',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5flsb_2',['SDI_CTRL_FIFO_LSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a840c74518f55028608e2353ec6ce58c4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ffifo_5fmsb_3',['SDI_CTRL_FIFO_MSB',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ab3b57f906bd3fc16242fa06601ce1716',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5favail_4',['SDI_CTRL_IRQ_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a2a611e339fd9ae7854931743802ff5c0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5ffull_5',['SDI_CTRL_IRQ_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a051d69f43c2b0f15c5e9e9252c906c9d',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5frx_5fhalf_6',['SDI_CTRL_IRQ_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6af1e2abec3b3bc2ff9ecb2698d933a281',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fempty_7',['SDI_CTRL_IRQ_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a5df074faedb03cf3cc0cfa90eaccd210',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5firq_5ftx_5fnhalf_8',['SDI_CTRL_IRQ_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a762237a6107ee690276c36108fa1c1ed',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5favail_9',['SDI_CTRL_RX_AVAIL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ae15186a46909f1a957269b21af6a14a0',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5ffull_10',['SDI_CTRL_RX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6a45ade3854c01dc1b14a80e3fea29417a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5frx_5fhalf_11',['SDI_CTRL_RX_HALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6ac9381cffb4da427baf31cdbbeae5e1f4',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fempty_12',['SDI_CTRL_TX_EMPTY',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aa9b89463a37e3a9c554195c2f87fb8d8',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5ffull_13',['SDI_CTRL_TX_FULL',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6adb5c4613ce0a6178a01599cf8fd6984a',1,'neorv32_sdi.h']]], + ['sdi_5fctrl_5ftx_5fnhalf_14',['SDI_CTRL_TX_NHALF',['../neorv32__sdi_8h.html#abad9f422cbdff1b73100e98f7ab20ec6aeac16a67f250cce5ea420790e80b8bb9',1,'neorv32_sdi.h']]], + ['slink_5fctrl_5fen_15',['SLINK_CTRL_EN',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a739187f413b7436dc4037187e4a9e86a',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5ffull_16',['SLINK_CTRL_IRQ_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ac8a688706aee72d2027e022b64664309',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fhalf_17',['SLINK_CTRL_IRQ_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1afa9353cd824d1b2833930ce9e922e392',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5frx_5fnempty_18',['SLINK_CTRL_IRQ_RX_NEMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a5452eab0fe12d174ec804c4c72060854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fempty_19',['SLINK_CTRL_IRQ_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae06ad5f627f8902e2368e0daff6cfa88',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnfull_20',['SLINK_CTRL_IRQ_TX_NFULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a8f994f256f57c006c88b9e38df3f54fa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5firq_5ftx_5fnhalf_21',['SLINK_CTRL_IRQ_TX_NHALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a7bf757dbfb1fdaddceaed3a3887003cf',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fclr_22',['SLINK_CTRL_RX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a156fa3209b2652af6b58b0fdfc6cab1b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fempty_23',['SLINK_CTRL_RX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ae78f82e54bd9d737bbcbc5c7af0e9d4b',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5flsb_24',['SLINK_CTRL_RX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a9c68af961c1147846929ca55e9e4e88c',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffifo_5fmsb_25',['SLINK_CTRL_RX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a945e2b7eda65dc13ca38eb21c9c4f657',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5ffull_26',['SLINK_CTRL_RX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aa7521fbe691fef233c0dff4053e4493e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5fhalf_27',['SLINK_CTRL_RX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af695158b9cf5466d87c207f9bd0a688e',1,'neorv32_slink.h']]], + ['slink_5fctrl_5frx_5flast_28',['SLINK_CTRL_RX_LAST',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a624723683d247668ef44137393e576aa',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fclr_29',['SLINK_CTRL_TX_CLR',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1ad366597a44d3dff7dbab4cde72bed82f',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fempty_30',['SLINK_CTRL_TX_EMPTY',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a308cf7829ecca32f7a3da1bd74339854',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5flsb_31',['SLINK_CTRL_TX_FIFO_LSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1aba613343fc17715fc1bb07729588a12d',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffifo_5fmsb_32',['SLINK_CTRL_TX_FIFO_MSB',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af27a9e6e50b169d3f5efd0a08ba4a943',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5ffull_33',['SLINK_CTRL_TX_FULL',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1af94314ed65c6a8d9c364d99d7ae960ee',1,'neorv32_slink.h']]], + ['slink_5fctrl_5ftx_5fhalf_34',['SLINK_CTRL_TX_HALF',['../neorv32__slink_8h.html#ac0385a56c38315d492b3414d98235ef1a530b8b76301f36fbda134b330447de78',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fempty_35',['SLINK_FIFO_EMPTY',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa9f24886f55b7f78ae8909ea8a573058c',1,'neorv32_slink.h']]], + ['slink_5ffifo_5ffull_36',['SLINK_FIFO_FULL',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfa2f96e61f0e07ef4ecd40f14e69b69211',1,'neorv32_slink.h']]], + ['slink_5ffifo_5fhalf_37',['SLINK_FIFO_HALF',['../neorv32__slink_8h.html#a84f7fe82f188bd4e68f41549587822bfadc37988b8aee38e85626064b2c3704f9',1,'neorv32_slink.h']]], + ['slink_5froute_5fdst_5flsb_38',['SLINK_ROUTE_DST_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a9a2311357bd87c85a5cc45f08b0d8f80',1,'neorv32_slink.h']]], + ['slink_5froute_5fdst_5fmsb_39',['SLINK_ROUTE_DST_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7e8da208ecaf142107587033e2d63ec1',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5flsb_40',['SLINK_ROUTE_SRC_LSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a69942c3a7b7b0550634f4016e639b0c2',1,'neorv32_slink.h']]], + ['slink_5froute_5fsrc_5fmsb_41',['SLINK_ROUTE_SRC_MSB',['../neorv32__slink_8h.html#ac3e5e02fd89a357135adca6d28cd0e45a7b7b0b9bd4fe448cae97a3a21460f983',1,'neorv32_slink.h']]], + ['spi_5fcs_5factive_42',['SPI_CS_ACTIVE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5e12c05349444d3d1defff49dec00580',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fbusy_43',['SPI_CTRL_BUSY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7957cf1cf3997cd059ed81cba73a688c',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv0_44',['SPI_CTRL_CDIV0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bae6db5cfa843a58d7c09783e7f29fa49f',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv1_45',['SPI_CTRL_CDIV1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba0b9ca202963b68b999f94baab50fbc48',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv2_46',['SPI_CTRL_CDIV2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba97aaa7a4ffcc6d17a00c4f992e517c46',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcdiv3_47',['SPI_CTRL_CDIV3',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba85164e4e00b5ccd34158f98f691bca29',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpha_48',['SPI_CTRL_CPHA',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba4d787c993152a9417fcd50f76820c7b0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fcpol_49',['SPI_CTRL_CPOL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7661acb97cc8c6dd7f333be4f4a2d315',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fen_50',['SPI_CTRL_EN',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba647a6357971f94b79b7672785c06a4ea',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5flsb_51',['SPI_CTRL_FIFO_LSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba12f67abd206066651c1d62fc29fafcdb',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ffifo_5fmsb_52',['SPI_CTRL_FIFO_MSB',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c0426f70974f0ab129481f2db7cf0ed',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fhighspeed_53',['SPI_CTRL_HIGHSPEED',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bac38b12af6b8fb6bf2fc6f6ff6baee91e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5fidle_54',['SPI_CTRL_IRQ_IDLE',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba3f80e9c6ef6445ad769038c955c171a2',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5frx_5favail_55',['SPI_CTRL_IRQ_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba2cd2350ffc819b7198d1833b525c5ca0',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fempty_56',['SPI_CTRL_IRQ_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3bafcdc17528f9f4521c02ec5c473b44622',1,'neorv32_spi.h']]], + ['spi_5fctrl_5firq_5ftx_5fhalf_57',['SPI_CTRL_IRQ_TX_HALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba8c18d975418ad444255f80317448d26b',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc0_58',['SPI_CTRL_PRSC0',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3babc927c4ea78433de697a9fe96f47248e',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc1_59',['SPI_CTRL_PRSC1',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba49c38a34b95c034249a094fbc93e0a61',1,'neorv32_spi.h']]], + ['spi_5fctrl_5fprsc2_60',['SPI_CTRL_PRSC2',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba7a5244e443e1fe4ff6b7a2176f90ae7a',1,'neorv32_spi.h']]], + ['spi_5fctrl_5frx_5favail_61',['SPI_CTRL_RX_AVAIL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba115b097b76b3b99716f54a63c6ce5633',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fempty_62',['SPI_CTRL_TX_EMPTY',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba487b87333d33db0a05cd2a229225ffc6',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5ffull_63',['SPI_CTRL_TX_FULL',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba96860d260b31ee4c232b6b0eb45f7905',1,'neorv32_spi.h']]], + ['spi_5fctrl_5ftx_5fnhalf_64',['SPI_CTRL_TX_NHALF',['../neorv32__spi_8h.html#ae269b2f5b2afd46ae16801762ade2c3ba5efcaded20b93d2bffeaa4ea813f73b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcmd_65',['SPI_DATA_CMD',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a8b565083f989905b8335d9d22a14c4b6',1,'neorv32_spi.h']]], + ['spi_5fdata_5fcsen_66',['SPI_DATA_CSEN',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a5673b6a3382dc5452e3cfcd4e8f3c8a2',1,'neorv32_spi.h']]], + ['spi_5fdata_5flsb_67',['SPI_DATA_LSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8ae3c36a644c05cea0fccaefb9da90a1b4',1,'neorv32_spi.h']]], + ['spi_5fdata_5fmsb_68',['SPI_DATA_MSB',['../neorv32__spi_8h.html#aab478c23898c0b06cee53a1cbda38bf8a0167ec9c252ee0228ab9d21f4acba600',1,'neorv32_spi.h']]], + ['spi_5fflash_5fcmd_5fpage_5fprogram_69',['SPI_FLASH_CMD_PAGE_PROGRAM',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda31c8d698c551d081a0adeafb988ed49e',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fread_70',['SPI_FLASH_CMD_READ',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea6c1994ba2cfd97e0c77dcdf8bbdfdfa6',1,'SPI_FLASH_CMD_READ: main.c']]], + ['spi_5fflash_5fcmd_5fread_5fstatus_71',['SPI_FLASH_CMD_READ_STATUS',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea5fbc6551a10549b38e5ab4a76c38f214',1,'SPI_FLASH_CMD_READ_STATUS: main.c']]], + ['spi_5fflash_5fcmd_5fsector_5ferase_72',['SPI_FLASH_CMD_SECTOR_ERASE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eacd62141d6331f66e31bd252e2a92b836',1,'SPI_FLASH_CMD_SECTOR_ERASE: main.c']]], + ['spi_5fflash_5fcmd_5fwake_73',['SPI_FLASH_CMD_WAKE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda25bf16cd42b1fd1d95e0957b5be137d2',1,'bootloader.c']]], + ['spi_5fflash_5fcmd_5fwrite_74',['SPI_FLASH_CMD_WRITE',['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea528cebc54176f6f4c0a8f7f16fb28ca1',1,'main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fdisable_75',['SPI_FLASH_CMD_WRITE_DISABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401fedaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12eaa91d3c1d788b21fc798a5976c9f0da77',1,'SPI_FLASH_CMD_WRITE_DISABLE: main.c']]], + ['spi_5fflash_5fcmd_5fwrite_5fenable_76',['SPI_FLASH_CMD_WRITE_ENABLE',['../bootloader_8c.html#aa5e5723e4cbf83805c3b1197cd401feda152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE: bootloader.c'],['../demo__xip_2main_8c.html#af30de1c8d8502ad374612d308cfbd12ea152e091e93778f217f8b766298351513',1,'SPI_FLASH_CMD_WRITE_ENABLE: main.c']]], + ['spi_5fflash_5fsreg_5fwel_77',['SPI_FLASH_SREG_WEL',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08ea90f3b76faed13819ee13e574d1bff0c1',1,'main.c']]], + ['spi_5fflash_5fsreg_5fwip_78',['SPI_FLASH_SREG_WIP',['../demo__xip_2main_8c.html#adccf1bb8f1f203cb1350f7f2eb15a08eac84de63bbea3989c71bcc92d1d01cfa4',1,'main.c']]] +]; diff --git a/sw/search/enumvalues_b.js b/sw/search/enumvalues_b.js new file mode 100644 index 0000000000..172efda5a9 --- /dev/null +++ b/sw/search/enumvalues_b.js @@ -0,0 +1,60 @@ +var searchData= +[ + ['trap_5fcode_5fbreakpoint_0',['TRAP_CODE_BREAKPOINT',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a2c9510cb7583a0144f96678fc217335e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f0_1',['TRAP_CODE_FIRQ_0',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0cef77904935798d247d8396838297c1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f1_2',['TRAP_CODE_FIRQ_1',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0b1049ae7f8cbfb6ff216e69ed5dae7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f10_3',['TRAP_CODE_FIRQ_10',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a4f6b9c6bba91fe04becb776ad22dcf42',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f11_4',['TRAP_CODE_FIRQ_11',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a874dcc43cf8fbbf2e0614e7db9e38334',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f12_5',['TRAP_CODE_FIRQ_12',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a151f01e5f284f876cafafc7427720e4c',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f13_6',['TRAP_CODE_FIRQ_13',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a7c8e97297cc4dcd6d5a1de65a124f3e9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f14_7',['TRAP_CODE_FIRQ_14',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a821f813de47eb781ab7715f780da3b1e',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f15_8',['TRAP_CODE_FIRQ_15',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa4eeafe2f6f59aff01e29461c664a110',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f2_9',['TRAP_CODE_FIRQ_2',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ad753d3e2563b4fd663430af9f3888dc7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f3_10',['TRAP_CODE_FIRQ_3',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a356f8485166529503d0fb246bd0aeeb0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f4_11',['TRAP_CODE_FIRQ_4',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aaa8e7bb251852ef75a78be71eef0b547',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f5_12',['TRAP_CODE_FIRQ_5',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a5789dfabd8ec265fa0734ddd94e98757',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f6_13',['TRAP_CODE_FIRQ_6',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a809e997f55e83c6812c965655511d473',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f7_14',['TRAP_CODE_FIRQ_7',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aeab719bcce9e9551bd6da65a7ae08a26',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f8_15',['TRAP_CODE_FIRQ_8',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1abfd21d1380dcacb9282e525da104d916',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5ffirq_5f9_16',['TRAP_CODE_FIRQ_9',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a350e762a599479fb2c6d23ccc5ee22b4',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5faccess_17',['TRAP_CODE_I_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a6a0ebfce4e18f36aeb43d5a65445cfe1',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fillegal_18',['TRAP_CODE_I_ILLEGAL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1af1ad8f557f3b685b59a913611e1da173',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fi_5fmisaligned_19',['TRAP_CODE_I_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a0a8010d7cc91b9557973a7a118828bee',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5faccess_20',['TRAP_CODE_L_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a28448f0c670169140dc28b6794310cea',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fl_5fmisaligned_21',['TRAP_CODE_L_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a69e68a954da0bb33d1624484a6777ff9',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmei_22',['TRAP_CODE_MEI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a1a412b9d8eefba7880555d34625d2cc0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmenv_5fcall_23',['TRAP_CODE_MENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a20e5a2680f2f5956bfa92852d5544eac',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmsi_24',['TRAP_CODE_MSI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1ae0cebf99f36ef6be60e4a9d2c9f894b0',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fmti_25',['TRAP_CODE_MTI',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a187ae38819b81672c15808e63c3b46b7',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5faccess_26',['TRAP_CODE_S_ACCESS',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a70bcfc75fe1056d93a3606f78c0cb887',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fs_5fmisaligned_27',['TRAP_CODE_S_MISALIGNED',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1a19708405f9f6300edf6b992c6d408a2d',1,'neorv32_cpu_csr.h']]], + ['trap_5fcode_5fuenv_5fcall_28',['TRAP_CODE_UENV_CALL',['../neorv32__cpu__csr_8h.html#acb0fcbc551fec4c45676ff1317be24e1aa102472d6a264bb92e0581ccaa413e02',1,'neorv32_cpu_csr.h']]], + ['trng_5fctrl_5fdata_5flsb_29',['TRNG_CTRL_DATA_LSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa50bb6e10e245a977dcf29a7a138776c6',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fdata_5fmsb_30',['TRNG_CTRL_DATA_MSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa95620874acc9393a05d670824c0bbed2',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fen_31',['TRNG_CTRL_EN',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa0bdf0194eefe95884c5c5853a2f7670d',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fclr_32',['TRNG_CTRL_FIFO_CLR',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aabf1bb7bc3b44394c85709edd1c9f03ac',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5flsb_33',['TRNG_CTRL_FIFO_LSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa8c0325eede4ffec4530cfd5dc700dc52',1,'neorv32_trng.h']]], + ['trng_5fctrl_5ffifo_5fmsb_34',['TRNG_CTRL_FIFO_MSB',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa919c3105723e4fe46e341c63cbf276f5',1,'neorv32_trng.h']]], + ['trng_5fctrl_5firq_5fsel_35',['TRNG_CTRL_IRQ_SEL',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa968a770fe6b172183dd97818e09c63da',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fsim_5fmode_36',['TRNG_CTRL_SIM_MODE',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aaa6990058793ac7d96250693f935837c5',1,'neorv32_trng.h']]], + ['trng_5fctrl_5fvalid_37',['TRNG_CTRL_VALID',['../neorv32__trng_8h.html#a1440e1355bf5bff17760992adc156b1aa2e0079358668db409fb763eaccb93da9',1,'neorv32_trng.h']]], + ['twi_5fctrl_5fbusy_38',['TWI_CTRL_BUSY',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa443a2a65ee810f428d40a4f8474d8e6d',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv0_39',['TWI_CTRL_CDIV0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa75d3a61b5e642e5d5c1f699c35c26b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv1_40',['TWI_CTRL_CDIV1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4473769463a0c7e4b58ed0b983610674',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv2_41',['TWI_CTRL_CDIV2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa6db454861ad5be70846ed4f9eb2ea12',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fcdiv3_42',['TWI_CTRL_CDIV3',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa99e2153a53cc1f9d7cc83d52c698cbcc',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fclkstr_43',['TWI_CTRL_CLKSTR',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaac62d6e3c47a8195a6a9ccc79129bfe48',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fen_44',['TWI_CTRL_EN',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa43381fe5ab9fe64ebdf76638eba5a694',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5flsb_45',['TWI_CTRL_FIFO_LSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa74126d424719b1db61f5e1ab567489fb',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ffifo_5fmsb_46',['TWI_CTRL_FIFO_MSB',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa183f5b9c3993d04cc9aea2a79e9a4f75',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc0_47',['TWI_CTRL_PRSC0',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa9033ac6cc891bff0da52449aa4b6a8d9',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc1_48',['TWI_CTRL_PRSC1',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa8b666cd2e40ca9ba3f9a635f0ed107df',1,'neorv32_twi.h']]], + ['twi_5fctrl_5fprsc2_49',['TWI_CTRL_PRSC2',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaa4d55ed983ca2f94fa9deac196d949b31',1,'neorv32_twi.h']]], + ['twi_5fctrl_5frx_5favail_50',['TWI_CTRL_RX_AVAIL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaad2798dfabf3a72e6138135e983734671',1,'neorv32_twi.h']]], + ['twi_5fctrl_5ftx_5ffull_51',['TWI_CTRL_TX_FULL',['../neorv32__twi_8h.html#a71ef393d3b34d2dd0698590994b7dafaaa0597dc9dea3f6f7a2f19dbcc7a2dabb',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fack_52',['TWI_DCMD_ACK',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8af64359afd3627db0a79733d00128f3a5',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5fhi_53',['TWI_DCMD_CMD_HI',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8accd7e8be435db3055c27f0a6d5e0201e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fcmd_5flo_54',['TWI_DCMD_CMD_LO',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab2e20f7f5a5b131c31772341caa97e5e',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5flsb_55',['TWI_DCMD_LSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8adf6176c87655bbbb5c7cea9dea29ce56',1,'neorv32_twi.h']]], + ['twi_5fdcmd_5fmsb_56',['TWI_DCMD_MSB',['../neorv32__twi_8h.html#a3421852c63baca60fe58c990b1c653d8ab7f53f7cef06031c1a34db04c602a50d',1,'neorv32_twi.h']]] +]; diff --git a/sw/search/enumvalues_c.js b/sw/search/enumvalues_c.js new file mode 100644 index 0000000000..7d68973c21 --- /dev/null +++ b/sw/search/enumvalues_c.js @@ -0,0 +1,40 @@ +var searchData= +[ + ['uart_5fctrl_5fbaud0_0',['UART_CTRL_BAUD0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcad38432e7e050276d4667daf92c1e3fd5',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud1_1',['UART_CTRL_BAUD1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1e702002402897eca82bf398504bc439',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud2_2',['UART_CTRL_BAUD2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36266026e11f22aca1584bd81cd38cd6',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud3_3',['UART_CTRL_BAUD3',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca58190cd41c2ce69512bea10740d35276',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud4_4',['UART_CTRL_BAUD4',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81ea805f01b93a59664823b940c7a424',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud5_5',['UART_CTRL_BAUD5',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5da1d6007af0265fe48ace8469e07833',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud6_6',['UART_CTRL_BAUD6',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9ac3c1e23d684cb2f67060d6ebe1fa63',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud7_7',['UART_CTRL_BAUD7',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c12648f7f058f444db434cd8a8d854e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud8_8',['UART_CTRL_BAUD8',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca09c311eb1f6b38500e6fcbb6ad9dd9ff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fbaud9_9',['UART_CTRL_BAUD9',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca697321bddeaa2cac1ea034c418be540e',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fen_10',['UART_CTRL_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca38f6c0e5991f8f80159a388c1080f7c2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fhwfc_5fen_11',['UART_CTRL_HWFC_EN',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcacab78fcd440167c5a2c0f5d300c8f07c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5ffull_12',['UART_CTRL_IRQ_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcae5f01868b170d71a5f3064023c96a82a',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fhalf_13',['UART_CTRL_IRQ_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaa219ea3ed5b21f5023bbc5ffa5c5f175',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5frx_5fnempty_14',['UART_CTRL_IRQ_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca569ea830518914c5330fa14680b02851',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fempty_15',['UART_CTRL_IRQ_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca15b9fca73877aad446a8cd338e228e2c',1,'neorv32_uart.h']]], + ['uart_5fctrl_5firq_5ftx_5fnhalf_16',['UART_CTRL_IRQ_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca726b73ef9c44ccc1a45a4230a8bda9d1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc0_17',['UART_CTRL_PRSC0',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca1ddbca448bb30c77c42499fff1312183',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc1_18',['UART_CTRL_PRSC1',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca9c1d8e8763a653339210ff4e6e3067d2',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fprsc2_19',['UART_CTRL_PRSC2',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca8afd60e4bd3854fab623b91fa4f33f70',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fclr_20',['UART_CTRL_RX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcaefbef37247d88a7e38e1c53b8a33ed33',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5ffull_21',['UART_CTRL_RX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca47c44fa21e51401621c28019025c1166',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fhalf_22',['UART_CTRL_RX_HALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca3fc934d0ce6b36e3e131c6682db22247',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fnempty_23',['UART_CTRL_RX_NEMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca2015dd85e361aa0476e847953b62baff',1,'neorv32_uart.h']]], + ['uart_5fctrl_5frx_5fover_24',['UART_CTRL_RX_OVER',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca81a52e0b81018f2cf43e64d74caba632',1,'neorv32_uart.h']]], + ['uart_5fctrl_5fsim_5fmode_25',['UART_CTRL_SIM_MODE',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca42ed376220259ab22c6f837d08273ef1',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fbusy_26',['UART_CTRL_TX_BUSY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca0eb636d8b7961d7073c5c7341b5bbe25',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fclr_27',['UART_CTRL_TX_CLR',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca408412a32673cc7f6ea70682e3e61431',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fempty_28',['UART_CTRL_TX_EMPTY',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afcac5c044233b6c4162cf862f3d9831ef46',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5ffull_29',['UART_CTRL_TX_FULL',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca36b4195e5d1f12e1fd1a0d30cad0e411',1,'neorv32_uart.h']]], + ['uart_5fctrl_5ftx_5fnhalf_30',['UART_CTRL_TX_NHALF',['../neorv32__uart_8h.html#ad9f75f453beca1619344bb4213352afca5b0e40ab30bdb198f496d09e89d2d0d9',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5flsb_31',['UART_DATA_RTX_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ae70e9f6cd69af724932e79ea7e7f7195',1,'neorv32_uart.h']]], + ['uart_5fdata_5frtx_5fmsb_32',['UART_DATA_RTX_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a19926d013ca202645d38f2c704782ebb',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5flsb_33',['UART_DATA_RX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a43b296e86d1f2ec7400d57655c3180ef',1,'neorv32_uart.h']]], + ['uart_5fdata_5frx_5ffifo_5fsize_5fmsb_34',['UART_DATA_RX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a81a82ac0dc5c8c8d7af21553288e3225',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5flsb_35',['UART_DATA_TX_FIFO_SIZE_LSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2a6d718ad0bb82a5cb053c117cd2d6ca8e',1,'neorv32_uart.h']]], + ['uart_5fdata_5ftx_5ffifo_5fsize_5fmsb_36',['UART_DATA_TX_FIFO_SIZE_MSB',['../neorv32__uart_8h.html#adcf35350a9ea18a59c32c35f528643f2ada92cbbe278e3e0592eba58c97699529',1,'neorv32_uart.h']]] +]; diff --git a/sw/search/enumvalues_d.js b/sw/search/enumvalues_d.js new file mode 100644 index 0000000000..8d89c7e741 --- /dev/null +++ b/sw/search/enumvalues_d.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['wdt_5fctrl_5fdben_0',['WDT_CTRL_DBEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea4b0d994fe5ff8d8004c7f25b621fb3a9',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fen_1',['WDT_CTRL_EN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e078b41b69bd6089acceb592e14553f',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5flock_2',['WDT_CTRL_LOCK',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23eadc44267502fceb8e7311dfa502fe54d3',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5fhi_3',['WDT_CTRL_RCAUSE_HI',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea6012d63ea4734fc8a063c9edc6785abd',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5frcause_5flo_4',['WDT_CTRL_RCAUSE_LO',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea0e7d3e97517f97042ce5606dd5247779',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fsen_5',['WDT_CTRL_SEN',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea7b7ea5bd390ecbb5ee0d9542ef124148',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5fstrict_6',['WDT_CTRL_STRICT',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea28dd25b66c4a50d0ea47a16c460031ac',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5flsb_7',['WDT_CTRL_TIMEOUT_LSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea45df3c9100beb420add34bf71a0e8609',1,'neorv32_wdt.h']]], + ['wdt_5fctrl_5ftimeout_5fmsb_8',['WDT_CTRL_TIMEOUT_MSB',['../neorv32__wdt_8h.html#a0a4cb24fd818277c5bb9b10ff519f23ea25dea2104b29a3c20dcc3782c2d43dc7',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5fext_9',['WDT_RCAUSE_EXT',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049ac5fc25cdc29c248b1a570b6095ddded0',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5focd_10',['WDT_RCAUSE_OCD',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a764a7797f17d82f619a6d30c0878bf1e',1,'neorv32_wdt.h']]], + ['wdt_5frcause_5fwdt_11',['WDT_RCAUSE_WDT',['../neorv32__wdt_8h.html#a70098b4ee893774864536fb4100ff049a974e73fb98b6a3591c214eba6071fd3c',1,'neorv32_wdt.h']]] +]; diff --git a/sw/search/enumvalues_e.js b/sw/search/enumvalues_e.js new file mode 100644 index 0000000000..cd1b7db0a7 --- /dev/null +++ b/sw/search/enumvalues_e.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['xip_5fctrl_5fburst_5fen_0',['XIP_CTRL_BURST_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba7ad9f81356d6923d524d1c9e39acdd2c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv0_1',['XIP_CTRL_CDIV0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaf9b56aa629973ce4a9c8ff61a2c90ba3',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv1_2',['XIP_CTRL_CDIV1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba68775854b8f2cfa2f32d2eb82a714073',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv2_3',['XIP_CTRL_CDIV2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba43d7305e0e0398cb44c99e70dcd96445',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcdiv3_4',['XIP_CTRL_CDIV3',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba61ffffe9acda5c622b48b6360e357eef',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpha_5',['XIP_CTRL_CPHA',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebad31736f4a159745be94b487079c4c14d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fcpol_6',['XIP_CTRL_CPOL',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba95ae19cf5d5140df397ead62f151247f',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fen_7',['XIP_CTRL_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba27658ce3cc81c9e258b73fb02d7f1045',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fhighspeed_8',['XIP_CTRL_HIGHSPEED',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebaaeb104a59215667aabb5a751632ae781',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fphy_5fbusy_9',['XIP_CTRL_PHY_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba76d2379d0e7ab09e7e686bc886888fa5',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc0_10',['XIP_CTRL_PRSC0',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba67a0c0483eaf92e9cd03e9076be5b50d',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc1_11',['XIP_CTRL_PRSC1',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483cebae47f2e1e8c023fd52e25a3dad5e332af',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fprsc2_12',['XIP_CTRL_PRSC2',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba896815c075a91a8291585eb61b6e0086',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5flsb_13',['XIP_CTRL_RD_CMD_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba8287016f167727f147806aa11129e05b',1,'neorv32_xip.h']]], + ['xip_5fctrl_5frd_5fcmd_5fmsb_14',['XIP_CTRL_RD_CMD_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c78cd2d32cfba4d89f7aab92f7939e7',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fcsen_15',['XIP_CTRL_SPI_CSEN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5aadb2c374d34b878b56a660baec2080',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5flsb_16',['XIP_CTRL_SPI_NBYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba23be66e49d28dd12c5321e576d2f0c7a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fspi_5fnbytes_5fmsb_17',['XIP_CTRL_SPI_NBYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5d13c4fe190fcd68dfcbbbe33d2e844c',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5flsb_18',['XIP_CTRL_XIP_ABYTES_LSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba603f9d8d22ae2a6abc61b666bc88a4df',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fabytes_5fmsb_19',['XIP_CTRL_XIP_ABYTES_MSB',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba5885ed5fcd2eed969bd921afe8dff4fc',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fbusy_20',['XIP_CTRL_XIP_BUSY',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba2c4a47f88d299782b8618b68fb87d59a',1,'neorv32_xip.h']]], + ['xip_5fctrl_5fxip_5fen_21',['XIP_CTRL_XIP_EN',['../neorv32__xip_8h.html#a72ed1ff87de1222cc3a13177c7483ceba3cbd45a66e05a4fcfc5ec810b8cee937',1,'neorv32_xip.h']]] +]; diff --git a/sw/search/files_0.js b/sw/search/files_0.js new file mode 100644 index 0000000000..b7e62c16c3 --- /dev/null +++ b/sw/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bootloader_2ec_0',['bootloader.c',['../bootloader_8c.html',1,'']]] +]; diff --git a/sw/search/files_1.js b/sw/search/files_1.js new file mode 100644 index 0000000000..b309f44f74 --- /dev/null +++ b/sw/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2ec_0',['main.c',['../atomic__test_2main_8c.html',1,'(Global Namespace)'],['../bus__explorer_2main_8c.html',1,'(Global Namespace)'],['../demo__blink__led_2main_8c.html',1,'(Global Namespace)'],['../demo__cfs_2main_8c.html',1,'(Global Namespace)'],['../demo__cfu_2main_8c.html',1,'(Global Namespace)'],['../demo__crc_2main_8c.html',1,'(Global Namespace)'],['../demo__dma_2main_8c.html',1,'(Global Namespace)'],['../demo__emulate__unaligned_2main_8c.html',1,'(Global Namespace)'],['../demo__gptmr_2main_8c.html',1,'(Global Namespace)'],['../demo__hpm_2main_8c.html',1,'(Global Namespace)'],['../demo__mtime_2main_8c.html',1,'(Global Namespace)'],['../demo__neopixel_2main_8c.html',1,'(Global Namespace)'],['../demo__newlib_2main_8c.html',1,'(Global Namespace)'],['../demo__onewire_2main_8c.html',1,'(Global Namespace)'],['../demo__pwm_2main_8c.html',1,'(Global Namespace)'],['../demo__sdi_2main_8c.html',1,'(Global Namespace)'],['../demo__slink_2main_8c.html',1,'(Global Namespace)'],['../demo__spi_2main_8c.html',1,'(Global Namespace)'],['../demo__spi__irq_2main_8c.html',1,'(Global Namespace)'],['../demo__trng_2main_8c.html',1,'(Global Namespace)'],['../demo__twi_2main_8c.html',1,'(Global Namespace)'],['../demo__wdt_2main_8c.html',1,'(Global Namespace)'],['../demo__xip_2main_8c.html',1,'(Global Namespace)'],['../demo__xirq_2main_8c.html',1,'(Global Namespace)'],['../float__corner__test_2main_8c.html',1,'(Global Namespace)'],['../floating__point__test_2main_8c.html',1,'(Global Namespace)'],['../game__of__life_2main_8c.html',1,'(Global Namespace)'],['../hello__world_2main_8c.html',1,'(Global Namespace)'],['../processor__check_2main_8c.html',1,'(Global Namespace)']]] +]; diff --git a/sw/search/files_2.js b/sw/search/files_2.js new file mode 100644 index 0000000000..64ce464e68 --- /dev/null +++ b/sw/search/files_2.js @@ -0,0 +1,55 @@ +var searchData= +[ + ['neorv32_2eh_0',['neorv32.h',['../neorv32_8h.html',1,'']]], + ['neorv32_5faux_2ec_1',['neorv32_aux.c',['../neorv32__aux_8c.html',1,'']]], + ['neorv32_5faux_2eh_2',['neorv32_aux.h',['../neorv32__aux_8h.html',1,'']]], + ['neorv32_5fcfs_2ec_3',['neorv32_cfs.c',['../neorv32__cfs_8c.html',1,'']]], + ['neorv32_5fcfs_2eh_4',['neorv32_cfs.h',['../neorv32__cfs_8h.html',1,'']]], + ['neorv32_5fcpu_2ec_5',['neorv32_cpu.c',['../neorv32__cpu_8c.html',1,'']]], + ['neorv32_5fcpu_2eh_6',['neorv32_cpu.h',['../neorv32__cpu_8h.html',1,'']]], + ['neorv32_5fcpu_5famo_2ec_7',['neorv32_cpu_amo.c',['../neorv32__cpu__amo_8c.html',1,'']]], + ['neorv32_5fcpu_5famo_2eh_8',['neorv32_cpu_amo.h',['../neorv32__cpu__amo_8h.html',1,'']]], + ['neorv32_5fcpu_5fcfu_2ec_9',['neorv32_cpu_cfu.c',['../neorv32__cpu__cfu_8c.html',1,'']]], + ['neorv32_5fcpu_5fcfu_2eh_10',['neorv32_cpu_cfu.h',['../neorv32__cpu__cfu_8h.html',1,'']]], + ['neorv32_5fcpu_5fcsr_2eh_11',['neorv32_cpu_csr.h',['../neorv32__cpu__csr_8h.html',1,'']]], + ['neorv32_5fcrc_2ec_12',['neorv32_crc.c',['../neorv32__crc_8c.html',1,'']]], + ['neorv32_5fcrc_2eh_13',['neorv32_crc.h',['../neorv32__crc_8h.html',1,'']]], + ['neorv32_5fdma_2eh_14',['neorv32_dma.h',['../neorv32__dma_8h.html',1,'']]], + ['neorv32_5fgpio_2ec_15',['neorv32_gpio.c',['../neorv32__gpio_8c.html',1,'']]], + ['neorv32_5fgpio_2eh_16',['neorv32_gpio.h',['../neorv32__gpio_8h.html',1,'']]], + ['neorv32_5fgptmr_2ec_17',['neorv32_gptmr.c',['../neorv32__gptmr_8c.html',1,'']]], + ['neorv32_5fgptmr_2eh_18',['neorv32_gptmr.h',['../neorv32__gptmr_8h.html',1,'']]], + ['neorv32_5fintrinsics_2eh_19',['neorv32_intrinsics.h',['../neorv32__intrinsics_8h.html',1,'']]], + ['neorv32_5flegacy_2eh_20',['neorv32_legacy.h',['../neorv32__legacy_8h.html',1,'']]], + ['neorv32_5fmtime_2ec_21',['neorv32_mtime.c',['../neorv32__mtime_8c.html',1,'']]], + ['neorv32_5fmtime_2eh_22',['neorv32_mtime.h',['../neorv32__mtime_8h.html',1,'']]], + ['neorv32_5fneoled_2ec_23',['neorv32_neoled.c',['../neorv32__neoled_8c.html',1,'']]], + ['neorv32_5fneoled_2eh_24',['neorv32_neoled.h',['../neorv32__neoled_8h.html',1,'']]], + ['neorv32_5fonewire_2ec_25',['neorv32_onewire.c',['../neorv32__onewire_8c.html',1,'']]], + ['neorv32_5fonewire_2eh_26',['neorv32_onewire.h',['../neorv32__onewire_8h.html',1,'']]], + ['neorv32_5fpwm_2ec_27',['neorv32_pwm.c',['../neorv32__pwm_8c.html',1,'']]], + ['neorv32_5fpwm_2eh_28',['neorv32_pwm.h',['../neorv32__pwm_8h.html',1,'']]], + ['neorv32_5frte_2ec_29',['neorv32_rte.c',['../neorv32__rte_8c.html',1,'']]], + ['neorv32_5frte_2eh_30',['neorv32_rte.h',['../neorv32__rte_8h.html',1,'']]], + ['neorv32_5fsdi_2ec_31',['neorv32_sdi.c',['../neorv32__sdi_8c.html',1,'']]], + ['neorv32_5fsdi_2eh_32',['neorv32_sdi.h',['../neorv32__sdi_8h.html',1,'']]], + ['neorv32_5fslink_2ec_33',['neorv32_slink.c',['../neorv32__slink_8c.html',1,'']]], + ['neorv32_5fslink_2eh_34',['neorv32_slink.h',['../neorv32__slink_8h.html',1,'']]], + ['neorv32_5fspi_2ec_35',['neorv32_spi.c',['../neorv32__spi_8c.html',1,'']]], + ['neorv32_5fspi_2eh_36',['neorv32_spi.h',['../neorv32__spi_8h.html',1,'']]], + ['neorv32_5fspi_5firq_2ec_37',['neorv32_spi_irq.c',['../neorv32__spi__irq_8c.html',1,'']]], + ['neorv32_5fspi_5firq_2eh_38',['neorv32_spi_irq.h',['../neorv32__spi__irq_8h.html',1,'']]], + ['neorv32_5ftrng_2ec_39',['neorv32_trng.c',['../neorv32__trng_8c.html',1,'']]], + ['neorv32_5ftrng_2eh_40',['neorv32_trng.h',['../neorv32__trng_8h.html',1,'']]], + ['neorv32_5ftwi_2ec_41',['neorv32_twi.c',['../neorv32__twi_8c.html',1,'']]], + ['neorv32_5ftwi_2eh_42',['neorv32_twi.h',['../neorv32__twi_8h.html',1,'']]], + ['neorv32_5fuart_2ec_43',['neorv32_uart.c',['../neorv32__uart_8c.html',1,'']]], + ['neorv32_5fuart_2eh_44',['neorv32_uart.h',['../neorv32__uart_8h.html',1,'']]], + ['neorv32_5fwdt_2ec_45',['neorv32_wdt.c',['../neorv32__wdt_8c.html',1,'']]], + ['neorv32_5fwdt_2eh_46',['neorv32_wdt.h',['../neorv32__wdt_8h.html',1,'']]], + ['neorv32_5fxip_2ec_47',['neorv32_xip.c',['../neorv32__xip_8c.html',1,'']]], + ['neorv32_5fxip_2eh_48',['neorv32_xip.h',['../neorv32__xip_8h.html',1,'']]], + ['neorv32_5fxirq_2ec_49',['neorv32_xirq.c',['../neorv32__xirq_8c.html',1,'']]], + ['neorv32_5fxirq_2eh_50',['neorv32_xirq.h',['../neorv32__xirq_8h.html',1,'']]], + ['neorv32_5fzfinx_5fextension_5fintrinsics_2eh_51',['neorv32_zfinx_extension_intrinsics.h',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html',1,'']]] +]; diff --git a/sw/search/files_3.js b/sw/search/files_3.js new file mode 100644 index 0000000000..8f61d309d5 --- /dev/null +++ b/sw/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['syscalls_2ec_0',['syscalls.c',['../syscalls_8c.html',1,'']]] +]; diff --git a/sw/search/functions_0.js b/sw/search/functions_0.js new file mode 100644 index 0000000000..ea864102f4 --- /dev/null +++ b/sw/search/functions_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['_5f_5fneorv32_5frte_5fcore_0',['__neorv32_rte_core',['../neorv32__rte_8c.html#a53f1e006f0bf61deb7ad018f35228873',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5frte_5fprint_5fhex_5fword_1',['__neorv32_rte_print_hex_word',['../neorv32__rte_8c.html#a01bf6c01f5a8cda2132b9ac98824edc1',1,'neorv32_rte.c']]], + ['_5f_5fneorv32_5fuart_5fitoa_2',['__neorv32_uart_itoa',['../neorv32__uart_8c.html#a3543435827204d82755b0a23bdea1296',1,'neorv32_uart.c']]], + ['_5f_5fneorv32_5fuart_5ftohex_3',['__neorv32_uart_tohex',['../neorv32__uart_8c.html#aefa844cd170e50e088c42829029060f3',1,'neorv32_uart.c']]], + ['_5f_5fneorv32_5fuart_5ftouppercase_4',['__neorv32_uart_touppercase',['../neorv32__uart_8c.html#adf807d0476b475276b8b29924297cda9',1,'neorv32_uart.c']]], + ['_5f_5fneorv32_5fxirq_5fcore_5',['__neorv32_xirq_core',['../neorv32__xirq_8c.html#a14661d628dd31e6bfce89376c6614627',1,'neorv32_xirq.c']]], + ['_5f_5fneorv32_5fxirq_5fdummy_5fhandler_6',['__neorv32_xirq_dummy_handler',['../neorv32__xirq_8c.html#ae4d9362b23a1341c595a4cd239a87091',1,'neorv32_xirq.c']]] +]; diff --git a/sw/search/functions_1.js b/sw/search/functions_1.js new file mode 100644 index 0000000000..caab3fbf1e --- /dev/null +++ b/sw/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['adaptive_5fproportion_5ftest_0',['adaptive_proportion_test',['../demo__trng_2main_8c.html#a23a91e6fe2cc44f3c29baf0d331e05db',1,'main.c']]], + ['aux_5fprint_5fhex_5fbyte_1',['aux_print_hex_byte',['../bus__explorer_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte): main.c'],['../demo__spi_2main_8c.html#ac582208281cd6fce4eb61c234f312ef6',1,'aux_print_hex_byte(uint8_t byte): main.c']]] +]; diff --git a/sw/search/functions_10.js b/sw/search/functions_10.js new file mode 100644 index 0000000000..43e788b2a1 --- /dev/null +++ b/sw/search/functions_10.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['xip_5fflash_5faccess_5fcheck_0',['xip_flash_access_check',['../demo__xip_2main_8c.html#a23bd7bd7b0808d919fd09ac0a8258498',1,'main.c']]], + ['xip_5fflash_5ferase_5fsector_1',['xip_flash_erase_sector',['../demo__xip_2main_8c.html#a9e0b2714126b6699ddb65485c93293e4',1,'main.c']]], + ['xip_5fflash_5fprogram_2',['xip_flash_program',['../demo__xip_2main_8c.html#a4ddfa8fdc072cadeef18a4a10bc8b174',1,'main.c']]], + ['xirq_5fhandler_5fch0_3',['xirq_handler_ch0',['../demo__xirq_2main_8c.html#a8874ccfc0b56171c359b5c2ceaf2bd80',1,'main.c']]], + ['xirq_5fhandler_5fch1_4',['xirq_handler_ch1',['../demo__xirq_2main_8c.html#abfe0c0bc47a683ba55df2aed63a12d4b',1,'main.c']]], + ['xirq_5fhandler_5fch2_5',['xirq_handler_ch2',['../demo__xirq_2main_8c.html#ae8e3b3236aa2303c2b5e6e421b72cf73',1,'main.c']]], + ['xirq_5fhandler_5fch3_6',['xirq_handler_ch3',['../demo__xirq_2main_8c.html#a99e9ae3088f39995c852b2c53ec21266',1,'main.c']]], + ['xirq_5ftrap_5fhandler0_7',['xirq_trap_handler0',['../processor__check_2main_8c.html#aa4fe70578c4dccabe1e31fae941378cb',1,'main.c']]], + ['xirq_5ftrap_5fhandler1_8',['xirq_trap_handler1',['../processor__check_2main_8c.html#a277cb06ef74e4cfe1ef783069f9b6527',1,'main.c']]], + ['xtea_5fsw_5fdecipher_9',['xtea_sw_decipher',['../demo__cfu_2main_8c.html#a0e980c5d81b1eca90b8073e54099bdb0',1,'main.c']]], + ['xtea_5fsw_5fencipher_10',['xtea_sw_encipher',['../demo__cfu_2main_8c.html#a8dc502bf508491eed1f39c4acf040efb',1,'main.c']]] +]; diff --git a/sw/search/functions_2.js b/sw/search/functions_2.js new file mode 100644 index 0000000000..bdc159bac7 --- /dev/null +++ b/sw/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bootloader_5ftrap_5fhandler_0',['bootloader_trap_handler',['../bootloader_8c.html#af13b4b3d5e6597feacf331e6d16b08e9',1,'bootloader.c']]] +]; diff --git a/sw/search/functions_3.js b/sw/search/functions_3.js new file mode 100644 index 0000000000..2bd5c8d7d2 --- /dev/null +++ b/sw/search/functions_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['check_5fresult_0',['check_result',['../atomic__test_2main_8c.html#a4f4c6d8481b4100f90955ba5a70428a4',1,'main.c']]], + ['clear_5funiverse_1',['clear_universe',['../game__of__life_2main_8c.html#a819f10c5b644a07eeb069b6e7f12050e',1,'main.c']]], + ['compute_5frate_2',['compute_rate',['../demo__trng_2main_8c.html#abbde1237eed617466fb971a78c3acd1e',1,'main.c']]] +]; diff --git a/sw/search/functions_4.js b/sw/search/functions_4.js new file mode 100644 index 0000000000..91222bca01 --- /dev/null +++ b/sw/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dma_5ffirq_5fhandler_0',['dma_firq_handler',['../demo__dma_2main_8c.html#aefcc5abb86a652587ff69be120a66487',1,'main.c']]], + ['dump_5fmemory_1',['dump_memory',['../bus__explorer_2main_8c.html#a6405739c6012158151eb082c31c312da',1,'main.c']]] +]; diff --git a/sw/search/functions_5.js b/sw/search/functions_5.js new file mode 100644 index 0000000000..de76ff3d24 --- /dev/null +++ b/sw/search/functions_5.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['generate_5fhistogram_0',['generate_histogram',['../demo__trng_2main_8c.html#a4e49f5e3feb4bd5755f919cd3310b506',1,'main.c']]], + ['get_5fcell_1',['get_cell',['../game__of__life_2main_8c.html#a6bd541a19c62ea9ec620eaad3f218d16',1,'main.c']]], + ['get_5fexe_2',['get_exe',['../bootloader_8c.html#ac18819795adb6dbdd52b0587e7fbb569',1,'bootloader.c']]], + ['get_5fexe_5fword_3',['get_exe_word',['../bootloader_8c.html#ac58d9f7dc79a549bde1cb50f619c19af',1,'bootloader.c']]], + ['get_5fneighborhood_4',['get_neighborhood',['../game__of__life_2main_8c.html#a977190adaa24a3f49fca1540b51d25a0',1,'main.c']]], + ['get_5ftest_5fvector_5',['get_test_vector',['../float__corner__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void): main.c'],['../floating__point__test_2main_8c.html#a73c70bd0fb6d695cb113eaeb50923e3e',1,'get_test_vector(void): main.c']]], + ['getchar_6',['getchar',['../neorv32__uart_8c.html#a3e29caa20f7cffe18f410f01278905a8',1,'neorv32_uart.c']]], + ['global_5ftrap_5fhandler_7',['global_trap_handler',['../processor__check_2main_8c.html#a9a64ce0ee69c4c32cecc8b2b2746604c',1,'main.c']]], + ['gptmr_5ffirq_5fhandler_8',['gptmr_firq_handler',['../demo__gptmr_2main_8c.html#a2bd89412466a65329711bfd5c29199c9',1,'main.c']]] +]; diff --git a/sw/search/functions_6.js b/sw/search/functions_6.js new file mode 100644 index 0000000000..2a5ee30c60 --- /dev/null +++ b/sw/search/functions_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['hexdump_0',['hexdump',['../bus__explorer_2main_8c.html#a02640a99db37b8d92b9edffc9720a210',1,'main.c']]], + ['hsv2rgb_1',['hsv2rgb',['../demo__neopixel_2main_8c.html#a2736ec755f9e10c80bf66f727f870ffc',1,'main.c']]], + ['hw_5fbreakpoint_5fhandler_2',['hw_breakpoint_handler',['../processor__check_2main_8c.html#a31d9e432f6a368e6222f5e0907eeb6f4',1,'main.c']]] +]; diff --git a/sw/search/functions_7.js b/sw/search/functions_7.js new file mode 100644 index 0000000000..75781a31a8 --- /dev/null +++ b/sw/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['main_0',['main',['../bootloader_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void): bootloader.c'],['../atomic__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../bus__explorer_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__blink__led_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__cfs_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__cfu_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__crc_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__dma_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__emulate__unaligned_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__gptmr_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__hpm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__mtime_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__neopixel_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__newlib_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__onewire_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__pwm_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__sdi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__slink_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__spi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__spi__irq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__trng_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void): main.c'],['../demo__twi_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__wdt_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__xip_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../demo__xirq_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../float__corner__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../floating__point__test_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../game__of__life_2main_8c.html#a840291bc02cba5474a4cb46a9b9566fe',1,'main(void): main.c'],['../hello__world_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c'],['../processor__check_2main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): main.c']]], + ['main_5fdestructor_5ftest_1',['main_destructor_test',['../demo__newlib_2main_8c.html#a7076a1dfd3c18c91fcf665ce54b087b3',1,'main.c']]], + ['mtime_5firq_5fhandler_2',['mtime_irq_handler',['../demo__mtime_2main_8c.html#a329137855a7c2e098715a0771c5585d7',1,'main.c']]] +]; diff --git a/sw/search/functions_8.js b/sw/search/functions_8.js new file mode 100644 index 0000000000..c07dd614b1 --- /dev/null +++ b/sw/search/functions_8.js @@ -0,0 +1,231 @@ +var searchData= +[ + ['neorv32_5faux_5fdate2unixtime_0',['neorv32_aux_date2unixtime',['../neorv32__aux_8c.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date): neorv32_aux.c'],['../neorv32__aux_8h.html#a94aa8369ba5f4ebdf5628fcb1ab2ba1c',1,'neorv32_aux_date2unixtime(date_t *date): neorv32_aux.c']]], + ['neorv32_5faux_5fhexstr2uint64_1',['neorv32_aux_hexstr2uint64',['../neorv32__aux_8c.html#aec4703f369e1567c22f140d2ec9daafc',1,'neorv32_aux_hexstr2uint64(char *buffer, uint8_t length): neorv32_aux.c'],['../neorv32__aux_8h.html#aec4703f369e1567c22f140d2ec9daafc',1,'neorv32_aux_hexstr2uint64(char *buffer, uint8_t length): neorv32_aux.c']]], + ['neorv32_5faux_5funixtime2date_2',['neorv32_aux_unixtime2date',['../neorv32__aux_8c.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date): neorv32_aux.c'],['../neorv32__aux_8h.html#a885a81838a91b57797e849cb835c6887',1,'neorv32_aux_unixtime2date(uint64_t unixtime, date_t *date): neorv32_aux.c']]], + ['neorv32_5faux_5fxorshift32_3',['neorv32_aux_xorshift32',['../neorv32__aux_8c.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void): neorv32_aux.c'],['../neorv32__aux_8h.html#aff31dd983f75f70eeae331c65acaa50e',1,'neorv32_aux_xorshift32(void): neorv32_aux.c']]], + ['neorv32_5fcfs_5favailable_4',['neorv32_cfs_available',['../neorv32__cfs_8c.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void): neorv32_cfs.c'],['../neorv32__cfs_8h.html#abac96dfaefe433eca1c0b93fa6183d2e',1,'neorv32_cfs_available(void): neorv32_cfs.c']]], + ['neorv32_5fcpu_5famoaddw_5',['neorv32_cpu_amoaddw',['../neorv32__cpu__amo_8c.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#ada27ec89b2530f7b7f14de947cc82bf9',1,'neorv32_cpu_amoaddw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoandw_6',['neorv32_cpu_amoandw',['../neorv32__cpu__amo_8c.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a9b4540dadbfd5da907117570d8006e36',1,'neorv32_cpu_amoandw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famolr_7',['neorv32_cpu_amolr',['../neorv32__cpu__amo_8h.html#ad4437bbc61a4e40d7d01dfe9459f6639',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famomaxuw_8',['neorv32_cpu_amomaxuw',['../neorv32__cpu__amo_8c.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a31a6a3b5a33655f4a7b27d4c85b75f07',1,'neorv32_cpu_amomaxuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famomaxw_9',['neorv32_cpu_amomaxw',['../neorv32__cpu__amo_8c.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a62cf36637d7a04079228acecfe8a5cf3',1,'neorv32_cpu_amomaxw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominuw_10',['neorv32_cpu_amominuw',['../neorv32__cpu__amo_8c.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a1281e18b95cd525073e1123c5d04e9e2',1,'neorv32_cpu_amominuw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famominw_11',['neorv32_cpu_amominw',['../neorv32__cpu__amo_8c.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a8e383fb8825538b5579d5ce075830697',1,'neorv32_cpu_amominw(uint32_t addr, int32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoorw_12',['neorv32_cpu_amoorw',['../neorv32__cpu__amo_8c.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#adc80b1f2b3a4e70fee44c0edb08fc402',1,'neorv32_cpu_amoorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famosc_13',['neorv32_cpu_amosc',['../neorv32__cpu__amo_8h.html#a5e73eaa273c41a06972e862976fda53c',1,'neorv32_cpu_amo.h']]], + ['neorv32_5fcpu_5famoswapw_14',['neorv32_cpu_amoswapw',['../neorv32__cpu__amo_8c.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#aad0d96e61bacc3af13ff471dd44ca8e9',1,'neorv32_cpu_amoswapw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5famoxorw_15',['neorv32_cpu_amoxorw',['../neorv32__cpu__amo_8c.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c'],['../neorv32__cpu__amo_8h.html#a65b67f48356fa9b30596485473311377',1,'neorv32_cpu_amoxorw(uint32_t addr, uint32_t wdata): neorv32_cpu_amo.c']]], + ['neorv32_5fcpu_5fcfu_5favailable_16',['neorv32_cpu_cfu_available',['../neorv32__cpu__cfu_8c.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void): neorv32_cpu_cfu.c'],['../neorv32__cpu__cfu_8h.html#a13019b8afa1a80c0e5c24eb4d72e75c1',1,'neorv32_cpu_cfu_available(void): neorv32_cpu_cfu.c']]], + ['neorv32_5fcpu_5fcsr_5fclr_17',['neorv32_cpu_csr_clr',['../neorv32__cpu_8h.html#ab8f533ddbc3a3af5e3bca2287ac10122',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fread_18',['neorv32_cpu_csr_read',['../neorv32__cpu_8h.html#aab7a9f9cf608599f2b124dd499cb8418',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fset_19',['neorv32_cpu_csr_set',['../neorv32__cpu_8h.html#a25a09de97229aac839ef6f74da604acf',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fcsr_5fwrite_20',['neorv32_cpu_csr_write',['../neorv32__cpu_8h.html#afb5ef6e0b1a3e26570edfd8379490455',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fdelay_5fms_21',['neorv32_cpu_delay_ms',['../neorv32__cpu_8c.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms): neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa9027535b13d9f9325e734997fc4a137',1,'neorv32_cpu_delay_ms(uint32_t time_ms): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fclk_5ffrom_5fprsc_22',['neorv32_cpu_get_clk_from_prsc',['../neorv32__cpu_8c.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a8346fb926f84f3d7bccbb4741105505f',1,'neorv32_cpu_get_clk_from_prsc(int prsc): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5fcycle_23',['neorv32_cpu_get_cycle',['../neorv32__cpu_8c.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#ac3fd7dc7cd1e0a08225c41820af27f92',1,'neorv32_cpu_get_cycle(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fget_5finstret_24',['neorv32_cpu_get_instret',['../neorv32__cpu_8c.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a387aa304770b05594c4acca128a60a75',1,'neorv32_cpu_get_instret(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fgoto_5fuser_5fmode_25',['neorv32_cpu_goto_user_mode',['../neorv32__cpu_8c.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#aca49efb45d3808ad76cf65ba291f546d',1,'neorv32_cpu_goto_user_mode(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fnum_5fcounters_26',['neorv32_cpu_hpm_get_num_counters',['../neorv32__cpu_8c.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a70f49b80322aa457f29f7671f94a183d',1,'neorv32_cpu_hpm_get_num_counters(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fhpm_5fget_5fsize_27',['neorv32_cpu_hpm_get_size',['../neorv32__cpu_8c.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#adb3ae542bbb0ddf9f562a4e42bc24d10',1,'neorv32_cpu_hpm_get_size(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fload_5fsigned_5fbyte_28',['neorv32_cpu_load_signed_byte',['../neorv32__cpu_8h.html#a31f903596ab1bcddea79fdf608eaa666',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5fsigned_5fhalf_29',['neorv32_cpu_load_signed_half',['../neorv32__cpu_8h.html#ae9c8b6c681536ddea3aff0e63f30ef70',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fbyte_30',['neorv32_cpu_load_unsigned_byte',['../neorv32__cpu_8h.html#ac54ec9b59e17c7cd9b9907abee82ce95',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fhalf_31',['neorv32_cpu_load_unsigned_half',['../neorv32__cpu_8h.html#a32544cd652debb4affb308806a115d5b',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fload_5funsigned_5fword_32',['neorv32_cpu_load_unsigned_word',['../neorv32__cpu_8h.html#a3b6cf445e2136486564ef3d3473c91dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fpmp_5fconfigure_5fregion_33',['neorv32_cpu_pmp_configure_region',['../neorv32__cpu_8c.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config): neorv32_cpu.c'],['../neorv32__cpu_8h.html#aa458a700619b2f7666cfcffe02ec2e2c',1,'neorv32_cpu_pmp_configure_region(int index, uint32_t addr, uint8_t config): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fgranularity_34',['neorv32_cpu_pmp_get_granularity',['../neorv32__cpu_8c.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#ad4f8160f4821b6691e9682ef60c7cd7b',1,'neorv32_cpu_pmp_get_granularity(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fpmp_5fget_5fnum_5fregions_35',['neorv32_cpu_pmp_get_num_regions',['../neorv32__cpu_8c.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a27dd614bc270dfa30ed73323ebda2d2d',1,'neorv32_cpu_pmp_get_num_regions(void): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fmcycle_36',['neorv32_cpu_set_mcycle',['../neorv32__cpu_8c.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a232d0290c459dc790d989fcdc4d121bf',1,'neorv32_cpu_set_mcycle(uint64_t value): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fset_5fminstret_37',['neorv32_cpu_set_minstret',['../neorv32__cpu_8c.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value): neorv32_cpu.c'],['../neorv32__cpu_8h.html#a5c3cf52498abb3cf3c14a724b287ecf0',1,'neorv32_cpu_set_minstret(uint64_t value): neorv32_cpu.c']]], + ['neorv32_5fcpu_5fsleep_38',['neorv32_cpu_sleep',['../neorv32__cpu_8h.html#a769ca4556213619f6fea4ff6bfb979dd',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fbyte_39',['neorv32_cpu_store_unsigned_byte',['../neorv32__cpu_8h.html#aeec8ad2a82885c40a307346f9003483e',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fhalf_40',['neorv32_cpu_store_unsigned_half',['../neorv32__cpu_8h.html#a31f30f6d6542758cd3073a9939b07653',1,'neorv32_cpu.h']]], + ['neorv32_5fcpu_5fstore_5funsigned_5fword_41',['neorv32_cpu_store_unsigned_word',['../neorv32__cpu_8h.html#a173bb06b4ae9c8964469068dafcb7b0e',1,'neorv32_cpu.h']]], + ['neorv32_5fcrc_5favailable_42',['neorv32_crc_available',['../neorv32__crc_8c.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void): neorv32_crc.c'],['../neorv32__crc_8h.html#aa46c647317752f8bb6d5836d4876a704',1,'neorv32_crc_available(void): neorv32_crc.c']]], + ['neorv32_5fcrc_5fblock_43',['neorv32_crc_block',['../neorv32__crc_8c.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length): neorv32_crc.c'],['../neorv32__crc_8h.html#a9243006e6cc94c03450646d26a7289b2',1,'neorv32_crc_block(uint8_t *byte, int length): neorv32_crc.c']]], + ['neorv32_5fcrc_5fget_44',['neorv32_crc_get',['../neorv32__crc_8c.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void): neorv32_crc.c'],['../neorv32__crc_8h.html#a444b88f1536f65acc301fb19eddcf227',1,'neorv32_crc_get(void): neorv32_crc.c']]], + ['neorv32_5fcrc_5fsetup_45',['neorv32_crc_setup',['../neorv32__crc_8c.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start): neorv32_crc.c'],['../neorv32__crc_8h.html#a4ff5f7b91e9f668535ed33b6382ae623',1,'neorv32_crc_setup(uint32_t mode, uint32_t poly, uint32_t start): neorv32_crc.c']]], + ['neorv32_5fcrc_5fsingle_46',['neorv32_crc_single',['../neorv32__crc_8c.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte): neorv32_crc.c'],['../neorv32__crc_8h.html#ad9d50c76a485160667d486bce32cbeb8',1,'neorv32_crc_single(uint8_t byte): neorv32_crc.c']]], + ['neorv32_5fdma_5favailable_47',['neorv32_dma_available',['../neorv32__dma_8h.html#a13260c3252f0375d8982590d270d7dfd',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fdisable_48',['neorv32_dma_disable',['../neorv32__dma_8h.html#a6df244028455cf7f8d4cf1520c4670a7',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fdone_49',['neorv32_dma_done',['../neorv32__dma_8h.html#afc8cc32f7d80d0f5ab33b2f1ecf77956',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fenable_50',['neorv32_dma_enable',['../neorv32__dma_8h.html#ac3b72447e8a132faf26577ac714b8284',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fdisable_51',['neorv32_dma_fence_disable',['../neorv32__dma_8h.html#a8f37adfa07050b0a1cb8430c9ce1fcc2',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ffence_5fenable_52',['neorv32_dma_fence_enable',['../neorv32__dma_8h.html#a2c7257567ccdb7a986f5ef7c74d3917c',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5fstatus_53',['neorv32_dma_status',['../neorv32__dma_8h.html#aa116f9714174abbe8a3583e441fee24b',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ftransfer_54',['neorv32_dma_transfer',['../neorv32__dma_8h.html#a2ce0d31e04604b2523135d52a877febf',1,'neorv32_dma.c']]], + ['neorv32_5fdma_5ftransfer_5fauto_55',['neorv32_dma_transfer_auto',['../neorv32__dma_8h.html#a6ebd1595ee6fa0e6cbfbd1ce7476f18e',1,'neorv32_dma.c']]], + ['neorv32_5fgpio_5favailable_56',['neorv32_gpio_available',['../neorv32__gpio_8c.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a41d39a41ba5879eb85d3ed4481fcff81',1,'neorv32_gpio_available(void): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5fget_57',['neorv32_gpio_pin_get',['../neorv32__gpio_8c.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin): neorv32_gpio.c'],['../neorv32__gpio_8h.html#afa3ee54aca47ff35f706b627ac66e95a',1,'neorv32_gpio_pin_get(int pin): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5fset_58',['neorv32_gpio_pin_set',['../neorv32__gpio_8c.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a60fd0830d634f0c1f784d815384665cb',1,'neorv32_gpio_pin_set(int pin, int value): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fpin_5ftoggle_59',['neorv32_gpio_pin_toggle',['../neorv32__gpio_8c.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a1958850fc1689eae9ddfcaa4a7513400',1,'neorv32_gpio_pin_toggle(int pin): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fget_60',['neorv32_gpio_port_get',['../neorv32__gpio_8c.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void): neorv32_gpio.c'],['../neorv32__gpio_8h.html#ac42379f2fb5ca0bb63850d7957852b84',1,'neorv32_gpio_port_get(void): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5fset_61',['neorv32_gpio_port_set',['../neorv32__gpio_8c.html#a8dc7846945e4609fc96d81caee99ac00',1,'neorv32_gpio_port_set(uint64_t port_data): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a789222709485cd8467aad5eddf69d2df',1,'neorv32_gpio_port_set(uint64_t d): neorv32_gpio.c']]], + ['neorv32_5fgpio_5fport_5ftoggle_62',['neorv32_gpio_port_toggle',['../neorv32__gpio_8c.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle): neorv32_gpio.c'],['../neorv32__gpio_8h.html#a210529f789779387d3f014e6253e803f',1,'neorv32_gpio_port_toggle(uint64_t toggle): neorv32_gpio.c']]], + ['neorv32_5fgptmr_5favailable_63',['neorv32_gptmr_available',['../neorv32__gptmr_8c.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ae79a08c52ad3e83f9c4393acfabf035f',1,'neorv32_gptmr_available(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fdisable_64',['neorv32_gptmr_disable',['../neorv32__gptmr_8c.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a7c9bc6d28ad12611b08fa2867c2db874',1,'neorv32_gptmr_disable(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fenable_65',['neorv32_gptmr_enable',['../neorv32__gptmr_8c.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a59e684348835772a7e83446e478d4a13',1,'neorv32_gptmr_enable(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5firq_5fack_66',['neorv32_gptmr_irq_ack',['../neorv32__gptmr_8c.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#ac73aa4e41a064abb4ca554a389888e67',1,'neorv32_gptmr_irq_ack(void): neorv32_gptmr.c']]], + ['neorv32_5fgptmr_5fsetup_67',['neorv32_gptmr_setup',['../neorv32__gptmr_8c.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode): neorv32_gptmr.c'],['../neorv32__gptmr_8h.html#a6aa27efd2163eebf8fc49fe1c591708f',1,'neorv32_gptmr_setup(int prsc, uint32_t threshold, int cont_mode): neorv32_gptmr.c']]], + ['neorv32_5fmtime_5favailable_68',['neorv32_mtime_available',['../neorv32__mtime_8c.html#ab2b49a0594c66692aedf76ff9935581c',1,'neorv32_mtime_available(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#ab2b49a0594c66692aedf76ff9935581c',1,'neorv32_mtime_available(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fget_5ftime_69',['neorv32_mtime_get_time',['../neorv32__mtime_8c.html#adedbbdeb71c06d2d60d3af73451de01e',1,'neorv32_mtime_get_time(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#adedbbdeb71c06d2d60d3af73451de01e',1,'neorv32_mtime_get_time(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fget_5ftimecmp_70',['neorv32_mtime_get_timecmp',['../neorv32__mtime_8c.html#acb3cc18ff8421ebd6ef471e089c23491',1,'neorv32_mtime_get_timecmp(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#acb3cc18ff8421ebd6ef471e089c23491',1,'neorv32_mtime_get_timecmp(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fget_5funixtime_71',['neorv32_mtime_get_unixtime',['../neorv32__mtime_8c.html#a50d08fcc3d91fc2d88b9a6a80c656f1a',1,'neorv32_mtime_get_unixtime(void): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a50d08fcc3d91fc2d88b9a6a80c656f1a',1,'neorv32_mtime_get_unixtime(void): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fset_5ftime_72',['neorv32_mtime_set_time',['../neorv32__mtime_8c.html#a1c30809d6e887f022a7794f720243015',1,'neorv32_mtime_set_time(uint64_t time): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a1c30809d6e887f022a7794f720243015',1,'neorv32_mtime_set_time(uint64_t time): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fset_5ftimecmp_73',['neorv32_mtime_set_timecmp',['../neorv32__mtime_8c.html#a81ff371c1aa10901264873316ee84a49',1,'neorv32_mtime_set_timecmp(uint64_t timecmp): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a81ff371c1aa10901264873316ee84a49',1,'neorv32_mtime_set_timecmp(uint64_t timecmp): neorv32_mtime.c']]], + ['neorv32_5fmtime_5fset_5funixtime_74',['neorv32_mtime_set_unixtime',['../neorv32__mtime_8c.html#a022c3292c6e75095bb3ffd4c42fd4bfa',1,'neorv32_mtime_set_unixtime(uint64_t unixtime): neorv32_mtime.c'],['../neorv32__mtime_8h.html#a022c3292c6e75095bb3ffd4c42fd4bfa',1,'neorv32_mtime_set_unixtime(uint64_t unixtime): neorv32_mtime.c']]], + ['neorv32_5fneoled_5favailable_75',['neorv32_neoled_available',['../neorv32__neoled_8c.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a57398d92fb4fc735b33e89271726e1d6',1,'neorv32_neoled_available(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fdisable_76',['neorv32_neoled_disable',['../neorv32__neoled_8c.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8daaa97a85e0eb94d4a38eb2119ea183',1,'neorv32_neoled_disable(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fenable_77',['neorv32_neoled_enable',['../neorv32__neoled_8c.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a8181d5c1d15b7b5eecdc018341ac14fa',1,'neorv32_neoled_enable(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fget_5fbuffer_5fsize_78',['neorv32_neoled_get_buffer_size',['../neorv32__neoled_8c.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a81c2c49198531fb6551eb288e29c084e',1,'neorv32_neoled_get_buffer_size(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fset_5fmode_79',['neorv32_neoled_set_mode',['../neorv32__neoled_8c.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a484fcc6797b6d9cef86192e9593ec33d',1,'neorv32_neoled_set_mode(uint32_t mode): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_80',['neorv32_neoled_setup',['../neorv32__neoled_8c.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode): neorv32_neoled.c'],['../neorv32__neoled_8h.html#ac6e94602453779a2791bd0734465f5a3',1,'neorv32_neoled_setup(uint32_t prsc, uint32_t t_total, uint32_t t_high_zero, uint32_t t_high_one, int irq_mode): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fsetup_5fws2812_81',['neorv32_neoled_setup_ws2812',['../neorv32__neoled_8c.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode): neorv32_neoled.c'],['../neorv32__neoled_8h.html#adade69c7368c28180b9992d5f0ab6031',1,'neorv32_neoled_setup_ws2812(int irq_mode): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fblocking_82',['neorv32_neoled_strobe_blocking',['../neorv32__neoled_8c.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a5aa9eb4dd3655fa08e1b61eb0f36589c',1,'neorv32_neoled_strobe_blocking(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fstrobe_5fnonblocking_83',['neorv32_neoled_strobe_nonblocking',['../neorv32__neoled_8c.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void): neorv32_neoled.c'],['../neorv32__neoled_8h.html#abf7882b949373df0774fc9cc20c2bd2e',1,'neorv32_neoled_strobe_nonblocking(void): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fwrite_5fblocking_84',['neorv32_neoled_write_blocking',['../neorv32__neoled_8c.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data): neorv32_neoled.c'],['../neorv32__neoled_8h.html#a3ee5b3602da3ae982628e2802587e451',1,'neorv32_neoled_write_blocking(uint32_t data): neorv32_neoled.c']]], + ['neorv32_5fneoled_5fwrite_5fnonblocking_85',['neorv32_neoled_write_nonblocking',['../neorv32__neoled_8h.html#ad2a318bd59be12de34797ced0f7743c6',1,'neorv32_neoled.h']]], + ['neorv32_5fonewire_5favailable_86',['neorv32_onewire_available',['../neorv32__onewire_8c.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a865e5c381fd3c27c6981a589a5124d1e',1,'neorv32_onewire_available(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fbusy_87',['neorv32_onewire_busy',['../neorv32__onewire_8c.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01b6236b89c045ddbd58398361c6ee0a',1,'neorv32_onewire_busy(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fdisable_88',['neorv32_onewire_disable',['../neorv32__onewire_8c.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7e329eeb1cd98301a53b271a6a102385',1,'neorv32_onewire_disable(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fenable_89',['neorv32_onewire_enable',['../neorv32__onewire_8c.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#ae6fe766e7decf18869cfb86bba741ca4',1,'neorv32_onewire_enable(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_90',['neorv32_onewire_read_bit',['../neorv32__onewire_8c.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#aace8398062b759256a516e6245aced83',1,'neorv32_onewire_read_bit(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fblocking_91',['neorv32_onewire_read_bit_blocking',['../neorv32__onewire_8c.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#ace8b7cf697b068b6b51676d84dec5960',1,'neorv32_onewire_read_bit_blocking(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbit_5fget_92',['neorv32_onewire_read_bit_get',['../neorv32__onewire_8c.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#aa4a19d2d8dc3b3401307615aec201190',1,'neorv32_onewire_read_bit_get(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_93',['neorv32_onewire_read_byte',['../neorv32__onewire_8c.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a01ddba7a9148be542b5c52e39e6f46d6',1,'neorv32_onewire_read_byte(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fblocking_94',['neorv32_onewire_read_byte_blocking',['../neorv32__onewire_8c.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a7510e65a26aeefb40e994fd00667537e',1,'neorv32_onewire_read_byte_blocking(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fread_5fbyte_5fget_95',['neorv32_onewire_read_byte_get',['../neorv32__onewire_8c.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a4c7eec15c095c97c939163f631f51dab',1,'neorv32_onewire_read_byte_get(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_96',['neorv32_onewire_reset',['../neorv32__onewire_8c.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a3072f7167831edc95dee44ecfef6a0d4',1,'neorv32_onewire_reset(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fblocking_97',['neorv32_onewire_reset_blocking',['../neorv32__onewire_8c.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#af8ca6be495176797b7da3857e2f794f9',1,'neorv32_onewire_reset_blocking(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5freset_5fget_5fpresence_98',['neorv32_onewire_reset_get_presence',['../neorv32__onewire_8c.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a43eb8a08eeaa83e3d7e9aa5058a4269f',1,'neorv32_onewire_reset_get_presence(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsense_99',['neorv32_onewire_sense',['../neorv32__onewire_8c.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a122531c7154126858c46d89e003d838d',1,'neorv32_onewire_sense(void): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fsetup_100',['neorv32_onewire_setup',['../neorv32__onewire_8c.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a224005037387484dfa510a1355a62828',1,'neorv32_onewire_setup(uint32_t t_base): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbit_101',['neorv32_onewire_write_bit',['../neorv32__onewire_8c.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a49d0a2a386f129fd2f4fed880bba31d4',1,'neorv32_onewire_write_bit(uint8_t bit): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbit_5fblocking_102',['neorv32_onewire_write_bit_blocking',['../neorv32__onewire_8c.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a6f7b6690a2437e0b574a8a9a23dc0eaa',1,'neorv32_onewire_write_bit_blocking(uint8_t bit): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_103',['neorv32_onewire_write_byte',['../neorv32__onewire_8c.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte): neorv32_onewire.c'],['../neorv32__onewire_8h.html#a23b96b68c3214b188525eb102cafb620',1,'neorv32_onewire_write_byte(uint8_t byte): neorv32_onewire.c']]], + ['neorv32_5fonewire_5fwrite_5fbyte_5fblocking_104',['neorv32_onewire_write_byte_blocking',['../neorv32__onewire_8c.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte): neorv32_onewire.c'],['../neorv32__onewire_8h.html#ac78557c77482b59394677f42fda4fdf1',1,'neorv32_onewire_write_byte_blocking(uint8_t byte): neorv32_onewire.c']]], + ['neorv32_5fpmw_5fget_5fnum_5fchannels_105',['neorv32_pmw_get_num_channels',['../neorv32__pwm_8c.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a43d8a47dc79ebac24c8a7d2d8247d2a5',1,'neorv32_pmw_get_num_channels(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_5favailable_106',['neorv32_pwm_available',['../neorv32__pwm_8c.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#afb12c860b2f7fa6cd1e069ea540da41c',1,'neorv32_pwm_available(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fdisable_107',['neorv32_pwm_disable',['../neorv32__pwm_8c.html#a8f16fdc6e048899305a3234f42fe272f',1,'neorv32_pwm_disable(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a8f16fdc6e048899305a3234f42fe272f',1,'neorv32_pwm_disable(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fenable_108',['neorv32_pwm_enable',['../neorv32__pwm_8c.html#abc62a63dc139b185cdf53d0267501288',1,'neorv32_pwm_enable(void): neorv32_pwm.c'],['../neorv32__pwm_8h.html#abc62a63dc139b185cdf53d0267501288',1,'neorv32_pwm_enable(void): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fget_109',['neorv32_pwm_get',['../neorv32__pwm_8c.html#a64f66ae4f9689a650a70f3c5b45802b6',1,'neorv32_pwm_get(int channel): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a64f66ae4f9689a650a70f3c5b45802b6',1,'neorv32_pwm_get(int channel): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fset_110',['neorv32_pwm_set',['../neorv32__pwm_8c.html#aa24bc867effa7756bfbe7818d85aface',1,'neorv32_pwm_set(int channel, uint8_t dc): neorv32_pwm.c'],['../neorv32__pwm_8h.html#aa24bc867effa7756bfbe7818d85aface',1,'neorv32_pwm_set(int channel, uint8_t dc): neorv32_pwm.c']]], + ['neorv32_5fpwm_5fsetup_111',['neorv32_pwm_setup',['../neorv32__pwm_8c.html#a5502d483de07d2d8c42e2388ed987069',1,'neorv32_pwm_setup(int prsc): neorv32_pwm.c'],['../neorv32__pwm_8h.html#a5502d483de07d2d8c42e2388ed987069',1,'neorv32_pwm_setup(int prsc): neorv32_pwm.c']]], + ['neorv32_5frte_5fcontext_5fget_112',['neorv32_rte_context_get',['../neorv32__rte_8c.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x): neorv32_rte.c'],['../neorv32__rte_8h.html#a65e71acc8916b42b59dc2cf6bba30ba3',1,'neorv32_rte_context_get(int x): neorv32_rte.c']]], + ['neorv32_5frte_5fcontext_5fput_113',['neorv32_rte_context_put',['../neorv32__rte_8c.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data): neorv32_rte.c'],['../neorv32__rte_8h.html#ae13a9c1fd59ad71afb0d47cf9a0b303e',1,'neorv32_rte_context_put(int x, uint32_t data): neorv32_rte.c']]], + ['neorv32_5frte_5fdebug_5fhandler_114',['neorv32_rte_debug_handler',['../neorv32__rte_8c.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a65422bb44f1e7bc011e9bfc5d8451ebe',1,'neorv32_rte_debug_handler(void): neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5finstall_115',['neorv32_rte_handler_install',['../neorv32__rte_8c.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)): neorv32_rte.c'],['../neorv32__rte_8h.html#a2cf31cfa569a03a20d554b6400c4c5e2',1,'neorv32_rte_handler_install(int id, void(*handler)(void)): neorv32_rte.c']]], + ['neorv32_5frte_5fhandler_5funinstall_116',['neorv32_rte_handler_uninstall',['../neorv32__rte_8c.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id): neorv32_rte.c'],['../neorv32__rte_8h.html#a10fde6229bf391e46148405616404a65',1,'neorv32_rte_handler_uninstall(int id): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fabout_117',['neorv32_rte_print_about',['../neorv32__rte_8c.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void): neorv32_rte.c'],['../neorv32__rte_8h.html#aa442c0e39f9156a131c3432fda587692',1,'neorv32_rte_print_about(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fconfig_118',['neorv32_rte_print_hw_config',['../neorv32__rte_8c.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a05e8304963e402d228a76aff1868771c',1,'neorv32_rte_print_hw_config(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5fhw_5fversion_119',['neorv32_rte_print_hw_version',['../neorv32__rte_8c.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void): neorv32_rte.c'],['../neorv32__rte_8h.html#aad6f5256a265807c4cde163bcba8dae9',1,'neorv32_rte_print_hw_version(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flicense_120',['neorv32_rte_print_license',['../neorv32__rte_8c.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void): neorv32_rte.c'],['../neorv32__rte_8h.html#acd96aa73eebe6d4bbc9aabe1230cbabc',1,'neorv32_rte_print_license(void): neorv32_rte.c']]], + ['neorv32_5frte_5fprint_5flogo_121',['neorv32_rte_print_logo',['../neorv32__rte_8c.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a16df1b48f2e1258a51d3bb7f49531cf3',1,'neorv32_rte_print_logo(void): neorv32_rte.c']]], + ['neorv32_5frte_5fsetup_122',['neorv32_rte_setup',['../neorv32__rte_8c.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void): neorv32_rte.c'],['../neorv32__rte_8h.html#a343e1913bdc37db9b168fb4def0e6170',1,'neorv32_rte_setup(void): neorv32_rte.c']]], + ['neorv32_5fsdi_5favailable_123',['neorv32_sdi_available',['../neorv32__sdi_8c.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a51412722efdb18cd09667622b215e825',1,'neorv32_sdi_available(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fcheck_5fcs_124',['neorv32_sdi_check_cs',['../neorv32__sdi_8c.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a2636cf1959ce1f3eb4b77c00ca2e2707',1,'neorv32_sdi_check_cs(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fdisable_125',['neorv32_sdi_disable',['../neorv32__sdi_8c.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a8bd54bca8aea6147651c8115ee616f54',1,'neorv32_sdi_disable(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fenable_126',['neorv32_sdi_enable',['../neorv32__sdi_8c.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a5d68b9b1642baf3519076e55a22a8f61',1,'neorv32_sdi_enable(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_127',['neorv32_sdi_get',['../neorv32__sdi_8c.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a4d54ce22ec97eb83da118439576e3277',1,'neorv32_sdi_get(uint8_t *data): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fget_5ffifo_5fdepth_128',['neorv32_sdi_get_fifo_depth',['../neorv32__sdi_8c.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a7390faeb01b4de3dd5ac18335736b90c',1,'neorv32_sdi_get_fifo_depth(void): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fput_129',['neorv32_sdi_put',['../neorv32__sdi_8c.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data): neorv32_sdi.c'],['../neorv32__sdi_8h.html#ac7a262d16c42bbac27723ff779545569',1,'neorv32_sdi_put(uint8_t data): neorv32_sdi.c']]], + ['neorv32_5fsdi_5fsetup_130',['neorv32_sdi_setup',['../neorv32__sdi_8c.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask): neorv32_sdi.c'],['../neorv32__sdi_8h.html#a3246118dc0d7e1f61bc2485bbab44149',1,'neorv32_sdi_setup(uint32_t irq_mask): neorv32_sdi.c']]], + ['neorv32_5fslink_5favailable_131',['neorv32_slink_available',['../neorv32__slink_8c.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void): neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0f7bc96b797e819ccaae94292d9ddb',1,'neorv32_slink_available(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fcheck_5flast_132',['neorv32_slink_check_last',['../neorv32__slink_8c.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void): neorv32_slink.c'],['../neorv32__slink_8h.html#a3e02c558548c1c6178c49adee9a007f7',1,'neorv32_slink_check_last(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fget_133',['neorv32_slink_get',['../neorv32__slink_8c.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ace319592c12dc6a0fe1b7dd66bdf9284',1,'neorv32_slink_get(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5frx_5ffifo_5fdepth_134',['neorv32_slink_get_rx_fifo_depth',['../neorv32__slink_8c.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void): neorv32_slink.c'],['../neorv32__slink_8h.html#a575c7663ca0bd07c95b1d45152a3ddf8',1,'neorv32_slink_get_rx_fifo_depth(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5fsrc_135',['neorv32_slink_get_src',['../neorv32__slink_8c.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void): neorv32_slink.c'],['../neorv32__slink_8h.html#a1a9269f42552a849450aecd99f7ec7a0',1,'neorv32_slink_get_src(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fget_5ftx_5ffifo_5fdepth_136',['neorv32_slink_get_tx_fifo_depth',['../neorv32__slink_8c.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void): neorv32_slink.c'],['../neorv32__slink_8h.html#aaf0d0d1b890353d4f3bf49450ec2fad2',1,'neorv32_slink_get_tx_fifo_depth(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fput_137',['neorv32_slink_put',['../neorv32__slink_8c.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data): neorv32_slink.c'],['../neorv32__slink_8h.html#aaa9fdb9cbfa7888e92790ab65431d21d',1,'neorv32_slink_put(uint32_t tx_data): neorv32_slink.c']]], + ['neorv32_5fslink_5fput_5flast_138',['neorv32_slink_put_last',['../neorv32__slink_8c.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data): neorv32_slink.c'],['../neorv32__slink_8h.html#a2136bc0b12ee2e6703e84a6417a1e8eb',1,'neorv32_slink_put_last(uint32_t tx_data): neorv32_slink.c']]], + ['neorv32_5fslink_5frx_5fclear_139',['neorv32_slink_rx_clear',['../neorv32__slink_8c.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ad149fea81e6d28f77450b8ba50cf706e',1,'neorv32_slink_rx_clear(void): neorv32_slink.c']]], + ['neorv32_5fslink_5frx_5fstatus_140',['neorv32_slink_rx_status',['../neorv32__slink_8c.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ad57fc0941fe32e8bf423ce3e57e2c10a',1,'neorv32_slink_rx_status(void): neorv32_slink.c']]], + ['neorv32_5fslink_5fset_5fdst_141',['neorv32_slink_set_dst',['../neorv32__slink_8c.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst): neorv32_slink.c'],['../neorv32__slink_8h.html#ad857d7e78ca2b5eb0d0a4f2c515fe7bc',1,'neorv32_slink_set_dst(uint32_t dst): neorv32_slink.c']]], + ['neorv32_5fslink_5fsetup_142',['neorv32_slink_setup',['../neorv32__slink_8c.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq): neorv32_slink.c'],['../neorv32__slink_8h.html#a8f0b4a768f53a72a5c16034e160ce321',1,'neorv32_slink_setup(uint32_t rx_irq, uint32_t tx_irq): neorv32_slink.c']]], + ['neorv32_5fslink_5ftx_5fclear_143',['neorv32_slink_tx_clear',['../neorv32__slink_8c.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ac7484e9e3848f94efe016dd064f6a57f',1,'neorv32_slink_tx_clear(void): neorv32_slink.c']]], + ['neorv32_5fslink_5ftx_5fstatus_144',['neorv32_slink_tx_status',['../neorv32__slink_8c.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void): neorv32_slink.c'],['../neorv32__slink_8h.html#ad0252e7ae915e5840cd17e8c52e94a1c',1,'neorv32_slink_tx_status(void): neorv32_slink.c']]], + ['neorv32_5fspi_5favailable_145',['neorv32_spi_available',['../neorv32__spi_8c.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a7266ee439d0ec11c5cedd4bf1a258272',1,'neorv32_spi_available(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fbusy_146',['neorv32_spi_busy',['../neorv32__spi_8c.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a332c7a1be511812ac0a2b102c165398a',1,'neorv32_spi_busy(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcheck_5fcs_147',['neorv32_spi_check_cs',['../neorv32__spi_8c.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a82bb4d4c222b2bdc57e917c348481501',1,'neorv32_spi_check_cs(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_148',['neorv32_spi_cs_dis',['../neorv32__spi_8c.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void): neorv32_spi.c'],['../neorv32__spi_8h.html#aa10ec90ccba6325eeeebb8f6f298d30c',1,'neorv32_spi_cs_dis(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fdis_5fnonblocking_149',['neorv32_spi_cs_dis_nonblocking',['../neorv32__spi_8c.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void): neorv32_spi.c'],['../neorv32__spi_8h.html#ad8dd1b5a85a9daef4c8c21c9990884c1',1,'neorv32_spi_cs_dis_nonblocking(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_150',['neorv32_spi_cs_en',['../neorv32__spi_8c.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs): neorv32_spi.c'],['../neorv32__spi_8h.html#a737961d040ac09567350f89034f9e122',1,'neorv32_spi_cs_en(int cs): neorv32_spi.c']]], + ['neorv32_5fspi_5fcs_5fen_5fnonblocking_151',['neorv32_spi_cs_en_nonblocking',['../neorv32__spi_8c.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs): neorv32_spi.c'],['../neorv32__spi_8h.html#a97b5536347a27b053f071ba49071ba6f',1,'neorv32_spi_cs_en_nonblocking(int cs): neorv32_spi.c']]], + ['neorv32_5fspi_5fdisable_152',['neorv32_spi_disable',['../neorv32__spi_8c.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a817dd9a38bfceb2048e40874a83ba169',1,'neorv32_spi_disable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fenable_153',['neorv32_spi_enable',['../neorv32__spi_8c.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a8fa25d144ccb20a2faf0450c8dddd16e',1,'neorv32_spi_enable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fclock_5fspeed_154',['neorv32_spi_get_clock_speed',['../neorv32__spi_8c.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a01c6b63d7349447e2277f2649c3c89f2',1,'neorv32_spi_get_clock_speed(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5ffifo_5fdepth_155',['neorv32_spi_get_fifo_depth',['../neorv32__spi_8c.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void): neorv32_spi.c'],['../neorv32__spi_8h.html#ae1c4da7e4dc2e42b04d7187f684f142c',1,'neorv32_spi_get_fifo_depth(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fget_5fnonblocking_156',['neorv32_spi_get_nonblocking',['../neorv32__spi_8c.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void): neorv32_spi.c'],['../neorv32__spi_8h.html#aad66fa8f8d1a92d4f355de7579bfbfd2',1,'neorv32_spi_get_nonblocking(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fdisable_157',['neorv32_spi_highspeed_disable',['../neorv32__spi_8c.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#a67e9717635e272bc0e04408135a2f04d',1,'neorv32_spi_highspeed_disable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5fhighspeed_5fenable_158',['neorv32_spi_highspeed_enable',['../neorv32__spi_8c.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void): neorv32_spi.c'],['../neorv32__spi_8h.html#acf131faa3ad970c19a3cd8a47cb54f65',1,'neorv32_spi_highspeed_enable(void): neorv32_spi.c']]], + ['neorv32_5fspi_5finit_159',['neorv32_spi_init',['../neorv32__spi__irq_8c.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a4aa4746fd210ecc0c3614089a6951ddf',1,'neorv32_spi_init(t_neorv32_spi *self): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fisr_160',['neorv32_spi_isr',['../neorv32__spi__irq_8c.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#aa641816bb302df497664aa21ea69ed16',1,'neorv32_spi_isr(t_neorv32_spi *self): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fput_5fnonblocking_161',['neorv32_spi_put_nonblocking',['../neorv32__spi_8c.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data): neorv32_spi.c'],['../neorv32__spi_8h.html#aec8583e988789e846d21c2a35e6b06e7',1,'neorv32_spi_put_nonblocking(uint8_t tx_data): neorv32_spi.c']]], + ['neorv32_5fspi_5frw_162',['neorv32_spi_rw',['../neorv32__spi__irq_8c.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1f44ed849415d8e1d659c0485762c485',1,'neorv32_spi_rw(t_neorv32_spi *self, uint8_t csn, void *spi, uint32_t len): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5frw_5fbusy_163',['neorv32_spi_rw_busy',['../neorv32__spi__irq_8c.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self): neorv32_spi_irq.c'],['../neorv32__spi__irq_8h.html#a1863e19932bc6a79f2ca27d23eb74ef5',1,'neorv32_spi_rw_busy(t_neorv32_spi *self): neorv32_spi_irq.c']]], + ['neorv32_5fspi_5fsetup_164',['neorv32_spi_setup',['../neorv32__spi_8c.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask): neorv32_spi.c'],['../neorv32__spi_8h.html#a7d8124d986b69210081df6f1aa653552',1,'neorv32_spi_setup(int prsc, int cdiv, int clk_phase, int clk_polarity, uint32_t irq_mask): neorv32_spi.c']]], + ['neorv32_5fspi_5ftrans_165',['neorv32_spi_trans',['../neorv32__spi_8c.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data): neorv32_spi.c'],['../neorv32__spi_8h.html#a7af79950eefc26e67a89bde02f255532',1,'neorv32_spi_trans(uint8_t tx_data): neorv32_spi.c']]], + ['neorv32_5ftrng_5favailable_166',['neorv32_trng_available',['../neorv32__trng_8c.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void): neorv32_trng.c'],['../neorv32__trng_8h.html#af0c4139ff68763623b3d658a8dd8b5ce',1,'neorv32_trng_available(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fcheck_5fsim_5fmode_167',['neorv32_trng_check_sim_mode',['../neorv32__trng_8c.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void): neorv32_trng.c'],['../neorv32__trng_8h.html#aba36f08dd88f2f3e58353ae72eaa14f7',1,'neorv32_trng_check_sim_mode(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fdisable_168',['neorv32_trng_disable',['../neorv32__trng_8c.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void): neorv32_trng.c'],['../neorv32__trng_8h.html#ae838bc980e28c300dc2c9c3f34a46bb8',1,'neorv32_trng_disable(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fenable_169',['neorv32_trng_enable',['../neorv32__trng_8c.html#a8b8a1771e37a152792264561b93228fa',1,'neorv32_trng_enable(int irq_sel): neorv32_trng.c'],['../neorv32__trng_8h.html#a8b8a1771e37a152792264561b93228fa',1,'neorv32_trng_enable(int irq_sel): neorv32_trng.c']]], + ['neorv32_5ftrng_5ffifo_5fclear_170',['neorv32_trng_fifo_clear',['../neorv32__trng_8c.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void): neorv32_trng.c'],['../neorv32__trng_8h.html#a87cfe338e2ff559f96c73f729465f967',1,'neorv32_trng_fifo_clear(void): neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_171',['neorv32_trng_get',['../neorv32__trng_8c.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data): neorv32_trng.c'],['../neorv32__trng_8h.html#a9148bcb6a7c448c364e78fa98aac6985',1,'neorv32_trng_get(uint8_t *data): neorv32_trng.c']]], + ['neorv32_5ftrng_5fget_5ffifo_5fdepth_172',['neorv32_trng_get_fifo_depth',['../neorv32__trng_8c.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void): neorv32_trng.c'],['../neorv32__trng_8h.html#ad24e44372f4fd1ed29a6967dccab4fb0',1,'neorv32_trng_get_fifo_depth(void): neorv32_trng.c']]], + ['neorv32_5ftwi_5favailable_173',['neorv32_twi_available',['../neorv32__twi_8c.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void): neorv32_twi.c'],['../neorv32__twi_8h.html#aa2e01ebbc0c82d65ed4ded351f4d8711',1,'neorv32_twi_available(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fbusy_174',['neorv32_twi_busy',['../neorv32__twi_8c.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a4fff1ddade320f6cc568c6266f2c2acd',1,'neorv32_twi_busy(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fdisable_175',['neorv32_twi_disable',['../neorv32__twi_8c.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void): neorv32_twi.c'],['../neorv32__twi_8h.html#ae5f31e737c7a6c3c86070ff34cb0d861',1,'neorv32_twi_disable(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fenable_176',['neorv32_twi_enable',['../neorv32__twi_8c.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a22717887cffff1e6830756bc73140e7b',1,'neorv32_twi_enable(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_177',['neorv32_twi_generate_start',['../neorv32__twi_8c.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a633d460e4735eb369d74a834b03c8b78',1,'neorv32_twi_generate_start(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstart_5fnonblocking_178',['neorv32_twi_generate_start_nonblocking',['../neorv32__twi_8c.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void): neorv32_twi.c'],['../neorv32__twi_8h.html#adbf2eaed0c76221da5c3091665fc885e',1,'neorv32_twi_generate_start_nonblocking(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_179',['neorv32_twi_generate_stop',['../neorv32__twi_8c.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void): neorv32_twi.c'],['../neorv32__twi_8h.html#ad352447adcccccabd4e20577b34fbece',1,'neorv32_twi_generate_stop(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fgenerate_5fstop_5fnonblocking_180',['neorv32_twi_generate_stop_nonblocking',['../neorv32__twi_8c.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void): neorv32_twi.c'],['../neorv32__twi_8h.html#aa22430aab0a38d88cbd2c4220c573da0',1,'neorv32_twi_generate_stop_nonblocking(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_181',['neorv32_twi_get',['../neorv32__twi_8c.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data): neorv32_twi.c'],['../neorv32__twi_8h.html#a7735376d26560866b153ed205dfcb2ba',1,'neorv32_twi_get(uint8_t *data): neorv32_twi.c']]], + ['neorv32_5ftwi_5fget_5ffifo_5fdepth_182',['neorv32_twi_get_fifo_depth',['../neorv32__twi_8c.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void): neorv32_twi.c'],['../neorv32__twi_8h.html#a2c8f3bc55f4a9a8bdcb111759cf56ae2',1,'neorv32_twi_get_fifo_depth(void): neorv32_twi.c']]], + ['neorv32_5ftwi_5fsend_5fnonblocking_183',['neorv32_twi_send_nonblocking',['../neorv32__twi_8c.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack): neorv32_twi.c'],['../neorv32__twi_8h.html#a28fc44cce5d28f6e8c32268b239b07d5',1,'neorv32_twi_send_nonblocking(uint8_t data, int mack): neorv32_twi.c']]], + ['neorv32_5ftwi_5fsetup_184',['neorv32_twi_setup',['../neorv32__twi_8c.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr): neorv32_twi.c'],['../neorv32__twi_8h.html#a7ea6f3509a7cf622234d4b83e33afbe3',1,'neorv32_twi_setup(int prsc, int cdiv, int clkstr): neorv32_twi.c']]], + ['neorv32_5ftwi_5ftrans_185',['neorv32_twi_trans',['../neorv32__twi_8c.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack): neorv32_twi.c'],['../neorv32__twi_8h.html#ac7020f3379602f11c47ca16f1bd82f2e',1,'neorv32_twi_trans(uint8_t *data, int mack): neorv32_twi.c']]], + ['neorv32_5fuart_5favailable_186',['neorv32_uart_available',['../neorv32__uart_8c.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#abef6415b0391dc055713404312196682',1,'neorv32_uart_available(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_187',['neorv32_uart_char_received',['../neorv32__uart_8c.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#adedb0e07efb232717534017167a5be98',1,'neorv32_uart_char_received(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fchar_5freceived_5fget_188',['neorv32_uart_char_received_get',['../neorv32__uart_8c.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#aa490df3a9bb2aa3215fa6fad34ffe7d1',1,'neorv32_uart_char_received_get(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fdisable_189',['neorv32_uart_disable',['../neorv32__uart_8c.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#ae18804ccd29ec2fd1cc06e9ce985b704',1,'neorv32_uart_disable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fenable_190',['neorv32_uart_enable',['../neorv32__uart_8c.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#afa0533e81d53057c36f4997a2dbbe2bc',1,'neorv32_uart_enable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5frx_5ffifo_5fdepth_191',['neorv32_uart_get_rx_fifo_depth',['../neorv32__uart_8c.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#af85fb929c912d3edef3d86ffa833982a',1,'neorv32_uart_get_rx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fget_5ftx_5ffifo_5fdepth_192',['neorv32_uart_get_tx_fifo_depth',['../neorv32__uart_8c.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a031e3e27c8783c299623468020a22b0e',1,'neorv32_uart_get_tx_fifo_depth(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fgetc_193',['neorv32_uart_getc',['../neorv32__uart_8c.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a2efd432f63b8d36d44263d0b1f39a6dc',1,'neorv32_uart_getc(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fprintf_194',['neorv32_uart_printf',['../neorv32__uart_8c.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...): neorv32_uart.c'],['../neorv32__uart_8h.html#ab8c1f9f451def9126ab2749d7bbe50d9',1,'neorv32_uart_printf(neorv32_uart_t *UARTx, const char *format,...): neorv32_uart.c']]], + ['neorv32_5fuart_5fputc_195',['neorv32_uart_putc',['../neorv32__uart_8c.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c): neorv32_uart.c'],['../neorv32__uart_8h.html#a9bc7bb94a50b74e1145b78eec6094129',1,'neorv32_uart_putc(neorv32_uart_t *UARTx, char c): neorv32_uart.c']]], + ['neorv32_5fuart_5fputs_196',['neorv32_uart_puts',['../neorv32__uart_8c.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s): neorv32_uart.c'],['../neorv32__uart_8h.html#a45a07d5e71677162baaa1025759c67a2',1,'neorv32_uart_puts(neorv32_uart_t *UARTx, const char *s): neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fdisable_197',['neorv32_uart_rtscts_disable',['../neorv32__uart_8c.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a7b2f924ef4554b1fa90433c38d97558d',1,'neorv32_uart_rtscts_disable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5frtscts_5fenable_198',['neorv32_uart_rtscts_enable',['../neorv32__uart_8c.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a734b610f4cd1b474d7763f9700a715ec',1,'neorv32_uart_rtscts_enable(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5frx_5fclear_199',['neorv32_uart_rx_clear',['../neorv32__uart_8c.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#afe0de59c14faff1e0c890d5465be25f0',1,'neorv32_uart_rx_clear(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fscan_200',['neorv32_uart_scan',['../neorv32__uart_8c.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo): neorv32_uart.c'],['../neorv32__uart_8h.html#ac429964878bd6deab61d9ed8659bca75',1,'neorv32_uart_scan(neorv32_uart_t *UARTx, char *buffer, int max_size, int echo): neorv32_uart.c']]], + ['neorv32_5fuart_5fsetup_201',['neorv32_uart_setup',['../neorv32__uart_8c.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask): neorv32_uart.c'],['../neorv32__uart_8h.html#a9cdec36f2723c5373664022d1b68b841',1,'neorv32_uart_setup(neorv32_uart_t *UARTx, uint32_t baudrate, uint32_t irq_mask): neorv32_uart.c']]], + ['neorv32_5fuart_5ftx_5fbusy_202',['neorv32_uart_tx_busy',['../neorv32__uart_8c.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#aa7bef48a58e044c246b8c4ad32864502',1,'neorv32_uart_tx_busy(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5ftx_5fclear_203',['neorv32_uart_tx_clear',['../neorv32__uart_8c.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx): neorv32_uart.c'],['../neorv32__uart_8h.html#a27971954262a2fd1f21d3bf1ba27e87c',1,'neorv32_uart_tx_clear(neorv32_uart_t *UARTx): neorv32_uart.c']]], + ['neorv32_5fuart_5fvprintf_204',['neorv32_uart_vprintf',['../neorv32__uart_8c.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args): neorv32_uart.c'],['../neorv32__uart_8h.html#a8714cdb1c04d94bec322c6215ea10238',1,'neorv32_uart_vprintf(neorv32_uart_t *UARTx, const char *format, va_list args): neorv32_uart.c']]], + ['neorv32_5fwdt_5favailable_205',['neorv32_wdt_available',['../neorv32__wdt_8c.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a459a918c5a86c0167e8c748352d39827',1,'neorv32_wdt_available(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5fdisable_206',['neorv32_wdt_disable',['../neorv32__wdt_8c.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#aba52520582392a671e2b717715a330b2',1,'neorv32_wdt_disable(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5ffeed_207',['neorv32_wdt_feed',['../neorv32__wdt_8c.html#a2e4df2b352d11c31063ef2fc16c510ad',1,'neorv32_wdt_feed(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a2e4df2b352d11c31063ef2fc16c510ad',1,'neorv32_wdt_feed(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5fget_5fcause_208',['neorv32_wdt_get_cause',['../neorv32__wdt_8c.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a80fa8d178d18c9b02d32d93e815b532e',1,'neorv32_wdt_get_cause(void): neorv32_wdt.c']]], + ['neorv32_5fwdt_5fsetup_209',['neorv32_wdt_setup',['../neorv32__wdt_8c.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict): neorv32_wdt.c'],['../neorv32__wdt_8h.html#a2aa72608191d34ef41c5f545988ff400',1,'neorv32_wdt_setup(uint32_t timeout, int lock, int debug_en, int sleep_en, int strict): neorv32_wdt.c']]], + ['neorv32_5fxip_5favailable_210',['neorv32_xip_available',['../neorv32__xip_8c.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void): neorv32_xip.c'],['../neorv32__xip_8h.html#afe2e5682a26cafdb0585d2233bccc7c6',1,'neorv32_xip_available(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fget_5fclock_5fspeed_211',['neorv32_xip_get_clock_speed',['../neorv32__xip_8c.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void): neorv32_xip.c'],['../neorv32__xip_8h.html#a88f728101e82939bf7f8b9ab5a904706',1,'neorv32_xip_get_clock_speed(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fdisable_212',['neorv32_xip_highspeed_disable',['../neorv32__xip_8c.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void): neorv32_xip.c'],['../neorv32__xip_8h.html#ad74f2842ed2251e3ae5c19e06dced0c3',1,'neorv32_xip_highspeed_disable(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fhighspeed_5fenable_213',['neorv32_xip_highspeed_enable',['../neorv32__xip_8c.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void): neorv32_xip.c'],['../neorv32__xip_8h.html#a6aef2ea29451ba2aa55160da777a5115',1,'neorv32_xip_highspeed_enable(void): neorv32_xip.c']]], + ['neorv32_5fxip_5fsetup_214',['neorv32_xip_setup',['../neorv32__xip_8c.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd): neorv32_xip.c'],['../neorv32__xip_8h.html#a549d68abdf5a3d7484abe6d5370bb999',1,'neorv32_xip_setup(int prsc, int cdiv, int cpol, int cpha, uint8_t rd_cmd): neorv32_xip.c']]], + ['neorv32_5fxip_5fspi_5ftrans_215',['neorv32_xip_spi_trans',['../neorv32__xip_8c.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data): neorv32_xip.c'],['../neorv32__xip_8h.html#a92f1446a3bb7fe6dee5dbed33882b223',1,'neorv32_xip_spi_trans(int nbytes, uint64_t *rtx_data): neorv32_xip.c']]], + ['neorv32_5fxip_5fstart_216',['neorv32_xip_start',['../neorv32__xip_8c.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes): neorv32_xip.c'],['../neorv32__xip_8h.html#a0ab2c36c973030a811e6d7abe0afc393',1,'neorv32_xip_start(int abytes): neorv32_xip.c']]], + ['neorv32_5fxirq_5favailable_217',['neorv32_xirq_available',['../neorv32__xirq_8c.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#aaf30757d526030a8d81081915ab29a76',1,'neorv32_xirq_available(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fchannel_5fdisable_218',['neorv32_xirq_channel_disable',['../neorv32__xirq_8c.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#ae17509ad0c828aa9b36747b253cdbf0a',1,'neorv32_xirq_channel_disable(int channel): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fchannel_5fenable_219',['neorv32_xirq_channel_enable',['../neorv32__xirq_8c.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#abe63c0968c94b472082c8156a1a7db5c',1,'neorv32_xirq_channel_enable(int channel): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fclear_5fpending_220',['neorv32_xirq_clear_pending',['../neorv32__xirq_8c.html#a83ecaf568a6f6bcb1e1efdb1eef6df9c',1,'neorv32_xirq_clear_pending(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a83ecaf568a6f6bcb1e1efdb1eef6df9c',1,'neorv32_xirq_clear_pending(int channel): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fget_5fnum_221',['neorv32_xirq_get_num',['../neorv32__xirq_8c.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a717a8e34908cc01345e68920e76f229c',1,'neorv32_xirq_get_num(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fdisable_222',['neorv32_xirq_global_disable',['../neorv32__xirq_8c.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#ac64d3ff5619968499bccebebe6a6cab3',1,'neorv32_xirq_global_disable(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fglobal_5fenable_223',['neorv32_xirq_global_enable',['../neorv32__xirq_8c.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a76468156ef52b371e06bc2ca8eddcd27',1,'neorv32_xirq_global_enable(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5finstall_224',['neorv32_xirq_install',['../neorv32__xirq_8c.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9129984f91c02afafaa072a5d86f9876',1,'neorv32_xirq_install(int channel, void(*handler)(void)): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_225',['neorv32_xirq_setup',['../neorv32__xirq_8c.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a9295997fce7114a8205325c4d75dd200',1,'neorv32_xirq_setup(void): neorv32_xirq.c']]], + ['neorv32_5fxirq_5fsetup_5ftrigger_226',['neorv32_xirq_setup_trigger',['../neorv32__xirq_8c.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a0d137f09d1e7dcd31c157b856033ac42',1,'neorv32_xirq_setup_trigger(int channel, int config): neorv32_xirq.c']]], + ['neorv32_5fxirq_5funinstall_227',['neorv32_xirq_uninstall',['../neorv32__xirq_8c.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel): neorv32_xirq.c'],['../neorv32__xirq_8h.html#a49ae67d1d5066cd795149e96b81127f7',1,'neorv32_xirq_uninstall(int channel): neorv32_xirq.c']]] +]; diff --git a/sw/search/functions_9.js b/sw/search/functions_9.js new file mode 100644 index 0000000000..057388cf68 --- /dev/null +++ b/sw/search/functions_9.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['pop_5fcount_0',['pop_count',['../game__of__life_2main_8c.html#aac4bec7738b12f5a4b4d7a3a6cb1ab8d',1,'main.c']]], + ['print_5fhelp_1',['print_help',['../bootloader_8c.html#a402ea961bfc2ffeee61e3a7c330b1559',1,'bootloader.c']]], + ['print_5fhex_5fbyte_2',['print_hex_byte',['../demo__twi_2main_8c.html#a2ebc688bc1dad328693fc0974b378fa0',1,'main.c']]], + ['print_5fhex_5fword_3',['print_hex_word',['../bootloader_8c.html#a70b7d5c3b3ae97e4e72e84c4bc28fb8a',1,'bootloader.c']]], + ['print_5frandom_5fdata_4',['print_random_data',['../demo__trng_2main_8c.html#a64205d97b57c99dc5e95b8621827f4a4',1,'main.c']]], + ['print_5freport_5',['print_report',['../atomic__test_2main_8c.html#a99377a057d14aaa9b45f8cab890e8cf7',1,'print_report(int num_err, int num_tests): main.c'],['../float__corner__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err): main.c'],['../floating__point__test_2main_8c.html#a1740720aa8ce1a30fcf642be9140d203',1,'print_report(uint32_t num_err): main.c']]], + ['print_5funiverse_6',['print_universe',['../game__of__life_2main_8c.html#a9a455dea83a25f656fcc5217ad513dac',1,'main.c']]], + ['putchar_7',['putchar',['../neorv32__uart_8c.html#a07036e93939040c563e862a6a31b65bc',1,'neorv32_uart.c']]] +]; diff --git a/sw/search/functions_a.js b/sw/search/functions_a.js new file mode 100644 index 0000000000..f1960ec5c7 --- /dev/null +++ b/sw/search/functions_a.js @@ -0,0 +1,51 @@ +var searchData= +[ + ['read_5fbyte_0',['read_byte',['../demo__onewire_2main_8c.html#a951a31029af34715f20856eb82432637',1,'main.c']]], + ['read_5fmemory_1',['read_memory',['../bus__explorer_2main_8c.html#afc9b1ab3db46eccf51d55c715fa2fbd4',1,'main.c']]], + ['repetition_5fcount_5ftest_2',['repetition_count_test',['../demo__trng_2main_8c.html#af37eae672fee5e81f00a1dbf51b7e417',1,'main.c']]], + ['riscv_5femulate_5ffadds_3',['riscv_emulate_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a9d676567276439875c9b1a15b892b555',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffclasss_4',['riscv_emulate_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ae41a0bf9d28c35f4d6db7177ccf8ee06',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fsw_5',['riscv_emulate_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0f2260b7b5793a95c49670379fc89617',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fswu_6',['riscv_emulate_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a10a05bface37bff32c78ed0746845794',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fws_7',['riscv_emulate_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a292365fe41a7a661e61ae746306ba5e9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffcvt_5fwus_8',['riscv_emulate_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aad9fc7337e09081cf8c5bff8c28776c8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffdivs_9',['riscv_emulate_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aeaf46a17b671278be2bf804159827a40',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffeqs_10',['riscv_emulate_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a7cb3c6570b911cd1dfb7b6e798cc1d21',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffles_11',['riscv_emulate_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac5fdef0607602fa0bdb93b3535fd709e',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5fflts_12',['riscv_emulate_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2b802122d53a2ce517b3d39fec34d7e0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmadds_13',['riscv_emulate_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a39212f2e2bb0f1752092a1732f93edf3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmaxs_14',['riscv_emulate_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af9b16a32d2bb13c8af5a678271d74889',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmins_15',['riscv_emulate_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a872cd30fb61190bd1ac719d25b01f5a3',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmsubs_16',['riscv_emulate_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a05d0d5a8eb9422e93448efdeb679cabf',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffmuls_17',['riscv_emulate_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ad43e8bdf4a6fbe229d22d24680f2be80',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmadds_18',['riscv_emulate_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ac8bb4450b39854ab07839e8f3505361c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffnmsubs_19',['riscv_emulate_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a833638b346722dfa9d7d5c8d60998ec8',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjns_20',['riscv_emulate_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a0c985e626ed1d69314f4e3a0f1f58624',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjs_21',['riscv_emulate_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a12498d635f422f607b9b83facf3050dd',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsgnjxs_22',['riscv_emulate_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a98caf7f310820052ae96ce0f45e6cd26',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsqrts_23',['riscv_emulate_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a1ceb3450f1e5c62d3079cd0e93c03501',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5femulate_5ffsubs_24',['riscv_emulate_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ace5d95b855ec1aa8eacdb5bbeea58197',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffadds_25',['riscv_intrinsic_fadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a4b151fcb252fc7b894f247f5af6a1809',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffclasss_26',['riscv_intrinsic_fclasss',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3064a5c57b5f45d57c4d19eb798724f6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fsw_27',['riscv_intrinsic_fcvt_sw',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2103eb86052f6f8e24a8a848ffc6528a',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fswu_28',['riscv_intrinsic_fcvt_swu',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a837b7330f9d568791687ae1384b8ef28',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fws_29',['riscv_intrinsic_fcvt_ws',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a523fa0fb6f521311c7f44692c586b3ee',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffcvt_5fwus_30',['riscv_intrinsic_fcvt_wus',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a3bc6ee3059a7e99b187c4ea5e217715b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffdivs_31',['riscv_intrinsic_fdivs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#ab6a9d15643e3085ff80c7883f183a42b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffeqs_32',['riscv_intrinsic_feqs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af4ddfae45807d4e41f758672ee14cf7b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffles_33',['riscv_intrinsic_fles',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#adb83fab39d91e9291da2b7b07830cf82',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5fflts_34',['riscv_intrinsic_flts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a85aa18294a58997db2c324184196669c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmadds_35',['riscv_intrinsic_fmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abbdb403cdeef414fa2f867b702d5f6eb',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmaxs_36',['riscv_intrinsic_fmaxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87c1ce499e5e43554cb0f407cf0d3f7f',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmins_37',['riscv_intrinsic_fmins',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#abf7f9e466906306d9755fd5bc7946e3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmsubs_38',['riscv_intrinsic_fmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a03aba9c70c5286dacebaeb0ef5219cc9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffmuls_39',['riscv_intrinsic_fmuls',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a87a106e0d24a3183712e438d2bcbfa2d',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmadds_40',['riscv_intrinsic_fnmadds',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa6473bc2d2721b57277b83a3ae0cfdb6',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffnmsubs_41',['riscv_intrinsic_fnmsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a639fc7bd75933888540e9cceb67221a0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjns_42',['riscv_intrinsic_fsgnjns',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aa4010772a986d03929ba7a43dfdcddd9',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjs_43',['riscv_intrinsic_fsgnjs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#aff3acd90bcfbda96945f95a0e0bae12b',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsgnjxs_44',['riscv_intrinsic_fsgnjxs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a2235d91cdac03bf8071003a5c59b9dd0',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsqrts_45',['riscv_intrinsic_fsqrts',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a17e2b7a399c956d548a609185084ea3c',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['riscv_5fintrinsic_5ffsubs_46',['riscv_intrinsic_fsubs',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#af8473ba61abab8ae2e3ecbaf22d70e89',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['rte_5fservice_5fhandler_47',['rte_service_handler',['../processor__check_2main_8c.html#a349743a03307abb5130a3e89d903971b',1,'main.c']]] +]; diff --git a/sw/search/functions_b.js b/sw/search/functions_b.js new file mode 100644 index 0000000000..c7ad12bcff --- /dev/null +++ b/sw/search/functions_b.js @@ -0,0 +1,34 @@ +var searchData= +[ + ['save_5fexe_0',['save_exe',['../bootloader_8c.html#ababfffe8e7036179e150ad3b9bda3a74',1,'bootloader.c']]], + ['scan_5fbus_1',['scan_bus',['../demo__onewire_2main_8c.html#ac07c9cfd80ac2e24be9dac6cf943b7de',1,'main.c']]], + ['scan_5ftwi_2',['scan_twi',['../demo__twi_2main_8c.html#aace46ee34e954f9ebee5873beb0785f1',1,'main.c']]], + ['sdi_5fget_3',['sdi_get',['../demo__sdi_2main_8c.html#aa25f620a5631e862252be1d5429e8585',1,'main.c']]], + ['sdi_5fput_4',['sdi_put',['../demo__sdi_2main_8c.html#ae3dc843520a800d7ba2b5d6be03d9c3d',1,'main.c']]], + ['send_5ftwi_5',['send_twi',['../demo__twi_2main_8c.html#aa94edd4f55a3ac18913f661f4bc16fb1',1,'main.c']]], + ['set_5fcell_6',['set_cell',['../game__of__life_2main_8c.html#a5315eb56128f1ca40d9f4d477c345dd7',1,'main.c']]], + ['set_5fclock_7',['set_clock',['../demo__twi_2main_8c.html#acee0c1770467f85a150d072ac7e1252f',1,'main.c']]], + ['setup_5faccess_8',['setup_access',['../bus__explorer_2main_8c.html#a2b6196c2e97a7f7702c0068780304ec1',1,'main.c']]], + ['show_5f1wire_5fcommands_9',['show_1wire_commands',['../demo__onewire_2main_8c.html#a29d5831498c2eaf0415d6f01efb9e7ce',1,'main.c']]], + ['show_5farrays_10',['show_arrays',['../demo__dma_2main_8c.html#a8ad0c7bfd07edb6d42d86b166347206b',1,'main.c']]], + ['show_5fhelp_11',['show_help',['../demo__onewire_2main_8c.html#af25820ed386a66a0d6bb4dcdd2204704',1,'main.c']]], + ['sim_5firq_5ftrigger_12',['sim_irq_trigger',['../processor__check_2main_8c.html#ada24f2cd9d2d384265517f539711de62',1,'main.c']]], + ['slink_5ffirq_5fhandler_13',['slink_firq_handler',['../demo__slink_2main_8c.html#a48c79e20ed1d4138d61b5593bdbe537a',1,'main.c']]], + ['spi_5fcs_14',['spi_cs',['../demo__spi_2main_8c.html#a6f94991b8943a141ed4124585222470d',1,'main.c']]], + ['spi_5fflash_5fcheck_15',['spi_flash_check',['../bootloader_8c.html#a1919595ed2232aebb3e774b916ab1662',1,'bootloader.c']]], + ['spi_5fflash_5ferase_5fsector_16',['spi_flash_erase_sector',['../bootloader_8c.html#a0d877f0611dfcee32a483c8a3660eb1b',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fbyte_17',['spi_flash_read_byte',['../bootloader_8c.html#a09e72e2debdd94929b2be4c7713d5e17',1,'bootloader.c']]], + ['spi_5fflash_5fread_5fstatus_18',['spi_flash_read_status',['../bootloader_8c.html#a005966cd0b32f3d5c041028c4b1c99f5',1,'bootloader.c']]], + ['spi_5fflash_5fwakeup_19',['spi_flash_wakeup',['../bootloader_8c.html#a1fbdccc60f05756213c9f3d64bac6d47',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5faddr_20',['spi_flash_write_addr',['../bootloader_8c.html#a6a8caddda6e729d747726471b0b0f742',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fbyte_21',['spi_flash_write_byte',['../bootloader_8c.html#a006c27b7d80897b78ab8cd83a391331f',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fdisable_22',['spi_flash_write_disable',['../bootloader_8c.html#a82d26a2d6293ed7fd44a5c622adfbd45',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fenable_23',['spi_flash_write_enable',['../bootloader_8c.html#a9642e28ef2baec5b356ad9a70970d0e6',1,'bootloader.c']]], + ['spi_5fflash_5fwrite_5fword_24',['spi_flash_write_word',['../bootloader_8c.html#a717c72166af7c2ff7e73bd0b47128338',1,'bootloader.c']]], + ['spi_5firq_5fhandler_25',['spi_irq_handler',['../demo__spi__irq_2main_8c.html#a7e266cc5247c999948dacc2102bd184a',1,'main.c']]], + ['spi_5fsetup_26',['spi_setup',['../demo__spi_2main_8c.html#a755192be6c3cf9904564b0eee99de445',1,'main.c']]], + ['spi_5ftrans_27',['spi_trans',['../demo__spi_2main_8c.html#a13e10b34fbbffca6c31f0ce25b3f8432',1,'main.c']]], + ['start_5fapp_28',['start_app',['../bootloader_8c.html#ae8de91537ac2782f0f0ebc3b2d4fb1df',1,'bootloader.c']]], + ['subnormal_5fflush_29',['subnormal_flush',['../floating__point__test_2neorv32__zfinx__extension__intrinsics_8h.html#a791f880781a1bcea1861471be7d1a851',1,'neorv32_zfinx_extension_intrinsics.h']]], + ['system_5ferror_30',['system_error',['../bootloader_8c.html#a3bdfe2f25b1bfb42f80624ffff22ab01',1,'bootloader.c']]] +]; diff --git a/sw/search/functions_c.js b/sw/search/functions_c.js new file mode 100644 index 0000000000..0ebfaceba5 --- /dev/null +++ b/sw/search/functions_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['test_5ffail_0',['test_fail',['../processor__check_2main_8c.html#a1e0a5d63896fa26a6c25c0012fc6b938',1,'main.c']]], + ['test_5fok_1',['test_ok',['../processor__check_2main_8c.html#ae61d39109b2747429ec3a3c1b5533598',1,'main.c']]], + ['trap_5fhandler_5femulate_5famo_2',['trap_handler_emulate_amo',['../atomic__test_2main_8c.html#aafcbf639ae4f66e5dfe9dea511a59f9d',1,'main.c']]], + ['trap_5fhandler_5femulate_5funaligned_5flw_3',['trap_handler_emulate_unaligned_lw',['../demo__emulate__unaligned_2main_8c.html#a07da42351229525998965b219e827460',1,'main.c']]], + ['trigger_5fmodule_5fdummy_4',['trigger_module_dummy',['../processor__check_2main_8c.html#ac91bfdd45696444673dc7d6b1b644082',1,'main.c']]] +]; diff --git a/sw/search/functions_d.js b/sw/search/functions_d.js new file mode 100644 index 0000000000..2488556a56 --- /dev/null +++ b/sw/search/functions_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['uart_5fget_5fexecutable_0',['uart_get_executable',['../demo__xip_2main_8c.html#a0458656f8a108ff31f4bbbd005f029a0',1,'main.c']]], + ['uart_5fget_5fword_1',['uart_get_word',['../demo__xip_2main_8c.html#a3043d09bdc155f57f45cd91e0cd4d15b',1,'main.c']]] +]; diff --git a/sw/search/functions_e.js b/sw/search/functions_e.js new file mode 100644 index 0000000000..7348ca9c65 --- /dev/null +++ b/sw/search/functions_e.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['vectored_5fglobal_5fhandler_0',['vectored_global_handler',['../processor__check_2main_8c.html#a9504ca74fdb80711a88d2a16d4cb4cf4',1,'main.c']]], + ['vectored_5firq_5ftable_1',['vectored_irq_table',['../processor__check_2main_8c.html#a0d695ebfaae3b4614ddb62640cbf8b7b',1,'main.c']]], + ['vectored_5fmei_5fhandler_2',['vectored_mei_handler',['../processor__check_2main_8c.html#a1a455bede4ab48f32d3ed0868e398044',1,'main.c']]], + ['verify_5fresult_3',['verify_result',['../float__corner__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res): main.c'],['../floating__point__test_2main_8c.html#a941ef8d24fd8e8fe4536626b2ce72410',1,'verify_result(uint32_t num, uint32_t opa, uint32_t opb, uint32_t ref, uint32_t res): main.c']]] +]; diff --git a/sw/search/functions_f.js b/sw/search/functions_f.js new file mode 100644 index 0000000000..5a8501980a --- /dev/null +++ b/sw/search/functions_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['write_5fbyte_0',['write_byte',['../demo__onewire_2main_8c.html#a28283848f09bf8feebc860a51545f487',1,'main.c']]], + ['write_5fmemory_1',['write_memory',['../bus__explorer_2main_8c.html#a96729fb5279642ac56c8e6a513789b45',1,'main.c']]] +]; diff --git a/sw/search/mag.svg b/sw/search/mag.svg new file mode 100644 index 0000000000..ffb6cf0d02 --- /dev/null +++ b/sw/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/sw/search/mag_d.svg b/sw/search/mag_d.svg new file mode 100644 index 0000000000..4122773f92 --- /dev/null +++ b/sw/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/sw/search/mag_sel.svg b/sw/search/mag_sel.svg new file mode 100644 index 0000000000..553dba8773 --- /dev/null +++ b/sw/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/sw/search/mag_seld.svg b/sw/search/mag_seld.svg new file mode 100644 index 0000000000..c906f84c83 --- /dev/null +++ b/sw/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/sw/search/pages_0.js b/sw/search/pages_0.js new file mode 100644 index 0000000000..de89bd8806 --- /dev/null +++ b/sw/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_0',['README',['../md_README.html',1,'']]] +]; diff --git a/sw/search/search.css b/sw/search/search.css new file mode 100644 index 0000000000..19f76f9d5b --- /dev/null +++ b/sw/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/sw/search/search.js b/sw/search/search.js new file mode 100644 index 0000000000..666af01e5e --- /dev/null +++ b/sw/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +NEORV32 Software Framework Documentation: date_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    date_t Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Data Fields

    uint16_t year
     
    uint8_t month
     
    uint8_t day
     
    uint8_t weekday
     
    uint8_t hours
     
    uint8_t minutes
     
    uint8_t seconds
     
    +

    Field Documentation

    + +

    ◆ day

    + +
    +
    + + + + +
    uint8_t date_t::day
    +
    +

    1..31

    + +
    +
    + +

    ◆ hours

    + +
    +
    + + + + +
    uint8_t date_t::hours
    +
    +

    0..23

    + +
    +
    + +

    ◆ minutes

    + +
    +
    + + + + +
    uint8_t date_t::minutes
    +
    +

    0..59

    + +
    +
    + +

    ◆ month

    + +
    +
    + + + + +
    uint8_t date_t::month
    +
    +

    1..12

    + +
    +
    + +

    ◆ seconds

    + +
    +
    + + + + +
    uint8_t date_t::seconds
    +
    +

    0..59

    + +
    +
    + +

    ◆ weekday

    + +
    +
    + + + + +
    uint8_t date_t::weekday
    +
    +

    1..7 starting with Monday

    + +
    +
    + +

    ◆ year

    + +
    +
    + + + + +
    uint16_t date_t::year
    +
    +

    current year (absolute)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__cfs__t.html b/sw/structneorv32__cfs__t.html new file mode 100644 index 0000000000..51c6af3425 --- /dev/null +++ b/sw/structneorv32__cfs__t.html @@ -0,0 +1,130 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_cfs_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_cfs_t Struct Reference
    +
    +
    + +

    #include <neorv32_cfs.h>

    + + + + +

    +Data Fields

    uint32_t REG [64]
     
    +

    Detailed Description

    +

    CFS module prototype

    +

    Field Documentation

    + +

    ◆ REG

    + +
    +
    + + + + +
    uint32_t neorv32_cfs_t::REG[64]
    +
    +

    offset 4*0..4*63: CFS register 0..63, user-defined

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__crc__t.html b/sw/structneorv32__crc__t.html new file mode 100644 index 0000000000..e595018ddd --- /dev/null +++ b/sw/structneorv32__crc__t.html @@ -0,0 +1,181 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_crc_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_crc_t Struct Reference
    +
    +
    + +

    #include <neorv32_crc.h>

    + + + + + + + + + + +

    +Data Fields

    uint32_t MODE
     
    uint32_t POLY
     
    uint32_t DATA
     
    uint32_t SREG
     
    +

    Detailed Description

    +

    CRC module prototype

    +

    Field Documentation

    + +

    ◆ DATA

    + +
    +
    + + + + +
    uint32_t neorv32_crc_t::DATA
    +
    +

    offset 8: data input register

    + +
    +
    + +

    ◆ MODE

    + +
    +
    + + + + +
    uint32_t neorv32_crc_t::MODE
    +
    +

    offset 0: mode register (NEORV32_CRC_MODE_enum)

    + +
    +
    + +

    ◆ POLY

    + +
    +
    + + + + +
    uint32_t neorv32_crc_t::POLY
    +
    +

    offset 4: polynomial register

    + +
    +
    + +

    ◆ SREG

    + +
    +
    + + + + +
    uint32_t neorv32_crc_t::SREG
    +
    +

    offset 12: CRC shift register

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__dma__t.html b/sw/structneorv32__dma__t.html new file mode 100644 index 0000000000..524811ceac --- /dev/null +++ b/sw/structneorv32__dma__t.html @@ -0,0 +1,181 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_dma_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_dma_t Struct Reference
    +
    +
    + +

    #include <neorv32_dma.h>

    + + + + + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t SRC_BASE
     
    uint32_t DST_BASE
     
    uint32_t TTYPE
     
    +

    Detailed Description

    +

    DMA module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_dma_t::CTRL
    +
    +

    offset 0: control and status register (NEORV32_DMA_CTRL_enum)

    + +
    +
    + +

    ◆ DST_BASE

    + +
    +
    + + + + +
    uint32_t neorv32_dma_t::DST_BASE
    +
    +

    offset 8: destination base address register

    + +
    +
    + +

    ◆ SRC_BASE

    + +
    +
    + + + + +
    uint32_t neorv32_dma_t::SRC_BASE
    +
    +

    offset 4: source base address register

    + +
    +
    + +

    ◆ TTYPE

    + +
    +
    + + + + +
    uint32_t neorv32_dma_t::TTYPE
    +
    +

    offset 12: transfer type configuration register & manual trigger (NEORV32_DMA_TTYPE_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__gpio__t.html b/sw/structneorv32__gpio__t.html new file mode 100644 index 0000000000..009e716279 --- /dev/null +++ b/sw/structneorv32__gpio__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_gpio_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_gpio_t Struct Reference
    +
    +
    + +

    #include <neorv32_gpio.h>

    + + + + + + +

    +Data Fields

    const uint32_t INPUT [2]
     
    uint32_t OUTPUT [2]
     
    +

    Detailed Description

    +

    GPIO module prototype

    +

    Field Documentation

    + +

    ◆ INPUT

    + +
    +
    + + + + +
    const uint32_t neorv32_gpio_t::INPUT[2]
    +
    +

    offset 0: parallel input port, read-only

    + +
    +
    + +

    ◆ OUTPUT

    + +
    +
    + + + + +
    uint32_t neorv32_gpio_t::OUTPUT[2]
    +
    +

    offset 8: parallel output port

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__gptmr__t.html b/sw/structneorv32__gptmr__t.html new file mode 100644 index 0000000000..ee98f7af0d --- /dev/null +++ b/sw/structneorv32__gptmr__t.html @@ -0,0 +1,164 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_gptmr_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_gptmr_t Struct Reference
    +
    +
    + +

    #include <neorv32_gptmr.h>

    + + + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t THRES
     
    const uint32_t COUNT
     
    +

    Detailed Description

    +

    GPTMR module prototype

    +

    Field Documentation

    + +

    ◆ COUNT

    + +
    +
    + + + + +
    const uint32_t neorv32_gptmr_t::COUNT
    +
    +

    offset 8: counter register, read-only

    + +
    +
    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_gptmr_t::CTRL
    +
    +

    offset 0: control register (NEORV32_GPTMR_CTRL_enum)

    + +
    +
    + +

    ◆ THRES

    + +
    +
    + + + + +
    uint32_t neorv32_gptmr_t::THRES
    +
    +

    offset 4: threshold register

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__mtime__t.html b/sw/structneorv32__mtime__t.html new file mode 100644 index 0000000000..cf52e0fccf --- /dev/null +++ b/sw/structneorv32__mtime__t.html @@ -0,0 +1,181 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_mtime_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_mtime_t Struct Reference
    +
    +
    + +

    #include <neorv32_mtime.h>

    + + + + + + + + + + +

    +Data Fields

    uint32_t TIME_LO
     
    uint32_t TIME_HI
     
    uint32_t TIMECMP_LO
     
    uint32_t TIMECMP_HI
     
    +

    Detailed Description

    +

    MTIME module prototype

    +

    Field Documentation

    + +

    ◆ TIME_HI

    + +
    +
    + + + + +
    uint32_t neorv32_mtime_t::TIME_HI
    +
    +

    offset 4: time register high word

    + +
    +
    + +

    ◆ TIME_LO

    + +
    +
    + + + + +
    uint32_t neorv32_mtime_t::TIME_LO
    +
    +

    offset 0: time register low word

    + +
    +
    + +

    ◆ TIMECMP_HI

    + +
    +
    + + + + +
    uint32_t neorv32_mtime_t::TIMECMP_HI
    +
    +

    offset 12: compare register high word

    + +
    +
    + +

    ◆ TIMECMP_LO

    + +
    +
    + + + + +
    uint32_t neorv32_mtime_t::TIMECMP_LO
    +
    +

    offset 8: compare register low word

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__neoled__t.html b/sw/structneorv32__neoled__t.html new file mode 100644 index 0000000000..c334440bf5 --- /dev/null +++ b/sw/structneorv32__neoled__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_neoled_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_neoled_t Struct Reference
    +
    +
    + +

    #include <neorv32_neoled.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t DATA
     
    +

    Detailed Description

    +

    NEOLED module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_neoled_t::CTRL
    +
    +

    offset 0: control register

    + +
    +
    + +

    ◆ DATA

    + +
    +
    + + + + +
    uint32_t neorv32_neoled_t::DATA
    +
    +

    offset 4: data register (NEORV32_NEOLED_CTRL_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__onewire__t.html b/sw/structneorv32__onewire__t.html new file mode 100644 index 0000000000..6490ee6090 --- /dev/null +++ b/sw/structneorv32__onewire__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_onewire_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_onewire_t Struct Reference
    +
    +
    + +

    #include <neorv32_onewire.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t DATA
     
    +

    Detailed Description

    +

    ONEWIRE module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_onewire_t::CTRL
    +
    +

    offset 0: control register (NEORV32_ONEWIRE_CTRL_enum)

    + +
    +
    + +

    ◆ DATA

    + +
    +
    + + + + +
    uint32_t neorv32_onewire_t::DATA
    +
    +

    offset 4: transmission data register (NEORV32_ONEWIRE_DATA_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__pwm__t.html b/sw/structneorv32__pwm__t.html new file mode 100644 index 0000000000..38f7ef5fc4 --- /dev/null +++ b/sw/structneorv32__pwm__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_pwm_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_pwm_t Struct Reference
    +
    +
    + +

    #include <neorv32_pwm.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t DC [3]
     
    +

    Detailed Description

    +

    PWM module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_pwm_t::CTRL
    +
    +

    offset 0: control register (NEORV32_PWM_CTRL_enum)

    + +
    +
    + +

    ◆ DC

    + +
    +
    + + + + +
    uint32_t neorv32_pwm_t::DC[3]
    +
    +

    offset 4..12: duty cycle register 0..2

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__sdi__t.html b/sw/structneorv32__sdi__t.html new file mode 100644 index 0000000000..ead7d8be1d --- /dev/null +++ b/sw/structneorv32__sdi__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_sdi_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_sdi_t Struct Reference
    +
    +
    + +

    #include <neorv32_sdi.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t DATA
     
    +

    Detailed Description

    +

    SDI module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_sdi_t::CTRL
    +
    +

    offset 0: control register (NEORV32_SDI_CTRL_enum)

    + +
    +
    + +

    ◆ DATA

    + +
    +
    + + + + +
    uint32_t neorv32_sdi_t::DATA
    +
    +

    offset 4: data register

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__slink__t.html b/sw/structneorv32__slink__t.html new file mode 100644 index 0000000000..53d73d20e3 --- /dev/null +++ b/sw/structneorv32__slink__t.html @@ -0,0 +1,181 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_slink_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_slink_t Struct Reference
    +
    +
    + +

    #include <neorv32_slink.h>

    + + + + + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t ROUTE
     
    uint32_t DATA
     
    uint32_t DATA_LAST
     
    +

    Detailed Description

    +

    SLINK module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_slink_t::CTRL
    +
    +

    offset 0: control register (NEORV32_SLINK_CTRL_enum)

    + +
    +
    + +

    ◆ DATA

    + +
    +
    + + + + +
    uint32_t neorv32_slink_t::DATA
    +
    +

    offset 8: RX/TX data register

    + +
    +
    + +

    ◆ DATA_LAST

    + +
    +
    + + + + +
    uint32_t neorv32_slink_t::DATA_LAST
    +
    +

    offset 12: RX/TX data register (+ TX end-of-stream)

    + +
    +
    + +

    ◆ ROUTE

    + +
    +
    + + + + +
    uint32_t neorv32_slink_t::ROUTE
    +
    +

    offset 4: routing information (NEORV32_SLINK_ROUTE_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__spi__t.html b/sw/structneorv32__spi__t.html new file mode 100644 index 0000000000..5cd5d881d1 --- /dev/null +++ b/sw/structneorv32__spi__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_spi_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_spi_t Struct Reference
    +
    +
    + +

    #include <neorv32_spi.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t DATA
     
    +

    Detailed Description

    +

    SPI module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_spi_t::CTRL
    +
    +

    offset 0: control register (NEORV32_SPI_CTRL_enum)

    + +
    +
    + +

    ◆ DATA

    + +
    +
    + + + + +
    uint32_t neorv32_spi_t::DATA
    +
    +

    offset 4: data register (NEORV32_SPI_DATA_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__sysinfo__t.html b/sw/structneorv32__sysinfo__t.html new file mode 100644 index 0000000000..2739bb106b --- /dev/null +++ b/sw/structneorv32__sysinfo__t.html @@ -0,0 +1,181 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_sysinfo_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_sysinfo_t Struct Reference
    +
    +
    + +

    #include <neorv32_sysinfo.h>

    + + + + + + + + + + +

    +Data Fields

    const uint32_t CLK
     
    const uint8_t MEM [4]
     
    const uint32_t SOC
     
    const uint32_t CACHE
     
    +

    Detailed Description

    +

    SYSINFO module prototype - whole module is read-only

    +

    Field Documentation

    + +

    ◆ CACHE

    + +
    +
    + + + + +
    const uint32_t neorv32_sysinfo_t::CACHE
    +
    +

    offset 12: cache configuration (NEORV32_SYSINFO_CACHE_enum)

    + +
    +
    + +

    ◆ CLK

    + +
    +
    + + + + +
    const uint32_t neorv32_sysinfo_t::CLK
    +
    +

    offset 0: clock speed in Hz

    + +
    +
    + +

    ◆ MEM

    + +
    +
    + + + + +
    const uint8_t neorv32_sysinfo_t::MEM[4]
    +
    +

    offset 4: Memory configuration (sizes) (NEORV32_SYSINFO_MEM_enum)

    + +
    +
    + +

    ◆ SOC

    + +
    +
    + + + + +
    const uint32_t neorv32_sysinfo_t::SOC
    +
    +

    offset 8: SoC features (NEORV32_SYSINFO_SOC_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__trng__t.html b/sw/structneorv32__trng__t.html new file mode 100644 index 0000000000..4b75664930 --- /dev/null +++ b/sw/structneorv32__trng__t.html @@ -0,0 +1,130 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_trng_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_trng_t Struct Reference
    +
    +
    + +

    #include <neorv32_trng.h>

    + + + + +

    +Data Fields

    uint32_t CTRL
     
    +

    Detailed Description

    +

    TRNG module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_trng_t::CTRL
    +
    +

    offset 0: control register (NEORV32_TRNG_CTRL_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__twi__t.html b/sw/structneorv32__twi__t.html new file mode 100644 index 0000000000..15d7764b6e --- /dev/null +++ b/sw/structneorv32__twi__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_twi_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_twi_t Struct Reference
    +
    +
    + +

    #include <neorv32_twi.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t DCMD
     
    +

    Detailed Description

    +

    TWI module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_twi_t::CTRL
    +
    +

    offset 0: control register (NEORV32_TWI_CTRL_enum)

    + +
    +
    + +

    ◆ DCMD

    + +
    +
    + + + + +
    uint32_t neorv32_twi_t::DCMD
    +
    +

    offset 4: data/cmd register (NEORV32_TWI_DCMD_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__uart__t.html b/sw/structneorv32__uart__t.html new file mode 100644 index 0000000000..3b88112c43 --- /dev/null +++ b/sw/structneorv32__uart__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_uart_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_uart_t Struct Reference
    +
    +
    + +

    #include <neorv32_uart.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t DATA
     
    +

    Detailed Description

    +

    UART module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_uart_t::CTRL
    +
    +

    offset 0: control register (NEORV32_UART_CTRL_enum)

    + +
    +
    + +

    ◆ DATA

    + +
    +
    + + + + +
    uint32_t neorv32_uart_t::DATA
    +
    +

    offset 4: data register (NEORV32_UART_DATA_enum)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__wdt__t.html b/sw/structneorv32__wdt__t.html new file mode 100644 index 0000000000..39bba9911d --- /dev/null +++ b/sw/structneorv32__wdt__t.html @@ -0,0 +1,147 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_wdt_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_wdt_t Struct Reference
    +
    +
    + +

    #include <neorv32_wdt.h>

    + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    uint32_t RESET
     
    +

    Detailed Description

    +

    WDT module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_wdt_t::CTRL
    +
    +

    offset 0: control register (NEORV32_WDT_CTRL_enum)

    + +
    +
    + +

    ◆ RESET

    + +
    +
    + + + + +
    uint32_t neorv32_wdt_t::RESET
    +
    +

    offset 4: WDT reset trigger (write password to "feed" watchdog)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__xip__t.html b/sw/structneorv32__xip__t.html new file mode 100644 index 0000000000..5f0dc06203 --- /dev/null +++ b/sw/structneorv32__xip__t.html @@ -0,0 +1,181 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_xip_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_xip_t Struct Reference
    +
    +
    + +

    #include <neorv32_xip.h>

    + + + + + + + + + + +

    +Data Fields

    uint32_t CTRL
     
    const uint32_t reserved
     
    uint32_t DATA_LO
     
    uint32_t DATA_HI
     
    +

    Detailed Description

    +

    XIP module prototype

    +

    Field Documentation

    + +

    ◆ CTRL

    + +
    +
    + + + + +
    uint32_t neorv32_xip_t::CTRL
    +
    +

    offset 0: control register (NEORV32_XIP_CTRL_enum)

    + +
    +
    + +

    ◆ DATA_HI

    + +
    +
    + + + + +
    uint32_t neorv32_xip_t::DATA_HI
    +
    +

    offset 12: SPI data register high

    + +
    +
    + +

    ◆ DATA_LO

    + +
    +
    + + + + +
    uint32_t neorv32_xip_t::DATA_LO
    +
    +

    offset 8: SPI data register low

    + +
    +
    + +

    ◆ reserved

    + +
    +
    + + + + +
    const uint32_t neorv32_xip_t::reserved
    +
    +

    offset 4: reserved

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structneorv32__xirq__t.html b/sw/structneorv32__xirq__t.html new file mode 100644 index 0000000000..cd34bad144 --- /dev/null +++ b/sw/structneorv32__xirq__t.html @@ -0,0 +1,249 @@ + + + + + + + +NEORV32 Software Framework Documentation: neorv32_xirq_t Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    neorv32_xirq_t Struct Reference
    +
    +
    + +

    #include <neorv32_xirq.h>

    + + + + + + + + + + + + + + + + + + +

    +Data Fields

    uint32_t EIE
     
    uint32_t EIP
     
    uint32_t ESC
     
    uint32_t TTYP
     
    uint32_t TPOL
     
    const uint32_t reserved0
     
    const uint32_t reserved1
     
    const uint32_t reserved2
     
    +

    Detailed Description

    +

    XIRQ module prototype

    +

    Field Documentation

    + +

    ◆ EIE

    + +
    +
    + + + + +
    uint32_t neorv32_xirq_t::EIE
    +
    +

    offset 0: external interrupt enable register

    + +
    +
    + +

    ◆ EIP

    + +
    +
    + + + + +
    uint32_t neorv32_xirq_t::EIP
    +
    +

    offset 4: external interrupt pending register

    + +
    +
    + +

    ◆ ESC

    + +
    +
    + + + + +
    uint32_t neorv32_xirq_t::ESC
    +
    +

    offset 8: external interrupt source register

    + +
    +
    + +

    ◆ reserved0

    + +
    +
    + + + + +
    const uint32_t neorv32_xirq_t::reserved0
    +
    +

    offset 20: reserved

    + +
    +
    + +

    ◆ reserved1

    + +
    +
    + + + + +
    const uint32_t neorv32_xirq_t::reserved1
    +
    +

    offset 24: reserved

    + +
    +
    + +

    ◆ reserved2

    + +
    +
    + + + + +
    const uint32_t neorv32_xirq_t::reserved2
    +
    +

    offset 28: reserved

    + +
    +
    + +

    ◆ TPOL

    + +
    +
    + + + + +
    uint32_t neorv32_xirq_t::TPOL
    +
    +

    offset 16: external interrupt source register

    + +
    +
    + +

    ◆ TTYP

    + +
    +
    + + + + +
    uint32_t neorv32_xirq_t::TTYP
    +
    +

    offset 12: external interrupt source register

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/structrecord.html b/sw/structrecord.html new file mode 100644 index 0000000000..7cba111064 --- /dev/null +++ b/sw/structrecord.html @@ -0,0 +1,155 @@ + + + + + + + +NEORV32 Software Framework Documentation: record Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    record Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +struct recordPtr_Comp
     
    +Enumeration Discr
     
    +union { 
     
    +   struct { 
     
    +      Enumeration   Enum_Comp 
     
    +      int   Int_Comp 
     
    +      char   Str_Comp [31] 
     
       }   var_1 
     
    +   struct { 
     
    +      Enumeration   E_Comp_2 
     
    +      char   Str_2_Comp [31] 
     
       }   var_2 
     
    +   struct { 
     
    +      char   Ch_1_Comp 
     
    +      char   Ch_2_Comp 
     
       }   var_3 
     
    variant 
     
    +
    The documentation for this struct was generated from the following file:
      +
    • sw/example/dhrystone/dhry.h
    • +
    +
    + + +
    + + diff --git a/sw/structt__neorv32__spi.html b/sw/structt__neorv32__spi.html new file mode 100644 index 0000000000..627a8e526c --- /dev/null +++ b/sw/structt__neorv32__spi.html @@ -0,0 +1,228 @@ + + + + + + + +NEORV32 Software Framework Documentation: t_neorv32_spi Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    t_neorv32_spi Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Data Fields

    uint8_t * ptrSpiBuf
     
    uint8_t uint8Csn
     
    uint16_t uint16Fifo
     
    uint32_t uint32Total
     
    volatile uint32_t uint32Write
     
    volatile uint32_t uint32Read
     
    volatile uint8_t uint8IsBusy
     
    +

    Field Documentation

    + +

    ◆ ptrSpiBuf

    + +
    +
    + + + + +
    uint8_t* t_neorv32_spi::ptrSpiBuf
    +
    +

    SPI buffer data pointer

    + +
    +
    + +

    ◆ uint16Fifo

    + +
    +
    + + + + +
    uint16_t t_neorv32_spi::uint16Fifo
    +
    +

    Number of elements in Fifo

    + +
    +
    + +

    ◆ uint32Read

    + +
    +
    + + + + +
    volatile uint32_t t_neorv32_spi::uint32Read
    +
    +

    From SPI core read elements

    + +
    +
    + +

    ◆ uint32Total

    + +
    +
    + + + + +
    uint32_t t_neorv32_spi::uint32Total
    +
    +

    Number of elements in buffer

    + +
    +
    + +

    ◆ uint32Write

    + +
    +
    + + + + +
    volatile uint32_t t_neorv32_spi::uint32Write
    +
    +

    To SPI core write elements

    + +
    +
    + +

    ◆ uint8Csn

    + +
    +
    + + + + +
    uint8_t t_neorv32_spi::uint8Csn
    +
    +

    SPI chip select channel

    + +
    +
    + +

    ◆ uint8IsBusy

    + +
    +
    + + + + +
    volatile uint8_t t_neorv32_spi::uint8IsBusy
    +
    +

    Spi Core is Busy

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sw/sync_off.png b/sw/sync_off.png new file mode 100644 index 0000000000..3b443fc628 Binary files /dev/null and b/sw/sync_off.png differ diff --git a/sw/sync_on.png b/sw/sync_on.png new file mode 100644 index 0000000000..e08320fb64 Binary files /dev/null and b/sw/sync_on.png differ diff --git a/sw/syscalls_8c.html b/sw/syscalls_8c.html new file mode 100644 index 0000000000..bd5a146ab9 --- /dev/null +++ b/sw/syscalls_8c.html @@ -0,0 +1,168 @@ + + + + + + + +NEORV32 Software Framework Documentation: sw/lib/source/syscalls.c File Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    syscalls.c File Reference
    +
    +
    + +

    Newlib system calls. +More...

    +
    #include "neorv32.h"
    +#include <newlib.h>
    +#include <sys/stat.h>
    +#include <sys/timeb.h>
    +#include <sys/times.h>
    +#include <sys/time.h>
    +#include <time.h>
    +#include <unistd.h>
    +#include <errno.h>
    +
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +void * _sbrk (int incr)
     
    +int _close (int file)
     
    +int _fstat (int file, struct stat *st)
     
    +int _isatty (int file)
     
    +int _lseek (int file, int ptr, int dir)
     
    +void _exit (int status)
     
    +void _kill (int pid, int sig)
     
    +int _getpid ()
     
    +int _write (int file, char *ptr, int len)
     
    +int _read (int file, char *ptr, int len)
     
    +int _gettimeofday (struct timeval *tp, void *tzp)
     
    + + + +

    +Variables

    +int errno
     
    +

    Detailed Description

    +

    Newlib system calls.

    +
    Warning
    UART0 (if available) is used to read/write console data (STDIN, STDOUT, STDERR, ...).
    +
    Note
    Original source file: https://github.com/openhwgroup/cv32e40p/blob/master/example_tb/core/custom/syscalls.c
    +
    +More information was derived from: https://interrupt.memfault.com/blog/boostrapping-libc-with-newlib#implementing-newlib
    +
    See also
    https://stnolting.github.io/neorv32/sw/files.html
    +
    + + +
    + + diff --git a/sw/tab_a.png b/sw/tab_a.png new file mode 100644 index 0000000000..3b725c41c5 Binary files /dev/null and b/sw/tab_a.png differ diff --git a/sw/tab_ad.png b/sw/tab_ad.png new file mode 100644 index 0000000000..e34850acfc Binary files /dev/null and b/sw/tab_ad.png differ diff --git a/sw/tab_b.png b/sw/tab_b.png new file mode 100644 index 0000000000..e2b4a8638c Binary files /dev/null and b/sw/tab_b.png differ diff --git a/sw/tab_bd.png b/sw/tab_bd.png new file mode 100644 index 0000000000..91c2524986 Binary files /dev/null and b/sw/tab_bd.png differ diff --git a/sw/tab_h.png b/sw/tab_h.png new file mode 100644 index 0000000000..fd5cb70548 Binary files /dev/null and b/sw/tab_h.png differ diff --git a/sw/tab_hd.png b/sw/tab_hd.png new file mode 100644 index 0000000000..2489273d4c Binary files /dev/null and b/sw/tab_hd.png differ diff --git a/sw/tab_s.png b/sw/tab_s.png new file mode 100644 index 0000000000..ab478c95b6 Binary files /dev/null and b/sw/tab_s.png differ diff --git a/sw/tab_sd.png b/sw/tab_sd.png new file mode 100644 index 0000000000..757a565ced Binary files /dev/null and b/sw/tab_sd.png differ diff --git a/sw/tabs.css b/sw/tabs.css new file mode 100644 index 0000000000..fe4854aa50 --- /dev/null +++ b/sw/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/sw/unionfloat__conv__t.html b/sw/unionfloat__conv__t.html new file mode 100644 index 0000000000..141f1bc799 --- /dev/null +++ b/sw/unionfloat__conv__t.html @@ -0,0 +1,148 @@ + + + + + + + +NEORV32 Software Framework Documentation: float_conv_t Union Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    float_conv_t Union Reference
    +
    +
    + +

    #include <neorv32_zfinx_extension_intrinsics.h>

    + + + + + + +

    +Data Fields

    uint32_t binary_value
     
    float float_value
     
    +

    Detailed Description

    +

    Sanity check Custom data type to access floating-point values as native floats and in binary representation

    +

    Field Documentation

    + +

    ◆ binary_value

    + +
    +
    + + + + +
    uint32_t float_conv_t::binary_value
    +
    +

    Access as native float

    + +
    +
    + +

    ◆ float_value

    + +
    +
    + + + + +
    float float_conv_t::float_value
    +
    +

    Access in binary representation

    + +
    +
    +
    The documentation for this union was generated from the following files: +
    + + +
    + + diff --git a/sw/unionsubwords16__t.html b/sw/unionsubwords16__t.html new file mode 100644 index 0000000000..de4beb4d50 --- /dev/null +++ b/sw/unionsubwords16__t.html @@ -0,0 +1,114 @@ + + + + + + + +NEORV32 Software Framework Documentation: subwords16_t Union Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    subwords16_t Union Reference
    +
    +
    + + + + + + +

    +Data Fields

    +uint16_t uint16 [sizeof(uint16_t)/sizeof(uint16_t)]
     
    +uint8_t uint8 [sizeof(uint16_t)/sizeof(uint8_t)]
     
    +
    The documentation for this union was generated from the following file: +
    + + +
    + + diff --git a/sw/unionsubwords32__t.html b/sw/unionsubwords32__t.html new file mode 100644 index 0000000000..7cbf879d56 --- /dev/null +++ b/sw/unionsubwords32__t.html @@ -0,0 +1,117 @@ + + + + + + + +NEORV32 Software Framework Documentation: subwords32_t Union Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    subwords32_t Union Reference
    +
    +
    + + + + + + + + +

    +Data Fields

    +uint32_t uint32 [sizeof(uint32_t)/sizeof(uint32_t)]
     
    +uint16_t uint16 [sizeof(uint32_t)/sizeof(uint16_t)]
     
    +uint8_t uint8 [sizeof(uint32_t)/sizeof(uint8_t)]
     
    +
    The documentation for this union was generated from the following file: +
    + + +
    + + diff --git a/sw/unionsubwords64__t.html b/sw/unionsubwords64__t.html new file mode 100644 index 0000000000..57fff312ce --- /dev/null +++ b/sw/unionsubwords64__t.html @@ -0,0 +1,120 @@ + + + + + + + +NEORV32 Software Framework Documentation: subwords64_t Union Reference + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    NEORV32 Software Framework Documentation +
    +
    The NEORV32 RISC-V Processor
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    subwords64_t Union Reference
    +
    +
    + + + + + + + + + + +

    +Data Fields

    +uint64_t uint64
     
    +uint32_t uint32 [sizeof(uint64_t)/sizeof(uint32_t)]
     
    +uint16_t uint16 [sizeof(uint64_t)/sizeof(uint16_t)]
     
    +uint8_t uint8 [sizeof(uint64_t)/sizeof(uint8_t)]
     
    +
    The documentation for this union was generated from the following file: +
    + + +
    + + diff --git a/ug/index.html b/ug/index.html new file mode 100644 index 0000000000..ded022efc4 --- /dev/null +++ b/ug/index.html @@ -0,0 +1,4828 @@ + + + + + + + + + + +[User Guide] The NEORV32 RISC-V Processor + + + + + + +
    +
    +
    +
    +
    +neorv32 logo +
    +
    +
    +
    +riscv logo +
    +
    +
    +

    GitHub stnolting%2Fneorv32 ffbd00?style=flat square&logo=github& +neorv32?longCache=true&style=flat square +data%20sheet PDF ffbd00?longCache=true&style=flat square&logo=asciidoctor + HTML ffbd00?longCache=true&style=flat square +user%20guide PDF ffbd00?longCache=true&style=flat square&logo=asciidoctor +doxygen HTML ffbd00?longCache=true&style=flat square&logo=Doxygen
    +neorv32?longCache=true&style=flat square&logo=GitHub +latest?longCache=true&style=flat square&logo=GitHub

    +
    +
    +

    Let’s Get It Started!

    +
    +
    +

    This user guide uses the NEORV32 project as is from the official neorv32 repository. +To make your first NEORV32 project run, follow the guides from the upcoming sections. It is recommended to +follow these guides step by step and eventually in the presented order.

    +
    +
    + + + + + +
    + + +This guide uses the minimalistic and platform/toolchain agnostic SoC test setups from +rtl/test_setups for illustration. You can use one of the provided test setups for +your first FPGA tests.
    +
    +For more sophisticated example setups have a look at the +neorv32-setups repository, +which provides SoC setups for various FPGAs, boards and toolchains. +
    +
    +
    +

    Quick Links

    +
    +
    + +
    +
    +
    +
    +
    +

    1. Software Toolchain Setup

    +
    +
    +

    To compile (and debug) executables for the NEORV32 a RISC-V toolchain is required. +There are two possibilities to get this:

    +
    +
    +
      +
    1. +

      Download and build the official RISC-V GNU toolchain yourself.

      +
    2. +
    3. +

      Download and install a prebuilt version of the toolchain; this might also done via the package manager / app store of your OS

      +
    4. +
    +
    +
    + + + + + +
    + + +The default toolchain prefix (RISCV_PREFIX variable) for this project is riscv32-unknown-elf-. Of course you can use any other RISC-V +toolchain (like riscv64-unknown-elf-) that is capable to emit code for a rv32 architecture. Just change RISCV_PREFIX +according to your needs. +
    +
    +
    +

    1.1. Building the Toolchain from Scratch

    +
    +

    To build the toolchain by yourself you can follow the guide from the official https://github.com/riscv-collab/riscv-gnu-toolchain GitHub page. +You need to make sure the generated toolchain fits the architecture of the NEORV32 core. To get a toolchain that even supports minimal +ISA extension configurations, it is recommend to compile for rv32i only. Please note that this minimal ISA also provides further ISA +extensions like m or c. Of course you can use a multilib approach to generate toolchains for several target ISAs at once.

    +
    +
    +
    Listing 1. Preparing GCC build for rv32i (minimal ISA)
    +
    +
    $ git clone https://github.com/riscv/riscv-gnu-toolchain
    +$ cd riscv-gnu-toolchain
    +
    +$ riscv-gnu-toolchain$ ./configure --prefix=/opt/riscv --with-arch=rv32i --with-abi=ilp32
    +$ riscv-gnu-toolchain$ make
    +
    +
    +
    + + + + + +
    + + +Keep in mind that - for instance - a toolchain build with --with-arch=rv32imc provides library code (like the C +standard library) compiled entirely utilizing compressed (C) and mul/div instructions (M). Hence, this +code CANNOT be executed (without emulation) on an architecture that does not support these ISA extensions. +
    +
    +
    +
    +

    1.2. Downloading and Installing a Prebuilt Toolchain

    +
    +

    Alternatively, you can download a prebuilt toolchain.

    +
    +
    +

    1.2.1. Use The Pre-Built Toolchains

    +
    +

    We have compiled several GCC toolchains on a 64-bit x86 Ubuntu (Ubuntu on Windows, actually) and uploaded it to +GitHub. You can directly download the according toolchain archive as single zip-file within a packed +release from https://github.com/stnolting/riscv-gcc-prebuilt. More information about downloading and installing +these prebuilt toolchains can be found in the repository’s README.

    +
    +
    +
    +

    1.2.2. Use a Third Party Toolchain

    +
    +

    Of course you can also use any other prebuilt version of the toolchain. There are a lot RISC-V GCC packages out there - +even for Windows. On Linux system you might even be able to fetch a toolchain via your distribution’s package manager.

    +
    +
    + + + + + +
    + + +Make sure the toolchain can (also) emit code for a rv32i architecture, uses the ilp32 or ilp32e ABI and was not build using +CPU extensions that are not supported by the NEORV32 (like D). +
    +
    +
    +
    +
    +

    1.3. Installation

    +
    +

    Now you have the toolchain binaries. The last step is to add them to your PATH environment variable (if you have not +already done so): make sure to add the binaries folder (bin) of your toolchain.

    +
    +
    +
    +
    $ export PATH=$PATH:/opt/riscv/bin
    +
    +
    +
    +

    You should add this command to your .bashrc (if you are using bash) to automatically add the RISC-V +toolchain at every console start.

    +
    +
    +
    +

    1.4. Testing the Installation

    +
    +

    To make sure everything works fine, navigate to an example project in the NEORV32 example folder and +execute the following command:

    +
    +
    +
    +
    neorv32/sw/example/demo_blink_led$ make check
    +
    +
    +
    +

    This will test all the tools required for generating NEORV32 executables. +Everything is working fine if Toolchain check OK appears at the end.

    +
    +
    +
    +
    +
    +
    +

    2. General Hardware Setup

    +
    +
    +

    This guide shows the basics of setting up a NEORV32 project for FPGA implementation (or simulation only) +from scratch. It uses a simplified test "SoC" setup of the processor to keeps things simple at the beginning. +This simple setup is intended for evaluation or as "hello world" project to check out the NEORV32 +on your FPGA board.

    +
    +
    + + + + + +
    + + +If you want to use a more sophisticated pre-defined setup to start with, check out the +setups folder, which provides example setups for various FPGA, boards and toolchains. +
    +
    +
    +

    The NEORV32 project features three minimalistic pre-configured test setups in +rtl/test_setups. +These test setups only implement very basic processor and CPU features. +The main difference between the setups is the processor boot concept - so how to get a software executable +into the processor:

    +
    +
    +
      +
    • +

      rtl/test_setups/neorv32_testsetup_approm.vhd: this setup does not require a connection via UART. The +software executable is "installed" into the bitstream to initialize a read-only memory. Use this setup +if your FPGA board does not provide a UART interface.

      +
    • +
    • +

      rtl/test_setups/neorv32_testsetup_bootloader.vhd: this setups uses the UART and the default NEORV32 +bootloader to upload new software executables. Use this setup if your board does provide a UART interface.

      +
    • +
    • +

      rtl/test_setups/neorv32_testsetup_on_chip_debugger.vhd: besides the UARt bootloader, this setups uses +on-chip debugger to upload and inspect new software executables. Use this setup if your board does provide a JTAG +interface (the UART is optional).

      +
    • +
    +
    +
    +
    +neorv32 test setup +
    +
    Figure 1. NEORV32 "hello world" test setup (rtl/test_setups/neorv32_testsetup_bootloader.vhd)
    +
    +
    + + + + + +
    + + +
    External Clock Source
    +These test setups are intended to be directly used as design top entity. Of course you can also instantiate them +into another design unit. If your FPGA board only provides very fast external clock sources (like on the FOMU board) +you might need to add clock management components (PLLs, DCMs, MMCMs, …​) to the test setup or to the according top entity +if you instantiate one of the test setups. +
    +
    +
    +
      +
    1. +

      Create a new project with your FPGA EDA tool of choice.

      +
    2. +
    3. +

      Add all VHDL files from the project’s rtl/core folder to your project.

      +
    4. +
    +
    +
    + + + + + +
    + + +
    Internal Memories
    +For a general first setup (technology-independent) use the *.default.vhd memory architectures for the internal memories +(IMEM and DMEM). These are located in rtl/core/mem so make sure to add the files to your project, too.
    +
    +If synthesis cannot efficiently map those default memory descriptions to the available memory resources, you can later replace the +default memory architectures by optimized platform-specific memory architectures. Example: The neorv32-setups/radiant/UPduino_v3 +example setup uses optimized memory primitives. Hence, it does not include the default memory architectures from +rtl/core/mem as these are replaced by device-specific implementations. However, it still has to include the entity +definitions from rtl/core. +
    +
    +
    +
      +
    1. +

      Make sure to add all the rtl files to a new library called neorv32. If your FPGA tools does not +provide a field to enter the library name, check out the "properties" menu of the added rtl files.

      +
    2. +
    +
    +
    + + + + + +
    + + +
    Compile order
    +Some tools (like Lattice Radiant) might require a manual compile order of the VHDL source files to identify the dependencies. +The package file neorv32_package.vhd should be analyzed first followed by the memory image files (neorv32_application_imagevhd +and neorv32_bootloader_image.vhd) and the entity-only files (neorv32_*mem.entity.vhd). +
    +
    +
    +
      +
    1. +

      The rtl/core/neorv32_top.vhd VHDL file is the top entity of the NEORV32 processor, which can be +instantiated into the "real" project. However, in this tutorial we will use one of the pre-defined +test setups from rtl/test_setups (see above).

      +
    2. +
    +
    +
    + + + + + +
    + + +Make sure to include the neorv32 package into your design when instantiating the processor: add +library neorv32; and use neorv32.neorv32_package.all; to your design unit. +
    +
    +
    +
      +
    1. +

      Add the pre-defined test setup of choice to the project, too, and select it as top entity.

      +
    2. +
    3. +

      The entity of both test setups +provide a minimal set of configuration generics, that might have to be adapted to match your FPGA and board:

      +
    4. +
    +
    +
    +
    Listing 2. Test setup entity - configuration generics
    +
    +
      generic (
    +    -- adapt these for your setup --
    +    CLOCK_FREQUENCY   : natural := 100000000; (1)
    +    MEM_INT_IMEM_SIZE : natural := 16*1024;   (2)
    +    MEM_INT_DMEM_SIZE : natural := 8*1024     (3)
    +  );
    +
    +
    +
    + + + + + + + + + + + + + +
    1Clock frequency of clk_i signal in Hertz
    2Default size of internal instruction memory: 16kB
    3Default size of internal data memory: 8kB
    +
    +
    +
      +
    1. +

      If you feel like it - or if your FPGA does not provide sufficient resources - you can modify the +memory sizes (MEM_INT_IMEM_SIZE and MEM_INT_DMEM_SIZE - marked with notes "2" and "3"). But as mentioned +above, let’s keep things simple at first and use the standard configuration for now.

      +
    2. +
    3. +

      There is one generic that has to be set according to your FPGA board setup: the actual clock frequency +of the top’s clock input signal (clk_i). Use the CLOCK_FREQUENCY generic to specify your clock source’s +frequency in Hertz (Hz).

      +
    4. +
    +
    +
    + + + + + +
    + + +If you have changed the default memory configuration (MEM_INT_IMEM_SIZE and MEM_INT_DMEM_SIZE generics) +keep those new sizes in mind - these values are required for setting +up the software framework in the next section General Software Framework Setup. +
    +
    +
    +
      +
    1. +

      Depending on your FPGA tool of choice, it is time to assign the signals of the test setup top entity to +the according pins of your FPGA board. All the signals can be found in the entity declaration of the +corresponding test setup:

      +
    2. +
    +
    +
    +
    Listing 3. Entity signals of neorv32_testsetup_approm.vhd
    +
    +
      port (
    +    -- Global control --
    +    clk_i       : in  std_ulogic; -- global clock, rising edge
    +    rstn_i      : in  std_ulogic; -- global reset, low-active, async
    +    -- GPIO --
    +    gpio_o      : out std_ulogic_vector(7 downto 0) -- parallel output
    +  );
    +
    +
    +
    +
    Listing 4. Entity signals of neorv32_testsetup_bootloader.vhd
    +
    +
      port (
    +    -- Global control --
    +    clk_i       : in  std_ulogic; -- global clock, rising edge
    +    rstn_i      : in  std_ulogic; -- global reset, low-active, async
    +    -- GPIO --
    +    gpio_o      : out std_ulogic_vector(7 downto 0); -- parallel output
    +    -- UART0 --
    +    uart0_txd_o : out std_ulogic; -- UART0 send data
    +    uart0_rxd_i : in  std_ulogic  -- UART0 receive data
    +  );
    +
    +
    +
    + + + + + +
    + + +
    Signal Polarity
    +If your FPGA board has inverse polarity for certain input/output you can add not gates. Example: The reset signal +rstn_i is low-active by default; the LEDs connected to gpio_o high-active by default. +You can do this in your board top if you instantiate the test setup, +or inside the test setup if this is your top entity (low-active LEDs example: gpio_o ⇐ NOT con_gpio_o(7 downto 0);). +
    +
    +
    +
      +
    1. +

      Attach the clock input clk_i to your clock source and connect the reset line rstn_i to a button of +your FPGA board. Check whether it is low-active or high-active - the reset signal of the processor is +low-active, so maybe you need to invert the input signal.

      +
    2. +
    3. +

      If possible, connected at least bit 0 of the GPIO output port gpio_o to a LED (see "Signal Polarity" note above).

      +
    4. +
    5. +

      If your are using a UART-based test setup connect the UART communication signals uart0_txd_o and uart0_rxd_i +to the host interface (e.g. USB-UART converter).

      +
    6. +
    7. +

      If your are using the on-chip debugger setup connect the processor’s JTAG signal jtag_* to a suitable JTAG adapter.

      +
    8. +
    9. +

      Perform the project HDL compilation (synthesis, mapping, bitstream generation).

      +
    10. +
    11. +

      Program the generated bitstream into your FPGA and press the button connected to the reset signal.

      +
    12. +
    13. +

      Done! The LED(s) connected to gpio_o should be flashing now.

      +
    14. +
    +
    +
    + + + + + +
    + + +
    Going Further
    +Now that the hardware is ready, you can advance to one of these chapters to learn how to get a software executable +into your processor setup (setup the GCC toolchain before; next section General Software Framework Setup):
    +
    +neorv32_testsetup_approm.vhd: Installing an Executable Directly Into Memory +
    +neorv32_testsetup_bootloader.vhd: Uploading and Starting of a Binary Executable Image via UART +
    +neorv32_testsetup_on_chip_debugger.vhd: Debugging using the On-Chip Debugger +
    +
    +
    +
    +
    +
    +

    3. General Software Framework Setup

    +
    +
    +

    To allow executables to be actually executed on the NEORV32 Processor the configuration of the software framework +has to be aware to the hardware configuration. This guide focuses on the memory configuration. To enable +certain CPU ISA features refer to the [_enabling_risc_v_cpu_extensions] section.

    +
    +
    +

    This guide shows how to configure the linker script for a given hardware memory configuration. More information regarding the +linker script itself can be found in the according section of the data sheet: https://stnolting.github.io/neorv32/#_linker_script

    +
    +
    + + + + + +
    + + +If you have not changed the default memory configuration in section General Hardware Setup +you are already done and you can skip the rest of this section. +
    +
    +
    + + + + + +
    + + +Always keep the processor’s Address Space layout in mind +when modifying the linker script +
    +
    +
    +

    There are two options to modify the default memory configuration of the linker script:

    +
    + +
    +

    3.1. Modifying the Linker Script

    +
    +

    This will modify the linker script itself.

    +
    +
    +
      +
    1. +

      Open the NEORV32 linker script sw/common/neorv32.ld with a text editor. Right at the +beginning of this script you will find the NEORV32 memory configuration configuration section:

      +
    2. +
    +
    +
    +
    Listing 5. Cut-out of the linker script neorv32.ld
    +
    +
    /* Default rom/ram (IMEM/DMEM) sizes */
    +__neorv32_rom_size = DEFINED(__neorv32_rom_size) ? __neorv32_rom_size : 2048M; (1)
    +__neorv32_ram_size = DEFINED(__neorv32_ram_size) ? __neorv32_ram_size : 8K; (2)
    +
    +/* Default HEAP size (= 0; no heap at all) */
    +__neorv32_heap_size = DEFINED(__neorv32_heap_size) ? __neorv32_heap_size : 0; (3)
    +
    +/* Default section base addresses - do not change this unless the hardware-defined address space layout is changed! */
    +__neorv32_rom_base = DEFINED(__neorv32_rom_base) ? __neorv32_rom_base : 0x00000000; /* = VHDL package's "ispace_base_c" */ (4)
    +__neorv32_ram_base = DEFINED(__neorv32_ram_base) ? __neorv32_ram_base : 0x80000000; /* = VHDL package's "dspace_base_c" */ (5)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    1Default (max) size of the instruction memory address space (right-most value) (internal/external IMEM): 2048MB
    2Default size of the data memory address space (right-most value) (internal/external DMEM): 8kB
    3Default size of the HEAP (right-most value): 0kB
    4Default base address of the instruction memory address space (right-most value): 0x00000000
    5Default base address of the data memory address space (right-most value): 0x80000000
    +
    +
    +
      +
    1. +

      Only the the neorv32_ram_size variable needs to modified! If you have changed the default DMEM (MEM_INT_DMEM_SIZE generic) +size then change the right-most parameter (here: 8kB) so it is equal to your DMEM hardware configuration. The neorv32_rom_size +does not need to be modified even if you have changed the default IMEM size. +For more information see https://stnolting.github.io/neorv32/#_linker_script

      +
    2. +
    +
    +
    +
      +
    1. +

      Done! Save your changes and close the linker script.

      +
    2. +
    +
    +
    +
    +

    3.2. Overriding the Default Configuration

    +
    +

    This will not change the default linker script at all. Hence, this approach is recommended as it allows to make +per-project memory configuration without changing the code base.

    +
    +
    +

    The RAM and ROM sizes from Modifying the Linker Script (as well as the base addresses) can also be modified +by overriding the default values when invoking make. Therefore, the command needs to pass the according +values to the linker using the makefile’s USER_FLAGS variable.

    +
    +
    + + + + + +
    + + +See section "Application Makefile" of the data sheet for more information regarding the default makefile variables: +https://stnolting.github.io/neorv32/#_application_makefile +
    +
    +
    +
    Listing 6. Example: override default RAM size while invoking make
    +
    +
    $ make USER_FLAGS+="-Wl,--defsym,__neorv32_rom_size=16k" clean_all exe
    +
    +
    +
    +

    The -Wl will pass the following commands/flags to the linker. --defsym will define a symbol for the linker. +neorv32_rom_size is the variable that will be defined and 16k is the value assigned to it (= 16*1024 bytes). As a result, this +command will set the RAM region to a size of 16kB.

    +
    +
    + + + + + +
    + + +When using this approach the customized attributes have to be specified every time the makefile is invoked! +You can put the RAM/ROM override commands into the project’s local makefile or define a simple shell script that defines +all the setup-related parameters (memory sizes, RISC-V ISA extensions, optimization goal, further tuning flags, etc.). +
    +
    +
    +
    +
    +
    +
    +

    4. Application Program Compilation

    +
    +
    +

    This guide shows how to compile an example C-code application into a NEORV32 executable that +can be uploaded via the bootloader or the on-chip debugger.

    +
    +
    + + + + + +
    + + +If your FPGA board does not provide such an interface - don’t worry! +Section Installing an Executable Directly Into Memory shows how to +run custom programs on your FPGA setup without having a UART. +
    +
    +
    +
      +
    1. +

      Open a terminal console and navigate to one of the project’s example programs. For instance, navigate to the +simple sw/example_demo_blink_led example program. This program uses the NEORV32 GPIO module to display +an 8-bit counter on the lowest eight bit of the gpio_o output port.

      +
    2. +
    3. +

      To compile the project and generate an executable simply execute:

      +
    4. +
    +
    +
    +
    +
    neorv32/sw/example/demo_blink_led$ make clean_all exe
    +
    +
    +
    +
      +
    1. +

      We are using the clean_all target to make sure everything is re-build.

      +
    2. +
    3. +

      This will compile and link the application sources together with all the included libraries. At the end, +your application is transformed into an ELF file (main.elf). The NEORV32 image generator (in sw/image_gen) +takes this file and creates a final executable. The makefile will show the resulting memory utilization and +the executable size:

      +
    4. +
    +
    +
    +
    +
    neorv32/sw/example/demo_blink_led$ make clean_all exe
    +Memory utilization:
    +   text    data     bss     dec     hex filename
    +   1004       0       0    1004     3ec main.elf
    +Compiling ../../../sw/image_gen/image_gen
    +Executable (neorv32_exe.bin) size in bytes:
    +1016
    +
    +
    +
    + + + + + +
    + + +Make sure the size of the text segment (3176 bytes here) does not overflow the size of the processor’s +IMEM (if used at all) - otherwise there will be an error during synthesis or during bootloader upload. +
    +
    +
    +
      +
    1. +

      That’s it. The exe target has created the actual executable neorv32_exe.bin in the current folder +that is ready to be uploaded to the processor.

      +
    2. +
    +
    +
    + + + + + +
    + + +The compilation process will also create a main.asm assembly listing file in the current folder, which +shows the actual assembly code of the application. +
    +
    +
    +
    +
    +
    +

    5. Uploading and Starting of a Binary Executable Image via UART

    +
    +
    +

    Follow this guide to use the bootloader to upload an executable via UART.

    +
    +
    + + + + + +
    + + +This concept uses the default "Indirect Boot" scenario that uses the bootloader to upload new executables. +See datasheet section Indirect Boot for more information. +
    +
    +
    + + + + + +
    + + +If your FPGA board does not provide such an interface - don’t worry! +Section Installing an Executable Directly Into Memory shows how to +run custom programs on your FPGA setup without having a UART. +
    +
    +
    +
      +
    1. +

      Connect the primary UART (UART0) interface of your FPGA board to a serial port of your host computer.

      +
    2. +
    3. +

      Start a terminal program. In this tutorial, I am using TeraTerm for Windows. You can download it for free +from https://ttssh2.osdn.jp/index.html.en . On Linux you could use cutecom (recommended) or GTKTerm, +which you can get here https://github.com/Jeija/gtkterm.git (or install via your package manager).

      +
    4. +
    +
    +
    + + + + + +
    + + +Any terminal program that can connect to a serial port should work. However, make sure the program +can transfer data in raw byte mode without any protocol overhead around it. Some terminal programs struggle with +transmitting files larger than 4kB (see https://github.com/stnolting/neorv32/pull/215). Try a different program +if uploading a binary does not work (terminal stall). +
    +
    +
    +
      +
    1. +

      Open a connection to the the serial port your UART is connected to. Configure the terminal setting according to the +following parameters:

      +
      +
        +
      • +

        19200 Baud

        +
      • +
      • +

        8 data bits

        +
      • +
      • +

        1 stop bit

        +
      • +
      • +

        no parity bits

        +
      • +
      • +

        no transmission/flow control protocol

        +
      • +
      • +

        newline on \r\n (carriage return and line feed)

        +
      • +
      +
      +
    2. +
    +
    +
    +
      +
    1. +

      Also make sure that single chars are send from your computer without any consecutive "new line" or "carriage +return" commands. This is highly dependent on your terminal application of choice, TeraTerm only +sends the raw chars by default. In cutecom, change LF to None in the drop-down menu +next to the input text box.

      +
    2. +
    3. +

      Press the NEORV32 reset button to restart the bootloader. The status LED starts blinking and the +bootloader intro screen appears in your console. Hurry up and press any key (hit space!) to abort the +automatic boot sequence and to start the actual bootloader user interface console.

      +
    4. +
    +
    +
    +
    Listing 7. Bootloader console; aborted auto-boot sequence
    +
    +
    << NEORV32 Bootloader >>
    +
    +BLDV: Mar  7 2023
    +HWV:  0x01080107
    +CID:  0x00000000
    +CLK:  0x05f5e100
    +MISA: 0x40901106
    +XISA: 0xc0000fab
    +SOC:  0xffff402f
    +IMEM: 0x00008000
    +DMEM: 0x00002000
    +
    +Autoboot in 10s. Press any key to abort.
    +Aborted.
    +
    +Available CMDs:
    + h: Help
    + r: Restart
    + u: Upload
    + s: Store to flash
    + l: Load from flash
    + x: Boot from flash (XIP)
    + e: Execute
    +CMD:>
    +
    +
    +
    +
      +
    1. +

      Execute the "Upload" command by typing u. Now the bootloader is waiting for a binary executable to be send.

      +
    2. +
    +
    +
    +
    +
    CMD:> u
    +Awaiting neorv32_exe.bin...
    +
    +
    +
    +
      +
    1. +

      Use the "send file" option of your terminal program to send a NEORV32 executable (neorv32_exe.bin).

      +
    2. +
    3. +

      Again, make sure to transmit the executable in raw binary mode (no transfer protocol). +When using TeraTerm, select the "binary" option in the send file dialog.

      +
    4. +
    5. +

      If everything went fine, OK will appear in your terminal:

      +
    6. +
    +
    +
    + + + + + +
    + + +Make sure to upload the NEORV32 executable neorv32_exe.bin. Uploading any other file (like main.bin) +will cause an ERR_EXE bootloader error (see https://stnolting.github.io/neorv32/#_bootloader_error_codes). +
    +
    +
    +
    +
    CMD:> u
    +Awaiting neorv32_exe.bin... OK
    +
    +
    +
    +
      +
    1. +

      The executable is now in the instruction memory of the processor. To execute the program right +now run the "Execute" command by typing e:

      +
    2. +
    +
    +
    +
    +
    CMD:> u
    +Awaiting neorv32_exe.bin... OK
    +CMD:> e
    +Booting...
    +Blinking LED demo program
    +
    +
    +
    +
      +
    1. +

      If everything went fine, you should see the LEDs blinking.

      +
    2. +
    +
    +
    + + + + + +
    + + +The bootloader will print error codes if something went wrong. +See section Bootloader of the NEORV32 datasheet for more information. +
    +
    +
    + + + + + +
    + + +See section Programming an External SPI Flash via the Bootloader to learn how to use an external SPI +flash for nonvolatile program storage. +
    +
    +
    + + + + + +
    + + +Executables can also be uploaded via the on-chip debugger. +See section Debugging with GDB for more information. +
    +
    +
    +
    +
    +
    +

    6. Installing an Executable Directly Into Memory

    +
    +
    +

    If you do not want to use the bootloader (or the on-chip debugger) for executable upload or if your setup does not provide +a serial interface for that, you can also directly install an application into embedded memory.

    +
    +
    +

    This concept uses the "Direct Boot" scenario that implements the processor-internal IMEM as ROM, which is +pre-initialized with the application’s executable during synthesis. Hence, it provides non-volatile storage of the +executable inside the processor. This storage cannot be altered during runtime and any source code modification of +the application requires to re-program the FPGA via the bitstream.

    +
    +
    + + + + + +
    + + +See datasheet section Direct Boot for more information. +
    +
    +
    +

    Using the IMEM as ROM:

    +
    +
    +
      +
    • +

      for this boot concept the bootloader is no longer required

      +
    • +
    • +

      this concept only works for the internal IMEM (but can be extended to work with external memories coupled via the processor’s bus interface)

      +
    • +
    • +

      make sure that the memory components (like block RAM) the IMEM is mapped to support an initialization via the bitstream

      +
    • +
    +
    +
    +
      +
    1. +

      At first, make sure your processor setup actually implements the internal IMEM: the MEM_INT_IMEM_EN generics has to be set to true:

      +
    2. +
    +
    +
    +
    Listing 8. Processor top entity configuration - enable internal IMEM
    +
    +
      -- Internal Instruction memory --
    +  MEM_INT_IMEM_EN => true, -- implement processor-internal instruction memory
    +
    +
    +
    +
      +
    1. +

      For this setup we do not want the bootloader to be implemented at all. Disable implementation of the bootloader by setting the +INT_BOOTLOADER_EN generic to false. This will also modify the processor-internal IMEM so it is initialized with the executable during synthesis.

      +
    2. +
    +
    +
    +
    Listing 9. Processor top entity configuration - disable internal bootloader
    +
    +
      -- General --
    +  INT_BOOTLOADER_EN => false, -- boot configuration: false = boot from int/ext (I)MEM
    +
    +
    +
    +
      +
    1. +

      To generate an "initialization image" for the IMEM that contains the actual application, run the install target when compiling your application:

      +
    2. +
    +
    +
    +
    +
    neorv32/sw/example/demo_blink_led$ make clean_all install
    +Memory utilization:
    +   text    data     bss     dec     hex filename
    +   1004       0       0    1004     3ec main.elf
    +Compiling ../../../sw/image_gen/image_gen
    +Executable (neorv32_exe.bin) size in bytes:
    +1016
    +Installing application image to ../../../rtl/core/neorv32_application_image.vhd
    +
    +
    +
    +
      +
    1. +

      The install target has compiled all the application sources but instead of creating an executable (neorv32_exe.bit) that can be uploaded via the +bootloader, it has created a VHDL memory initialization image core/neorv32_application_image.vhd.

      +
    2. +
    3. +

      This VHDL file is automatically copied to the core’s rtl folder (rtl/core) so it will be included for the next synthesis.

      +
    4. +
    5. +

      Perform a new synthesis. The IMEM will be build as pre-initialized ROM (inferring embedded memories if possible).

      +
    6. +
    7. +

      Upload your bitstream. Your application code now resides unchangeable in the processor’s IMEM and is directly executed after reset.

      +
    8. +
    +
    +
    +

    The synthesis tool / simulator will print asserts to inform about the (IMEM) memory / boot configuration:

    +
    +
    +
    +
    NEORV32 PROCESSOR CONFIG NOTE: Boot configuration: Direct boot from memory (processor-internal IMEM).
    +NEORV32 PROCESSOR CONFIG NOTE: Implementing processor-internal IMEM as ROM (1016 bytes), pre-initialized with application.
    +
    +
    +
    +
    +
    +
    +

    7. Setup of a New Application Program Project

    +
    +
    +
      +
    1. +

      The easiest way of creating a new software application project is to copy an existing one. This will keep all +file dependencies. For example you can copy sw/example/demo_blink_led to sw/example/flux_capacitor.

      +
    2. +
    3. +

      If you want to place you application somewhere outside sw/example you need to adapt the application’s makefile. +In the makefile you will find a variable that keeps the relative or absolute path to the NEORV32 repository home +folder. Just modify this variable according to your new project’s home location:

      +
    4. +
    +
    +
    +
    +
    # Relative or absolute path to the NEORV32 home folder (use default if not set by user)
    +NEORV32_HOME ?= ../../..
    +
    +
    +
    +
      +
    1. +

      If your project contains additional source files outside of the project folder, you can add them to +the APP_SRC variable:

      +
    2. +
    +
    +
    +
    +
    # User's application sources (add additional files here)
    +APP_SRC = $(wildcard *.c) ../somewhere/some_file.c
    +
    +
    +
    +
      +
    1. +

      You also can add a folder containing your application’s include files to the +APP_INC variable (do not forget the -I prefix):

      +
    2. +
    +
    +
    +
    +
    # User's application include folders (don't forget the '-I' before each entry)
    +APP_INC = -I . -I ../somewhere/include_stuff_folder
    +
    +
    +
    +
    +
    +
    +

    8. Application-Specific Processor Configuration

    +
    +
    +

    The processor’s configuration options, which are mainly defined via the top entity VHDL generics, allow +to tailor the entire SoC according to the application-specific requirements. Note that this chapter does not focus on optional +SoC features like IO/peripheral modules - it rather gives ideas on how to optimize for overall goals +like performance and area.

    +
    +
    + + + + + +
    + + +Please keep in mind that optimizing the design in one direction (like performance) will also effect other potential +optimization goals (like area and energy). +
    +
    +
    +

    8.1. Optimize for Performance

    +
    +

    The following points show some concepts to optimize the processor for performance regardless of the costs +(i.e. increasing area and energy requirements):

    +
    +
    +
      +
    • +

      Enable all performance-related RISC-V CPU extensions that implement dedicated hardware accelerators instead +of emulating operations entirely in software: M, C, Zfinx

      +
    • +
    • +

      Enable mapping of compleX CPU operations to dedicated hardware: FAST_MUL_EN ⇒ true to use DSP slices for +multiplications, FAST_SHIFT_EN ⇒ true use a fast barrel shifter for shift operations.

      +
    • +
    • +

      Implement the instruction cache: ICACHE_EN ⇒ true

      +
    • +
    • +

      Use as many internal memory as possible to reduce memory access latency: MEM_INT_IMEM_EN ⇒ true and +MEM_INT_DMEM_EN ⇒ true, maximize MEM_INT_IMEM_SIZE and MEM_INT_DMEM_SIZE

      +
    • +
    • +

      To be continued…​

      +
    • +
    +
    +
    +
    +

    8.2. Optimize for Size

    +
    +

    The NEORV32 is a size-optimized processor system that is intended to fit into tiny niches within large SoC +designs or to be used a customized microcontroller in really tiny / low-power FPGAs (like Lattice iCE40). +Here are some ideas how to make the processor even smaller while maintaining it’s general purpose system +concept and maximum RISC-V compatibility.

    +
    +
    +

    SoC

    +
    +
    +
      +
    • +

      This is obvious, but exclude all unused optional IO/peripheral modules from synthesis via the processor +configuration generics.

      +
    • +
    • +

      If an IO module provides an option to configure the number of "channels", constrain this number to the +actually required value (e.g. the PWM module IO_PWM_NUM_CH or the external interrupt controller XIRQ_NUM_CH).

      +
    • +
    • +

      Disable the instruction cache (ICACHE_EN ⇒ false) if the design only uses processor-internal IMEM +and DMEM memories.

      +
    • +
    • +

      To be continued…​

      +
    • +
    +
    +
    +

    CPU

    +
    +
    +
      +
    • +

      Use the embedded RISC-V CPU architecture extension (CPU_EXTENSION_RISCV_E) to reduce block RAM utilization.

      +
    • +
    • +

      The compressed instructions extension (CPU_EXTENSION_RISCV_C) requires additional logic for the decoder but +also reduces program code size by approximately 30%.

      +
    • +
    • +

      If not explicitly used/required, exclude the CPU standard counters [m]instret[h] +(number of instruction) and [m]cycle[h] (number of cycles) from synthesis by disabling the Zicntr ISA extension +(note, this is not RISC-V compliant).

      +
    • +
    • +

      Map CPU shift operations to a small and iterative shifter unit (FAST_SHIFT_EN ⇒ false).

      +
    • +
    • +

      If you have unused DSP block available, you can map multiplication operations to those slices instead of +using LUTs to implement the multiplier (FAST_MUL_EN ⇒ true).

      +
    • +
    • +

      If there is no need to execute division in hardware, use the Zmmul extension instead of the full-scale +M extension.

      +
    • +
    • +

      Disable CPU extension that are not explicitly used.

      +
    • +
    • +

      To be continued…​

      +
    • +
    +
    +
    +
    +

    8.3. Optimize for Clock Speed

    +
    +

    The NEORV32 Processor and CPU are designed to provide minimal logic between register stages to keep the +critical path as short as possible. When enabling additional extension or modules the impact on the existing +logic is also kept at a minimum to prevent timing degrading. If there is a major impact on existing +logic (example: many physical memory protection address configuration registers) the VHDL code automatically +adds additional register stages to maintain critical path length. Obviously, this increases operation latency.

    +
    +
    + + + + + +
    + + +Enable the "ASIC style" register file option (REGFILE_HW_RST) to obtain maximum clock speed for the CPU (at the cost of +of an increased hardware footprint). +
    +
    +
    +

    In order to optimize for a minimal critical path (= maximum clock speed) the following points should be considered:

    +
    +
    +
      +
    • +

      Complex CPU extensions (in terms of hardware requirements) should be avoided (examples: floating-point unit, physical memory protection).

      +
    • +
    • +

      Large carry chains (>32-bit) should be avoided (i.e. constrain the HPM counter sizes via HPM_CNT_WIDTH).

      +
    • +
    • +

      If the target FPGA provides sufficient DSP resources, CPU multiplication operations can be mapped to DSP slices (FAST_MUL_EN ⇒ true) +reducing LUT usage and critical path impact while also increasing overall performance.

      +
    • +
    • +

      Use the synchronous (registered) RX path configuration of the external bus interface (XBUS_ASYNC_RX ⇒ false).

      +
    • +
    • +

      To be continued…​

      +
    • +
    +
    +
    + + + + + +
    + + +The short and fixed-length critical path allows to integrate the core into existing clock domains. +So no clock domain-crossing and no sub-clock generation is required. However, for very high clock +frequencies (this is technology / platform dependent) clock domain crossing becomes crucial for chip-internal +connections. +
    +
    +
    +
    +

    8.4. Optimize for Energy

    +
    +

    There are no dedicated configuration options to optimize the processor for energy (minimal consumption; +energy/instruction ratio) yet. However, a reduced processor area (Optimize for Size) will also reduce +static energy consumption.

    +
    +
    +

    To optimize your setup for low-power applications, you can make use of the CPU sleep mode (wfi instruction). +Put the CPU to sleep mode whenever possible. If the clok gating feature is enabled (CLOCK_GATING_EN) the entire +CPU complex will be disconnected from the clock tree while in sleep mode.

    +
    +
    +

    Disable all processor modules that are not actually used (exclude them +from synthesis if the will be never used; disable a module via it’s control register if the module is not +currently used).

    +
    +
    + + + + + +
    + + +
    Processor-internal clock generator shutdown
    +If no IO/peripheral module is currently enabled, the processor’s internal clock generator circuit will be +shut down reducing switching activity and thus, dynamic energy consumption. +
    +
    +
    +
    +
    +
    +
    +

    9. Adding Custom Hardware Modules

    +
    +
    +

    In resemblance to the RISC-V ISA, the NEORV32 processor was designed to ease customization and extensibility. +The processor provides several predefined options to add application-specific custom hardware modules and accelerators. +A Comparative Summary is given at the end of this section.

    +
    +
    + + + + + +
    + + +
    Debugging/Testing Custom Hardware Modules
    +Custom hardware IP modules connected via the external bus interface or integrated as CFU can be debugged "in-system" using the +"bus explorer" example program (sw/example_bus_explorer). This program provides an interactive console (via UART0) +that allows to perform arbitrary read and write access from/to any memory-mapped register. +
    +
    +
    +

    9.1. Standard (External) Interfaces

    +
    +

    The processor already provides a set of standard interfaces that are intended to connect chip-external devices. +However, these interfaces can also be used chip-internally. The most suitable interfaces are +GPIO, +UART, +SPI and +TWI.

    +
    +
    +

    The SPI and especially the GPIO interfaces might be the most straightforward approaches since they +have a minimal protocol overhead. Device-specific interrupt capabilities could be added using the +External Interrupt Controller (XIRQ).

    +
    +
    +

    Beyond simplicity, these interface only provide a very limited bandwidth and require more sophisticated +software handling ("bit-banging" for the GPIO). Hence, it is not recommend to use them for chip-internal communication.

    +
    +
    +
    +

    9.2. External Bus Interface

    +
    +

    The External Bus Interface +provides the classic approach for attaching custom IP. By default, the bus interface implements the widely adopted +Wishbone interface standard. This project also includes wrappers to convert to other protocol standards like ARM’s +AXI4-Lite or Intel’s Avalon protocols. By using a full-featured bus protocol, complex SoC designs can be implemented +including several modules and even multi-core architectures. Many FPGA EDA tools provide graphical editors to build +and customize whole SoC architectures and even include pre-defined IP libraries.

    +
    +
    +
    +neorv32 axi soc +
    +
    Figure 2. Example AXI SoC using AMD Vivado
    +
    +
    +

    Custom hardware modules attached to the processor’s bus interface have no limitations regarding their functionality. +User-defined interfaces (like DDR memory access) can be implemented and the hardware module can operate completely +independent of the CPU.

    +
    +
    +

    The bus interface uses a memory-mapped approach. All data transfers are handled by simple load/store operations since the +external bus interface is mapped into the processor’s address space. +This allows a very simple still high-bandwidth communications. However, high bus traffic may increase access latencies.

    +
    +
    +
    +

    9.3. Custom Functions Subsystem

    +
    +

    The Custom Functions Subsystem (CFS) is +an "empty" template for a memory-mapped, processor-internal module.

    +
    +
    +

    The basic idea of this subsystem is to provide a convenient, simple and flexible platform, where the user can +concentrate on implementing the actual design logic rather than taking care of the communication between the +CPU/software and the design logic. Note that the CFS does not have direct access to memory. All data (and control +instruction) have to be send by the CPU.

    +
    +
    +

    The use-cases for the CFS include medium-scale hardware accelerators that need to be tightly-coupled to the CPU. +Potential use cases could be DSP modules like CORDIC, cryptographic accelerators or custom interfaces (like IIS).

    +
    +
    +
    +

    9.4. Custom Functions Unit

    +
    +

    The Custom Functions Unit (CFU) is a functional +unit that is integrated right into the CPU’s pipeline. It allows to implement custom RISC-V instructions. +This extension option is intended for rather small logic that implements operations, which cannot be emulated +in pure software in an efficient way. Since the CFU has direct access to the core’s register file it can operate +with minimal data latency.

    +
    +
    +
    +

    9.5. Comparative Summary

    +
    +

    The following table gives a comparative summary of the most important factors when choosing one of the +chip-internal extension options:

    +
    +
    + +
    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 1. Comparison of On-Chip Extension Options
    Custom Functions Unit (CFU)Custom Functions Subsystem (CFS)External Bus Interface

    RTL location

    CPU-internal

    processor-internal

    processor-external

    HW complexity/size

    small

    medium

    large

    CPU-independent operation

    no

    yes

    yes

    CPU interface

    register file access

    memory-mapped

    memory-mapped

    Low-level access mechanism

    custom instructions

    load/store

    load/store

    Access latency

    minimal

    low

    medium to high

    External IO interfaces

    not supported

    yes, but limited

    yes, user-defined

    Exception capability

    yes

    no

    no

    Interrupt capability

    no

    yes

    user-defined

    +
    +
    +
    +
    +
    +

    10. Customizing the Internal Bootloader

    +
    +
    +

    The NEORV32 bootloader provides several options to configure and customize it for a certain application setup. +This configuration is done by passing defines when compiling the bootloader. Of course you can also +modify to bootloader source code to provide a setup that perfectly fits your needs.

    +
    +
    + + + + + +
    + + +Each time the bootloader sources are modified, the bootloader has to be re-compiled (and re-installed to the +bootloader ROM) and the processor has to be re-synthesized. +
    +
    +
    + + + + + +
    + + +Keep in mind that the maximum size for the bootloader is limited to 8kB and it should be compiled using the +minimal base & privileged ISA rv32i_zicsr_zifencei only to ensure it can work independently of the actual CPU configuration. +
    +
    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 2. Bootloader configuration parameters
    ParameterDefaultLegal valuesDescription

    Memory layout

    EXE_BASE_ADDR

    0x00000000

    any

    Base address / boot address for the executable (see section "Address Space" in the NEORV32 data sheet)

    Serial console interface

    UART_EN

    1

    0, 1

    Set to 0 to disable UART0 (no serial console at all)

    UART_BAUD

    19200

    any

    Baud rate of UART0

    UART_HW_HANDSHAKE_EN

    0

    0, 1

    Set to 1 to enable UART0 hardware flow control

    Status LED

    STATUS_LED_EN

    1

    0, 1

    Enable bootloader status led ("heart beat") at GPIO output port pin #STATUS_LED_PIN when 1

    STATUS_LED_PIN

    0

    0 …​ 31

    GPIO output pin used for the high-active status LED

    Auto-boot configuration

    AUTO_BOOT_TIMEOUT

    10

    any

    Time in seconds after the auto-boot sequence starts (if there is no UART input by the user); set to 0 to disabled auto-boot sequence

    SPI configuration

    SPI_EN

    1

    0, 1

    Set 1 to enable the usage of the SPI module (including load/store executables from/to SPI flash options)

    SPI_FLASH_CS

    0

    0 …​ 7

    SPI chip select output (spi_csn_o) for selecting flash

    SPI_FLASH_ADDR_BYTES

    3

    2, 3, 4

    SPI flash address size in number of bytes (2=16-bit, 3=24-bit, 4=32-bit)

    SPI_FLASH_SECTOR_SIZE

    65536

    any

    SPI flash sector size in bytes

    SPI_FLASH_CLK_PRSC

    CLK_PRSC_8

    CLK_PRSC_2 CLK_PRSC_4 CLK_PRSC_8 CLK_PRSC_64 CLK_PRSC_128 CLK_PRSC_1024 CLK_PRSC_2024 CLK_PRSC_4096

    SPI clock pre-scaler (dividing main processor clock)

    SPI_BOOT_BASE_ADDR

    0x00400000

    any 32-bit value

    Defines the base address of the executable in external flash

    XIP configuration

    XIP_EN

    0

    0, 1

    Set 1 to enable the XIP options

    +
    + + + + + +
    + + +The XIP options re-use the "SPI configuration" options for configuring the XIP’s SPI connection. +
    +
    +
    +

    Each configuration parameter is implemented as C-language define that can be manually overridden (redefined) when +invoking the bootloader’s makefile. The according parameter and its new value has to be appended +(using +=) to the makefile USER_FLAGS variable. Make sure to use the -D prefix here.

    +
    +
    +

    For example, to configure a UART Baud rate of 57600 and redirecting the status LED to GPIO output pin 20 +use the following command:

    +
    +
    +
    Listing 10. Example: customizing, re-compiling and re-installing the bootloader
    +
    +
    sw/bootloader$ make USER_FLAGS+=-DUART_BAUD=57600 USER_FLAGS+=-DSTATUS_LED_PIN=20 clean_all bootloader
    +
    +
    +
    + + + + + +
    + + +The clean_all target ensure that all libraries are re-compiled. The bootloader target will automatically +compile and install the bootloader to the HDL boot ROM (updating rtl/core/neorv32_bootloader_image.vhd). +
    +
    +
    +

    10.1. Auto-Boot Configuration

    +
    +

    The default bootloader provides a UART-based user interface that allows to upload new executables +at any time. Optionally, the executable can also be programmed to an external SPI flash by the bootloader (see +section Programming an External SPI Flash via the Bootloader).

    +
    +
    +

    The bootloader also provides an automatic boot sequence (auto-boot) which will start copying an executable +from external SPI flash to IMEM using the default SPI configuration. By this, the default bootloader +provides a "non-volatile program storage" mechanism that automatically boots from external SPI flash +(after AUTO_BOOT_TIMEOUT) while still providing the option to re-program the SPI flash at any time +via the UART console.

    +
    +
    +
    +
    +
    +
    +

    11. Programming an External SPI Flash via the Bootloader

    +
    +
    +

    The default processor-internal NEORV32 bootloader supports automatic booting from an external SPI flash. +This guide shows how to write an executable to the SPI flash via the bootloader so it can be automatically +fetched and executed after processor reset. For example, you can use a section of the FPGA bitstream configuration +memory to store an application executable.

    +
    +
    + + + + + +
    + + +
    Customization
    +This section assumes the default configuration of the NEORV32 bootloader. +See section Customizing the Internal Bootloader on how to customize the bootloader and its setting +(for example the SPI chip-select port, the SPI clock speed or the flash base address for storing the executable). +
    +
    +
    +

    11.1. Programming an Executable

    +
    +
      +
    1. +

      At first, reset the NEORV32 processor and wait until the bootloader start screen appears in your terminal program.

      +
    2. +
    3. +

      Abort the auto boot sequence and start the user console by pressing any key.

      +
    4. +
    5. +

      Press u to upload the executable that you want to store to the external flash:

      +
    6. +
    +
    +
    +
    +
    CMD:> u
    +Awaiting neorv32_exe.bin...
    +
    +
    +
    +
      +
    1. +

      Send the binary in raw binary via your terminal program. When the upload is completed and "OK" +appears, press s to trigger the programming of the flash (do not execute the image via the e +command as this might corrupt the image):

      +
    2. +
    +
    +
    +
    +
    CMD:> u
    +Awaiting neorv32_exe.bin... OK
    +CMD:> s
    +Write 0x000013FC bytes to SPI flash @ 0x02000000? (y/n)
    +
    +
    +
    +
      +
    1. +

      The bootloader shows the size of the executable and the base address inside the SPI flash where the +executable is going to be stored. A prompt appears: Type y to start the programming or type n to +abort.

      +
    2. +
    +
    +
    + + + + + +
    + + +Section Customizing the Internal Bootloader show the according C-language define that can be modified +to specify the base address of the executable inside the SPI flash. +
    +
    +
    +
    +
    CMD:> u
    +Awaiting neorv32_exe.bin... OK
    +CMD:> s
    +Write 0x000013FC bytes to SPI flash @ 0x02000000? (y/n) y
    +Flashing... OK
    +CMD:>
    +
    +
    +
    + + + + + +
    + + +The bootloader stores the executable in little-endian byte-order to the flash. +
    +
    +
    +
      +
    1. +

      If "OK" appears in the terminal line, the programming process was successful. Now you can use the +auto boot sequence to automatically boot your application from the flash at system start-up without +any user interaction.

      +
    2. +
    +
    +
    +
    +
    +
    +
    +

    12. Packaging the Processor as Vivado IP Block

    +
    +
    +

    Packaging the entire processor as IP module allows easy integration of the core (or even several cores) +into a block-design-based Vivado project. The NEORV32 repository provides a full-scale TCL script that +automatically packages the processor as Vivado IP block. For this, a specialized wrapper for the processor’s +top entity is provided (rtl/system_integration/neorv32_vivado_ip.vhd) that features AXI4-Lite (via XBUS) +and AXI4-Stream (via SLINK) compatible interfaces.

    +
    +
    + + + + + +
    + + +
    General AXI Wrapper
    +The provided AXI wrapper can also be used for custom (AXI) setups outside of Vivado and/or IP block designs. +
    +
    +
    +
    +vivado ip soc +
    +
    Figure 3. Example Vivado SoC using the NEORV32 IP Block
    +
    +
    +

    Besides packaging the HDL modules, the TCL script also generates a simplified customization GUI that allows an easy +and intuitive configuration of the processor. The rather complex VHDL configuration generics are renamed and provided +with tool tips to make it easier to understand the different configuration options.

    +
    +
    +
    +vivado ip gui +
    +
    Figure 4. NEORV32 IP Customization GUI
    +
    +
    +

    The following steps show how to package the processor using the provided TCL script and how to import +the generated IP block into the Vivado IP repository.

    +
    +
    +
      +
    1. +

      Open the Vivado GUI.

      +
    2. +
    3. +

      In GUI mode select either "Tools → Run TCL Script" to directly execute the script or open the TCL +shell ("Window → Tcl Console") to manually invoke the script.

      +
    4. +
    5. +

      Use cd in the TCL console to navigate to the project’s neorv32/rtl/system_integration folder.

      +
    6. +
    7. +

      Execute source neorv32_vivado_ip.tcl in the TCL console.

      +
    8. +
    9. +

      A second Vivado instance will open automatically packaging the IP module. After this process is completed, +the second Vivado instance will automatically close again.

      +
    10. +
    11. +

      A new folder neorv32_vivado_ip_work is created in neorv32/rtl/system_integration which contains the IP-packaging +Vivado project.

      +
    12. +
    13. +

      Inside, the packaged_ip folder provides the actual IP module.

      +
    14. +
    15. +

      Open your design project in Vivado.

      +
    16. +
    17. +

      Click on "Settings" in the "Project Manager" on the left side.

      +
    18. +
    19. +

      Under "Project Settings" expand the "IP" section and click on "Repository".

      +
    20. +
    21. +

      Click the large plus button and select the previously generated IP folder (path/to/neorv32/rtl/system_integration/neorv32_vivado_ip_work/packaged_ip).

      +
    22. +
    23. +

      Click "Select" and close the Settings menu with "Apply" and "OK".

      +
    24. +
    25. +

      You will find the NEORV32 in the "User Repository" section of the Vivado IP catalog.

      +
    26. +
    +
    +
    + + + + + +
    + + +
    Combinatorial Loops DRC Errors
    +If the TRNG is enabled it is recommended to add the following commands to the project’s constraints file in order +to prevent DRC errors during bitstream generation: +
    +
    +
    +
    +
    set_property SEVERITY {warning} [get_drc_checks LUTLP-1]
    +set_property IS_ENABLED FALSE [get_drc_checks LUTLP-1]
    +set_property ALLOW_COMBINATORIAL_LOOPS TRUE
    +
    +
    +
    +
    +
    +
    +

    13. Simulating the Processor

    +
    +
    +

    The NEORV32 project includes a core CPU, built-in peripherals in the Processor Subsystem, and additional peripherals in +the templates and examples. +Therefore, there is a wide range of possible testing and verification strategies.

    +
    +
    +

    On the one hand, a simple smoke testbench allows ensuring that functionality is correct from a software point of view. +That is used for running the RISC-V architecture tests, in order to guarantee compliance with the ISA specification(s).

    +
    +
    +

    On the other hand, VUnit and Verification Components +are used for verifying the functionality of the various peripherals from a hardware point of view.

    +
    +
    + + + + + +
    + + +
    AMD Vivado / ISIM
    +When using AMD Vivado (ISIM for simulation) make sure to turn of "incremental compilation" (Project Setting +→ SimulationAdvanced → _Enable incremental compilation). This will slow down simulation relaunch but will +ensure that all application images (*_image.vhd) are reanalyzed when recompiling the NEORV32 application or bootloader +
    +
    +
    + + + + + +
    + + +The processor can check if it is being simulated by checking the SYSINFO SYSINFO_SOC_IS_SIM flag +(see https://stnolting.github.io/neorv32/#_system_configuration_information_memory_sysinfo). +Note that this flag is not guaranteed to be set correctly (depending on the HDL toolchain’s pragma support). +
    +
    +
    +

    13.1. Testbench

    +
    +

    A plain-VHDL (no third-party libraries) testbench (sim/simple/neorv32_tb.simple.vhd) can be used for simulating and +testing the processor. +This testbench features a 100MHz clock and enables all optional peripheral and CPU extensions except for the E.

    +
    +
    + + + + + +
    + + +In the simple testbench several optional extensions are disabled, such as C or E. +If software is compiled using instructions corresponding to disabled extensions, the whole processor will hang in an eternal exception loop and, therefore, the simulation will timeout. +The MARCH must be a subset of the extensions enabled in the testbench. +
    +
    +
    + + + + + +
    + + +
    True Random Number Generator
    +The NEORV32 TRNG will be set to "simulation mode" when enabled for simulation (replacing the ring-oscillators +by pseudo-random LFSRs). See the neoTRNG documentation for more information. +
    +
    +
    +

    The simulation setup is configured via the "User Configuration" section located right at the beginning of +the testbench’s architecture. Each configuration constant provides comments to explain the functionality.

    +
    +
    +

    Besides the actual NEORV32 Processor, the testbench also simulates "external" components that are connected +to the processor’s external bus/memory interface. These components are:

    +
    +
    +
      +
    • +

      an external instruction memory (that also allows booting from it)

      +
    • +
    • +

      an external data memory

      +
    • +
    • +

      an external memory to simulate "external IO devices"

      +
    • +
    • +

      a memory-mapped registers to trigger the processor’s interrupt signals

      +
    • +
    +
    +
    +

    The following table shows the base addresses of these four components and their default configuration and +properties:

    +
    +
    + + + + + +
    + + +
    +

    Attributes:

    +
    +
    +
      +
    • +

      r = read

      +
    • +
    • +

      w = write

      +
    • +
    • +

      e = execute

      +
    • +
    • +

      8 = byte-accessible

      +
    • +
    • +

      16 = half-word-accessible

      +
    • +
    • +

      32 = word-accessible

      +
    • +
    +
    +
    +
    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 3. Testbench: processor-external memories
    Base addressSizeAttributesDescription

    0x00000000

    imem_size_c

    r/w/e 8/16/32

    external IMEM (initialized with application image)

    0x80000000

    dmem_size_c

    r/w/e 8/16/32

    external DMEM

    0xf0000000

    64 bytes

    r/w/e 8/16/32

    external "IO" memory

    0xff000000

    4 bytes

    -/w/- -/-/32

    memory-mapped register to trigger "machine external", "machine software" and "SoC Fast Interrupt" interrupts

    +
    + + + + + +
    + + +The simulated NEORV32 does not use the bootloader and directly boots the current application image (from +the rtl/core/neorv32_application_image.vhd image file). +
    +
    +
    + + + + + +
    + + +
    UART output during simulation
    +Data written to the NEORV32 UART0 / UART1 transmitter is send to a virtual UART receiver implemented +as part of the testbench. Received chars are send to the simulator console and are also stored to a log file +(neorv32.testbench_uart0.out for UART0, neorv32.testbench_uart1.out for UART1) inside the simulation’s home folder. +Please note that printing via the native UART receiver takes a lot of time. For faster simulation console output +see section Faster Simulation Console Output. +
    +
    +
    +
    +

    13.2. Faster Simulation Console Output

    +
    +

    When printing data via the physical UART the communication speed will always be based on the configured BAUD +rate. For a simulation this might take some time. To have faster output you can enable the simulation mode +for UART0/UART1 (see section Documentation: Primary Universal Asynchronous Receiver and Transmitter (UART0)).

    +
    +
    +

    ASCII data sent to UART0|UART1 will be immediately printed to the simulator console and logged to files in the simulator +execution directory:

    +
    +
    +
      +
    • +

      neorv32.uart?.sim_mode.text.out: ASCII data.

      +
    • +
    +
    +
    +

    You can "automatically" enable the simulation mode of UART0/UART1 when compiling an application. +In this case, the "real" UART0/UART1 transmitter unit is permanently disabled. +To enable the simulation mode just compile and install your application and add UART?_SIM_MODE to the compiler’s +USER_FLAGS variable (do not forget the -D suffix flag):

    +
    +
    +
    +
    sw/example/demo_blink_led$ make USER_FLAGS+=-DUART0_SIM_MODE clean_all all
    +
    +
    +
    +

    The provided define will change the default UART0/UART1 setup function in order to set the simulation +mode flag in the according UART’s control register.

    +
    +
    + + + + + +
    + + +The UART simulation output (to file and to screen) outputs "complete lines" at once. A line is +completed with a line feed (newline, ASCII \n = 10). +
    +
    +
    +
    +

    13.3. Simulation using a shell script (with GHDL)

    +
    +

    To simulate the processor using GHDL navigate to the sim/simple/ folder and run the provided shell script. +Any arguments that are provided while executing this script are passed to GHDL. +For example the simulation time can be set to 20ms using --stop-time=20ms as argument.

    +
    +
    +
    +
    neorv32/sim/simple$ sh ghdl.sh --stop-time=20ms
    +
    +
    +
    +
    +

    13.4. Simulation using Application Makefiles (In-Console with GHDL)

    +
    +

    To directly compile and run a program in the console (using the default testbench and GHDL +as simulator) you can use the sim makefile target. Make sure to use the UART simulation mode +(USER_FLAGS+=-DUART0_SIM_MODE and/or USER_FLAGS+=-DUART1_SIM_MODE) to get +faster / direct-to-console UART output.

    +
    +
    +
    +
    sw/example/demo_blink_led$ make USER_FLAGS+=-DUART0_SIM_MODE clean_all sim
    +[...]
    +Blinking LED demo program
    +
    +
    +
    +

    13.4.1. Hello World!

    +
    +

    To do a quick test of the NEORV32 make sure to have GHDL and a +RISC-V gcc toolchain installed. +Navigate to the project’s sw/example/hello_world folder and run make USER_FLAGS+=-DUART0_SIM_MODE clean_all sim:

    +
    +
    + + + + + +
    + + +The simulator will output some sanity check notes (and warnings or even errors if something is ill-configured) +right at the beginning of the simulation to give a brief overview of the actual NEORV32 SoC and CPU configurations. +
    +
    +
    +
    +
    neorv32/sw/example/hello_world$ make USER_FLAGS+=-DUART0_SIM_MODE clean_all sim
    +../../../sw/lib/source/neorv32_uart.c: In function 'neorv32_uart_setup':
    +../../../sw/lib/source/neorv32_uart.c:116:2: warning: #warning UART0_SIM_MODE (primary UART) enabled! Sending all UART0.TX data to text.io simulation output instead of real UART0 transmitter. Use this for simulations only! [-Wcpp]
    +  116 | #warning UART0_SIM_MODE (primary UART) enabled! Sending all UART0.TX data to text.io simulation output instead of real UART0 transmitter. Use this for simulations only! (1)
    +      |  ^~~~~~~
    +Memory utilization:
    +   text    data     bss     dec     hex filename
    +   4664       0     116    4780    12ac main.elf (2)
    +Compiling ../../../sw/image_gen/image_gen
    +Installing application image to ../../../rtl/core/neorv32_application_image.vhd (3)
    +Simulating neorv32_application_image.vhd...
    +Tip: Compile application with USER_FLAGS+=-DUART[0/1]_SIM_MODE to auto-enable UART[0/1]'s simulation mode (redirect UART output to simulator console). (4)
    +Using simulation run arguments: --stop-time=10ms (5)
    +../../rtl/core/neorv32_top.vhd:355:5:@0ms:(assertion note): [NEORV32] The NEORV32 RISC-V Processor (version 0x01090504), github.com/stnolting/neorv32 (6)
    +../../rtl/core/neorv32_top.vhd:361:5:@0ms:(assertion note): [NEORV32] Processor Configuration: IMEM DMEM I-CACHE D-CACHE WISHBONE GPIO MTIME UART0 UART1 SPI SDI TWI PWM WDT TRNG CFS NEOLED XIRQ GPTMR XIP ONEWIRE DMA SLINK CRC SYSINFO OCD
    +../../rtl/core/neorv32_clockgate.vhd:60:3:@0ms:(assertion warning): [NEORV32] Clock gating enabled (using generic clock switch).
    +../../rtl/core/neorv32_cpu.vhd:142:3:@0ms:(assertion note): [NEORV32] CPU ISA: rv32imabu_zicsr_zicntr_zicond_zifencei_zfinx_zihpm_zxcfu_sdext_sdtrig_smpmp
    +../../rtl/core/neorv32_cpu.vhd:163:3:@0ms:(assertion note): [NEORV32] CPU tuning options: fast_mul fast_shift
    +../../rtl/core/neorv32_cpu.vhd:170:3:@0ms:(assertion warning): [NEORV32] Assuming this is a simulation.
    +../../rtl/core/neorv32_cpu_cp_fpu.vhd:292:3:@0ms:(assertion warning): [NEORV32] The floating-point unit (Zfinx) is still in experimental state.
    +../../rtl/core/mem/neorv32_imem.legacy.vhd:72:3:@0ms:(assertion note): [NEORV32] Implementing LEGACY processor-internal IMEM as pre-initialized ROM.
    +../../rtl/core/neorv32_wishbone.vhd:117:3:@0ms:(assertion note): [NEORV32] Ext. Bus Interface (WISHBONE) - PIPELINED Wishbone protocol, auto-timeout, LITTLE-endian byte order, registered RX, registered TX
    +../../rtl/core/neorv32_trng.vhd:343:3:@0ms:(assertion note): [neoTRNG NOTE] << neoTRNG V3 - A Tiny and Platform-Independent True Random Number Generator >>
    +../../rtl/core/neorv32_trng.vhd:545:5:@0ms:(assertion warning): [neoTRNG WARNING] Implementing non-physical pseudo-RNG!
    +../../rtl/core/neorv32_trng.vhd:545:5:@0ms:(assertion warning): [neoTRNG WARNING] Implementing non-physical pseudo-RNG!
    +../../rtl/core/neorv32_trng.vhd:545:5:@0ms:(assertion warning): [neoTRNG WARNING] Implementing non-physical pseudo-RNG!
    +../../rtl/core/neorv32_debug_dm.vhd:227:3:@0ms:(assertion note): [NEORV32] OCD DM compatible to debug spec. version 1.0
    +(7)
    +                                                                                      ##        ##   ##   ##
    + ##     ##   #########   ########    ########   ##      ##   ########    ########     ##      ################
    +####    ##  ##          ##      ##  ##      ##  ##      ##  ##      ##  ##      ##    ##    ####            ####
    +## ##   ##  ##          ##      ##  ##      ##  ##      ##          ##         ##     ##      ##   ######   ##
    +##  ##  ##  #########   ##      ##  #########   ##      ##      #####        ##       ##    ####   ######   ####
    +##   ## ##  ##          ##      ##  ##    ##     ##    ##           ##     ##         ##      ##   ######   ##
    +##    ####  ##          ##      ##  ##     ##     ##  ##    ##      ##   ##           ##    ####            ####
    +##     ##    #########   ########   ##      ##      ##       ########   ##########    ##      ################
    +                                                                                      ##        ##   ##   ##
    +Hello world! :)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    1Notifier that "simulation mode" of UART0 is enabled (by the USER_FLAGS+=-DUART0_SIM_MODE makefile flag). All UART0 output is send to the simulator console.
    2Final executable size (text) and static data memory requirements (data, bss).
    3The application code is installed as pre-initialized IMEM. This is the default approach for simulation.
    4A note regarding UART "simulation mode", but we have already enabled that.
    5List of (default) arguments that were send to the simulator. Here: maximum simulation time (10ms).
    6"Sanity checks" from the core’s VHDL files. These reports give some brief information about the SoC/CPU configuration (→ generics). If there are problems with the current configuration, an ERROR will appear.
    7Execution of the actual program starts.
    +
    +
    +
    +
    +

    13.5. Advanced Simulation using VUnit

    +
    +

    VUnit is an open source unit testing framework for VHDL/SystemVerilog. +It allows continuous and automated testing of HDL code by complementing traditional testing methodologies. +The motto of VUnit is "testing early and often" through automation.

    +
    +
    +

    VUnit is composed by a Python interface and multiple optional +VHDL libraries. +The Python interface allows declaring sources and simulation options, and it handles the compilation, execution and +gathering of the results regardless of the simulator used. +That allows having a single run.py script to be used with GHDL, ModelSim/QuestaSim, Riviera PRO, etc. +On the other hand, the VUnit’s VHDL libraries provide utilities for assertions, logging, having virtual queues, handling CSV files, etc. +The Verification Component Library uses those features +for abstracting away bit-toggling when verifying standard interfaces such as Wishbone, AXI, Avalon, UARTs, etc.

    +
    +
    +

    Testbench sources in sim (such as sim/neorv32_tb.vhd and sim/uart_rx*.vhd) use VUnit’s VHDL libraries for testing +NEORV32 and peripherals. +The entry-point for executing the tests is sim/run.py.

    +
    +
    +
    +
    # ./sim/run.py -l
    +neorv32.neorv32_tb.all
    +Listed 1 tests
    +
    +# ./sim/run.py -v
    +Compiling into neorv32:   rtl/core/neorv32_uart.vhd                                                                                            passed
    +Compiling into neorv32:   rtl/core/neorv32_twi.vhd                                                                                             passed
    +Compiling into neorv32:   rtl/core/neorv32_trng.vhd                                                                                            passed
    +...
    +
    +
    +
    +

    See VUnit: User Guide and VUnit: Command Line Interface for further info about VUnit’s features.

    +
    +
    +
    +
    +
    +
    +

    14. VHDL Development Environment

    +
    +
    +

    To navigate and develop the NEORV32 processor VHDL code you can use the free and open source VHDL-LS language server. +The easiest way to get started is to install the VHDL-LS VSCode extension. +The VHDL-LS server requires a vhdl_ls.toml file which is automatically generated by the sim/run.py script. See Simulate the processor for further information.

    +
    +
    +
      +
    1. +

      Run sim/run.py to create the library mapping file

      +
    2. +
    3. +

      Install the VHDL-LS VSCode extension

      +
    4. +
    5. +

      Open the root folder of the NEORV32 repository in VSCode

      +
    6. +
    7. +

      Open any VHDL file

      +
    8. +
    +
    +
    +
    +
    +
    +

    15. Building the Documentation

    +
    +
    +

    The documentation (datasheet + user guide) is written using asciidoc. The according source files +can be found in docs/…​. The documentation of the software framework is written in-code using doxygen.

    +
    +
    +

    A makefiles in the project’s docs directory is provided to build all of the documentation as HTML pages +or as PDF documents.

    +
    +
    + + + + + +
    + + +Pre-rendered PDFs are available online as nightly pre-releases: https://github.com/stnolting/neorv32/releases. +The HTML-based documentation is also available online at the project’s GitHub Pages. +
    +
    +
    +

    The makefile provides a help target to show all available build options and their according outputs.

    +
    +
    +
    +
    neorv32/docs$ make help
    +
    +
    +
    +
    Listing 11. Example: Generate HTML documentation (data sheet) using asciidoctor
    +
    +
    neorv32/docs$ make html
    +
    +
    +
    + + + + + +
    + + +If you don’t have asciidoctor / asciidoctor-pdf installed, you can still generate all the documentation using +a docker container via make container. +
    +
    +
    +
    +
    +
    +

    16. Zephyr RTOS Support

    +
    +
    +

    The NEORV32 processor is supported by upstream Zephyr RTOS: https://docs.zephyrproject.org/latest/boards/riscv/neorv32/doc/index.html

    +
    +
    + + + + + +
    + + +The absolute path to the NEORV32 executable image generator binary (…​/neorv32/sw/image_gen) has to be added to the PATH variable +so the Zephyr build system can generate executables and memory-initialization images. +
    +
    +
    + + + + + +
    + + +Zephyr OS port provided by GitHub user henrikbrixandersen +(see https://github.com/stnolting/neorv32/discussions/172). ❤️ +
    +
    +
    +
    +
    +
    +

    17. FreeRTOS Support

    +
    +
    +

    A NEORV32-specific port and a simple demo for FreeRTOS (https://github.com/FreeRTOS/FreeRTOS) are +available in a separate repository on GitHub: https://github.com/stnolting/neorv32-freertos

    +
    +
    +
    +
    +
    +

    18. LiteX SoC Builder Support

    +
    +
    +

    LiteX is a SoC builder framework by Enjoy-Digital +that allows easy creation of complete system-on-chip designs - including sophisticated interfaces like Ethernet, serial ATA +and DDR memory controller. The NEORV32 has been ported to the LiteX framework to be used as central processing unit.

    +
    +
    +

    The default microcontroller-like NEORV32 processor is not directly supported as all the peripherals would provide some redundancy. +Instead, the LiteX port uses a core complex wrapper that only includes the actual NEORV32 CPU, the instruction cache (optional), +the RISC-V machine system timer (optional), the on-chip debugger (optional) and the internal bus infrastructure. +The specific implementation of optional modules as well as RISC-V ISA configuration and performance optimization options are +controlled by a single CONFIGURATION option wrapped in the LiteX build flow. The external bus interface is used to connect to +other LiteX SoC parts.

    +
    +
    + + + + + +
    + + +
    Core Complex Wrapper
    +The NEORV32 core complex wrapper used by LiteX for integration can be found in +rtl/system_integration/neorv32_litex_core_complex.vhd. +
    +
    +
    + + + + + +
    + + +
    LiteX NEORV32 Documentation
    +More information can be found in the "NEORV32" section of the LiteX project wiki: https://github.com/enjoy-digital/litex/wiki/CPUs +
    +
    +
    + + + + + +
    + + +
    Work-In-Progress 🚧
    +UG: synthesis - how to create a whole NEORV32 + LiteX SoC for a FPGA
    +LiteX: debugger - the NEORV32 on-chip-debugger is not supported by the LiteX port yet
    +LiteX: external interrupt - the "RISC-V machine external interrupt" is not supported by the LiteX port yet +
    +
    +
    +

    18.1. LiteX Setup

    +
    +
      +
    1. +

      Install LiteX and the RISC-V compiler following the excellent quick start guide: https://github.com/enjoy-digital/litex/wiki#quick-start-guide

      +
    2. +
    3. +

      The NEORV32 port for LiteX uses GHDL and yosys for converting the VHDL files via the GHDL-yosys-plugin. +You can download prebuilt packages for example from https://github.com/YosysHQ/fpga-toolchain, which is _no longer maintained. It is superdesed +by https://github.com/YosysHQ/fpga-toolchain.

      +
    4. +
    5. +

      EXPERIMENTAL: GHDL provides a synthesis options, which converts a VHDL setup into a plain-Verilog +netlist module (not tested on LiteX yet). Check out neorv32-verilog for more information.

      +
    6. +
    +
    +
    + + + + + +
    + + +
    GHDL-yosys Plugin
    +If you would like to use the experimental GHDL Yosys plugin for VHDL on Linux or MacOS, you will need to set +the GHDL_PREFIX environment variable. e.g. export GHDL_PREFIX=<install_dir>/fpga-toolchain/lib/ghdl. +On Windows this is not necessary.
    +
    +If you are using an existing Makefile set up for ghdl-yosys-plugin and see ERROR: This version of yosys +is built without plugin support you probably need to remove -m ghdl from your yosys parameters. This is +because the plugin is typically loaded from a separate file but it is provided built into yosys in this +package.
    +- from https://github.com/YosysHQ/fpga-toolchain
    +
    +This means you might have to edit the call to yosys in litex/soc/cores/cpu/neorv32/core.py. +
    +
    +
    +
      +
    1. +

      Add the bin folder of the ghdl-yosys-plugin to your PATH environment variable. You can test your yosys installation +and check for the GHDL plugin:

      +
    2. +
    +
    +
    +
    +
    $ yosys -H
    +
    + /----------------------------------------------------------------------------\
    + |                                                                            |
    + |  yosys -- Yosys Open SYnthesis Suite                                       |
    + |                                                                            |
    + |  Copyright (C) 2012 - 2020  Claire Xenia Wolf <claire@yosyshq.com>         |
    + |                                                                            |
    + |  Permission to use, copy, modify, and/or distribute this software for any  |
    + |  purpose with or without fee is hereby granted, provided that the above    |
    + |  copyright notice and this permission notice appear in all copies.         |
    + |                                                                            |
    + |  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES  |
    + |  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF          |
    + |  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR   |
    + |  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    |
    + |  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN     |
    + |  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   |
    + |  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.            |
    + |                                                                            |
    + \----------------------------------------------------------------------------/
    +
    + Yosys 0.10+12 (open-tool-forge build) (git sha1 356ec7bb, gcc 9.3.0-17ubuntu1~20.04 -Os)
    +
    +
    +-- Running command `help' --
    +
    +    ... (1)
    +    ghdl                 load VHDL designs using GHDL (2)
    +    ...
    +
    +
    +
    + + + + + + + + + +
    1A long list of plugins…​
    2This is the plugin we need.
    +
    +
    +
    +

    18.2. LiteX Simulation

    +
    +

    Start a simulation right in your console using the NEORV32 as target CPU:

    +
    +
    +
    +
    $ litex_sim --cpu-type=neorv32
    +
    +
    +
    +

    LiteX will start running its BIOS:

    +
    +
    +
    +
            __   _ __      _  __
    +       / /  (_) /____ | |/_/
    +      / /__/ / __/ -_)>  <
    +     /____/_/\__/\__/_/|_|
    +   Build your hardware, easily!
    +
    + (c) Copyright 2012-2022 Enjoy-Digital
    + (c) Copyright 2007-2015 M-Labs
    +
    + BIOS built on Jul 19 2022 12:21:36
    + BIOS CRC passed (6f76f1e8)
    +
    + LiteX git sha1: 0654279a
    +
    +--=============== SoC ==================--
    +CPU:            NEORV32-standard @ 1MHz
    +BUS:            WISHBONE 32-bit @ 4GiB
    +CSR:            32-bit data
    +ROM:            128KiB
    +SRAM:           8KiB
    +
    +
    +--============== Boot ==================--
    +Booting from serial...
    +Press Q or ESC to abort boot completely.
    +sL5DdSMmkekro
    +Timeout
    +No boot medium found
    +
    +--============= Console ================--
    +
    +litex> help
    +
    +LiteX BIOS, available commands:
    +
    +flush_cpu_dcache         - Flush CPU data cache
    +crc                      - Compute CRC32 of a part of the address space
    +ident                    - Identifier of the system
    +help                     - Print this help
    +
    +serialboot               - Boot from Serial (SFL)
    +reboot                   - Reboot
    +boot                     - Boot from Memory
    +
    +mem_cmp                  - Compare memory content
    +mem_speed                - Test memory speed
    +mem_test                 - Test memory access
    +mem_copy                 - Copy address space
    +mem_write                - Write address space
    +mem_read                 - Read address space
    +mem_list                 - List available memory regions
    +
    +
    +litex>
    +
    +
    +
    +

    You can use the provided console to execute LiteX commands.

    +
    +
    +
    +
    +
    +
    +

    19. Debugging using the On-Chip Debugger

    +
    +
    +

    The NEORV32 on-chip debugger ("OCD") allows online in-system debugging via an external JTAG access port from a +host machine. The general flow is independent of the host machine’s operating system. However, this tutorial uses +Windows and Linux (Ubuntu on Windows / WSL) in parallel running the upstream version of OpenOCD and the +RISC-V GNU debugger gdb.

    +
    +
    + + + + + +
    + + +
    TLDR
    +You can start a pre-configured debug session (using default main.elf as executable and +target extended-remote localhost:3333 as GDB connection configuration) by using the GDB makefile target +(i.e. make gdb). +
    +
    +
    + + + + + +
    + + +
    OCD Hardware Implementation
    +See datasheet section On Chip Debugger (OCD) +for more information regarding the actual hardware. +
    +
    +
    + + + + + +
    + + +
    OCD CPU Requirements
    +The on-chip debugger is only implemented if the ON_CHIP_DEBUGGER_EN generic is set true. Furthermore, it requires +the Zicsr and Zifencei CPU extension, which are always enabled by the CPU. +
    +
    +
    +

    19.1. Hardware Requirements

    +
    +

    Make sure the on-chip debugger of your NEORV32 setup is implemented (ON_CHIP_DEBUGGER_EN generic = true). This +tutorial uses gdb to directly upload an executable to the processor. If you are using the default +processor setup with internal instruction memory (IMEM) make sure it is implemented as RAM +(INT_BOOTLOADER_EN generic = true).

    +
    +
    +

    Connect a JTAG adapter to the NEORV32 jtag_* interface signals. If you do not have a full-scale JTAG adapter, you can +also use a FTDI-based adapter like the "FT2232H-56Q Mini Module", which is a simple and inexpensive FTDI breakout board.

    +
    + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 4. JTAG pin mapping
    NEORV32 top signalJTAG signalDefault FTDI port

    jtag_tck_i

    TCK

    D0

    jtag_tdi_i

    TDI

    D1

    jtag_tdo_o

    TDO

    D2

    jtag_tms_i

    TMS

    D3

    +
    + + + + + +
    + + +
    JTAG TAP Reset
    +The NEORV32 JTAG TAP does not provide a dedicated reset signal ("TRST"). However, the missing TRST is not a problem, +since JTAG-level resets can be triggered using with TMS signaling. +
    +
    +
    +
    +

    19.2. OpenOCD

    +
    +

    The NEORV32 on-chip debugger can be accessed using the upstream version of OpenOCD. A pre-configured OpenOCD configuration +file is provided (sw/openocd/openocd_neorv32.cfg) that allows an easy access to the NEORV32 CPU.

    +
    +
    + + + + + +
    + + +You might need to adapt ftdi vid_pid, ftdi channel and ftdi layout_init in sw/openocd/openocd_neorv32.cfg +according to your interface chip and your operating system. +
    +
    +
    + + + + + +
    + + +If you want to modify the JTAG clock speed (via adapter speed in sw/openocd/openocd_neorv32.cfg) make sure to meet +the clock requirements noted in Documentation: Debug Transport Module (DTM). +
    +
    +
    +

    To access the processor using OpenOCD, open a terminal and start OpenOCD with the pre-configured configuration file.

    +
    +
    +
    Listing 12. Connecting via OpenOCD (on Windows) using the default openocd_neorv32.cfg script
    +
    +
    N:\Projects\neorv32\sw\openocd>openocd -f openocd_neorv32.cfg
    +Open On-Chip Debugger 0.11.0 (2021-11-18) [https://github.com/sysprogs/openocd]
    +Licensed under GNU GPL v2
    +libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
    +For bug reports, read
    +        http://openocd.org/doc/doxygen/bugs.html
    +Info : clock speed 1000 kHz
    +Info : JTAG tap: neorv32.cpu tap/device found: 0x00000000 (mfg: 0x000 (<invalid>), part: 0x0000, ver: 0x0)
    +Info : datacount=1 progbufsize=2
    +Info : Disabling abstract command reads from CSRs.
    +Info : Examined RISC-V core; found 1 harts
    +Info :  hart 0: XLEN=32, misa=0x40901107
    +Info : starting gdb server for neorv32.cpu.0 on 3333
    +Info : Listening on port 3333 for gdb connections
    +Target HALTED.
    +Ready for remote connections.
    +Info : Listening on port 6666 for tcl connections
    +Info : Listening on port 4444 for telnet connections
    +
    +
    +
    +

    OpenOCD has successfully connected to the NEORV32 on-chip debugger and has examined the CPU (showing the content of +the misa CSRs). The processor is halted and OpenOCD waits fot gdb to connect via port 3333.

    +
    +
    +
    +

    19.3. Debugging with GDB

    +
    + + + + + +
    + + +
    GDB + SVD
    +Together with a third-party plugin the processor’s SVD file can be imported right into GDB to allow comfortable +debugging of peripheral/IO devices (see https://github.com/stnolting/neorv32/discussions/656). +
    +
    +
    +

    This guide uses the simple "blink example" from sw/example/demo_blink_led as simplified test application to +show the basics of in-system debugging.

    +
    +
    +

    At first, the application needs to be compiled. We will use the minimal machine architecture configuration +(rv32i) here to be independent of the actual processor/CPU configuration. +Navigate to sw/example/demo_blink_led and compile the application:

    +
    +
    +
    Listing 13. Compile the test application
    +
    +
    .../neorv32/sw/example/demo_blink_led$ make MARCH=rv32i USER_FLAGS+=-g clean_all all
    +
    +
    +
    + + + + + +
    + + +
    Adding debug symbols to the executable
    +USER_FLAGS+=-g passes the -g flag to the compiler so it adds debug information/symbols +to the generated ELF file. This is optional but will provide more sophisticated debugging information +(like source file line numbers). +
    +
    +
    +

    This will generate an ELF file main.elf that contains all the symbols required for debugging. +Furthermore, an assembly listing file main.asm is generated that we will use to define breakpoints.

    +
    +
    +

    Open another terminal in sw/example/demo_blink_led and start gdb.

    +
    +
    +
    Listing 14. Starting GDB (on Linux (Ubuntu on Windows))
    +
    +
    .../neorv32/sw/example/demo_blink_led$ riscv32-unknown-elf-gdb
    +GNU gdb (GDB) 10.1
    +Copyright (C) 2020 Free Software Foundation, Inc.
    +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    +This is free software: you are free to change and redistribute it.
    +There is NO WARRANTY, to the extent permitted by law.
    +Type "show copying" and "show warranty" for details.
    +This GDB was configured as "--host=x86_64-pc-linux-gnu --target=riscv32-unknown-elf".
    +Type "show configuration" for configuration details.
    +For bug reporting instructions, please see:
    +<https://www.gnu.org/software/gdb/bugs/>.
    +Find the GDB manual and other documentation resources online at:
    +    <http://www.gnu.org/software/gdb/documentation/>.
    +
    +For help, type "help".
    +Type "apropos word" to search for commands related to "word".
    +(gdb)
    +
    +
    +
    +

    Now connect to OpenOCD using the default port 3333 on your machine. +We will use the previously generated ELF file main.elf from the demo_blink_led example. +Finally, upload the program to the processor and start debugging.

    +
    +
    + + + + + +
    + + +The executable that is uploaded to the processor is not the default NEORV32 executable (neorv32_exe.bin) that +is used for uploading via the bootloader. Instead, all the required sections (like .text) are extracted from mail.elf +by GDB and uploaded via the debugger’s indirect memory access. +
    +
    +
    +
    Listing 15. Running GDB
    +
    +
    (gdb) target extended-remote localhost:3333 (1)
    +Remote debugging using localhost:3333
    +warning: No executable has been specified and target does not support
    +determining executable automatically.  Try using the "file" command.
    +0xffff0c94 in ?? () (2)
    +(gdb) file main.elf (3)
    +A program is being debugged already.
    +Are you sure you want to change the file? (y or n) y
    +Reading symbols from main.elf...
    +(gdb) load (4)
    +Loading section .text, size 0xd0c lma 0x0
    +Loading section .rodata, size 0x39c lma 0xd0c
    +Start address 0x00000000, load size 4264
    +Transfer rate: 43 KB/sec, 2132 bytes/write.
    +(gdb)
    +
    +
    +
    + + + + + + + + + + + + + + + + + +
    1Connect to OpenOCD
    2The CPU was still executing code from the bootloader ROM - but that does not matter here
    3Select mail.elf from the demo_blink_led example
    4Upload the executable
    +
    +
    +

    After the upload, GDB will make the processor jump to the beginning of the uploaded executable +(by default, this is the beginning of the instruction memory at 0x00000000) skipping the bootloader +and halting the CPU right before executing the demo_blink_led application.

    +
    +
    + + + + + +
    + + +After gdb has connected to the CPU, it is recommended to disable the CPU’s global interrupt flag +(mstatus.mie, = bit #3) to prevent unintended calls of potentially outdated trap handlers. The global +interrupt flag can be cleared using the following gdb command: +set $mstatus = ($mstatus & ~(1<<3)). Interrupts can be enabled globally again by the following command: +set $mstatus = ($mstatus | (1<<3)). +
    +
    +
    +

    19.3.1. Software Breakpoints

    +
    +

    The following steps are just a small showcase that illustrate a simple debugging scheme.

    +
    +
    +

    While compiling demo_blink_led, an assembly listing file main.asm was generated. +Open this file with a text editor to check out what the CPU is going to do when resumed.

    +
    +
    +

    The demo_blink_led example implements a simple counter on the 8 lowest GPIO output ports. The program uses +"busy wait" to have a visible delay between increments. This waiting is done by calling the neorv32_cpu_delay_ms +function. We will add a breakpoint right at the end of this wait function so we can step through the iterations +of the counter.

    +
    +
    +
    Listing 16. Cut-out from main.asm generated from the demo_blink_led example
    +
    +
    00000688 <__neorv32_cpu_delay_ms_end>:
    + 688:	01c12083          	lw	ra,28(sp)
    + 68c:	02010113          	addi	sp,sp,32
    + 690:	00008067          	ret
    +
    +
    +
    +

    The very last instruction of the neorv32_cpu_delay_ms function is ret (= return) +at hexadecimal 690 in this example. Add this address as breakpoint to GDB.

    +
    +
    + + + + + +
    + + +The address might be different if you use a different version of the software framework or +if different ISA options are configured. +
    +
    +
    +
    Listing 17. Adding a GDB software breakpoint
    +
    +
    (gdb) b * 0x690 (1)
    +Breakpoint 1 at 0x690
    +
    +
    +
    + + + + + +
    1b is an alias for break, which adds a software breakpoint.
    +
    +
    + + + + + +
    + + +
    How do software breakpoints work?
    +Software breakpoints are used for debugging programs that are accessed from read/write memory (RAM) like IMEM. The debugger +temporarily replaces the instruction word of the instruction, where the breakpoint shall be inserted, by a ebreak / c.ebreak +instruction. Whenever execution reaches this instruction, debug mode is entered and the debugger restores the original +instruction at this address to maintain original program behavior.
    +
    +When debugging programs executed from ROM hardware-assisted breakpoints using the core’s trigger module have to be used. +See section Hardware Breakpoints for more information. +
    +
    +
    +

    Now execute c (= continue). The CPU will resume operation until it hits the break-point. +By this we can move from one counter increment to another.

    +
    +
    +
    Listing 18. Iterating from breakpoint to breakpoint
    +
    +
    Breakpoint 1 at 0x690
    +(gdb) c
    +Continuing.
    +
    +Breakpoint 1, 0x00000690 in neorv32_cpu_delay_ms ()
    +(gdb) c
    +Continuing.
    +
    +Breakpoint 1, 0x00000690 in neorv32_cpu_delay_ms ()
    +(gdb) c
    +Continuing.
    +
    +
    +
    + + + + + +
    + + +
    Hardcoded EBREAK Instructions In The Program Code
    +If your original application code uses the BREAK instruction (for example for some OS calls/signaling) this +instruction will cause an enter to debug mode when executed. These situation cannot be continued using gdb’s +c nor can they be "stepped-over" using the single-step command s. You need to declare the ebreak instruction +as breakpoint to be able to resume operation after executing it. See https://sourceware.org/pipermail/gdb/2021-January/049125.html +
    +
    +
    +
    +

    19.3.2. Hardware Breakpoints

    +
    +

    Hardware-assisted breakpoints using the CPU’s trigger module are required when debugging code that is executed from +read-only memory (ROM) as GDB cannot temporarily replace instructions by BREAK instructions.

    +
    +
    +

    From a user point of view hardware breakpoints behave like software breakpoints. GDB provides a command to setup +a hardware-assisted breakpoint:

    +
    +
    +
    Listing 19. Adding a GDB hardware breakpoint
    +
    +
    (gdb) hb * 0x690 (1)
    +Breakpoint 1 at 0x690
    +
    +
    +
    + + + + + +
    1hb is an alias for hbreak, which adds a hardware breakpoint.
    +
    +
    + + + + + +
    + + +The CPU’s trigger module only provides a single instruction address match type trigger. Hence, only +a single hb hardware-assisted breakpoint can be used. +
    +
    +
    +
    +
    +

    19.4. Segger Embedded Studio

    +
    +

    Software for the NEORV32 processor can also be developed and debugged in-system using Segger Embedded Studio +and a Segger J-Link probe. The following links provide further information as well as an excellent tutorial.

    +
    +
    + +
    +
    +
    +
    +
    +
    +

    20. NEORV32 in Verilog

    +
    +
    +

    If you are more of a Verilog fan or if your EDA toolchain does not support VHDL or mixed-language designs +you can use an all-Verilog version of the processor provided by the neorv32-verilog repository.

    +
    +
    + + + + + +
    + + +Note that this is not a manual re-implementation of the core in Verilog but rather an automated conversion. +
    +
    +
    +

    GHDL’s synthesis feature is used to convert a pre-configured NEORV32 setup - including all peripherals, memories +and memory images - into an unoptimized plain-Verilog netlist module file without any (technology-specific) primitives.

    +
    +
    + + + + + +
    + + +
    GHDL Synthesis
    +More information regarding GHDL’s synthesis option can be found at https://ghdl.github.io/ghdl/using/Synthesis.html. +
    +
    +
    +

    An intermediate VHDL wrapper is provided that can be used to configure the processor (using VHDL generics) and to customize +the interface ports. After conversion, a single Verilog file is generated that contains the whole NEORV32 processor. +The original processor module hierarchy is preserved as well as most (all?) signal names, which allows easy inspection and debugging +of simulation waveforms and synthesis results.

    +
    +
    +
    Listing 20. Example: interface of the resulting NEORV32 Verilog module (for a minimal SoC configuration)
    +
    +
    module neorv32_verilog_wrapper
    +  (input  clk_i,
    +   input  rstn_i,
    +   input  uart0_rxd_i,
    +   output uart0_txd_o);
    +
    +
    +
    +

    The generated Verilog netlist has been tested with +Icarus Verilog +(simulation) and AMD Vivado (simulation and synthesis).

    +
    +
    + + + + + +
    + + +For detailed information check out the neorv32-verilog repository at https://github.com/stnolting/neorv32-verilog. +
    +
    +
    +
    +
    +
    +

    21. Eclipse IDE

    +
    +
    +

    Eclipse (https://www.eclipse.org/) is an interactive development environment that can be used to develop, debug and profile +application code for the NEORV32 RISC-V Processor. This chapter shows how to import the provided example setup +from the NEORV32 project repository. Additionally, all the required steps to create a compatible project from +scratch are illustrated in this chapter.

    +
    +
    + + + + + +
    + + +
    This is a Makefile-Based Project!
    +Note that the provided Eclipse project as well as the setup tutorial in this section implement a makefile-based project. +Hence, the makefile in the example folder (that includes the main NEORV32 makefile) is used for building the application +instead of the Eclipse-managed build. Therefore, all compiler options, include folder, source files, etc. have to be +defined within the project’s makefile. +
    +
    +
    +
    +eclipse +
    +
    Figure 5. Developing and debugging code for the NEORV32 using the Eclipse IDE
    +
    +
    +

    21.1. Eclipse Prerequisites

    +
    +

    The following tools are required:

    +
    +
    + +
    +
    + + + + + +
    + + +
    XPack Windows Build Tools
    +The NEORV32 makefile relies on the basename command which is not part of the default XPack +Windows Build Tools. However, you can just open the bin folder, copy busybox.exe and rename +that copy to basename.exe. +
    +
    +
    +
    +

    21.2. Import The Provided Eclipse Example Project

    +
    +

    A pre-configured Eclipse project is available in neorv32/sw/example/eclipse. +To import it:

    +
    +
    +
      +
    1. +

      Open Eclipse.

      +
    2. +
    3. +

      Click on File > Import, expand General and select Projects from Folder or Archive.

      +
    4. +
    5. +

      Click Next.

      +
    6. +
    7. +

      Click on Directory and select the provided example project folder (see directory above).

      +
    8. +
    9. +

      Click Finish.

      +
    10. +
    +
    +
    + + + + + +
    + + +
    NEORV32 Folder and File Paths
    +The provided example project uses relative paths for including all the NEORV32-specific files and folders +(in the Eclipse configuration files). Note that these paths need to be adjusted when moving this example setup +to a different location (makefile, NEORV32 sources, etc.). +
    +
    +
    + + + + + +
    + + +
    Executables Configuration
    +Make sure to adjust the binaries / installation folders of the RISC-V GCC toolchain +and OpenOCD according to your installation. See the following chapter for more information. +
    +
    +
    +
    +

    21.3. Setup a new Eclipse Project from Scratch

    +
    +

    This chapter shows all the steps required to create an Eclipse project for the NEORV32 entirely from scratch.

    +
    +
    + + + + + +
    + + +
    This is an early version! ;)
    +The provided Eclipse project as well as the tutorial from this chapter are in a very early stage. +This setup was build and tested on Windows. +Feel free to open a new issue or pull request to improve this setup. +
    +
    +
    +

    21.3.1. Create a new Project

    +
    +
      +
    1. +

      Select File > New > Project.

      +
    2. +
    3. +

      Expand C/C** and select **C project.

      +
    4. +
    5. +

      In the C++ Project wizard:

      +
      +
        +
      • +

        Enter a Project name.

        +
      • +
      • +

        Uncheck the box next to Use default location and specify a location using Browse where you want to create the project.

        +
      • +
      • +

        From the Project type list expand Makefile project and select Empty Project.

        +
      • +
      • +

        Select RISC-V Cross GCC from the Toolchain list on the right side.

        +
      • +
      • +

        Click Next.

        +
      • +
      • +

        Skip the next page using the default configuration by clicking Next.

        +
      • +
      +
      +
    6. +
    7. +

      In the GNU RISC-V Cross Toolchain wizard configure the Toolchain name and Toolchain path according to your RISC-V GCC installation.

      +
      +
        +
      • +

        Example: Toolchain name: xPack GNU RISC-V Embedded GCC (riscv-none-elf-gcc)

        +
      • +
      • +

        Example: Toolchain path: C:\Program Files (x86)\xpack-riscv-none-elf-gcc-13.2.0-2\bin

        +
      • +
      +
      +
    8. +
    9. +

      Click Finish.

      +
    10. +
    +
    +
    +

    If you need to reconfigure the RISC-V GCC binaries and/or paths:

    +
    +
    +
      +
    1. +

      right-click on the projet in the left view, select Properties

      +
    2. +
    3. +

      expand MCU and select RISC-V Toolchain Paths

      +
    4. +
    5. +

      adjust the Toolchain folder and the Toolchain name if required

      +
    6. +
    7. +

      Click Apply.

      +
    8. +
    +
    +
    +
    +

    21.3.2. Add Initial Files

    +
    +

    Start a simple project by adding two initial files. Further files can be added later. Only the makefile is really +relevant here.

    +
    +
    +
      +
    1. +

      Add a new file by right-clicking on the project and select New > File and enter main.c in the filename box.

      +
    2. +
    3. +

      Add another new file by right-clicking on the project and select New > File and enter makefile in the filename

      +
    4. +
    5. +

      Copy the makefile of an existing NEORV32 example program and paste it to the new (empty) makefile.

      +
    6. +
    +
    +
    +
    +

    21.3.3. Add Build Targets (optional)

    +
    +

    This step adds some of the targets of the NEORV32 makefile for easy access. This step is optional.

    +
    +
    +
      +
    1. +

      In the project explorer right-click on the project and select Build Target > Create…​.

      +
    2. +
    3. +

      Add “all” as Target name (keep all the default checked boxes).

      +
    4. +
    5. +

      Repeat these steps for all further targets that you wish to add (e..g clean_all, exe, elf).

      +
    6. +
    +
    +
    + + + + + +
    + + +
    Clean-All Target
    +Adding the clean_all target is highly recommended. Executing this target once after importing the project ensures +that there are no (incompatible) artifacts left from previous builds. +
    +
    +
    + + + + + +
    + + +
    Available Target
    +See the NEORV32 data sheet for a list and description of all available makefile targets: +https://stnolting.github.io/neorv32/#_makefile_targets +
    +
    +
    +
    +
    +

    21.4. Configure Build Tools

    +
    +

    This step is only required if your system does not provide any build tools (like make) by default.

    +
    +
    +
      +
    1. +

      In the project explorer right-click on the project and select Properties.

      +
    2. +
    3. +

      Expand MCU and click on Build Tools Path.

      +
    4. +
    5. +

      Configure the Build tools folder.

      +
      +
        +
      • +

        Example: Build tools folder: C:/xpack/xpack-windows-build-tools-4.4.1-2/bin

        +
      • +
      +
      +
    6. +
    7. +

      Click Apply and Close.

      +
    8. +
    +
    +
    +
    +

    21.5. Adjust Default Build Configuration (optional)

    +
    +

    This will simplify the auto-build by replacing the default make all command by make elf. Thus, only +the required main.elf file gets generated instead of all executable files (like HDL and memory image files).

    +
    +
    +
      +
    1. +

      In the project explorer right-click on the project and select Properties.

      +
    2. +
    3. +

      Select C/C++ Build and click on the Behavior Tab.

      +
    4. +
    5. +

      Update the default targets in the Workbench Build Behavior box:

      +
      +
        +
      • +

        Build on resource save: elf (only build the ELF file)

        +
      • +
      • +

        Build (Incremental build): elf (only build the ELF file)

        +
      • +
      • +

        Clean: clean (only remove project-local build artifacts)

        +
      • +
      +
      +
    6. +
    7. +

      Click Apply and Close.

      +
    8. +
    +
    +
    +

    21.5.1. Add NEORV32 Software Framework

    +
    +
      +
    1. +

      In the project explorer right-click on the project and select Properties.

      +
    2. +
    3. +

      Expand C/C++ General, click on Paths and Symbols and highlight Assembly under Languages.

      +
    4. +
    5. +

      In the Include tab click Add…​

      +
      +
        +
      • +

        Check the box in front of Add to all languages and click on File System…​ and select the NEORV32 library include folder (path/to/neorv32/sw/lib/include).

        +
      • +
      • +

        Click OK.

        +
      • +
      +
      +
    6. +
    7. +

      In the Include tab click Add…​.

      +
      +
        +
      • +

        Check the box in front of Add to all languages and click on File System…​ and select the NEORV32 commons folder (path/to/neorv32/sw/common).

        +
      • +
      • +

        Click OK.

        +
      • +
      +
      +
    8. +
    9. +

      Click on the Source Location tab and click Link Folder…​*.

      +
      +
        +
      • +

        Check the box in front of Link to folder in the system and click the Browse button.

        +
      • +
      • +

        Select the source folder of the NEORV32 software framework (path/to/neorv32/sw/lib/source).

        +
      • +
      • +

        Click OK.

        +
      • +
      +
      +
    10. +
    11. +

      Click Apply and Close.

      +
    12. +
    +
    +
    +
    +

    21.5.2. Setup OpenOCD

    +
    +
      +
    1. +

      In the project explorer right-click on the project and select Properties.

      +
    2. +
    3. +

      Expand MCU and select OpenOCD Path.

      +
      +
        +
      • +

        Configure the Executable and Folder according to your openOCD installation.

        +
      • +
      • +

        Example: Executable: openocd.exe

        +
      • +
      • +

        Example: Folder: C:\OpenOCD\bin

        +
      • +
      • +

        Click Apply and Close.

        +
      • +
      +
      +
    4. +
    5. +

      In the top bar of Eclipse click on the tiny arrow right next to the Debug bug icon and select Debug Configurations.

      +
    6. +
    7. +

      Double-click on GDB OpenOCD Debugging; several menu tabs will open on the right.

      +
      +
        +
      • +

        In the Main tab add main.elf to the C/C++ Application box.

        +
      • +
      • +

        In the Debugger tab add the NEORV32 OpenOCD script with a -f in front of it-

        +
      • +
      • +

        Example: Config options: -f ../../openocd/openocd_neorv32.cfg

        +
      • +
      • +

        In the Startup tab uncheck he box in front of Initial Reset and add monitor reset halt to the box below.

        +
      • +
      • +

        In the "Common" tab mark Shared file to store the run-configuration right in the project folder instead of the workspace(optional).

        +
      • +
      • +

        In the SVD Path tab add the NEORV32 SVD file (path/to/neorv32/sw/svd/neorv32.svd).

        +
      • +
      +
      +
    8. +
    9. +

      Click Apply and then Close.

      +
    10. +
    +
    +
    + + + + + +
    + + +
    Default Debug Configuration
    +When you start debugging the first time you might need to select the provided debug configuration: +GDB OpenOCD Debugging > eclipse_example Default +
    +
    +
    +

    If you need to reconfigure OpenOCD binaries and/or paths:

    +
    +
    +
      +
    1. +

      right-click on the projet in the left view, select Properties

      +
    2. +
    3. +

      expand MCU and select OpenOCD Path

      +
    4. +
    5. +

      adjust the Folder and the Executable name if required

      +
    6. +
    7. +

      Click Apply.

      +
    8. +
    +
    +
    +
    +

    21.5.3. Setup Serial Terminal

    +
    +

    A serial terminal can be added to Eclipse by installing it as a plugin. +I recommend "TM Terminal" which is already installed in some Eclipse bundles.

    +
    +
    +

    Open a TM Terminal serial console:

    +
    +
    +
      +
    1. +

      Click on Window > Show View > Terminal to open the terminal.

      +
    2. +
    3. +

      A Terminal tab appears on the bottom. Click the tiny screen button on the right (or press Ctrl+Alt+Shift) +to open the terminal configuration.

      +
    4. +
    5. +

      Select Serial Terminal in Choose Terminal and configure the settings according to the processor’s +UART configuration.

      +
    6. +
    +
    +
    +

    Installing TM Terminal from the Eclipse market place:

    +
    +
    +
      +
    1. +

      Click on Help > Eclipse Marketplace…​.

      +
    2. +
    3. +

      Enter "TM Terminal" to the Find line and hit enter.

      +
    4. +
    5. +

      Select TM Terminal from the list and install it.

      +
    6. +
    7. +

      After installation restart Eclipse.

      +
    8. +
    +
    +
    +
    +
    +

    21.6. Eclipse Setup References

    + +
    +
    +
    +
    +
    + +
    +
    +

    About

    +
    +
    +
    +

    The NEORV32 RISC-V Processor
    +https://github.com/stnolting/neorv32
    +Dipl.-Ing. Stephan Nolting (M.Sc.)
    +🇪🇺 European Union, Germany
    +stnolting@gmail.com

    +
    +
    +
    +
    +
    +

    License

    +
    +

    BSD 3-Clause License

    +
    +
    +

    Copyright (c) NEORV32 contributors. +Copyright (c) 2020 - 2024, Stephan Nolting. All rights reserved.

    +
    +
    +

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that +the following conditions are met:

    +
    +
    +
      +
    1. +

      Redistributions of source code must retain the above copyright notice, this list of conditions and the +following disclaimer.

      +
    2. +
    3. +

      Redistributions in binary form must reproduce the above copyright notice, this list of conditions and +the following disclaimer in the documentation and/or other materials provided with the distribution.

      +
    4. +
    5. +

      Neither the name of the copyright holder nor the names of its contributors may be used to endorse or +promote products derived from this software without specific prior written permission.

      +
    6. +
    +
    +
    +

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE.

    +
    +
    + + + + + +
    + + +
    SPDX Identifier
    +SPDX-License-Identifier: BSD-3-Clause +
    +
    +
    +
    +
    +

    Proprietary Notice

    +
    +
      +
    • +

      "GitHub" is a Subsidiary of Microsoft Corporation.

      +
    • +
    • +

      "Vivado" and "Artix" are trademarks of AMD Inc.

      +
    • +
    • +

      "AXI", "AXI", "AXI4-Lite", "AXI4-Stream", "AHB", "AHB3" and "AHB3-Lite" are trademarks of Arm Holdings plc.

      +
    • +
    • +

      "ModelSim" is a trademark of Mentor Graphics – A Siemens Business.

      +
    • +
    • +

      "Quartus Prime" and "Cyclone" are trademarks of Intel Corporation.

      +
    • +
    • +

      "iCE40", "UltraPlus" and "Radiant" are trademarks of Lattice Semiconductor Corporation.

      +
    • +
    • +

      "Windows" is a trademark of Microsoft Corporation.

      +
    • +
    • +

      "Tera Term" copyright by T. Teranishi.

      +
    • +
    • +

      "NeoPixel" is a trademark of Adafruit Industries.

      +
    • +
    • +

      "Segger Embedded Studio" and "J-Link" are trademarks of Segger Microcontroller Systems GmbH.

      +
    • +
    • +

      Images/figures made with Microsoft Power Point.

      +
    • +
    • +

      Timing diagrams made with WaveDrom Editor.

      +
    • +
    • +

      Documentation made with asciidoctor.

      +
    • +
    +
    +
    +

    All further/unreferenced projects/products/brands belong to their according copyright holders. +No copyright infringement intended.

    +
    +
    +
    +

    Disclaimer

    +
    +

    This project is released under the BSD 3-Clause license. No copyright infringement intended. +Other implied or used projects/sources might have different licensing – see their according +documentation for more information.

    +
    +
    +
    + +
    +

    This document contains links to the websites of third parties ("external links"). As the content of these websites +is not under our control, we cannot assume any liability for such external content. In all cases, the provider of +information of the linked websites is liable for the content and accuracy of the information provided. At the +point in time when the links were placed, no infringements of the law were recognizable to us. As soon as an +infringement of the law becomes known to us, we will immediately remove the link in question.

    +
    +
    +
    +

    Citing

    +
    + + + + + +
    + + +This is an open-source project that is free of charge. Use this project in any way you like +(as long as it complies to the permissive license). Please cite it appropriately. 👍 +
    +
    +
    + + + + + +
    + + +
    Contributors & Community 🤝
    +Please add as many contributors as possible to the author field.
    +This project would not be where it is without them. +
    +
    +
    + + + + + +
    + + +
    DOI
    +This project provides a digital object identifier provided by zenodo: +zenodo.5018888 +
    +
    +
    +
    +

    Acknowledgments

    +
    +

    A big shout-out to the community and all the contributors, +who helped improving this project! This project would not be where it is without them. ❤️

    +
    +
    +

    RISC-V - instruction sets want to be free!

    +
    +
    +

    Continuous integration provided by GitHub Actions and powered by GHDL.

    +
    +
    +
    +
    +
    + + + + + \ No newline at end of file