【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

这篇具有很好参考价值的文章主要介绍了【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、FPGA板卡的介绍

核心板:GW2A-LV18PG256C8IC8I7

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

底板:Dock底板

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

有关核心板和底板相关资料的参考网址:Tang Primer 20K - Sipeed Wiki 

FPGA硬件设计软件:高云云源软件;下载地址:广东高云半导体科技股份有限公司

二、PicoRV32 

PicoRV32描述,以及文档介绍详情见网址PicoRV32 - 高云 - 广东高云半导体科技股份有限公司 

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

我们使用的PicoRV32的系统架构如下图所示

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

 三、移植到FPGA

1、时序约束

由于官方给的例程是基于DK_START_GW2A-LV18PG256C8I7_V2.0 开发板,该开发板板载的晶振为50MHz。开发板如下图

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

而对于我们手中的Tang prime 20k,板载的晶振为27MHz,时许的约束需要改。具体如下

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

 2、管脚约束

如果仅仅测试该软核是否移植成功,仅需要修改时钟、复位及中断按键、led灯以及UART串口的对应管脚。

①时钟管脚

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

//System clock
IO_LOC "clk_in" H11;
IO_PORT "clk_in" IO_TYPE=LVCMOS33;

 ②复位及中断按键 

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

//System reset
IO_LOC "resetn_in" T3;//KEY_4
IO_PORT "resetn_in" IO_TYPE=LVCMOS15;

//External Interrupt
IO_LOC "irq_in[0]" T2;//KEY_1
IO_LOC "irq_in[1]" D7;//KYE_2
IO_PORT "irq_in[0]" IO_TYPE=LVCMOS15;
IO_PORT "irq_in[1]" IO_TYPE=LVCMOS15;

 ③LED灯

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

//LED
IO_LOC "gpio_io[0]" L16;//LED1
IO_LOC "gpio_io[1]" L14;//LED2
IO_LOC "gpio_io[2]" N14;//LED3
IO_LOC "gpio_io[3]" N16;//LED4
IO_PORT "gpio_io[0]" IO_TYPE=LVCMOS33;
IO_PORT "gpio_io[1]" IO_TYPE=LVCMOS33;
IO_PORT "gpio_io[2]" IO_TYPE=LVCMOS33;
IO_PORT "gpio_io[3]" IO_TYPE=LVCMOS33;

④UART串口

//WB UART
IO_LOC "wbuart_tx" M11;//J4_5
IO_LOC "wbuart_rx" T13;//J4_6
IO_PORT "wbuart_tx" IO_TYPE=LVCMOS33;
IO_PORT "wbuart_rx" IO_TYPE=LVCMOS33;

PS:关于为何使用WB UART而不使用simple UART可以参考软核的程序 

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

3、下载到板卡

由于我们采用的下载方式为“软件编程设计产生映像文件,作为硬件设计中指令存储器 ITCM 的初 始值”。下载流程如下图所示:

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

所以我们需要将生产的十六进制的hex映像文件加入到IP核中。

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

四、软件相关 

编程软件:GOWIN MCU Designer V1.1.01教育版

下载地址:广东高云半导体科技股份有限公司

只需要修改picorv32.h中的时钟频率即可,将原本的50MHz改为27MHz

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

五、现象 

连接好串口,波特率设置为115200。

板卡上的现象是四个LED灯轮流闪烁,并且串口打印数值符合main.c中的程序

【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植

串口打印的结果如代码块所示



------------- Gowin RiscV MCU <PicoRV32> Demo ----------------



MCU boot from and run in ITCM.



Open Wishbone interface demo beginning...

Wishbone extension demo, write and read back the three registers on the open Wishbone interface

Before write Wishbone demo register:

Reg0: 22222222

Reg1: 2222

Reg2: 22

After write Wishbone demo register:

Reg0: 33333333

Reg1: 3333

Reg2: 33

Open Wishbone interface demo finished.	// main.c(wbreg_demo)



Open AHB bus interface demo beginning...

ahbreg0 is  01234567

ahbreg1 is 89abcdef

Open AHB bus interface demo finished.	//main.c(ahbreg_demo)



