【【手把手教你实现Risc-V装载至FPGA】】

RiscV实现教程
参考来源
tinyriscv: https://gitee.com/liangkangnan/tinyriscv
平台实现 : Linux ubuntu 实现介绍

在这里插入图片描述

环境 : 需要 iverilog (切换到 v11或以上的版本)
1.下载iverilog源码

git clone https://github.com/steveicarus/iverilog.git

2.切换到v11分支(必须用V11或以上的版本)

git checkout v11-branch

3.安装依赖

sudo apt-get install autoconf gperf flex bison build-essential

在这里插入图片描述

4.编译、安装iverilog和vvp

sh autoconf.sh
./configure
make
make i
nstall

5.创建python软链接

sudo ln -s /usr/bin/python3.8 /usr/bin/python

其中/usr/bin/python3.8对应你实际安装的python版本。
在这里插入图片描述

这是大概的环境实现教程 我记得在 python 软连接上面需要注意 ,我pyhton下载的有 2 3 版本,但是内部链接的是2 所以 需要先进入 管理员模式把 python 2 的软连接删除再进行 重新链接新的3系列软连接
注意!!! 一定要确认python 软连接是否正确 不然会在下面的验证中出错

6.安装gtkwave

sudo apt-get install gtkwave

7.安装GNU工具链
可以从百度网盘下载(链接:https://pan.baidu.com/s/10uLZYf_cgtH94kZI_N6JhQ 提取码:uk0w)或者自行下载其他版本的,下载后解压到tools目录下。
最后,需要确认tests/example/common.mk文件里的这几行内容要与你安装的工具链对应得上。
我建议是百度网盘下载 嘿嘿

然后用git把工程拉近linux 下 git clone https://gitee.com/liangkangnan/tinyriscv.git

进入之后,进入文件夹的sim下列
在终端执行 python .\sim_new_nowave.py ..\tests\isa\generated\rv32ui-p-add.bin inst.data
会出现大大的pass
指令的全部测试 输入 python ./test_all_isa.py

下面进入 C语言的运行
进入 tests\example 下的文件夹 的simple
其实后面的gpio uart_rx uart_tx 都是写好的c程序 这次我们在linux上只实现 simple 的测试

因为已经有Makefile文件了 我们现在进入 在终端输入make 发现可能会报错
是因为
在这里插入图片描述
在这里插入图片描述

第一行是我们把下载的工具链放在哪里了
在这里插入图片描述

后面是修改工具链的来源

1
2 RISCV_PATH := $(TOOLCHAIN_DIR)/tools/riscv64-unknown-elf-gcc-8.3.0-2020.04.0    -x86_64-linux-ubuntu14/
3
4 RISCV_GCC     := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-gcc)
5 RISCV_AS      := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-as)
6 RISCV_GXX     := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-g++)
7 RISCV_OBJDUMP := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-objdump)
8 RISCV_GDB     := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-gdb)
9 RISCV_AR      := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-ar)
10 RISCV_OBJCOPY := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-objcopy)
11 RISCV_READELF := $(abspath $(RISCV_PATH)/bin/riscv64-unknown-elf-readelf)
12
13 .PHONY: all
14 all: $(TARGET)
15
16 ASM_SRCS += $(COMMON_DIR)/start.S
17 ASM_SRCS += $(COMMON_DIR)/trap_entry.S
18 C_SRCS += $(COMMON_DIR)/init.c
19 C_SRCS += $(COMMON_DIR)/trap_handler.c
20 C_SRCS += $(COMMON_DIR)/lib/utils.c
21 C_SRCS += $(COMMON_DIR)/lib/xprintf.c
22 C_SRCS += $(COMMON_DIR)/lib/uart.c
<inyriscv/tests/example(复件)/common.mk" 57L, 1929C           1,0-1        顶端

修改之后再make就完成了
编译得到bin文件再在 sim 目录里 输入
python .\sim_new_nowave.py ..\tests\example\simple\simple.bin inst.data 即可
注意在Linux 下运行把这样的下划线改成/
最后出来的成功图片是pass
在这里插入图片描述

注意点 : 运行的时候确保自己的python的软链接无误
生成的.vcd文件 我们可以通过GTKWave来打开

在这里插入图片描述

