MCU软核 2. Xilinx Artix7上运行tinyriscv

0. 环境


- ubuntu18
- win10 + vivado 2018.3
- git desktop
- XC7A35TV12核心板
- ft2232hl小板(用于程序烧录)

1. git克隆源码


Git Desktop -> File -> Clone repository -> 
-> URL: https://gitee.com/liangkangnan/tinyriscv/
-> Local path: D:\Workspaces\GitHub\tinyriscv


2. vivado创建工程


Create Project -> Next -> 
-> Project name: tinyriscv
-> Project location: E:/Workspaces/vivado2018/XC7A35TV12/
-> 勾选 Create project subdirectory
-> RTL Project
-> Next -> Next
-> xc7a35tftg256-1
-> finish

添加源码
Add Sources -> Add or create design sources -> Next
-> Add Directories -> D:\Workspaces\GitHub\tinyriscv\rtl
-> 勾选 Copy sources into project

添加约束文件
Add Sources -> Add or create constrains -> Next
-> Add Files -> D:\Workspaces\GitHub\tinyriscv\fpga\constrs\tinyriscv.xdc修改约束文件,用到的每个引脚都需要添加约束。jtag、gpio、spi都使用开发板引出的但未被使用的引脚。

set_property PACKAGE_PIN D4 [get_ports clk]
set_property PACKAGE_PIN C4 [get_ports rst]
# uart to usb
set_property PACKAGE_PIN C7 [get_ports uart_rx_pin]
set_property PACKAGE_PIN M14 [get_ports uart_tx_pin]
set_property PACKAGE_PIN D11 [get_ports uart_debug_pin]    # D11 S1按键
# led
set_property PACKAGE_PIN K12 [get_ports over]
set_property PACKAGE_PIN L14 [get_ports succ]
set_property PACKAGE_PIN L13 [get_ports halted_ind]
# jtag
set_property PACKAGE_PIN M15 [get_ports jtag_TCK]
set_property PACKAGE_PIN R16 [get_ports jtag_TMS]
set_property PACKAGE_PIN P16 [get_ports jtag_TDI]
set_property PACKAGE_PIN R15 [get_ports jtag_TDO]
# gpio
set_property PACKAGE_PIN P15 [get_ports {gpio[0]}]
set_property PACKAGE_PIN T15 [get_ports {gpio[1]}]
# SPI 
set_property PACKAGE_PIN P14 [get_ports spi_miso]
set_property PACKAGE_PIN T14 [get_ports spi_mosi]
set_property PACKAGE_PIN N14 [get_ports spi_ss]
set_property PACKAGE_PIN N12 [get_ports spi_clk]set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports over]
set_property IOSTANDARD LVCMOS33 [get_ports succ]
set_property IOSTANDARD LVCMOS33 [get_ports halted_ind]
set_property IOSTANDARD LVCMOS33 [get_ports uart_rx_pin]
set_property IOSTANDARD LVCMOS33 [get_ports uart_tx_pin]
set_property IOSTANDARD LVCMOS33 [get_ports uart_debug_pin]
set_property IOSTANDARD LVCMOS33 [get_ports jtag_TCK]
set_property IOSTANDARD LVCMOS33 [get_ports jtag_TMS]
set_property IOSTANDARD LVCMOS33 [get_ports jtag_TDI]
set_property IOSTANDARD LVCMOS33 [get_ports jtag_TDO]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports spi_miso]
set_property IOSTANDARD LVCMOS33 [get_ports spi_mosi]
set_property IOSTANDARD LVCMOS33 [get_ports spi_ss]
set_property IOSTANDARD LVCMOS33 [get_ports spi_clk]set_property BITSTREAM.CONFIG.UNUSEDPIN Pullnone [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets jtag_TCK_IBUF]

编译
-> Run Systhesis
-> Run Implementation
-> Generate Bitstream

下载
Open Hardware Manager -> Open Target -> Auto Connect -> 右键Hardware栏内的xc7a35t_0 -> 点击Program device
-> Bitstream file: E:/Workspaces/vivado2018/XC7A35TV12/tinyriscv/tinyriscv.runs/impl_1/tinyriscv_soc_top.bit

固化
Tools -> Generate Memory Configuration File -> 
-> MCS
-> 128MB
-> File name: E:/Workspaces/vivado2018/XC7A35TV12/tinyriscv/tinyriscv.runs/impl_1/tinyriscv_soc_top.mcs
-> Interface: SPIx4
-> 勾选 Load bitstream files 
-> Bitfile: E:/Workspaces/vivado2018/XC7A35TV12/tinyriscv/tinyriscv.runs/impl_1/tinyriscv_soc_top.bit

