MCU软核 2. Xilinx Artix7上运行tinyriscv

news2024/11/25 13:56:35

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
make

cd /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, read
        http://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     1000

reset_config srst_only
adapter_nsrst_assert_width 100

interface cmsis-dap

transport select jtag

#debug_level 3

set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x1e200a6f

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME

riscv set_reset_timeout_sec 1

init

halt


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3样式绑定

文章目录 Vue3样式绑定1. class 属性绑定1.1 v-bind:class 设置一个对象,从而动态的切换 class1.2 在对象中传入更多属性用来动态切换多个 class1.3 直接绑定数据里的一个对象1.4 绑定一个返回对象的计算属性。这是一个常用且强大的模式1. 5 数据语法1.6 errorClass…

Mental Poker- Part 2

在part-1中,我们梳理了去中心纸牌游戏所面临的挑战,也介绍了一种改进的Barnett-Smart协议,part-2将深入了解该协议背后涉及的算法。 Discrete-log VTMF VTMFs包含4部分:key generation, mask, remask and unmask,这些…

2024年java面试--mysql(4)

系列文章目录 2024年java面试(一)–spring篇2024年java面试(二)–spring篇2024年java面试(三)–spring篇2024年java面试(四)–spring篇2024年java面试–集合篇2024年java面试–redi…

Matlab 2016安装MinGW-w64-4.9.2

Matlab 2016安装MinGW-w64-4.9.2 项目需求:需要将matlab中的.m文件编译为cpp文件 .dll .h .lib。 我相信大家在对matlab2016安装MinGW-w64出现了各种各样的问题。如:4.9.2安装失败;安装了其他版本但是matlab检测不到,或者其他各种…

stable diffusion安装及使用

最近在看这个,踩了一些坑,现在有点头绪了,记录如下 安装很简单,直接git下载下来,然后进到根目录执行./web-ui.py,第一次启动你没有模型他会帮你下载个默认模型,我有模型了,就先把这个模型放到*/…

【Python】从入门到上头— 使用re模块用于快速实现正则表达式需求(11)

正则表达式语法规则 详见 【Java基础】正则表达式应用 re模块 正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,…

服务器上一个域名对应多个前端项目的nginx转发配置

场景: 当有两个前端项目A,B的时候,项目A(对应端口8000)和项目B(对应端口8001)分别部署在服务器的不同位置,通过服务器ip端口都能正常访问单独的项目A和项目B;现在要求两个项目共用一…

工作中有许多比较常用的SQL脚本

工作中有许多比较常用的SQL脚本,今天开始分几章分享给大家。 1、行转列的用法PIVOTCREATE table test (id int,name nvarchar(20),quarter int,number int) insert into test values(1,N苹果,1,1000) insert into test values(1,N苹果,2,2000) insert into test va…

整理一下5个全国化的股票十倍杠杆正规平台(2023最大十倍杠杆炒股平台)

在全国范围内,有诸多优秀的杠杆平台可供选择。本文将介绍5个全国化的股票十倍杠杆正规平台:红腾网、广瑞网、一鼎盈、广盛网、富灯网。 1. 红腾网 红腾网是国内的一家知名杠杆交易平台,平台以高效、便捷、安全的特点著称。 2. 广瑞网 广瑞…

拿走吧你,Fiddler模拟请求发送和修改响应数据

模拟伪造请求 方法一:打断点模拟HTTP请求 1、浏览器页面填好内容后(不要操作提交),打开fiddler,设置请求前断点,点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在页面上点…

数字孪生的实用性为何遭受质疑?这篇文章为你解答

数字孪生技术的实用性体现在哪?数字孪生技术不仅是当今科技领域的热点,也是各行各业不断探索和应用的新兴领域。这项技术的实用性在于它的多领域适用性和巨大潜力。然而,目前有许多声音认为数字孪生技术是一项“没用”的技术,仅仅…

扑克牌QB/T 2228标准

QB/T 2228-2013扑克牌 本标准规定了扑克牌的术语和定义、分类及组成、要求、试验方法、检验规则和标志、包装、运输、贮存。 本标准适用于纸质扑克牌。 规范性引用文件 下列文件对于本文件的应用是必不可少的.凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期…

抖音生活服务“整编”,一场消费与产业的生态共赢

团券、到店、核销,这已经成为当代年轻人出去吃饭、理发等的日常,如同上网买衣服、买手机一样。这样的消费日常背后,稳定已久的生活服务行业再次硝烟弥漫。搅动一池春水的,是抖音等互联网后来者。 根据媒体报道,抖音生…

市场开始复苏,三星传调涨内存芯片高达20% | 百能云芯

随着行动内存芯片市场迹象显示出复苏迹象,并且最早在第四季度供不应求,三星电子已宣布将提高动态随机存取存储器(DRAM)和NAND闪存芯片的价格,幅度达到10%~20%。 韩国经济日报报道,知情人士透露,…

四川玖璨电子商务有限公司:怎么做视频运营?

视频运营是指通过策划、发布和推广视频内容,以吸引更多的用户观看,并实现商业价值的过程。在当今数字化时代,视频已经成为人们获取信息、娱乐消遣的重要方式之一,因此,如何做好视频运营成为了各大平台和个人所关注的焦…

有了这个Python库,免费实现验证码识别

在做UI自动化时,无论是APP还是Web在登录页面经常会遇到需要输入验证码的时候,网上也有很多方法进行帮助我们,比如通过百度OCR的接口或者其他平台的开源接口,但是大多数都是收费的,对于我们个人学习非常不友好。 以前小…

[Java] String详解

愿一分耕耘,一份收获 文章目录 前言1. String基础概念2. String对象的比较2.1 与equals()的应用 3. 字符串的转化3.1 数字与字符串的转化3.2 大小写转换3.3 字符串与字符数组转换4. 字符串修改1.引入库2.读入数据 总结 前言 String这部分是面试中常常考到的题.string常量池,Sr…

流量录制回放工具在自动化测试领域应用探索

引言: 随着中国农业银行技术架构的日益更迭与业务场景的不断创新,测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战,主要体现在以下四方面: 一是在系统架构升级与代码重构时,大量原始接…

01_kafka_环境搭建安装_topic管理

文章目录 安装jdk配置主机名Zookeeper 下载与安装Kafka 下载与安装测试集群版安装测试输出 安装jdk 略 配置主机名 hostnamectl set-hostname kafka_1 /etc/sysconfig/network HOSTNAMEkafka_1/etc/hosts ip kafka_1ping kafka_1 测试 Zookeeper 下载与安装 由于 集群…

科技云报道:青云科技为何成为IDC云转型的“神队友”?

科技云报道原创。 如今随着出海企业数量的不断增长,跨境业务也逐渐从蓝海变红海,从“价格战”到“智能战”。 一个明显的变化,来自企业对于出海效率的提升。《埃森哲2022中国企业国际化研究》指出,企业想要在出海浪潮中取胜&…