移植到FPGA
移植到FPGA 需要购买一个下载器
CMSIS-DAP 用的是 jtag 的形式
我购买的是 UART下载的方式
【淘宝】https://m.tb.cn/h.5pXZXZh3DoyfPAx?tk=OvF8W6t8xN8 CZ0001 「usb转ttl usb转串口下载线ch340g模块rs232升级板刷机线板PL2303」
点击链接直接打开 或者 淘宝搜索直接打开
我买的是那个8.52元的 土豪金版本
其实下载到无所谓 但是RISC V仅支持JTAG调试 调试还是换JTAG吧
移植的板卡型号是正点原子达芬奇开发板——Xilinx A7系列 xc7a35tfgg484-2—vivado使用的是2019.1

在执行前 将 整个rtl文件夹 拉入 file中
在这里插入图片描述

最重要的是板卡不同的管脚约束问题
我们移植到的达芬奇开发板LED必须输出高电平才能点亮LED灯,在源码中over等三个我们将其绑定至LED灯上
而TinyRisc-V的LED灯是低电平 所以我们需要修改源码,将其变为高电平。
在顶层里修改
在这里插入图片描述

修改之后使其能够正常点灯
在这里插入图片描述

接下来修改串口tx和 rx信号引脚绑定
这里想要说明的是 其实绝大部分都可以绑定空的引脚,但是一定要绑定,不绑定过不了验证。 我们想要实现某些功能,让它表现出来,最好的办法就是输出在LED灯上。
由于达芬奇开发板没有拨码和自锁开关,并且未按下时按键端口输出高电平,按下时输出低电平。因为这里是高电位启动,所以我们需要修改代码,绑定至key0

在这里插入图片描述

修改后为
在这里插入图片描述

uart_tx_pin 与 uart_rx_pin 绑定至任意管脚 无需修改

AB6           V7


GPIO[0] 接入  F16
 GPIO[1]  接入 F15

jtag_TCK     AA8
jtag_TMS   AB8
jtag_TDI     Y7
jtag_TDO   Y8
spi_miso  F14
spi_mosi   F13
spi_ss     E13
spi_clk  E14

下面展示完整的管脚约束

# 时钟约束50MHz,占空比50%
create_clock -add -name sys_clk_pin -period 20.00 -waveform {0 10} [get_ports {clk}];

# 时钟引脚
set_property -dict { PACKAGE_PIN R4 IOSTANDARD LVCMOS33 } [get_ports {clk}]; 

# 复位引脚
set_property -dict { PACKAGE_PIN U2 IOSTANDARD LVCMOS33 } [get_ports {rst}]; 

# 程序执行完毕指示引脚,over 为1时有效,点亮led0
set_property -dict { PACKAGE_PIN R2 IOSTANDARD LVCMOS33 } [get_ports {over}]; 

# 程序执行成功指示引脚,succ 为1时有效,点亮led1
set_property -dict { PACKAGE_PIN R3 IOSTANDARD LVCMOS33 } [get_ports {succ}]; 

# CPU停住指示引脚,halted_ind 为1时有效,点亮led2
set_property -dict { PACKAGE_PIN V2 IOSTANDARD LVCMOS33 } [get_ports {halted_ind}]; 

# 串口下载使能引脚,由于没有拨码开关和自锁开关,所以绑定到key0上,key0按住不放时才使能串口下载
set_property -dict { PACKAGE_PIN T1 IOSTANDARD LVCMOS33 } [get_ports {uart_debug_pin}]; 

# 串口发送引脚
set_property -dict { PACKAGE_PIN AB6 IOSTANDARD LVCMOS33 } [get_ports {uart_tx_pin}]; 

# 串口接收引脚
set_property -dict { PACKAGE_PIN V7 IOSTANDARD LVCMOS33 } [get_ports {uart_rx_pin}]; 

# GPIO0引脚
set_property -dict { PACKAGE_PIN F16 IOSTANDARD LVCMOS33 } [get_ports {gpio[0]}]; 

# GPIO1引脚
set_property -dict { PACKAGE_PIN F15 IOSTANDARD LVCMOS33 } [get_ports {gpio[1]}]; 

# JTAG TCK引脚  PortA 0
set_property -dict { PACKAGE_PIN AA8 IOSTANDARD LVCMOS33 } [get_ports {jtag_TCK}]; 

create_clock -name jtag_clk_pin -period 300 [get_ports {jtag_TCK}];
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets jtag_TCK]


# JTAG TMS引脚 PortA 3
set_property -dict { PACKAGE_PIN AB8 IOSTANDARD LVCMOS33 } [get_ports jtag_TMS]; 

# JTAG TDI引脚 PortA 1
set_property -dict { PACKAGE_PIN Y7 IOSTANDARD LVCMOS33 } [get_ports {jtag_TDI}]; 

# JTAG TDO引脚 PortA 2
set_property -dict { PACKAGE_PIN Y8 IOSTANDARD LVCMOS33 } [get_ports jtag_TDO]; 

