Skip to content

Latest commit

 

History

History
224 lines (216 loc) · 56.9 KB

CHANGELOG.md

File metadata and controls

224 lines (216 loc) · 56.9 KB

Project Change Log

The most recent version of the NEORV32 project can be found at the top of this list. "Stable releases" are linked and highlighted 🚀. The latest release is release. A list of all releases can be found here. The most recent version of the NEORV32 data sheet can be found online at GitHub-pages.

ℹ️ Starting with version 1.5.7 this project uses semantic versioning syntax for official releases. The hardware version identifier uses an addtional custom version element (i.e. MAJOR.MINOR.PATCH.individual) to track individual changes.

ℹ️ The processor can determine its version from the mimpid CSR (at CSR address 0xf13). A 8x4-bit BCD representation is used. Leading zeros are optional. Example: CSR(mimpid) = 0x01040312 => 01.04.03.12 = Version 01.04.03.12 = v1.4.3.12. The version number is globally defined by the hw_version_c constant in the main VHDL package file rtl/core/neorv32_package.vhd.

Version History

  • 🐛 = bug-fix
  • ✨ = new feature
  • ⚠️ = (major) change that might impact compatibility with previous versions
  • 🔒 = security issue
  • 🚀 = release
Date (dd.mm.yyyy) Version Comment
08.08.2021 1.5.8.9 reworked CPU register file logic: any write access to x0 will be masked to actually write zero - no special treatment by the CPU control unit required anymore; slighlty less hardware ressources required; first instruction after hardware reset should write x0 (any value; implemented in start-up code crt0.S)
07.08.2021 1.5.8.8 🐛 fixed bug in execution (trapping) of xRET instructions: dret (return from debug-mode handler) has to raise an illegal instruction exception if executed outside of debug-mode, mret (return from machine-mode handler) has to raise an illegal instruction exception if executed in lower-privileged modes (lower than machine-mode)
05.08.2021 1.5.8.7 ✨ added mstatus.FS and mstatus.SD CSR bits: control the state of the FPU (Zfinx) extension; supported states for mstatus.FS: 00 = off, 11 = dirty; writing other states will always set dirty state; note that all FPU instructions including FPU CSR access instructions will raise an illegal instrution exception if mstatus.FS = off
03.08.2021 1.5.8.6 🐛 fixed bug in linker script #134: .rodata.* "sub"-sections were missing, caused wrong linking of implicit constants (like strings); added mconfigptr CSR (RISC-V priv. ISA spec. v1.12-draft ;read-only): holds a pointer to a platfrom/system configuration structure - not actually used yet
30.07.2021 1.5.8.5 fixed minor bug in top entity / AXI4 wrapper (Vivado "issue": generic defaults need a fixed-size intialization value) #113
26.07.2021 1.5.8.4 🐛 fixed major bug in CPU interrupt system: interrupts during memory accesses (load/store instruction) terminated those memory accesses violating the crucial "instruction atomicity" concept: traps (interrupts and exceptions) must only intervent between instructions
25.07.2021 1.5.8.3 ✨ added mstauts.TW CSR flag (when set executing wfi instruction outside of machine-mode will raise an illegal instruction exception); flag is hardwired to zero if user mode is not implemented
25.07.2021 1.5.8.2 🐛 fixed bug in E ISA extension: extension could not be enabled due to missing generic propagation; clean-up of generic defaults: only the processor top entity provides defaults for the configuration generics
24.07.2021 1.5.8.1 machine-level interrupts (top entity signals; "external" mext_irq_i, "software" msw_irq_i, "mtime" mtime_irq_i and "non-maskable" nm_irq_i) now trigger on rising edges; exposed advanced external bus interface configuration options as new top entity generics (moved from package constants): MEM_EXT_PIPE_MODE, MEM_EXT_BIG_ENDIAN, MEM_EXT_ASYNC_RX
22.07.2021 🚀1.5.8 New release
22.07.2021 1.5.7.16 (re-)added mstatush CSR (all bits are hardwired to zero: writes are ignored, reads will always return zero) - CSR address is assigned to comply with RISC-V priv. arch. spec. 1.12
21.07.2021 1.5.7.15 🐛 fixed minor bug in SLINK module (signals were missing in sensitivity lists); ⚠️ simplified NEOLED interrupt system (now triggered if TX FIFO fill level falls below half-full), added option to send LED strobe command ("RESET"), added FIFO status signals to status register, simplified FIFO access logic, added new top generic IO_NEOLED_TX_FIFO to configure NEOLED FIFO depth
18.07.2021 1.5.7.14 exposed new generic CPU_IPB_ENTRIES to configure size of CPU instruction prefetch buffer
18.07.2021 1.5.7.13 clean-up of processor top entity: using more sophisticated default values for all input signals and generics (all generics are "off" by default; input signals use L for control lines and U for data lines by default)
14.07.2021 1.5.7.12 reworked SLINK interrupt concept (now using FIFO fill level "half-full" as interrupt condition, see #122); added fill level output to processor FIFO component
09.07.2021 1.5.7.11 🐛 fixed minor bug in FIFO component (mapping might fail if FIFO_DEPTH = 1); fixed broken sw/example/demo_freeRTOS makefile (all freeRTOS includes were missing)
03.07.2021 1.5.7.10 ✨ added new component: External Interrupt Controller (XIRQ): up to 32 external interrupt channels xirq_i (via XIRQ_NUM_CH generic), configurable trigger (via XIRQ_TRIGGER_TYPE and XIRQ_TRIGGER_POLARITY generics), prioritized or non-prioritized servicing
02.07.2021 1.5.7.9 relocated base addresses of watchdog timer (WDT) and true-random number generator (TRNG); removed CPU's firq_ack_o signal (was not used at all)
30.06.2021 1.5.7.8 ⚠️ increased GPIO port size from 32-bit to 64-bit; relocated GPIO base address; removed GPIO.input pin-change interrupt
29.06.2021 1.5.7.7 ✨ added new processor module stream link interface (SLINK): up to 8 individual RX and TX stream links, comptaible to AXI4-Stream base protocol; added software driver files; added documentation
27.06.2021 1.5.7.6 🐛 fixed bug in CFS (custom functions subsystem) address map layout
27.06.2021 1.5.7.5 ⚠️ removed numerically-controlled oscillator (NCO, neorv32_nco.vhd) module as it appears to be an over-engineered clock-generator without many use cases (if you really need this module, you can wrap it within the custom functions subsystem CFS)
27.06.2021 1.5.7.4 ⚠️ removed top's fast IRQ (FIRQ) inputs soc_firq_i: the FIRQs are reserved for processor-internal usage only, use the mext_irq_i RISC-V external interrupt signal for all external interrupt applications (via dedicated interrupt conttoller), a follow-up version of the project will introduce a customizable external interrupt controller; sourced-out FIFOs into new HDL component neorv32_fifo.vhd
26.06.2021 1.5.7.3 edit of v1.5.7.2: RISC-V spec claims to leave destination registers of trapping load operation unchanged (do not set to zero); minor CPU control logic optimizations; ✨ reworked bootloader to provide several new configuration and customization options
25.06.2021 1.5.7.2 optimized instruction execution FSM: less hardware utilization, 🔒 now ensures to write ZERO to destination register if there is an exception during a load operation; made default bootloader even more HW configuration independent (GPIO, SPI and MTIME are optional; UART is optional but highly recommended);
24.06.2021 1.5.7.1 ✨ added RISC-V Zmmul ISA extension (via CPU_EXTENSION_RISCV_Zmmul generic; default = false): implements only the integer multiplication instructions sub-set of the M extension; for size-constrained setups, requires ~50% less hardware ressources than the M extension
23.06.2021 🚀1.5.7 New release one year NEORV32! 🎉
21.06.2021 1.5.6.14 🐛 fixed bug in debugger "park loop": fence.i instruction was missing before executing the DM's program buffer - this caused execution of outdated instructions from the program buffer if the instruction cache is implemented
21.06.2021 1.5.6.13 removed TINY_SHIFT_EN generic; clean-up of CPU co-processor system: removed "dummy co-processor" for CSR read access, moved CPU shifter core into new co-processor; simplified default (bit-serial) shifter logic (single bit-shifts only) and multi-cycl instructions decode logic
18.06.2021 1.5.6.12 clean-up of CPU co-processor system (removed unused co-processor slots 4,5,6,7)
15.06.2021 1.5.6.11 made bootloader more configuration-independent: bootloader now only uses the first 512 bytes of internal/external DMEM for runtime data - hence, the DMEM size is not further relevant as long as it greater than or equal to 512 bytes
14.06.2021 1.5.6.10 ✨ physical size of bootloader ROM (BOOTROM) is atutomatically determined during synthesis based on the size of the initialization image, max physical size is 32kB; simplified BOOTROM access check logic; added size check when using IMEM as ROM (check if application image fits); simplified linker script: logical instruction address space 2GB now, no need to adapt this to hardware configuration, hardware checks if application fits into physical memory size (which configured via generics)
13.06.2021 1.5.6.9 ⚠️ reworked boot configuration: removed MEM_INT_IMEM_ROM and BOOTLOADER_EN generics, replaced by single INT_BOOTLOADER_EN generic (type boolean): true = implement processor-internal (default) bootloader, implement processor-internal IMEM (if implemented) as RAM; false = boot from processor-internal IMEM implemented (if enabled) as pre-intialized ROM; reworked IMEM, DMEM and BOOTROM memory architecture; reworked image generator and generated application image files (now using unconstrained array as init images + unified array/memory types)
12.06.2021 1.5.6.8 🐛 fixed bug in instruction cache (cache controller might have missed resync/"clear-and-reload" requests from fence.i instructions); mino project/repo clean-ups
08.06.2021 1.5.6.7 clean-up of Wishbone interface module (dead code removal); added new package constant wb_rx_buffer_c to configure SYNC (default) or ASYNC Wishbone RX path (allows trade-off between performance/latency and timing closure)
06.06.2021 1.5.6.6 🐛 fixed bug in PWM base address configuration; ⚠️ removed user-access HPM counter access via hpmcounter3[h]:hpmcounter3[h] CSRs, hardwaired according mcounteren bits to zero: HPM can only be used in machine mode; reworded 64-bit counters (cycle, instret, hpmcounter + mtime) overflow logic: now using dedicated CARRY chain instead of overflow detector (can improve timing);
05.06.2021 1.5.6.5 removed debug mode's stepie flag (used to allow interrupts during single-stepping) as the debugger can emulate interrupts
04.06.2021 1.5.6.4 ⚠️ removed IO_PWM_EN generic, replaced by IO_PWM_NUM_CH generic - PWM ontroller now supports implementation of up to 60 channels via IO_PWM_NUM_CH (IO_PWM_NUM_CH = 0 will omit the PWM controller); 🐛 fixed minor bug in minstreth counter logic
04.06.2021 1.5.6.3 ⚠️ increased processor-internal IO size from 256 bytes to 512 bytes; relocated base adress of CFS
03.06.2021 1.5.6.2 ⚠️ The B ISA extension (bit manipulation) has been (temporarily) removed from the project. See B ISA Extension project board.
03.06.2021 1.5.6.1 CPU/HPM counter size configuration (CPU_CNT_WIDTH and HPM_CNT_WIDTH generics) can now be 0-bit (no counters implemented at all) to 64-bit (full-scale / RISC-V standard) wide
01.06.2021 🚀1.5.6.0 New release
01.06.2021 1.5.5.13 ⚠️ fixed project's endianness inconsistency (issue #50) - CPU and processor are little-endian; changed image generator (sw/image_gen) and bootloader to generate/use little-endian executables; external memory interface is little-endian by default; removed mstatus.ube bit (reads as zero now); removed mstatush CSR
31.05.2021 1.5.5.12 mret instruction now clears mstatus.mpp (according to new RISC-V privileged specs.)
31.05.2021 1.5.5.11 ⚠️ mtval CSR is now read-only; a write access will raise an illegal instruction exception
30.05.2021 1.5.5.10 🐛 fixed bug in processor's reset system (system reset stuck at 0 if on-chip debugger not implemented); reworked processor's reset generator system; VHDL code clean-up; reworked SoC's bus infrastructure (now using array of records for module bus response)
28.05.2021 1.5.5.9 integrated DBMEM (debug memory) component into DM (debug module); removing now-obsolete neorv32_debug_dbmem.vhd component
22.05.2021 1.5.5.8 on-chip debugger (OCD): added debug module (DM) component; OCD is operational now (but still experimental)
22.05.2021 1.5.5.7 🐛 fixed bug in internal memory monitoring: if accessing an unused address which is not re-directed to the external bus interface (because WISHBONE module is disabled) caused the CPU to stall since that bus access was not correctly monitored and aborted by the BUS_KEEPER
21.05.2021 1.5.5.6 on-chip debugger: added debug transport module (DTM) component
20.05.2021 1.5.5.5 added system time output mtime_o (64-bit) driven by processor-internal MTIME unit (idea #29)
20.05.2021 1.5.5.4 on-chip debugger: added debug memory (DBMEM) component
20.05.2021 1.5.5.3 added flag (SYSINFO.FEATURES) to allow software to discover if on-chip debugger is implemented (SYSINFO_FEATURES_OCD); added documentation https://stnolting.github.io/neorv32/#_on_chip_debugger_ocd
19.05.2021 1.5.5.2 ✨ added RISC-V CPU Debug Mode, compatible to RISC-V debug spec; new CSRs: dcsr, dpc, dscratch; new instructions: dret; ⚠️ debug mode is still *work-in-progress and not operational yet! updated documentation CI #26, contributed by umarcor 👍; fence.i will not longer trap if executed but not implemented (CPU_EXTENSION_RISCV_Zifencei = false)
13.05.2021 1.5.5.1 added UPduino_v3 example setup; renamed signal in watchdog module (rtl/core/neorv32_wdt.vhd) - collision with reserved keyword in vhdl-2008 (fixing issue #24)
10.05.2021 🚀1.5.5.0 New release
10.05.2021 1.5.4.12 ⚠️ mip CSR is now read-only (pending IRQs can be cleared by disabling (and re-enabling) the according mie bit), writing to mip will raise an illegal instruction exception; ✨ added non-maskable interrupt (NMI), top entity port nm_irq_i; added new NMI to NEORV32 runtime environment
09.05.2021 1.5.4.11 added new flags to mzext CSR: CSR_MZEXT_PMP (set if at least 1 PMP region is implemented at all), CSR_MZEXT_HPM (set if at least 1 HPM counter is implemented)
03.05.2021 1.5.4.10 minor code clean-ups; moved FIRQ synchronization registers to top, removed sync FFs for processor-internal sources;
30.04.2021 1.5.4.9 moved definitions of IO area from crt0.S to linker script; reworked CPU's CSR access system - highly reducing area overhead (removing decoding logic of not implemented CSRs by heavily using VHDL's NULL statement in case constructs)
29.04.2021 1.5.4.8 minor edits in CPU instruction fetch engine; reduced processor-internal bus timeout (max_proc_int_response_time_c) to 15 cycles; added flag to SYSINGO module (SYSINFO_FEATURES_HW_RESET) to check if a dedicated hardware reset of all core register is implemented (via package's dedicated_reset_c constant)
28.04.2021 1.5.4.7 🐛 fixed bug in instruction cache (iCACHE) when using two sets - ICACHE_ASSOCIATIVITY = 2: cache was corrupting the non-active set
26.04.2021 1.5.4.6 optimized CPU's instruction fetch unit: less overhead for branches, reduced unit's hardware complexity
25.04.2021 1.5.4.5 ⚠️ removed cancel signals from processor-internal bus system; removed CPU's internal bus access timeout counter; added new top generic: MEM_EXT_TIMEOUT - type natural, default = 255; used to configure optional auto-timeout of Wishbone interface (if an external device is not responding within MEM_EXT_TIMEOUT clock cycles); set to zero to disable auto-timeout (required to comply with AXI4-Lite specs. when using the top's AXI wrapper)
25.04.2021 1.5.4.3 ✨ converted NEORV32.pdf data sheet to asciidoc using asciidoctor; added data sheet sources to docs/src_adoc
21.04.2021 1.5.4.3 ⚠️ 🐛 reworked atomic memory access system due to conceptual design errors: new system will make atomic LR/SC combinations fail when there is a trap (like a context switch) between the two instructions; new system prohibits SC from writing to memory if exclusive access fails; removed top's wb_tag_i signal, pruned one bit of top's wb_tag_o signal (atomic access), added top's wb_lock_o signal; updated sections in NEORV32.pdf regarding atomic memory accesses
19.04.2021 1.5.4.1 added register stage to MTIME.time write access to improve timing closure
17.04.2021 🚀1.5.4.0 New release
16.04.2021 1.5.3.13 ⚠️ added new top configuration generic TINY_SHIFT_EN (type = boolean, default = false) to configure a tiny single-bit (iterative) shifter for CPU ALU shift operations (for highly area-constrained setups)
16.04.2021 1.5.3.12 ✨ reworked reset system of the complete CPU: by default most registers (= "uncritical registers") do not provide an initialization via hardware reset; a defined reset value can be enabled by setting a constant from the main VHDL package (rtl/core/neorv32_package.vhd): constant dedicated_reset_c : boolean := false; (set true to enable CPU-wide dedicated register reset); see new section "2.11. CPU Hardware Reset" of NEORV32.pdf for more information
14.04.2021 1.5.3.11 minor rtl edits to allow synthesis using ghdl-yosys-plugin (:construction: work in progress :construction:)
13.04.2021 1.5.3.10 🐛 fixed bug when configuring HPM_CNT_WIDTH less than 32; ⚠️ added new generic CPU_CNT_WIDTH to configure total size of CPU's cycle and instret CSRs (default = 64-bit); added Zxnocnt (no counters) and Zxscnt (small counters) flags to mzexr CSR to check if CPU_CNT_WIDTH is zero or less than 64, respectively; 🐛 fixed bug in crt0.S start-up code: stack pointer has to be initialized before an exception can occur; updated cpu_test example program
11.04.2021 1.5.3.9 ⚠️ reworked CPU reset system (in addition to modifications in v1.5.3.7): default reset: most register are "initialized" with '-' (don't care) since no real reset is required; however, a "real" reset can be configured using the packages 'def_rst_val_c' constant that defines the reset value for all "uncritical regsiter" (see new NEORV32.pdf section 2.11 "CPU Hardware Reset")
09.04.2021 1.5.3.8 optimized CPU control: register write back during multi-cycle ALU operation only when result is really available (reducing switching activity; avoids possible source operand corruption); optimized M extension's co-processor: multiplications and divisions are 2 cycles faster
08.04.2021 1.5.3.7 🐛 fixed bug in HPM event configuration via mhpmevent* CSRs - there was a CSR address decoding overlap between the HPM event CSRs and the machine trap setup CSRs (introduced in version 1.5.3.6); ⚠️ reworked CPU core CSRs: most CSRs are not reset by hardware and need explicit initialization (done by crt0.S start-up code)
02.04.2021 1.5.3.6 🐛 fixed bug in external memory interface (neorv32_wishbone.vhd) that caused bus exceptions when using external memories with very high access latencies (race condition in bus timeouts); VHDL code clean-up
30.03.2021 1.5.3.5 added new top's generic HPM_CNT_WIDTH (type natural, default=40) to configure the total bit width of the hardware performance monitors (HPM) counter (min 1, max 64); mofified crt0.S: stops all counters (incl. HPMs), no user-level access to ANY counter; neorv32.h: added missing mcounteren and mcountinhibit CSR bit definitions
28.03.2021 1.5.3.4 default "test setup" rtl/top_templetes/neorv32_test_setup.vhd: disabled PMP, implementing 4 HPM counters; ✨ added boards folder for exemplary FPGA setups
27.03.2021 1.5.3.3 minor optimization in CPU control engine; FPU comparator now uses comparatos results from main ALU (reduces FPU hardware footprint)
26.03.2021 1.5.3.2 added single-precision floating-point unit (FPU) rtl/core/neorv32_cpu_cp_fpu.vhd implementing the Zfinx CPU extension; added/updated Zfinx intrinsic library and verification framework: sw/example/floating_point_test; added co-processor timeout counter to CPU to auto-terminate co-processor operations (for debugging only; defaullt=deactivated)
25.03.2021 1.5.3.1 🐛 fixed bug in invalid floating-point instruction detection (caused CPU to stall if executing an invalid floating-point operation); intrinsic core library (mainly used for not-yet-supported CPU extensions like B and Zfinx): clean-up, added R3 instruction type
24.03.2021 🚀1.5.3.0 New release
23.03.2021 1.5.2.9 ✨ added new top generic to enable single-precision floating-point extensions Zfinx: CPU_EXTENSION_RISCV_Zfinx - type boolean, default = false, ⚠️ extension is not yet operational!; bootloader now shows available Z* extensions (from mzext CSR) like Zifencei
21.03.2021 1.5.2.8 🐛 fixed problem with linking math.h library in makefile; added floating-point-related global definitions to main VHDL package; added intrinsic core library file sw/lib/include/neorv32_intrinsics.h - intrinsic library support for CPU extensions, which are not yet supported by the upstream GCC, are based on this
18.03.2021 1.5.2.7 🐛 fixed bug in sw/common/crt0.S dummy exception handler (wrong order of register push/pop); changed upcoming floating-point extension (orignally F extension) to Zfinx extension (-> RISC-V Zfinx spec) - updated CPU infrastructure
16.03.2021 1.5.2.6 reworked atomic/exclusive memory access interface: removed CPU's d_bus_lock_o and i_bus_lock_o signal (was always zero anyway); removed top's wb_lock_o signal; added exclusive access request to Wishbone tag signal wb_tag_o (is now one bit wider); added more details to NEORV32.pdf regarding excluisve/atomic memory accesses (interface/protocol)
09.03.2021 1.5.2.5 added bit-manipulation Zba sub-extension (shifted-adds: SH1ADD SH2ADD SH3ADD)
07.03.2021 1.5.2.4 ✨ added new IO/peripheral module: Smart LED Interface (NEOLED) to interface intelligent LEDs (WS2812/WS2811/NeoPixel(c) compatible; supports RGB and RGBW LEDs in parallel) with internal TX buffer; new top generics: IO_NEOLED_EN: implement NEOLED interface when true; new top signals: neoled_o: single-wire async. serial data interface; FIFO re-fill interrupt via fast interrupt request channel 9 FIRQ9; added new "NEOLED" section to data sheet; added SW driver library and simple NEOLED example program (sw/example/demo_neopixel)
06.03.2021 1.5.2.3 clean-up of CPU control code: fixed minor bug in F-exension's instruction decoding; changed coding style for CSR write access (old version might have caused "inferring latch..." warning in Intel Quartus); fixed default values for CSRs when according extensions are disabled
04.03.2021 1.5.2.2 added two new generics to configure CFS IO conduit sizes (implementing issue #13): IO_CFS_IN_SIZE - type: positive, configures the size of cfs_in_i signal; IO_CFS_OUT_SIZE - type: positive, configures the size of cfs_out_o signal; minor edits to floating-point CPU infrastructure
03.03.2021 1.5.2.1 added CPU core infrastructure for upcoming single-precision floating-point extension F; ⚠️ floating-point extension is NOT OPERATIONAL YET! added new rtl file for the floating-point unit rtl/core/neorv32_cpu_cp_fpu.vhd (blank template!)
01.03.2021 🚀1.5.2.0 New release
27.02.2021 1.5.1.11 🐛 fixed several small bugs in bitmanipulation extension instruction decoding (not all B instructions triggered and illegal instruction exception when B-extension = disabled)
25.02.2021 1.5.1.10 🐛 fixed bugs in UART RTS/CTS hardware control flow - the new setup was verified on real hardware; added double-buffering to UART RX engine
24.02.2021 1.5.1.9 mcounteren CSR is hardwired to zero if user mode is not implemented (CPU_EXTENSION_RISCV_U = false); added Zbs (single-bit operations) sub-extension to bitmanipulation unit
22.02.2021 1.5.1.8 added programmable RTS/CTS hardware flow control to UARTs; new top signals: uart0_rts_o, uart0_cts_i, uart1_rts_o, uart1_cts_i; UART.TX engine will only start sending (if CTS flow control is activated) if uart*_cts_i is asserted (low-active); UART.RX engine signals (if RTS flow control is activated) via uart*_rts_o if it is ready to receive new data (low-active); added hw flow control parameter to uart setup functions neorv32_uart*_setup()
20.02.2021 1.5.1.7 removed err_o signal from custom functions subsystem CFS; processor SoC fast interrupt input soc_firq_i reduced to 6 channels (was 8) - mapped to CPU's FIRQ_10 - FIRQ_15; added individual fast IRQs for UART1 "RX complete" and "TX complete" conditions (-> FIRQ_4 & FIRQ_5); changed FIRQ channels of TWI/SPI/GPIO interrupts
18.02.2021 1.5.1.6 added register buffer for enable signals to processor-internal clock generator; 🐛 fixed bug in sw/example/demo_twi program: TWI clock speed messsage was wrong (factor 1/4 was missing)
17.02.2021 1.5.1.5 added a second independent UART: new UART is secondary UART UART0, the "old" UART is now the primary UART UART0; by default the primary UART (UART0) is used for all user interface connection; reworked fast interrupt FIRQ assignment/priority list - added UART1 RTX (receive or send done) fast interrupt; added hardware driver functions for new UART1 - the "old" neorv32_uart_* function calls will map to the primary UART UART0 for compatibility; renamed compiler flag to enable UART "simulation mode": UART_SIM_MODE -> UART0_SIM_MODE for primary UART, UART1_SIM_MODE for secondary UART (UART_SIM_MODE is still supported for compatibility and maps to UART0_SIM_MODE); added second simulation UART receiver for UART1 to testbench; renamed UART simulation output files: neorv32.testbench_uart.out -> neorv32.testbench_uart0.out (testbench UART0 receiver), new: neorv32.testbench_uart1.out (testbench UART1 receiver), neorv32.uart.sim_mode.text.out and neorv32.uart.sim_mode.data.out -> neorv32.uart0.sim_mode.text.out and neorv32.uart0.sim_mode.data.out (for UART0), new neorv32.uart1.sim_mode.text.out and neorv32.uart1.sim_mode.data.out (for UART1)
13.02.2021 1.5.1.4 HW_THREAD_ID generic is now of type natural; mret instruction now requires an additional cycle to execute; logic optimization of CPU's control logic -> smaller hardware footprint and higher f_max; updated CPU synthesis results; removed top module's generic initialization using (others => '0') (targeting issue #8)
09.02.2021 1.5.1.3 modified CPU architecture: now using a "pseudo" ALU co-processor to get the result of a CSR read operation into data path, removing one input from register file input mux -> shorter critical path
08.02.2021 1.5.1.2 added new peripheral/IO module: Numerically-Controlled Oscillator NCO: three independent channels, 20-bit phase accu, 20-bit tuning word, fixed 50% duty cycle mode or pulsed mode; added according HW drivers and example program
07.02.2021 🚀1.5.1.0 New release
05.02.2021 1.5.0.11 🐛 fixed error in atomic instruction LR.W
05.02.2021 1.5.0.10 CPU now provides 16 fast interrupt request lines (FIRQ0 .. FIRQ15) with according mie/mip CSR bits and mcause trap codes; removed IRQ enable flags from SPI, UART & TWI; reworked processor-internal interrupt system - assignment/priority list; UART now features individual IRQs for "RX-done" and "TX-done" conditions; changed bit order in TWI control register
29.01.2021 1.5.0.9 removed custom function units CFU0 & CFU1; ✨ replaced them by new Custom Functions Subsystem CFS, which provides up to 32x32-bit memory-mapped registers; new configuration generics: IO_CFS_EN, IO_CFS_CONFIG; new top entity signals: cfs_in_i, cfs_out_o; increased processor's IO area from 128 bytes to 256 bytes, now starting at 0xFFFFFF00
28.01.2021 1.5.0.8 added critical limit for number of implemented PMP regions: When implementing more PMP regions that a certain critical limit an additional register stage is automatically inserted into the CPU’s memory interfaces increasing the latency of instruction fetches and data access by +1 cycle. The critical limit can be adapted for custom use by a constant from the main VHDL package file (rtl/core/neorv32_package.vhd). The default value is 8: constant pmp_num_regions_critical_c : natural := 8;
27.01.2021 1.5.0.7 added four additional fast interrupt channels FIRQ4..7, available via processor's top soc_firq_i(3:0) signal for custom platform use; fixed minor error in UART setup function (baud rate prescaler calculation for very high baud rates)
26.01.2021 1.5.0.6 minor logic optimization of CPU's B extension co-processor (reducing area); minor logic optimization or HPM triggers (reducing area); reworked CPU's co-processor interface; minor logic optimiztation of branch condition check (to shorten critical path)
23.01.2021 1.5.0.5 reworked true random number generator TRNG: architecture is now based on several simple ring oscillators with incrementing length; changed control register bits; updated according driver functions and demo program
22.01.2021 1.5.0.4 🐛 fixed BUG in bootloader (that caused it to immediately crash after reset if SPI/MTIME/GPIO peripherals were not implemented); reworked watchdog timer WDT: removed watchdog access password, added option to lock configuration until next system reset, changed control register bits - updated driver functions and demo/test programs
17.01.2021 1.5.0.3 CPU data register file can now be mapped to a single "true dual-port" block RAM by the synthesizer (requiring only 1024 memory bits instead of 2048); 🐛 fixed typo error in sim/rtl_modules/neorv32_imem.vhd; modified M co-processor (due to register file read access modification), reduced switching activity when co-processor is idle; logic/arithmetic operations of B extension only require 3 cycles now, reduced switching activity when co-processor is idle
15.01.2021 1.5.0.2 added instruction cache associativity configuration (number of sets); new configuration generic: ICACHE_ASSOCIATIVITY -> number of sets (1 = direct mapped, 2 = 2-way set-associative), has to be a power of two; if associativity is > 1 the used replacement policy is least recently used (LRU); 🐛 fixed bug in sw/lib/source/neorv32_cpu.c PMP.CFG configuration function
14.01.2021 1.5.0.1 added new HPM trigger event: multi-cycle ALU operation wait cycle (HPMCNT_EVENT_WAIT_MC); renamed neorv32_cache.vhd -> neorv32_icache.vhd
10.01.2021 🚀1.5.0.0 Renamed configuration generics: *_USE -> *_EN
10.01.2021 1.4.9.10 ✨ Added support for bit manipulation extension (B) - base subset Zbb only (:warning: RISC-V B (sub-)extensions are not officially ratified yet; compatible to version "0.94-draft"); enabled via new configuration constant CPU_EXTENSION_RISCV_B (default = false); uported Zbb instructions: CLZ CTZ CPOP SEXT.B SEXT.H MIN[U] MAX[U] ANDN ORN XNOR ROL ROR RORI zext(pseudo-instruction for PACK rd, rs, zero) rev8(pseudo-instruction for GREVI rd, rs, -8) orc.b(pseudo-instruction for GORCI rd, rs, 7); added B flag to misa CSR; added Zbb flag to mzext CSR
03.01.2021 1.4.9.8 Added HPM trigger for instruction issue wait cycle (caused by pipeline flush); all HPM counters do not increment if CPU is sleep mode; fixed CoreMark timer overflow issues; rtl/core/neorv32_busswitch.vhd: removed wait states, less load/store wait cycles -> faster execution; updated CoreMark results
02.01.2021 1.4.9.7 ✨ added RISC-V hardware performance monitors (HPM); new CSRs: mhpmevent*(3..31), [m]hpmcounter*[h](3..31), amount configurable via top's generic HPM_NUM_CNTS; supported counter events: active cycle, retired instruction, retired compressed instruction, instruction fetcch memory wait cycle, load operation, store operation, load/store memory wait cycle, unconditional jump, conditional branche (all), conditional taken branch, entered trap, illegal instruction exception; PMP can now have up to 64 regions; number of regions configured via top's PMP_NUM_REGIONS generic; removed obsolete top's PMP_USE generic; removed PMP flag from mzext CSR; minimal region granularity (in bytes) configured via top's PMP_MIN_GRANULARITY generic, has to be a power of two and >= 8 bytes; 🐛 fixed bug in sleep (wfi) instruction
29.12.2020 1.4.9.5 New UART features: "frame check" (test if stop bit is set), error indicated via UART_DATA reg's UART_DATA_FERR flag; configurable parity bit (UART_CT.UART_CT_PMODE1:UART_CT_PMODE0, 00=no parity; 10=even parity; 11=odd parity); parity error indicated via UART_DATA reg's UART_DATA_PERR flag; moved UART's RX overrun flag to UART_DATA.UART_DATA_OVERR
26.12.2020 1.4.9.4 removed zicnt_en option (was used to discard the standard RISC-V counters and timers from implementation); added missing mcounteren CSR (to allow read-access from user-level code to cycle[h] / time[h] / [m]instret[h] CSRs); available bits: 0: CY, 1: TM, 2: IR; added missing mcountinhibit CSR (to disable auto-increment of [m]cycle[h] / [m]instret[h] CSRs); available bits: 0: CY, 2: IR; ⚠️ renamed CSR bits C-code-aliases: CPU_* -> CSR_*
25.12.2020 1.4.9.3 Added missing UBE flag to mstatus CSR, indicates Endianness for load/stores in user mode (always set indicating BIG-endian mode), is a copy of mstatush.mbe
23.12.2020 1.4.9.2 ✨ added processor-internal instruction cache rtl/core/neorv32_cache.vhd (direct mapped); new configuration generics: ICACHE_USE (implement cache), ICACHE_BLOCK_SIZE (cache block/page/line size), ICACHE_NUM_BLOCKS (number of cache blocks); added SYSINFO_CACHE register to SYSINFO to check cache configuration by software
20.12.2020 1.4.9.1 🐛 fixed bug in CPU's instruction fetch engine (alignment_errros/bus_errors were not acknowledged correctly); added BUS_TIMEOUT generic to CPU (defines the amount of cycles after which an unacknowledged bus access will get terminated and raises a bus access fault exception)
19.12.2020 🚀1.4.9.0 Testbench: added memory-mapped triggers to trigger core's "machine software & external interrupts"; sw/example/cpu_test: removed CFU tests, added MEI and MSI tests; added RISC-V-Compliance Test Framework to repository (riscv-compliance/), core passes all rv32 tests (riscv-compliance v2.1)
18.12.2020 1.4.8.13 Added additional simulation files: simulation-optimized IMEM-ROM (so far, this is only relevant for the new NEORV32 RISC-V Compliance test framework v2.0); ✨ Processor now passes all rv32 tests of the new RISC-V Compliance Test Framework v2.0
16.12.2020 1.4.8.12 ⚠️ fixed (another) bug in mtval CSR generation (wrong value for "breakpoint" trap); updated mtval value table in data sheet; fixed bug in load/store operation (intoroduced in version 1.4.8.10)
16.12.2020 1.4.8.11 ⚠️ fixed bug in mtval CSR generation (wrong values for some traps); fixed bug in mip CSR (writing zero to implemented bits now actually clears pending interrupts); fixed bug in IRQ priority encoding (machine software interrupt MSI comes before machine timer interrupt MTI)
12.12.2020 1.4.8.10 ⚠️ fixed wrong trap_reset_c encoding (in it's expanded form it should be 0x80000000) and reset logic: hardware mcause register is now set to trap_reset_c after a hardware reset; crt0.S start-up code now sets mcause to trap_reset_c after finishing hardware setup
11.12.2020 1.4.8.9 Added option to exclude standard RISC-V performance counters ([m]cycle[h] and [m]instret[h]) for size-constrained implementations; disabled by setting VHDL package's zicnt_en_c constant to false; software can determine state of zicnt_en_c via mzext CSR's CPU_MZEXT_ZICNT bit; added new signal to processor top entity: mtime_i, this signal is used for updateting the time[h] CSRs if the processor-internal MTIME unit is disabled (via IO_MTIME_USE = false)
10.12.2020 1.4.8.8 Added missing mstatush CSR (only bit MBE is implemented yet); added option to configure external bus interface for BIG- or little-endian byte-order, configured via VHDL package xbus_big_endian_c constant, default = BIG-endian, software can check endianness of the interface via SYSINFO's SYSINFO_FEATURES(SYSINFO_FEATURES_MEM_EXT_ENDIAN) flag; added mstatush CSR and endianness information to data sheet
09.12.2020 1.4.8.7 Added missing environment call from U-mode exception (via ecall instruction in user-mode); added environment call from U-mode to data sheet
09.12.2020 1.4.8.6 ⚠️ fixed bugs in ALU's co-processor interface: ATOMIC A extension could not be used without MULDIV M extension, CPU might have permanently stalled when executing an instruction from a disabled ISA extension; 🔒 added security feature: illegal user-level CSR read access will always return zero; added new section Execution Safety to neorv32.pdf data sheet
07.12.2020 1.4.8.5 ⚠️ fixed bug in next-PC logic (introduced with version 1.4.8.1) that caused instruction fetch from memories with more than 1 cycle latency to fail
05.12.2020 1.4.8.4 ⚠️ fixed bug in physical memory protection (PMP): region size configuration was incorrect; removed PMP_NUM_REGIONS and PMP_GRANULARITY CPU/processor generics (PMP configuration now via package constants); reworked section 2.4. Instruction Sets and CPU Extensions of neorv32.pdf
04.12.2020 1.4.8.2 Added PMA (physical memory attribute) to processor-internal IO region: NO EXECUTE; added 3.3.Address Space/Physical Memory Attributes (PMAs) section to neorv32.pdf
03.12.2020 1.4.8.1 Optimized CPU program counter (PC) update logic and "next PC" computation (shortend critical path); updated bootloader (configuration option for direct-boot-from-SPI-flash only) and customization text in neorv32.pdf
01.12.2020 🚀1.4.8.0 ⚠️ fixed bug in CPU-internal co-processor interface; optimized multiplier unit (~1 faster); added CPU A (atomic) extension support (only lr.w and sc.w instructions yet); added lock signal to CPU and processor's external bus interface
28.11.2020 1.4.7.6 Split ALU core operations: shortened critical path - replaced ALU output 8:1 mux by a 4:1 mux
26.11.2020 1.4.7.5 Minor rtl clean-up; CSR access instructions are one cycle faster now (3 cycles now); system/environemnt instructions (ecall ebreak mret wfi) need one additional cycle (4 cycles now)
25.11.2020 1.4.7.4 ⚠️ fixed bug in FENCE.I instruction that corrupted instruction fetch when executing code from processor-external memory; default testbench (sim/neorv32_tb.vhd) now features external IMEM, external DMEM and external IO connected via external bus interface; simulation now allows CPU to execute code using external memories only (no internal IMEM/DMEM); optimized CPU's instruction fetch interface (no more unnecessary transfer cancel requests)
20.11.2020 1.4.7.2 ⚠️ fixed bug in CPU bus unit that caused a memory exception after reset in some cases; added second simulated external (Wishbone) memory to testbench (one memory for simulating an external IMEM, one memory for simulating external memory-mapped IO); external bus interface (wishbone) now makes sure that a canceled bus transfer is really understood by the accessed peripheral
20.11.2020 1.4.7.1 Removed deprecated "update_enable signal" from IMEM
11.11.2020 🚀1.4.7.0 Further optimized pipeline front-end: Jumps and branches are one cycle faster (+5% coremark performance); updated synthesis results; updated performance results; added hello_world example program
07.11.2020 1.4.6.7 Updated bootloader (size optimization) and changed processor version output; added project logo; minor data sheet edits
03.11.2020 1.4.6.6 Removed SPI module's buggy "LSB-first mode", SPI module now always sends data MSB-first; removed SPI.CTRL SPI_CT_DIR bit; modfied bit order in SPI CTRL register; updated SPI SW library
02.11.2020 1.4.6.5 ⚠️ Fixed bug in CPU's illegal instruction detection logic; CPU rtl code optimizations - further reduced hardware footprint; rtl code clean-ups
01.11.2020 1.4.6.4 ⚠️ Fixed bug in [m]instret[h] and [m]cycle[h] carry logic; CPU hardware optimizations (area reduction, shortend critical path)
29.10.2020 1.4.6.3 rtl code clean-up; made preparations for additional co-processors
25.10.2020 1.4.6.2 Added tag signal (wb_tag_o) to processor's Wishbone bus; removed processors's priv_o - privilege level is now encoded in Wishbone tag signal; added a more sophisticated FreeRTOS example ("full_demo")
24.10.2020 🚀1.4.6.0 Completely reworked external memory interface (WISHBONE), removed now-obsolete processor generic MEM_EXT_REG_STAGES; added processor wrapper with AXI4-Lite master interface
22.10.2020 1.4.5.11 TWI: Added new control register flag to enable/disable SCL clock stretching by peripheral devices
22.10.2020 1.4.5.10 Added i_bus_priv_o and d_bus_priv_o signals to CPU_top and priv_o to Processor_top to show privilege level of bus access (from mstatus MPP); ⚠️ Fixed bug in external memory interface [WISHBONE] (non-standard Wishbone components were able to corrupt processor-internal ACK/ERR signal logic)
20.10.2020 1.4.5.9 ⚠️ Fixed bug in CPU "sleep" instruction (WFI - wait for interrupt)
20.10.2020 1.4.5.8 Machine timer interrupt is available as processor input pin (mtime_irq_i) if internal MTIME is not implemented (IO_MTIME_USE = false)
18.10.2020 1.4.5.7 Added new IO peripheral/Device: Second CFU (CFU1); renamed old CFU to CFU0; CFU VHDL files: neorv32_cfu0.vhd & neorv32_cfu1.vhd; removed CFU interrupt
17.10.2020 1.4.5.5 New makefile target upload allows to directly upload an executable to the bootloader from the console
17.10.2020 1.4.5.4 Added new CPU/Processor generic FAST_SHIFT_EN (default = false) to enable implementation of a fast (but large) barrel shifter for accelerating CPU shift instructions; updated CoreMark performance results
16.10.2020 1.4.5.2 Added read-only flag to custom mzext CSR to check if physical memory protection (PMP) is implemented; added [C] mzext CSR name aliases to neorv32.h
15.10.2020 1.4.5.1 Fixed "unprecise exceptions": mtval did not always reflect the correct value according to the instruction that caused the exceptions; fixed bug in RTE: Debug trap handler was not showing the correct mepc value
13.10.2020 🚀1.4.5.0 An official open-soucre RISC-V architecture ID was assigned to the project: decimal = 19, 32-bit hexadecimal = 0x00000013 - software can retrieve the ID from the marchid CSR
12.10.2020 1.4.4.9 Added alignment flags to makefiles: branch/jump/call targets are forced to be 32-bit aligned -> increases performance when using the C extension; added makefile flag listing to NEORV32.pdf; updated performance results for CPUs with C extension; crt0.S will initialize all registers with zero if not using E extension and not compiling bootloader
11.10.2020 1.4.4.8 Reworked pipeline frontend: Optimized fetch enginge, added issue engine, faster instruction fetch after taken branches + reduced hardware requirements; updated synthesis and performance results
11.10.2020 1.4.4.6 Added option to configure external memory interface (Wishbone) to either use standard/classic protocol (default) or pipelined protocol (for better timing): via wb_pipe_mode_c constant in VHDL package file (rtl/core/neorv32_package.vhd); added help text to NEORV32.pdf section "3.4.4. Processor-External Memory Interface (WISHBONE)"
08.10.2020 1.4.4.5 Removed CPU's BUS_TIMEOUT and processor's MEM_EXT_TIMEOUT generics; instead, a global configuration bus_timeout_c in the VHDL package file is used now
08.10.2020 1.4.4.4 Removed DEVNULL device; all simulation output options from this device are now available as SIM_MODE in the UART; mcause CSR can now also be written; FIXED: trying to write a read-only CSR will cause an illegal instruction exception; for compatibility reasons any write access to the misa CSR will be ignored and will NOT cause an exception
07.10.2020 1.4.4.2 Simplified ALU's set of core operations; removed co-processor data mux right after ALU -> shorter critical path; CPU control VHDL code clean-up and CSR write logic optimization; optimized IMEM/DMEM access logic; added note regarding alignment of IMEM/DMEM
05.10.2020 🚀1.4.4.0 ⚠️ Fixed bug in external memory interface: Executing code from external memory was causing an instruction fetch stall
02.10.2020 1.4.3.9 [m]cycleh and [m]instreth CSRs are now 32-bit wide (-> fully RISC-V-compliant)
01.10.2020 1.4.3.8 Added CPU top entity wrapper with resolved port signals rtl/top_templetes/neorv32_cpu_stdlogic.vhd; optimized ALU core functions – shorter critical path, less control overhead, reduced HW footprint
27.09.2020 1.4.3.3 Further improved ALU and control logic; CSR access instruction require one additional cycle now (to let side effects kick in); updated synthesis results; added CFU hardware driver dummy
26.09.2020 1.4.3.2 ⚠️ Fixed bug in CSRRWI instruction (introduced with version 1.4.3.1); further ALU operand logic optimizations; updated CPU data path figure
25.09.2020 1.4.3.1 Register file's x0 is now a physical register; this register is initialized by the hardware and locked afterwards; removed "set to zero" stage -> smaller hardware footprint and shorter critical path; added processor top entity wrapper with resolved signals rtl/top_templetes/neorv32_top_stdlogic.vhd
16.09.2020 🚀1.4.3.0 Simplified memory configuration: removed processor top's memory space configuration generics (MEM_ISPACE_BASE, MEM_ISPACE_SIZE, MEM_DSPACE_BASE, MEM_DSPACE_SIZE); data/instruction space sizes are irrelevant for hardware; instruction/data space base addresses are fixed (but can be modified in NEORV32 VHDL package file); modified SYSINFO registers; adapted bootloader, crt0 start-up code and linker script; stack configuration is now done via linker script; reworked chapter "address space"; added CFU interrupt -> fast interrupt channel 1 (shared with GPIO)
14.09.2020 1.4.2.0 Removed option to disable CSR counters (via CSR_COUNTERS_USE generic) since these counters are mandatory according to the RISC-V specs; added new IO/peripheral device: custom functions unit (CFU) for tightly-coupled custom co-processors; improved timing of processor-internal clock generator; fixed wrong labels in address space figure and removed dedicated exception vectors box; added mask register to GPIO unit to specify which input pins can trigger a pin-change interrupt
11.09.2020 1.4.0.4 Reworked TRNG architecture and interface; added text regarding fast interrupt channels usage for the NEORV32 processor
02.09.2020 1.4.0.2 ⚠️ Fixed bugs in external memory interface; added option to define latency of simulated external memory in testbench; hardware configuration sanity checks will now only appear once in console; added more details to data sheet section 3.3. Address Space; fixed typos in MEM_BASE and MEM_SIZE generic names
01.09.2020 1.4.0.1 Using registers above x15 when the E extensions is enabled will now correctly cause an illegal instruction exception
29.08.2020 🚀1.4.0.0 Rearranged and reworked data sheet; added FreeRTOS port, demo & short referencing chapter; removed booloader-specific linker scripts – main linker script is used for both, applications and bootloader; bootloader can now have .data and .bss sections; improved IMEM and BOOTROM memory initialization – faster synthesis; image generator now constrains init array size to actual executable size; peripheral/IO devices can only be written in full word mode (= 32-bit); GPIO ports are now 32-bit wide
23.08.2020 1.3.7.3 Added custom mzext CSR to check for available Z* CPU extensions; multiplier's FAST_MUL mode is one cycle faster now; updated performance data
20.08.2020 1.3.7.2 Removed bootloader-specific crt0 – bootloader now uses std crt0; makefiles now also support asm and cpp files; made linker scripts more general; renamed makefile "compile" (which is still available for compatibility) target into "exe"
14.08.2020 🚀1.3.7.0 Simplified CPU fetch engine; added configurable CPU instruction prefetch buffer (ipb) FIFO; optimized CPU execute engine; updated performance data
06.08.2020 1.3.6.5 Added FAST_MUL_EN generic to enable mapping of the multiplier core to DSP blocks; ALU.shifter is no more triggered when executing MULDIV operations; added benchmark results for DSP-based multiplier configurations; updated implementation and performance results; simplified makefiles – using implicit libc definition; crt0 only initializes lowest 16 registers
03.08.2020 🚀1.3.6.0 Relocated DEVNULL (changed base address); minor edits, optimization and clean-ups
30.07.2020 1.3.5.2 Added register stage to PMP mask generation to shorten critical path; removed automatic IRQ enable/disable from RTE install/uninstall functions
30.07.2020 1.3.5.1 ⚠️ Fixed bug(s) in PMP mask generation; misa.Z flag is not yet defined by the RISC-V specs., hence it is read-only and read as zero
29.07.2020 1.3.5.0 Added user privilege level, enabled via new CPU_EXTENSION_RISCV_U generic; ⚠️ fixed error in mstatus(mpie) logic; implemented RISC-V spec.-compliant Physical Memory Protection (PMP); allows up to 8 regions but only NAPOT mode is supported yet
25.07.2020 1.3.0.0 mcause CSR is read-only now!; removed CLIC, added 4 fast IRQ channels to CPU with according flags in mie and mip and trap IDs; updated core libraries; updated NEORV32 RTE; highly reworked data sheet; updated synthesis and performance results
21.07.2020 1.2.0.6 Added doc section regarding the CPU's data and instruction interfaces; optimized CPU fetch engine; updated iCE40 synthesis results
20.07.2020 1.2.0.5 Less penalty for taken branches and jumps (2 cycles faster)
19.07.2020 1.2.0.0 CPU bus unit now has independent busses for instruction fetch and data access – merged into single processor bus via new bus switch unit; doubled speed of ALU shifter unit again; all bits of mcause CSR can now be modified by application program (full RISC-V-compliant); performance counters CSRs [m]cycleh and [m]instreth are only 20-bit wide; removed NEORV32-specific custom CSRs – all processor-related information can be obtained from the new SYSINFO IO module (CPU is now more independent from processor configuration); changed IO address of DEVNULL; fixed bug in bootloader's trap handler; added USER_CODE generic to assign a custom user code that can be read by software (from SYSINFO)
14.07.2020 1.1.0.0 Added fence_o and fencei_o signals to top entity to show if a fence or fencei instruction is executed; added mvendorid and marchid CSRs (both are always zero); ALU shift unit is faster now; two lowest bits of mtvec are always zero; fixed wrong instruction exception priority; removed HART_ID generic – mhartid CSR is always read as zero; performance counters ([m]cycle[h], [m]instret[h] and time[h]) are also available in embedded mode – but can be explicitly disabled via the CSR_COUNTERS_USE generic; mcause CSR only allows write access to bit 31 and bits 3:0; updated synthesis reports
10.07.2020 1.0.6.0 Non-taken branches are now 1 cycle faster; the time[h] CSR now correctly reflects the system time from the MTIME unit; fixed WFI instruction permanently stalling the CPU; [m]cycle[h] counters now stop counting when CPU is in sleep mode; minstret[h] and mcycle[h] now also allow write-access
09.07.2020 1.0.5.0 X flag of misa CSR is zero now; the default SPI flash boot address of the bootloader is now 0x0080000; new exemplary FPGA utilization results for Intel, Lattice and Xilinx; misa CSR is read-only again, switching compressed extension on/off is pretty bad for the fetch engine; mtval and mcause CSRs now allow write accesses and are finally RISC-V-compliant; time low and high registers of MTIME peripheral can now also be written by user; MTIME registers only allow full-word write accesses
06.07.2020 1.0.1.0 Added missing fence instruction; added new generic to enable optional Zifencei CPU extension for instruction stream synchronization
05.07.2020 1.0.0.0 New CPU architecture: Fetch and execute engines; increased CPI; timer and counter CSRs are now all 64-bit wide; ⚠️ fixed CSR access errors; fixed C.LW decompression logic; misa flags C and M are now r/w – compressed mode and multiplier/divider support can be switched on/off during runtime; PC(0) is now always zero; ⚠️ fixed bug in multiplier/divider co-processor; renamed SPI signals; added RISC-V compliance check information – processor now passes the official RISC-V compliance tests
25.06.2020 0.0.2.5 Added DEVNULL device; added chapter regarding processor simulation; fixed/added links; fixed typos; added FPGA implementation results for iCE40 UP
23.06.2020 🚀0.0.2.3 Publication