# FPGA based MCU Design **Repository Path**: lanzhoo/fpga-based-mcu-design ## Basic Information - **Project Name**: FPGA based MCU Design - **Description**: 使用Verilog语言设计RISC-V MCU的入门引导,提供了若干简单的MCU原型,自编简单step-by-step RISC-V Core,基于高云FPGA芯片(9k&20k),软件程序使用MounRiver IDE及gcc toolchain开发,OpenOCD下载。 - **Primary Language**: Verilog - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-09-27 - **Last Updated**: 2026-01-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FPGA based MCU Design ## 简介 使用Verilog语言设计RISC-V MCU的入门引导,提供了若干简单的MCU原型,自编简单step-by-step RISC-V Core,基于高云FPGA芯片(9k&20k),软件程序使用MounRiver IDE及gcc toolchain开发,OpenOCD下载。 请首先阅读doc目录下的“Nano9k_MCU_上手_v01.pdf”和“Primer20k_MCU_上手_v01.pdf”了解开发环境的搭建。 注:上传工程代码时删除了.gprj.user和impl子目录,因此,初始打开工程时,都需要先修改“Project/Configuration”: - 设置顶层模块:“Synthesize”页的“Top Module/Entity”栏输入“top”; - 勾选重用功能的引脚:在“Place&Route/Dual-Purpose Pin”页勾选SSPI、READY和DONE。 ### MCU原型简介 #### 内核版本 zh_core_v01.v:支持运算指令、跳转指令、LOAD/STORE指令。 zh_core_v011.v:zh_core_v01.v的基础上,增加halt端口。 zh_core_v02.v:支持运算指令、跳转指令、LOAD/STORE指令、CSR指令、MRET指令。包含halt端口和外部中断端口;支持中断和中断CSR、定时器CSR和软件中断CSR; zh_core_v03.v:在zh_core_v02.v的基础上,增加自定义指令的演示(实现跑马灯); #### 存储器版本 zh_rom_async_v01.v:单口ROM,静态异步读。通过代码文件设置初始化内容(32bit/地址单元)。 zh_dprom_async_v01.v:双口ROM,静态异步读。双只读端口。通过代码文件设置初始化内容(8bit/地址单元)。 zh_dprom_v01.v:双口ROM,同步读。双只读端口。通过代码文件设置初始化内容(8bit/地址单元)。 zh_dprom_v02.v:双口ROM,同步读写。端口A为只读端口,端口B为读写端口。端口B的地址锁存时钟与写时钟分开。不带wmask。通过代码文件设置初始化内容(8bit/地址单元)。 zh_sram_async_v01.v:RAM,静态异步读,同步写。带wmask。 zh_sram_v01.v:RAM,同步读写。地址锁存时钟与写时钟分开。带wmask。 #### MCU原型版本 9k_mcu01_mycore01:zh_core_v01;zh_dprom_async_v01,zh_sram_async_v01;不支持中断;无JTAG;27MHz; 9k_mcu01a_mycore01:zh_core_v01;zh_dprom_v01,zh_sram_v01;不支持中断;无JTAG;32MHz; 9k_mcu02_mycore01:zh_core_v011;zh_dprom_v02,zh_sram_v01;不支持中断;带JTAG;16MHz; 9k_mcu02_mycore02:zh_core_v02;zh_dprom_v02,zh_sram_v01;支持中断;带JTAG;16MHz; 20k_* 同上 20k_mcu01a1_mycore03:zh_core_v03;不支持中断;无JTAG;32MHz;自定义指令例子; #### Step-By-Step Core设计演示版本(无外设) 20k_core:仅支持两条指令的Core;led接Core x16; 9k_mycore_v002:仅支持OP_IMM, OP, JAL, BRANCH group指令的Core;静态异步ROM(zh_rom_async_v01);led接Core x16; 9k_mycore_v003:v002基础上,增加RAM和LOAD/STORE指令;单口ROM改为双口ROM(zh_dprom_async_v01);zh_sram_async_v01; #### 引入第三方core:蜂鸟e203 step1:20k_e902:蜂鸟e203 Core;简单ROM仅包含两条指令;led接寄存器x1; step2: 20k_mcu01a_e203:前述mcu01a框架上替换使用蜂鸟e203 Core; #### 更多外设设计例子 20k_buzzer:无源蜂鸣器发声;包含方波和pwm DAC两种实现例子; 20k_pwm01:pwm例子1,led呼吸灯; 20k_pwm02:pwm例子2,舵机控制; ### 学习指引 教程主要分三大部分: 1. 怎样使用MCU原型进行编程; 2. 怎样设计外设; 3. 怎样逐步设计Core; 参考doc目录下的ppt。 (待续)