请先手动删除
E:/Workspaces/vivado2018/XC7A35TV12/tinyriscv/tinyriscv.runs/impl_1
下的
tinyriscv_soc_top.mcs
tinyriscv_soc_top.prm

-> OK
-> Add Configuration Memory Device -> 输入n25q128-3.3v -> OK

烧写
-> Configuration file: E:/Workspaces/vivado2018/XC7A35TV12/tinyriscv/tinyriscv.runs/impl_1/tinyriscv_soc_top.mcs
-> PRM file: E:/Workspaces/vivado2018/XC7A35TV12/tinyriscv/tinyriscv.runs/impl_1/tinyriscv_soc_top.prm
-> OK

3. c语言程序编译


git clone https://gitee.com/liangkangnan/tinyriscv/


安装交叉编译工具
到这里下载xpack-riscv-none-embed-gcc-10.2.0-1.2-linux-x64.tar.gz
https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/

拷贝到虚拟机下的
/home/xxjianvm/work/xpack-riscv-none-embed-gcc-10.2.0-1.2-linux-x64.tar.gz

解压

tar -zvxf xpack-riscv-none-embed-gcc-10.2.0-1.2-linux-x64.tar.gz

配置环境变量
修改common.mk

RISCV_PATH := $(TOOLCHAIN_DIR)/tools/gnu-mcu-eclipse-riscv-none-gcc-8.2.0-2.2-20190521-0004-win64/


修改为

# RISCV_PATH := $(TOOLCHAIN_DIR)/tools/gnu-mcu-eclipse-riscv-none-gcc-8.2.0-2.2-20190521-0004-win64/
RISCV_PATH := /home/xxjianvm/work/xpack-riscv-none-embed-gcc-10.2.0-1.2/

验证:

riscv-none-embed-gcc -v

编译

cd /home/xxjianvm/work/tinyriscv/tests/example/uart_tx
makecd /home/xxjianvm/work/tinyriscv/sim
python sim_new_nowave.py ../tests/example/uart_tx/uart_tx.bin inst.data

Python 错误 SyntaxError: Non-ASCII character ‘\xe4’ in file
代码最顶部加一句 #coding:utf-8

python sim_new_nowave.py ../tests/example/uart_tx/uart_tx.bin inst.data

3. openocd

win10下操作。需要连接ft2232hl和 tinyriscv的 jtag 

3.1 运行


下载最新的openocd
https://gnutoolchains.com/arm-eabi/openocd/

打开命令行

cd G:\宜通世纪物联网\项目33.4 章和应变采集卡\mcu tinyriscv\openocd-20230202\OpenOCD-20230202-0.12.0\bin
G:
openocd -f ft2232h.cfg -f tinyriscv.cfg
mcu tinyriscv\openocd-20230202\OpenOCD-20230202-0.12.0\bin>openocd -f ft2232h.cfg -f tinyriscv.cfg
Open On-Chip Debugger 0.12.0 (2023-02-02) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
For bug reports, readhttp://openocd.org/doc/doxygen/bugs.html
DEPRECATED! use 'adapter driver' not 'interface'
DEPRECATED! use 'ftdi vid_pid' not 'ftdi_vid_pid'
DEPRECATED! use 'ftdi channel' not 'ftdi_channel'
DEPRECATED! use 'adapter speed' not 'adapter_khz'
DEPRECATED! use 'ftdi layout_init' not 'ftdi_layout_init'
DEPRECATED! use 'ftdi layout_signal' not 'ftdi_layout_signal'
DEPRECATED! use 'ftdi layout_signal' not 'ftdi_layout_signal'
DEPRECATED! use 'adapter speed' not 'adapter_khz'
DEPRECATED! use 'adapter srst pulse_width' not 'adapter_nsrst_assert_width'
DEPRECATED! use 'adapter driver' not 'interface'
Warn : Interface already configured, ignoring
Warn : Transport "jtag" was already selected
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : clock speed 1000 kHz
Info : JTAG tap: riscv.cpu tap/device found: 0x1e200a6f (mfg: 0x537 (Wuhan Xun Zhan Electronic Technology), part: 0xe200, ver: 0x1)
Info : datacount=3 progbufsize=1
Info : Examined RISC-V core; found 2 harts
Info :  hart 0: XLEN=32, misa=0x1b0
Info : starting gdb server for riscv.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections


3.2 telnet


