Skip to content

Commit a5caa8a

Browse files
authored
Merge pull request #400 from stnolting/neorv32_verilog
🚀 [docs] add neorv32-verilog repository
2 parents 88fe045 + 9735173 commit a5caa8a

File tree

4 files changed

+57
-8
lines changed

4 files changed

+57
-8
lines changed

README.md

+15-7
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424

2525
![neorv32 Overview](https://raw.githubusercontent.com/stnolting/neorv32/main/docs/figures/neorv32_processor.png)
2626

27-
The NEORV32 Processor is a **customizable microcontroller-like system on chip (SoC)** written in platform-independent
28-
**VHDL** that is based on the NEORV32 [RISC-V](https://riscv.org/) CPU. The project is intended as auxiliary processor in larger SoC designs
27+
The NEORV32 Processor is a **customizable microcontroller-like system on chip (SoC)** built around the NEORV32
28+
[RISC-V](https://riscv.org/) CPU. The project is intended as auxiliary processor in larger SoC designs
2929
or as *ready-to-go* stand-alone custom microcontroller that even fits into a Lattice iCE40 UltraPlus 5k
3030
low-power & low-density FPGA running at 24+ MHz.
3131

@@ -35,6 +35,8 @@ are executed. Whenever an unexpected situation occurs the application code is in
3535

3636
:interrobang: Want to know more? Check out the [project's rationale](https://stnolting.github.io/neorv32/#_rationale).
3737

38+
:recycle: Looking for an **all-Verilog** version? Have a look at [neorv32-verilog](https://github.com/stnolting/neorv32-verilog).
39+
3840
:books: For detailed information take a look at the [NEORV32 online documentation](https://stnolting.github.io/neorv32/).
3941
The latest _PDF_ versions can be found [here](https://github.com/stnolting/neorv32/releases/tag/nightly).
4042

@@ -51,20 +53,21 @@ various FPGA boards and toolchains to get you started. Also check out the list o
5153
[FreeRTOS](https://github.com/stnolting/neorv32/tree/main/sw/example/demo_freeRTOS) operating systems and
5254
[LiteX](https://github.com/enjoy-digital/litex/wiki/CPUs#risc-v---neorv32) SoC Builder Framework.
5355

54-
:bulb: Feel free to open a [new issue](https://github.com/stnolting/neorv32/issues) or start a
55-
[new discussion](https://github.com/stnolting/neorv32/discussions) if you have questions, comments, ideas or if something is
56+
:bulb: Feel free to open a new [issue](https://github.com/stnolting/neorv32/issues) or start a new
57+
[discussion](https://github.com/stnolting/neorv32/discussions) if you have questions, comments, ideas or if something is
5658
not working as expected. Or have a chat on our [gitter channel](https://gitter.im/neorv32/community).
5759
See how to [contribute](https://github.com/stnolting/neorv32/blob/main/CONTRIBUTING.md).
5860

59-
:rocket: Check out the [quick links below](#6-Getting-Started) or directly jump to the
61+
:rocket: Check out the [quick links below](#6-Getting-Started) or jump directly to the
6062
[*User Guide*](https://stnolting.github.io/neorv32/ug/) to get started
61-
setting up your NEORV32 setup!
63+
setting up _your_ NEORV32 Processor!
6264

6365

6466
### Key Features
6567

6668
- [x] all-in-one package: **CPU** + **SoC** + **Software Framework & Tooling**
6769
- [x] completely described in behavioral, platform-independent VHDL - **no** platform-specific primitives, macros, attributes, etc.
70+
- [x] all-Verilog "version" [available](https://github.com/stnolting/neorv32-verilog)
6871
- [x] extensive configuration options for adapting the processor to the requirements of the application
6972
- [x] highly [extensible hardware](https://stnolting.github.io/neorv32/ug/#_comparative_summary) - on CPU, processor and system level
7073
- [x] aims to be as small as possible while being as RISC-V-compliant as possible - with a reasonable area-vs-performance trade-off
@@ -79,17 +82,21 @@ setting up your NEORV32 setup!
7982
[![release](https://img.shields.io/github/v/release/stnolting/neorv32?longCache=true&style=flat-square&logo=GitHub)](https://github.com/stnolting/neorv32/releases)
8083
[![GitHub Pages](https://img.shields.io/website.svg?label=stnolting.github.io%2Fneorv32&longCache=true&style=flat-square&url=http%3A%2F%2Fstnolting.github.io%2Fneorv32%2Findex.html&logo=GitHub)](https://stnolting.github.io/neorv32)
8184
\
85+
[![Processor](https://img.shields.io/github/workflow/status/stnolting/neorv32/Processor/main?longCache=true&style=flat-square&label=Processor%20Check&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3AProcessor)
8286
[![Documentation](https://img.shields.io/github/workflow/status/stnolting/neorv32/Documentation/main?longCache=true&style=flat-square&label=Documentation&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3ADocumentation)
83-
[![Processor](https://img.shields.io/github/workflow/status/stnolting/neorv32/Processor/main?longCache=true&style=flat-square&label=Processor&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32/actions?query=workflow%3AProcessor)
87+
\
8488
[![riscv-arch-test](https://img.shields.io/github/workflow/status/stnolting/neorv32-verif/riscv-arch-test/main?longCache=true&style=flat-square&label=riscv-arch-test&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32-verif/actions?query=workflow%3Ariscv-arch-test)
8589
[![Prebuilt_Toolchains](https://img.shields.io/github/workflow/status/stnolting/riscv-gcc-prebuilt/Test%20Toolchains/main?longCache=true&style=flat-square&label=Prebuilt%20Toolchains&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/riscv-gcc-prebuilt/actions/workflows/main.yml)
8690
[![Implementation](https://img.shields.io/github/workflow/status/stnolting/neorv32-setups/Implementation/main?longCache=true&style=flat-square&label=Implementation&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32-setups/actions?query=workflow%3AImplementation)
91+
[![neorv32-verilog](https://img.shields.io/github/workflow/status/stnolting/neorv32-verilog/Verification/main?longCache=true&style=flat-square&label=neorv32-verilog&logo=Github%20Actions&logoColor=fff)](https://github.com/stnolting/neorv32-verilog/actions/workflows/main.yml)
8792

8893
The NEORV32 is fully operational.
8994
The processor passes the official RISC-V architecture tests, which is checked by the
9095
[neorv32-verif](https://github.com/stnolting/neorv32-verif) repository. It can successfully run _any_ C program
9196
(for example from the [`sw/example`](https://github.com/stnolting/neorv32/tree/main/sw/example) folder) including CoreMark
9297
and FreeRTOS and can be synthesized for _any_ target technology - tested on Intel, Xilinx and Lattice FPGAs.
98+
The conversion into a plain Verilog netlist module is automatically checked by the
99+
[neorv32-verilog](https://github.com/stnolting/neorv32-verilog) repository.
93100

94101
[[back to top](#The-NEORV32-RISC-V-Processor)]
95102

@@ -305,6 +312,7 @@ This overview provides some *quick links* to the most important sections of the
305312
* [Debugging via the On-Chip Debugger](https://stnolting.github.io/neorv32/ug/#_debugging_using_the_on_chip_debugger) - step through code *online* and *in-system*
306313
* [Simulation](https://stnolting.github.io/neorv32/ug/#_simulating_the_processor) - simulate the whole SoC
307314
* [LiteX Integration](https://stnolting.github.io/neorv32/ug/#_litex_soc_builder_support) - build a SoC using NEORV32 + [LiteX](https://github.com/enjoy-digital/litex)
315+
* [Convert to Verilog](https://stnolting.github.io/neorv32/ug/#_neorv32_in_verilog) - turn the NEORV32 into an all-Verilog design
308316

309317
### :copyright: Legal
310318

docs/datasheet/overview.adoc

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ include::rationale.adoc[]
6161

6262
* all-in-one package: **CPU** + **SoC** + **Software Framework & Tooling**
6363
* completely described in behavioral, platform-independent VHDL - no vendor- or technology-specific primitives, attributes, macros, libraries, etc. are used at all
64+
* all-Verilog "version" https://github.com/stnolting/neorv32-verilog[available] (auto-generated netlist)
6465
* extensive configuration options for adapting the processor to the requirements of the application
6566
* highly https://stnolting.github.io/neorv32/ug/#_comparative_summary[extensible hardware] - on CPU, SoC and system level
6667
* aims to be as small as possible while being as RISC-V-compliant as possible - with a reasonable area-vs-performance trade-off

docs/userguide/content.adoc

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ which provides **SoC setups** for various FPGAs, boards and toolchains.
2727
* RTOS support for <<_zephyr_rtos_support, Zephyr>> and <<_freertos_support, FreeRTOS>>
2828
* build SoCs using <<_litex_soc_builder_support, LiteX>>
2929
* in-system <<_debugging_using_the_on_chip_debugger, debugging>> of the whole processor
30-
30+
* <<_neorv32_in_verilog>> - an all-Verilog "version" of the processor
3131
3232
3333
include::sw_toolchain_setup.adoc[]
@@ -68,6 +68,8 @@ include::litex_support.adoc[]
6868

6969
include::debugging_with_ocd.adoc[]
7070

71+
include::neorv32_in_verilog.adoc[]
72+
7173

7274

7375
include::../legal.adoc[]
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<<<
2+
:sectnums:
3+
== NEORV32 in Verilog
4+
5+
If you are more of a Verilog fan or if your EDA toolchain does not support VHDL or mixed-language designs
6+
you can use an **all-Verilog** version of the processor provided by the https://github.com/stnolting/neorv32-verilog[`neorv32-verilog`] repository.
7+
8+
[IMPORTANT]
9+
Note that this is **not a manual re-implementation of the core in Verilog** but rather an automated conversion.
10+
11+
GHDL's synthesis feature is used to convert a pre-configured NEORV32 setup - including all peripherals, memories
12+
and memory images - into an unoptimized plain-Verilog netlist module file without any (technology-specific) primitives.
13+
14+
.GHDL Synthesis
15+
[TIP]
16+
More information regarding GHDL's synthesis option can be found at https://ghdl.github.io/ghdl/using/Synthesis.html.
17+
18+
An intermediate VHDL wrapper is provided that can be used to configure the processor (using VHDL generics) and to customize
19+
the interface ports. After conversion, a single Verilog file is generated that contains the whole NEORV32 processor.
20+
The original processor module hierarchy is preserved as well as most (all?) signal names, which allows easy inspection and debugging
21+
of simulation waveforms and synthesis results.
22+
23+
.Example: interface of the resulting NEORV32 Verilog module (for a minimal SoC configuration)
24+
[source,verilog]
25+
----
26+
module neorv32_verilog_wrapper
27+
(input clk_i,
28+
input rstn_i,
29+
input uart0_rxd_i,
30+
output uart0_txd_o);
31+
----
32+
33+
The generated Verilog netlist has been tested with
34+
https://github.com/steveicarus/iverilog[Icarus Verilog]
35+
(simulation) and Xilinx Vivado (simulation and synthesis).
36+
37+
[TIP]
38+
For detailed information check out the `neorv32-verilog` repository at https://github.com/stnolting/neorv32-verilog.

0 commit comments

Comments
 (0)