Releases: RISC-KC/basic_rv32s
[46F_5SP_MMIO] Release v2.0.1
First minor revision release of basic_RV32s v2.0.0
RV32I46F_5SP_MMIO core design's signal-level block diagram.
46F5SP_SoC's signal-level block diagram.
Changes
v2.0.1
- Added RISC-V RV32I Cheatsheet in release attatchment
- Solved
xandzsignals that existed in previous v2.0.0 release.
Problems
Zsignals inrom_addressandrom_read_dataXsignal innew_wordXsignals inrom_read_data
Solution
v2.0.0
- Implemented MMIO Interface module in RV32I46F_5SP core
- Now the core natively supports UART based MMIO.
(baudrate 115200, LF, UART_TX only) - RV32I46F_5SP_MMIO core integrated SoC (46F5SP_MMIO_SoC)
- 2000 iteration version of Dhrystone 2.1. Implemented on SoC for FPGA; ready to go package
(For standard iterations that requires at least 2 seconds, Check dhrystone-rv32i-baremetal for more information)
What does this release mean?
- Previous release executed Dhrystone 2.1 and received results by manually detecting the end of benchmark, receving datas from CSRs.
(There are some possibilities that we've measured wrong performance data) - Now since we've implemented MMIO Interface, we no longer need to receive datas manually, which means the benchmark's result is more reliable than before.
(We now receive outputs by printf function of dhrystone automatically.)
Informations for the core
- Memory Map
IMEM(ROM): 0x0000_0000, 16384; 64KB
DMEM(RAM): 0x1000_0000, 8192; 32KB
UART_TX: 0x1001_0000
UART_TX_STATUS: 0x1001_0004- UART baudrate is 115200, Line break LF (or AUTO)
What's inside?
fpga/- Ready to go FPGA project files for Vivado 2024.2
- Previous v1.0.0's Demo FPGA step-by-step execution debugging project
- New RV32I46F5SP_MMIO_SoC with Dhrystone 2.1 integration. (2000 iterations)
modules/- clk_enable signal excluded core only directory for simulation and various uses.
testbenches/- testbench files for simulating CPU core and submodules in modules/.
- usage: `./test.sh
- To use ./test.sh, iverilog is required.
Performance

46F5SP_MMIO_SoC with RV32I46F_5SP_MMIO core implemented on Digilent Nexys Video FPGA board and ran Dhrystone 2.1.
RV32I46F_5SP_MMIO core implemented 46F5SP_MMIO_SoC was implemented on Digilent Nexys Video board (AMD Xilinx Artix-7 XC7A200T FPGA).
UART baudrate is 115200, line break LF.
FPGA Synthesis and Implementations were done in Vivado 2025.2 and also Vivado 2024.2.
If you are using older version, you can still copy the sources in project file(RV32sDhry_Finale.srcs/) and start a new project or upgrade the Vivado
- 20ns (50 MHz) timing constraints
- Synthesis Strategy : Flow_PerfOptimized_high
- Implementation Strategy : Performance_Explore
Dhrystone performance can be calculated by DMIPS (Dhrystone Million Instructions Per Second).
For standard Dhrystone 2.1 execution, the minimum execution time is 2 seconds.
Thus we've put 300,000 iterations as default without touching the original source code that SiFive Provided, and 2,000 iterations with Too_Small_Time modification on Dhrystone source(Dhry_1.c).
Since we've got the Dhrystones per Second, we can calculate our core's generalized performance through this information.
The proposed performance of RV32I46F_5SP core's dhrystone benchmark is evaluated with the following conditions:
- 2000 iterations settings (with 300,000 iteration)
- 50MHz of timing constraints (20ns, clock cycle speed)
In our settings on Digilent Nexys Video FPGA, we obtained:
-
2,000 iterations : 97,273 Dhrystones per Second
-
300,000 iterations : 97,087 Dhrystones per Second
-
DMIPS (Dhrystone Million Instructions Per Second)
1 DMIPS equals to 1757 Dhrystones Per Second.
- DMIPS/MHz
[46F_5SP_MMIO] Release v2.0.0
Second Major release of basic_RV32s
RV32I46F_5SP_MMIO core design's signal-level block diagram.
46F5SP_SoC's signal-level block diagram.
Changes
- Implemented MMIO Interface module in RV32I46F_5SP core
- Now the core natively supports UART based MMIO.
(baudrate 115200, LF, UART_TX only) - RV32I46F_5SP_MMIO core integrated SoC (46F5SP_MMIO_SoC)
- 2000 iteration version of Dhrystone 2.1. Implemented on SoC for FPGA; ready to go package
(For standard iterations that requires at least 2 seconds, Check dhrystone-rv32i-baremetal for more information)
What does this release mean?
- Previous release executed Dhrystone 2.1 and received results by manually detecting the end of benchmark, receving datas from CSRs.
(There are some possibilities that we've measured wrong performance data) - Now since we've implemented MMIO Interface, we no longer need to receive datas manually, which means the benchmark's result is more reliable than before.
(We now receive outputs by printf function of dhrystone automatically.)
Informations for the core
- Memory Map
IMEM(ROM): 0x0000_0000, 16384; 64KB
DMEM(RAM): 0x1000_0000, 8192; 32KB
UART_TX: 0x1001_0000
UART_TX_STATUS: 0x1001_0004- UART baudrate is 115200, Line break LF (or AUTO)
What's inside?
fpga/- Ready to go FPGA project files for Vivado 2024.2
- Previous v1.0.0's Demo FPGA step-by-step execution debugging project
- New RV32I46F5SP_MMIO_SoC with Dhrystone 2.1 integration. (2000 iterations)
modules/- clk_enable signal excluded core only directory for simulation and various uses.
testbenches/- testbench files for simulating CPU core and submodules in modules/.
- usage: `./test.sh
- To use ./test.sh, iverilog is required.
Performance

46F5SP_MMIO_SoC with RV32I46F_5SP_MMIO core implemented on Digilent Nexys Video FPGA board and ran Dhrystone 2.1.
RV32I46F_5SP_MMIO core implemented 46F5SP_MMIO_SoC was implemented on Digilent Nexys Video board (AMD Xilinx Artix-7 XC7A200T FPGA).
UART baudrate is 115200, line break LF.
FPGA Synthesis and Implementations were done in Vivado 2025.2 and also Vivado 2024.2.
If you are using older version, you can still copy the sources in project file(RV32sDhry_Finale.srcs/) and start a new project or upgrade the Vivado
- 20ns (50 MHz) timing constraints
- Synthesis Strategy : Flow_PerfOptimized_high
- Implementation Strategy : Performance_Explore
Dhrystone performance can be calculated by DMIPS (Dhrystone Million Instructions Per Second).
For standard Dhrystone 2.1 execution, the minimum execution time is 2 seconds.
Thus we've put 300,000 iterations as default without touching the original source code that SiFive Provided, and 2,000 iterations with Too_Small_Time modification on Dhrystone source(Dhry_1.c).
Since we've got the Dhrystones per Second, we can calculate our core's generalized performance through this information.
The proposed performance of RV32I46F_5SP core's dhrystone benchmark is evaluated with the following conditions:
- 2000 iterations settings (with 300,000 iteration)
- 50MHz of timing constraints (20ns, clock cycle speed)
In our settings on Digilent Nexys Video FPGA, we obtained:
-
2,000 iterations : 97,273 Dhrystones per Second
-
300,000 iterations : 97,087 Dhrystones per Second
-
DMIPS (Dhrystone Million Instructions Per Second)
1 DMIPS equals to 1757 Dhrystones Per Second.
- DMIPS/MHz
What's Changed
- [Docs] Update devlog up to 250308 by @T410N in #59
- [Feat] Implement RV32I43F top module and its testbench by @T410N in #60
- Revert "[Feat] Implement RV32I43F top module and its testbench" by @ChoiCube84 in #61
- Update devlog by @ChoiCube84 in #63
- [Docs] Update devlog up to 250328 by @T410N in #66
- [Docs] Update devlog by 250412 by @T410N in #67
- [Docs] Documentation and devlog update by @T410N in #69
- Update devlog by @ChoiCube84 in #71
- [Docs] Update devlog up to 250531 about RV32I46F and RV32I46F_5SP's debugging with implementation by @T410N in #114
- [Docs] Update README and devlog up to 250623 by @T410N in #179
- [Docs] Revise README file and documents guidelines directory structures by @T410N in #180
- [Docs] Revise directory structure by @T410N in #182
- [Feat] Implement RV32I46F_5SP, 46F5SP_SoC design and verify on FPGA by @T410N in #181
- Integrating documentations made into the main branch by @ChoiCube84 in #183
- [Feat] Add fpga directory by adding Dhrystone and Demo FPGA verification Vivado project file by @T410N in #184
- [Docs] Revise guidelines directory by adding annotated_rtl and verify_dhrystone.md by @T410N in #185
- [Docs] Revise README.md by adding performance evaluation and absolute path notification by @T410N in #186
- [Docs] Revise README.md by adding FPGA implementation image by @T410N in #187
- [Docs] Revise basic_rv32s total architecture block diagram by @T410N in #188
- [Docs] Revised README.md by adding RISC-V Learning Resources listings and missing resoureces by @T410N in #189
- [Docs] Revise README text arrangement and table of contents link by @T410N in #190
- [Docs] Update development_log.md's translation from KHWL's raw_devlog by @T410N in #191
- [Docs] Update debug_log.md up to RV32I46F_5SP's Dhrystone benchmark debugging by @T410N in #192
- [Chore] Added Clean RTL codes to guideline by @T410N in #193
- [Feat] Implement MMIO Interface draft and its testbench by @T410N in #194
- [Hotfix] Revised module/ directory's RTL files by removing clk_enable by @T410N in #196
- [Docs] Update development log about MMIO design by @T410N in #197
- Revert "[Feat] Implement MMIO Interface draft and its testbench" by @T410N in #198
- [Feat] Implement MMIO Interface draft and its testbench by @T410N in #199
- [Feat] Revise MMIO_Interface module disabling clk_enable logic by @T410N in #200
- [Feat] Revise Forward Unit about Store hazard forwarding logic by @T410N in #201
- [Feat] Revsie Hazard Unit about store hazard detection by @T410N in #202
- [Feat] Revsie Data Memory address bit width 10-bit to 32-bit XLEN by @T410N in #203
- [Feat] Revise MMIO Interface removing clk_enable logic and its testbench by @T410N in #204
- [Feat] Revise Instruction Memory adding UART MMIO interface testing scenarios by @T410N in #205
- [Feat] Revise Hazard Unit removing legacy code about load hazard logic by @T410N in #206
- [Feat] Revise CSR File about implementing mcycle and minstret CSR and its testbench by @T410N in #207
- [Feat] Revise CSR File mcycle minstret logic with permission level and its testbench by @T410N in #208
- [Feat] Revise Control Unit pc_stall logic by @T410N in #209
- [Feat] Add RV32I46F_5SP_MMIO TOP module draft and its testbench by @T410N in #210
- [Feat] Implement 46F5SP_MMIO_SoC by @T410N in #211
- [Feat] Revise Branch Logic misprediction target calculation logic and its testbench by @T410N in #212
- [Feat] Revise RV32I46F_5SP_MMIO's module instanciation order for better vivado source browsing by @T410N in #213
- [Feat] Revise Byte Enable Logic Load operation's data offset and its testbench by @T410N in https...
[46F_5SP] Release v1.0.0
RV32I46F_5SP_SoC release v1.0.0
The very first release of basic_rv32s core design.
RV32I46F_5SP core design's signal-level block diagram.
46F5SP_SoC's signal-level block diagram.
What's included?
- RV32I46F_5SP and its submodules' main core RTL code written in verilog.
- Testbench source codes for each modules in core design.
- Testbench results with
vvpandvcdfiles.
RV32I46F_5SP's top module testbench scenario is integrated in core memories. - 46F5SP_SoC top module which integrates RV32I46F_5SP core with GPIO and benchmark controllers.
- Note that
source code.zipprovides the whole assets, attachedRV32I46F_5SP_SoC.zipcontains only RV32I46F_5SP and 46F5SP_SoC with testbenches.
What is this?
FPGA synthesizable RTL source codes of RV32I 5-Stage Pipelined processor RV32I46F_5SP and its SoC configuration modules.
You can simply run behavior simulation with iverilog and see waveforms via GTKwave or Sufer project.
In FPGA, you can debug the core module by interacting with buttons and watching the result by LEDs and UART TX communication. (115200baud)
- Up button for continuous / sequential execution mode toggle.
- Center button for next instruction (clk enable).
- Down button for current pc value and instruction value.
- Left button for register write address and register write value at WB stage.
- Right button for ALU result in EX stage.
These GPIO settings can be modified at the Button Controller and DebugUARTController module.
For FPGA project in Vivado, get Package release for setup the environment with .xpr project file.
What's Changed
- RV32I to PowerISA Implementation by @T410N in #1
- Added explanations on how to use git commands by @ChoiCube84 in #2
- ALU and its testbench for RV32I by @ChoiCube84 in #3
- Delete goorm.manifest file and add .gitignore file by @ChoiCube84 in #4
- Docs update by @T410N in #5
- Add Program Counter module and Revise testbench for ALU by @ChoiCube84 in #6
- Synchronizing develop branch with main branch by @ChoiCube84 in #7
- Merge pull request #7 from RISC-KC/main by @ChoiCube84 in #8
- Add Instruction Decoder module and its testbench by @ChoiCube84 in #9
- Updating main branch by @ChoiCube84 in #10
- Update Dev Log update, adding ISA and module explanation by @ChoiCube84 in #11
- Implement basic structure of pc_controller module by @ChoiCube84 in #12
- Implement basic structure of register file module by @ChoiCube84 in #13
- ALU Control module complete by @ChoiCube84 in #14
- Revise Instruction Decoder module and its testbench by @ChoiCube84 in #15
- [Docs] Development Logs Update, Documents structure composition. by @T410N in #16
- Revise ALU Control module and its testbench by @ChoiCube84 in #17
- Add trap handling in PC Controller and testbench by @ChoiCube84 in #18
- Implement testbenches for Program Counter and Register File by @ChoiCube84 in #19
- Six modules implemented and tested by @ChoiCube84 in #20
- Add chain of thought file (development log) by @ChoiCube84 in #21
- Implement Immediate Generator module and its testbench by @ChoiCube84 in #22
- Revise ALU Control module to also cover the store instructions by @ChoiCube84 in #23
- Implement PCPlus4 module and its testbench by @ChoiCube84 in #24
- Implement Instruction Memory module and its testbench by @ChoiCube84 in #25
- 2025-01-30 devlog by @ChoiCube84 in #26
- Implement Branch Logic module and its testbench by @ChoiCube84 in #27
- Revise PC Controller to calculate target address for branch by itself by @ChoiCube84 in #28
- 2025-01-31 devlog by @ChoiCube84 in #29
- Add Datapath verification and revise RV32I47F.R1 to R7v2 by @T410N in #30
- 2025-02-01 devlog by @ChoiCube84 in #31
- 2025-02-04 devlog by @ChoiCube84 in #33
- Implement Byte Enable Logic and its testbench by @ChoiCube84 in #32
- Update devlog by @ChoiCube84 in #34
- Implement Exception Detector module and its testbench by @ChoiCube84 in #35
- Update devlog by @ChoiCube84 in #36
- Update devlog by @ChoiCube84 in #37
- Update RESEARCH and Development logs by @T410N in #38
- Update devlog by @ChoiCube84 in #39
- Update devlog by @ChoiCube84 in #40
- Implement Control Unit module and its testbench by @ChoiCube84 in #41
- Prepare core modules for simplified top module implementation by @ChoiCube84 in #42
- Update devlog by @ChoiCube84 in #43
- Revise PC Controller module to not change pc value when write_done signal is false by @ChoiCube84 in #44
- Update devlog by @ChoiCube84 in #45
- Update devlog by @ChoiCube84 in #46
- Implement Data Memory module and its testbench by @ChoiCube84 in #47
- Add Data Memory module to RV32I37F top module by @ChoiCube84 in #48
- Update devlog by @ChoiCube84 in #49
- [Docs] Update Devlog, CSR Listings by @T410N in #50
- Update devlog by @ChoiCube84 in #51
- [Docs] Update Devlog and Initialized Cache-memory Structure manual by @T410N in #52
- [Docs]Update Devlog 250226 to 250302 by @T410N in #53
- RV32I37F top module by @ChoiCube84 in #54
- Implement CSR File and its testbench by @T410N in #55
- Update devlog by @ChoiCube84 in #56
- Implement RV32I37F top module and CSR File module by @ChoiCube84 in #57
- Update devlog and RV32I37F verification log 250303 by @T410N in #58
- [Feat] Implement RV32I43F top module and its testbench by @T410N in #62
- Implement Instruction Cache and its testbench by @ChoiCube84 in #64
- Revise Data Memory module by @ChoiCube84 in #65
- Revise Data Memory to return data in 8 word chunk by @ChoiCube84 in #68
- Implement Data Cache module by @ChoiCube84 in #70
- [Feat] Implement Trap Controller and its testbench by @T410N in #73
- [Feat] Correct rst signal to reset signal by @T410N in #74
- Draft implementation of RV32I46F.v and its testbench by @T410N in #75
- [Feat] Implement RV32I46F test scenario in Intruction Memory and its testbench by @T410N in #76
- [Feat] Update TC about trap_done signal by @T410N in #77
- [Feat] Debugging RV32I46F 01 by @T410N in #78
- [Feat] Debug Trap Controller PTH 1CLK delay by @T410N in #79
- [Feat] modify wrong data value in instruction memory data 1024 by @T410N in #83
- [Feat] implement pcc micro opcode for next_pc race issue by @T410N in #84
- [Feat] implement PCC micro opcode for next_pc race issue by @T410N in #80
- [Feat] Modified logic to detect source value of next_pc signal in advance by @T410N in https://github.com/RI...