win10 -> 控制面板 -> 程序 -> 程序和功能 -> 启用或关闭Windows 功能 -> telnet客户端 -> 确认

打开命令行

telnet localhost 4444

将固件下载到FPGA

load_image C:/Users/qjfen/Desktop/uart_tx.bin 0x0 bin 0x0 0x1000000

使用verify_image命令来校验是否下载成功,如下所示:

verify_image C:/Users/qjfen/Desktop/uart_tx.bin 0x0 bin 0x0

如果下载出错的话会有提示的,没有提示则说明下载成功。

最后执行以下命令让程序跑起来:

resume 0
> load_image C:/Users/qjfen/Desktop/uart_tx.bin 0x0 bin 0x0 0x1000000
2244 bytes written at address 0x00000000
downloaded 2244 bytes in 0.058930s (37.187 KiB/s)> verify_image C:/Users/qjfen/Desktop/uart_tx.bin 0x0 bin 0x0
verified 2244 bytes in 0.106216s (20.632 KiB/s)> resume 0
>


注意:这种方法下载请拉低uart_debug_en引脚。这个串口引脚有点像UART BOOT。

退出

quit

3.3 ft2232h.cfg内容

#
# FT2232HL for openOCD Device
#
# According to the sch file, it uses BDBUS.
#
interface ftdi
ftdi_vid_pid 0x0403 0x6010
# ftdi_channel 0 is port ADBUS, ftdi_channel 1 is port BDBUS.
ftdi_channel 1
transport select jtag
adapter_khz 1000
ftdi_layout_init 0x00F8 0x00fb
ftdi_layout_signal nSRST -oe 0x0040
ftdi_layout_signal ntRST -oe 0x0010

3.4 tinyriscv.cfg内容

adapter_khz     1000reset_config srst_only
adapter_nsrst_assert_width 100interface cmsis-daptransport select jtag#debug_level 3set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x1e200a6fset _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAMEriscv set_reset_timeout_sec 1inithalt


参考:Windows 10操作系统上使用telnet命令(图文),https://blog.csdn.net/m0_46015143/article/details/119379275
参考:FT2232作为JTAG烧录器的使用步骤详解,https://blog.csdn.net/windyhigh/article/details/128406376

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Python爬虫程序中使用HTTP代理?

在进行网络爬虫时,我们经常需要使用代理服务器来隐藏自己的真实IP地址,以避免被目标网站封禁或限制访问。本文将介绍如何将HTTP代理配置到Python爬虫程序中使用。 什么是HTTP代理? HTTP代理是一种网络代理,它充当客户端和服务器之…

Redis-带你深入学习数据类型zset

目录 1、zset有序集合 2、zset相关命令 2.1、添加或更新指定的元素——zadd 2.2、获取有序集合zset的元素个数相关命令:zcard、zcount 2.3、返回指定区间元素相关命令:zrange、arevrange、zrangebyscore 2.4、删除相关命令:zpopmax、zp…

$ref赋值之后,子组件不渲染(刷新后,$ref父组件传值,子组件不更新数据问题)

在父组件中,点击搜索, 通过this.$refs传值给子组件 this.$refs.GoodsClassNav.paramsAll.keyword key; 子组件结果中不显示, 但是打印this.$refs.GoodsClassNav.paramsAll.keyword,可以打印到最新的值,点击子组件中…

PyQt5通过堆叠布局实现选项卡(多界面)功能

PyQt5通过堆叠布局实现选项卡(多界面)功能 1、创建一个MainWindow 加入Text Brower做标题,几个按钮。 然后在左侧containers中添加Stacked Widget这个控件,初步布局如下: 对窗口中的堆叠容器 “Stacked Widget”,选中后可以用…

【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)

目录 1 Pandas 可视化功能 2 Pandas绘图实例 2.1 绘制线图 2.2 绘制柱状图 2.3 绘制随机散点图 2.4 绘制饼图 2.5 绘制箱线图A 2.6 绘制箱线图B 2.7 绘制散点图矩阵 2.8 绘制面积图 2.9 绘制热力图 2.10 绘制核密度估计图 1 Pandas 可视化功能 pandas是一个强大的数…

常驻巨噬细胞诱导的纤维化在胰腺炎性损伤和PDAC中具有不同的作用

介绍一篇2023年8月10日发表在Nature Immunology的文章 标题: Fibrosis induced by resident macrophages has divergent roles in pancreas inflammatory injury and PDAC 影响因子:30.5 DOI:https://doi.org/10.1038/s41590-023-01579-x …

web端动效 PAG