Wishbone SPI-Flash demo beginning...

Read data by memory map mode from flash...

ffffffff ffffffff ffffffff ffffffff ffffffff c3a5ffff 00000006 1b080000 00000010 00000000 ffff0051 ffffffff 0000000b ffff00d2 00000000 00000012 3e08803b 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 08000000 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10080000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001400 00000000 00000000 00000000 00000000 00000000 00103000 00000000 00000000 00000008 00001030 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 03000000 00000001 

Read initialized data from flash...

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 

Erase flash...

Read data after erase flash...

ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 

Page program data...

Read data after page program flash...

00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 

Read data by memory map mode from flash...

03020100 07060504 0b0a0908 0f0e0d0c 13121110 17161514 1b1a1918 1f1e1d1c 23222120 27262524 2b2a2928 2f2e2d2c 33323130 37363534 3b3a3938 3f3e3d3c 43424140 47464544 4b4a4948 4f4e4d4c 53525150 57565554 5b5a5958 5f5e5d5c 63626160 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 

Wishbone SPI-Flash demo finished.	//main.c(spi_flash_demo)



Wishbone GPIO output demo beginning...

Please check the LED running status on board

LED running: 1

LED running: 2

LED running: 3

LED running: 4

LED running: 5

LED running: 6

LED running: 7

LED running: 8

LED running: 9

LED running: 10

LED running: 11

LED running: 12

LED running: 13

LED running: 14

LED running: 15

LED running: 16

LED running: 17

LED running: 18

LED running: 19

LED running: 20

Wishbone GPIO output demo finished.
Wishbone UART rx demo beginning...

Receive a byte from uart rx port

  当通过串口调试助手给板卡发送任意一个字节的数据时,现象为

-------------------------------------

Running status: 

Cycle counter ........: 2045557224

Instruction counter ..: 319375636

CPI: 6.08

-------------------------------------	//stats(in firmware)





Enter WBUART RX interrupt...

Receive a byte in WBUART RX interrupt : a



Enter timer interrupt...

Timer interrupt counter :        0



Enter timer interrupt...

Timer interrupt counter :        1



Enter timer interrupt...

Timer interrupt counter :        2



Enter timer interrupt...

Timer interrupt counter :        3



Enter timer interrupt...

Timer interrupt counter :        4



Enter timer interrupt...

Timer interrupt counter :        5

 后续不断计数,并且可以测试两个中断的按键,显示如下文章来源地址https://www.toymoban.com/news/detail-407317.html

Enter timer interrupt...

Timer interrupt counter :       41



Enter timer interrupt...

Timer interrupt counter :       42



Press button 1, enter an external interrupt 20...

Interrupt 20 is triggered by button 1



Enter timer interrupt...

Timer interrupt counter :       43



Enter timer interrupt...

Timer interrupt counter :       44



Enter timer interrupt...

Timer interrupt counter :       45



Enter timer interrupt...

Timer interrupt counter :       46



Enter timer interrupt...

Timer interrupt counter :       47



Enter timer interrupt...

Timer interrupt counter :       48



Enter timer interrupt...

Timer interrupt counter :       49



Enter timer interrupt...

Timer interrupt counter :       50



Press button 2, enter an external interrupt 21...

Interrupt 21 is triggered by button 2



Enter timer interrupt...

Timer interrupt counter :       51



Enter timer interrupt...

Timer interrupt counter :       52



Enter timer interrupt...

Timer interrupt counter :       53



Enter timer interrupt...

Timer interrupt counter :       54



Enter timer interrupt...

Timer interrupt counter :       55



Enter timer interrupt...

Timer interrupt counter :       56



Enter timer interrupt...

Timer interrupt counter :       57