# SPI MISO引脚
set_property -dict { PACKAGE_PIN F14 IOSTANDARD LVCMOS33 } [get_ports {spi_miso}]; 

# SPI MOSI引脚
set_property -dict { PACKAGE_PIN F13 IOSTANDARD LVCMOS33 } [get_ports {spi_mosi}]; 

# SPI SS引脚
set_property -dict { PACKAGE_PIN E13 IOSTANDARD LVCMOS33 } [get_ports {spi_ss}]; 

# SPI CLK引脚
set_property -dict { PACKAGE_PIN E14 IOSTANDARD LVCMOS33 } [get_ports {spi_clk}]; 

#SPI 相关设置
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property BITSTREAM.CONFIG.UNUSEDPIN PULLUP [current_design]

因为我仅仅在windows上运行
所以我 只安装了python 环境 用脚本驱动 在linux下编译
首先
回到unbuntu 打开 tests/example 做一个串口发送的实验
在uart_tx下 make 其实最好修改一下main.c 让它一直跑 不然看不太到实验效果
在这里插入图片描述

make得到bin 文件
在这里插入图片描述

我会把bin文件复制到 windows下 嘿嘿
接下来
打开windows自带的powershell
进入 存放这个工程包tools的地方 我们要启动 python脚本了
因为tools下有 python的脚本
在这里插入图片描述

然后运行
python .\tinyriscv_fw_downloader.py COM3 D:\Competition\Data\TinyRisc-v\bin\uart_tx.bin
python tinyriscv_fw_downloader.py 串口号 bin文件
COM3是连接的串口号 后面是bin存放地方
打开串口助手 会看到hello world 一直在发送
实验完成
成功标志如下所示
在这里插入图片描述

在这里插入图片描述

RXD 接AB6
TXD 接V7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674049.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

zookeeper启动(一)

1.zookeeper启动入口 在zkServer.sh的启动命令中,我们可以找到zookeeper启动的关键类org.apache.zookeeper.server.quorum.QuorumPeerMain QuorumPeerMain#main 我们可以直接看org.apache.zookeeper.server.quorum.QuorumPeerMain中的main方法,从下面的main方法中,我们可以…

收银系统源码-千呼新零售2.0【线上商城商品详情页细节优化】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看下…

媳妇面试了一家公司,期望月薪20K,对方没多问就答应了,只要求3天内到岗,可我总觉得哪里不对劲。

“20k&#xff01;明天就来上班吧&#xff01;” 听到这句话&#xff0c;你会不会两眼放光&#xff0c;激动得差点跳起来&#xff1f; 朋友媳妇小丽&#xff0c;最近就经历了这样一场“梦幻面试”。然而&#xff0c;事情的发展却远没有想象中那么美好…… “这公司也太好了吧…

python udp双向通信

import json import socket import threading import loggingthislist [] thisneednum {}class ChatUdpMain:def __init__(self):#其他原有逻辑 begin#其他原有逻辑 end# 1.创建socket套接字 收self.udp_socket_receive socket.socket(socket.AF_INET, socket.SOCK_DGRAM…

Cocos入门2:软件安装

Cocos Creator的安装教程如下&#xff0c;按照步骤进行&#xff0c;可以帮助您顺利安装Cocos Creator&#xff1a; 一、下载Cocos Dashboard 访问Cocos官网&#xff1a;前往Cocos Creator的官方网站&#xff08;https://www.cocos.com/creator/&#xff09;。 下载Cocos Dash…

arco design表单label和输入框的空间分布

表单空间分布 arco利用的栅格系统来实现label、input的大小分布 <a-form :model"formData.form" :label-col-props"{ span: 6 }" :wrapper-col-props"{ span: 18 }" >// 其它...... </a-form>栅格系统中&#xff0c;默认空间总量2…

ES6-01-简介

一、什么是ES6&#xff1f; 每年一个版本o(╥﹏╥)o。 二、javaScript新特性的特点 1、语法简洁&#xff0c;功能丰富&#xff1b; 2、框架开发应用。 3、岗位需求&#xff01; 三、let关键字 3-1、声明变量 let a;let a,b;let e100;let f521, gmilk-love, h[]; 3-2、声明的…

6FC5357-0BB22-0AE0处理器CPU模块单价

6FC5357-0BB22-0AE0处理器CPU模块单价 6FC5357-0BB22-0AE0处理器CPU模块单价 6FC5357-0BB22-0AE0处理器CPU模块单价 6FC5357-0BB22-0AE0处理器CPU模块中文说明书 6FC5357-0BB22-0AE0处理器CPU模块工作原理图 商品编号(市售编号) 6FC5357-0BB22-0AE0 产品说明 ***备件**…