之前写过一篇lottie动效的文章:web端动效 lottie-web 使用,本篇写一下PAG-web的基础使用。 PAG是腾讯开发,支持移动端、桌面端以及Web端的动效工作流解决方案。目标是降低或消除动效相关的研发成本,能够一键将设计师在 AE&#x…

TensorFlow 03(Keras)

一、tf.keras tf.keras是TensorFlow 2.0的高阶API接口,为TensorFlow的代码提供了新的风格和设计模式,大大提升了TF代码的简洁性和复用性,官方也推荐使用tf.keras来进行模型设计和开发。 1.1 tf.keras中常用模块 如下表所示: 1.2 常用方法 …

Ei Scopus检索 | 2024年第四届能源与环境工程国际会议(CoEEE 2024)

会议简介 Brief Introduction 2024年第四届能源与环境工程国际会议(CoEEE 2024) 会议时间:2023年5月22日-24日 召开地点:意大利米兰 大会官网:www.coeee.org CoEEE 2024将围绕“能源与环境工程”的最新研究领域而展开,为研究人员、…

VSCODE 使用技巧

vscode批量去掉代码中空行的方法 1、在vscode中使用ctrl f组合快捷键打开替换窗口. 2、输入下面的正则表达式 ^\s*(?\r?$)\n https://mp.weixin.qq.com/s/ZKV2sZWszxBLNTNLEWhsng

springboot redisTemplate.opsForValue().setIfAbsent返回null原理

一、版本 springboot版本:spring-boot-starter-data-redis 2.1.6 redisson版本:redisson-spring-boot-starter 3.11.5 二、场景 Boolean res redisTemplate.opsForValue().setIfAbsent("key","value");以上代码同一时间多次执行…

Sentinel控制台配置 持久化到nacos

sentinel控制台,使用方便,功能强大。使用官方的jar包,配置不会持久化,sentinel重启后会导致,之前的规则全部丢失,下面一起改造源码实现规则数据的持久化 sentinel源码地址 (github访问太慢&am…

嵌入式学习笔记(25)串口通信的基本原理

三根通信线:Tx Rx GND (1)任何通信都要有信息作为传输载体,或者有线的或则无线的。 (2)串口通信时有线通信,是通过串口线来通信的。 (3)串口通信最少需要2根&#xff…

MCU芯片测试:性能指标测试痛点是什么?ATECLOUD能否解决?

MCU芯片测试指标的核心是性能指标,包括处理器性能、存储器容量和读写速度,外设性能等。芯片测试对自动化测试的要求很高,ATECLOUD-IC不仅解决了传统测试方法的问题,而且也可以满足芯片测试的高要求,高效地完成MCU芯片性…

ChartJS使用-环境搭建(vue)

1、介绍 Chartjs简约不简单的JavaScript的图表库。官网https://chart.nodejs.cn/ Chart.js 带有内置的 TypeScript 类型,并与所有流行的 JavaScript 框架 兼容,包括 React 、Vue 、Svelte 和 Angular 。 你可以直接使用 Chart.js 或利用维护良好的封装程…

SpringBoot课堂笔记20230913

本篇文章为SpringBoot学习笔记,方便自己再复习。 Maven:jar包管理工具 注解: Controller:处理http请求,返回的视图 RestController: 相当于ResponseBody和Controller一起用,返回的是json ResponseBody:返回响应内容 …

自动化监控系统PrometheusGrafana

Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,数据采集→数据处理→数据存储→数据展示→告警 Prometheus 特点展开…

摩洛哥6.9级地震 网络出现轻度中断

北京时间2023年9月9日6时11分(当地时间8日23时11分),摩洛哥发生6.9级强震。埃文科技的监测数据显示,受地震影响,摩洛哥地区的网络也出现了轻度中断。 9月9日6时10分后,摩洛哥地区活跃前缀数量开始减少,在6时50分左右达…

利用 Python 中的地理空间数据与 GeoPandas

推荐:使用 NSDT编辑器快速搭建3D应用场景 空间数据的真正潜力在于它能够连接数据点及其各自的位置,为高级分析创造无限的可能性。地理空间数据科学是数据科学中的一个新兴领域,旨在利用地理空间信息并通过空间算法和机器学习或深度学习等先进…

算法通关村第十九关:白银挑战-动态规划高频问题

白银挑战-动态规划高频问题 1. 最少硬币数 LeetCode 322 https://leetcode.cn/problems/coin-change/description/ 思路分析 尝试用回溯来实现 假如coins[2,5,7],amount27,求解过程中,每个位置都可以从[2,5,7]中选择,因此可以…