到了这里,关于【RISC-V】基于开源RISC-V MCU内核PicoRV32的FPGA移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 读书·基于RISC-V和FPGA的嵌入式系统设计

    引言:第八届集成电路创新创业大赛龙芯杯是有关嵌入式SoC设计的         由于我本身是做纯硬件设计,此前没怎么接触软硬协同         玩过Zynq,但是到SDK部分就去吃灰了         现在后悔了,所以,做人一定要有始有终啊~TAT ------------------------------------------------------

    2024年03月17日
    浏览(38)
  • 【基于FPGA的芯片设计】RISC-V的20条指令CPU设计

    实验板卡 :xc7a100tlc sg324-2L,共20个开关 实验要求:          

    2024年02月16日
    浏览(32)
  • RISC-V/ARM mcu OpenOCD 调试架构解析

    最近有使用到risc-v的单片机,所以了解了下risc-v单片机的编译与调试环境的搭建,面试时问到risc-v的调试可参看以下内容。 risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上调试器)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫

    2024年04月28日
    浏览(23)
  • 强化自主可控,润开鸿发布基于RISC-V架构的开源鸿蒙终端新品

    2023 RISC-V中国峰会于8月23日至25日在北京召开,峰会以“RISC-V生态共建”为主题,结合当下全球新形势,把握全球新时机,呈现RISC-V全球新观点、新趋势。本次大会邀请了RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇,吸引超过百余家业界企业、高

    2024年02月11日
    浏览(42)
  • 体验开源香山高性能开源 RISC-V 处理器

    香山处理器是乱序六发射结构设计,目前支持 RV64GCBK 扩展。香山处理器前端流水线包括分支预测单元、取指单元、指令缓冲等单元,顺序取指。后端包括译码、重命名、重定序缓冲、保留站、整型/浮点寄存器堆、整型/浮点运算单元。 https://xiangshan-doc.readthedocs.io/zh-cn/latest/

    2024年01月23日
    浏览(39)
  • RISC-V架构的开源处理器分析

    摘要: RISC-V架构本身面积小、性能较高,最为关键的是这一架构本身功耗较低且作为全新的开源精简指令集,无论是技术还是产品都得到了迅速的发展,效果突出。基于此,本文深入研究RISC-V架构开源处理器内部情况,明确不同模块的功能以及运行方式,并且围绕着实际案例

    2024年02月06日
    浏览(32)
  • RISC-V单板计算机模拟和FPGA板多核IP实现

    🎯使用单板计算机 Visionfive 2 或模拟器测试RISC-V汇编 🎯RISC-V汇编加载和算术。🎯使用GNU MAKE汇编RISC-V指令,ESP32使用CMake编译执行指令。🎯RISC-V汇编功能和使用释义:控制指令,内存管理,功能块和堆栈。 🎯 使用RISC-V汇编代码控制GPIO。🎯RISC-V汇编指令嵌入C 代码,C代码调

    2024年04月12日
    浏览(21)
  • 【risc-v】易灵思efinix FPGA riscv嵌入式软件源码分享

    分享一些fpga内使用riscv软核的经验,共大家参考。后续内容比较多,会做成一个系列。 本系列会覆盖以下FPGA厂商  易灵思 efinix  赛灵思 xilinx  阿尔特拉 Altera 本文内容隶属于【易灵思efinix】系列。 【risc-v】易灵思efinix FPGA sapphire_soc IP配置参数分享-CSDN博客 【risc-v】易灵思

    2024年01月19日
    浏览(42)
  • 加速开发RISC-V开源软件,Linux基金会启动RISE项目

    使用RISC-V架构为移动、消费电子、数据中心和汽车等领域提供商用软件。 Linux软件基金会在官博宣布了RISC-V软件生态系统 RISE,该项目由Linux Foundation Europe托管,并支持RISC-V International的全球开放标准活动和成就。 官网:https://riseproject.dev/ RISE项目专注于商业软件的准备工作,

    2024年02月08日
    浏览(52)
  • 【开源鸿蒙】编译OpenHarmony轻量系统QEMU RISC-V版_鸿蒙hb set 命令

    QEMU是一款开源的虚拟机监控程序,可模拟多种硬件环境,并支持多种处理器架构。它能够在不同平台上实现虚拟化,运行各种操作系统。QEMU具有高度的灵活性和可移植性,被广泛用于开发、测试和部署虚拟化环境。 二、准备OpenHarmony源代码 开始之前,需要准备: Ubuntu 系统

    2024年04月23日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包