高中数学:解三角形-三角变换法

一、三角变换法 三角变换法&#xff0c;就是&#xff0c;在解三角形的过程中&#xff0c;将正弦定理和余弦定理结合两角和与差公式来解答题目 二、练习 例题1 解析 题目中的第二个等式&#xff0c;我们应该是一眼看出来&#xff0c;用余弦定理&#xff0c;求出cosA的值。从…

深入分析 Android BroadcastReceiver (二)

文章目录 深入分析 Android BroadcastReceiver (二)1. 深入理解 BroadcastReceiver 的高级使用和优化2. 有序广播&#xff08;Ordered Broadcasts&#xff09;2.1 实现有序广播 3. 粘性广播&#xff08;Sticky Broadcasts&#xff09;3.1 使用粘性广播 4. 本地广播&#xff08;…

国产QX320F280049,双核对比TI的 C28X+CLA,谁的处理能力更强

国产QX320F280049&#xff0c;独立双核32位CPU&#xff0c;主频150MHz 每个核都有TMU&#xff0c;FPU&#xff0c;VCU等运算 16个高分辨率HRPWM&#xff08;150PS&#xff09; 3个12位ADC&#xff0c;采样率3MSPS TI的 TMS320F280049采用C28XCLA协处理器模式&#xff0c;主频只…

C++:list模拟实现

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;list模拟实现》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#xf…

音视频开发10 FFmpeg 内存模型-AVPacket, AVFrame

从现有的 Packet 拷贝一个新 Packet 的时候&#xff0c;有两种情况&#xff1a; • ①两个 Packet 的 buf 引用的是 同一数据缓存空间 &#xff0c;这时 候要注意数据缓存空间的释放问题&#xff1b; • ②两个 Packet 的 buf 引用不同的数据缓存空间 &#xff0c;每个 Pac…

移动机器人定位与导航实训记录

本次实训主要学习ros-tf的使用、slam使用、机器人自主导航&#xff0c;我先简单发出来&#xff0c;等我整理完再重新编辑一边。

AI图书推荐:结合ChatGPT的Java编程实用指南

《结合ChatGPT的Java编程实用指南》&#xff08;Practical Java Programming with ChatGPT&#xff09;是一本具有变革性意义的书籍&#xff0c;通过展示针对各种问题的多样化调查&#xff0c;挑战了传统软件开发的速度。这本书旨在通过集成OpenAI API、利用生成式人工智能和大…

性能优化随笔(一)

在软件开发过程中&#xff0c;一般要先实现功能方面的需求&#xff0c;功能方面的需求开发完毕之后&#xff0c;往往会考虑性能方面的优化。在业务发展的初期&#xff0c;性能往往能满足使用的需求&#xff0c;这时性能优化不是必不可少的。随着业务的发展&#xff0c;软件复杂…

常见加解密算法04 - 分组密码DES

​各位才华横溢&#xff0c;风度翩翩的读者们&#xff0c;你们好。今天我们讨论一下DES算法以及逆向识别。 DES算法要比RC4复杂的多&#xff0c;但是幸运的是它的逆向识别比RC4要简单很多&#xff0c;当你了解DES大致的实现原理之后就明白为什么了。 DES算法介绍 DES算法&am…

【前端开发--css学习笔记】CSS超详细的学习笔记。前端开发css学习笔记(非常详细,适合小白入门)

二&#xff0c;CSS学习笔记 1&#xff0c;CSS语法 1-1 CSS 实例 CSS声明总是以分号 ; 结束&#xff0c;声明总以大括号 {} 括起来: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title…

湖南源点调研 为什么中小企业产品上市前一定要做市场调研?

本文由湖南长沙&#xff08;产品前测&#xff09;源点调研咨询编辑发布 可能有很多企业主会表示&#xff0c;市场调研&#xff0c;产品调研&#xff0c;不都是大公司、大品牌、上市公司才会有的流程吗&#xff0c;像我们这种小企业、小品牌、小厂家没有必要去那么做&#xff0…

Update! 基于RockyLinux9.3离线安装Zabbix6.0

链接&#xff1a; Ansible离线部署 之 Zabbixhttp://mp.weixin.qq.com/s?__bizMzk0NTQ3OTk3MQ&mid2247487434&idx1&sn3128800a0219c5ebc5a3f89d2c8ccf50&chksmc3158786f4620e90afe440bb32fe68541191cebbabc2d2ef196f7300e84cde1e1b57383c521a&scene21#we…