我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和数字IC设计。

关注公众号【集成电路设计教程】,获取更多学习资料,并拉你进“IC设计交流群”。
QQIC设计&FPGA&DL交流群 群号:866169462

文章目录

  • 前言
  • 一、下载源码
  • 二、移植到Aritx-7
    • 2.1 添加 mmcm IP
    • 2.2 管脚约束
    • 2.3 综合实现
  • 三、简单测试

前言

为了完成自己的毕设,得用OpenOCD作上位机,测试下RISC-V的单步调试以及GDB调试等操作,然后看了下tinyriscv-verilator的调试模块支持这些操作,所以来移植下该版本的tinyriscv,以博客进行记录。

一些基础操作这里不再赘述,不会的读者可以去看我的另一篇博客:手把手教你移植 tinyriscv 到FPGA上 https://blog.csdn.net/qq_44447544/article/details/123251073

一、下载源码

码云链接:https://gitee.com/liangkangnan/tinyriscv/tree/verilator/
打包下载即可,解压后,将RTL添加到新建工程源码中。添加完成后,如下图所示:

可以看到 jtag 调试模块更新了,将tap、dtm、dmi以及dm模块都独立实现了。

二、移植到Aritx-7

开发板;正点原子达芬奇FPGA开发板(v1),芯片型号为 xc7a35tfgg484-1
调试器:FT4232H

2.1 添加 mmcm IP

tinyriscv_soc_top.sv 顶层模块中例化了 mmcm IP,所以要进行添加,点击左侧导航栏中的 IP Catalog,搜索 Clocking,选择下图所示的IP:

配置如下图所示;

然后点击 ok,弹出的弹窗选择 Generate

可以看到此IP已经不再是缺失状态了。

2.2 管脚约束

首先来看下此版本的tinyriscv的顶层接口:

可以看到和master 版本基本差不多,去掉了单独的UART Pins,将UART功能放在了GPIO复用功能中。管脚约束的话,时钟约束到板卡时钟管脚上,复位按钮约束到按钮上,halted_ind_pin 信号和 dump_wave_en_o 信号均约束到LED上,jtag、gpio和flash spi均约束到空闲IO上即可。

约束文件:

# 时钟约束50MHz,占空比50%
create_clock -period 20.000 -name sys_clk_pin -waveform {0.000 10.000} -add [get_ports clk_50m_i]# 时钟引脚
set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports clk_50m_i]# 复位引脚
set_property -dict {PACKAGE_PIN U2 IOSTANDARD LVCMOS33} [get_ports rst_ext_ni]# CPU停住指示引脚,halted_ind_pin 为1时有效,点亮led2
set_property -dict {PACKAGE_PIN V2 IOSTANDARD LVCMOS33} [get_ports halted_ind_pin]# io_pins引脚
set_property -dict {PACKAGE_PIN F16 IOSTANDARD LVCMOS33} [get_ports {io_pins[0]}]
set_property -dict {PACKAGE_PIN F15 IOSTANDARD LVCMOS33} [get_ports {io_pins[1]}]
set_property -dict {PACKAGE_PIN F13 IOSTANDARD LVCMOS33} [get_ports {io_pins[2]}]
set_property -dict {PACKAGE_PIN E14 IOSTANDARD LVCMOS33} [get_ports {io_pins[3]}]
set_property -dict {PACKAGE_PIN H18 IOSTANDARD LVCMOS33} [get_ports {io_pins[4]}]
set_property -dict {PACKAGE_PIN G17 IOSTANDARD LVCMOS33} [get_ports {io_pins[5]}]
set_property -dict {PACKAGE_PIN H15 IOSTANDARD LVCMOS33} [get_ports {io_pins[6]}]
set_property -dict {PACKAGE_PIN H14 IOSTANDARD LVCMOS33} [get_ports {io_pins[7]}]
set_property -dict {PACKAGE_PIN G13 IOSTANDARD LVCMOS33} [get_ports {io_pins[8]}]
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports {io_pins[9]}]
set_property -dict {PACKAGE_PIN AB18 IOSTANDARD LVCMOS33} [get_ports {io_pins[10]}]
set_property -dict {PACKAGE_PIN G15 IOSTANDARD LVCMOS33} [get_ports {io_pins[11]}]
set_property -dict {PACKAGE_PIN G16 IOSTANDARD LVCMOS33} [get_ports {io_pins[12]}]
set_property -dict {PACKAGE_PIN P20 IOSTANDARD LVCMOS33} [get_ports {io_pins[13]}]
set_property -dict {PACKAGE_PIN P19 IOSTANDARD LVCMOS33} [get_ports {io_pins[14]}]
set_property -dict {PACKAGE_PIN J16 IOSTANDARD LVCMOS33} [get_ports {io_pins[15]}]# JTAG TCK引脚  PortA 0
set_property -dict {PACKAGE_PIN AA8 IOSTANDARD LVCMOS33} [get_ports jtag_TCK_pin]
create_clock -period 300.000 -name jtag_clk_pin [get_ports jtag_TCK_pin]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets jtag_TCK_pin]# JTAG TMS引脚 PortA 3
set_property -dict {PACKAGE_PIN AB8 IOSTANDARD LVCMOS33} [get_ports jtag_TMS_pin]# JTAG TDI引脚 PortA 1
set_property -dict {PACKAGE_PIN Y7 IOSTANDARD LVCMOS33} [get_ports jtag_TDI_pin]# JTAG TDO引脚 PortA 2
set_property -dict {PACKAGE_PIN Y8 IOSTANDARD LVCMOS33} [get_ports jtag_TDO_pin]# SPI dq引脚
set_property -dict {PACKAGE_PIN F14 IOSTANDARD LVCMOS33} [get_ports {flash_spi_dq_pin[0]}]
set_property -dict {PACKAGE_PIN F18 IOSTANDARD LVCMOS33} [get_ports {flash_spi_dq_pin[1]}]
set_property -dict {PACKAGE_PIN D17 IOSTANDARD LVCMOS33} [get_ports {flash_spi_dq_pin[2]}]
set_property -dict {PACKAGE_PIN W22 IOSTANDARD LVCMOS33} [get_ports {flash_spi_dq_pin[3]}]# SPI SS引脚
set_property -dict {PACKAGE_PIN E13 IOSTANDARD LVCMOS33} [get_ports flash_spi_ss_pin]# SPI CLK引脚
set_property -dict {PACKAGE_PIN H22 IOSTANDARD LVCMOS33} [get_ports flash_spi_clk_pin]#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]

2.3 综合实现

管脚约束好后,进行综合实现,版图如下:

资源利用率;

三、简单测试

生成比特流下载到开发板上,然后通过OpenOCD进行连接。

可以看到已经成功连接到了。再登录终端尝试单步调试和断点:

都没问题,搞定,继续弄毕业论文去了。

【tinyriscv verilator】分支移植到正点原子达芬奇开发板相关推荐

  1. DDR3-基于正点原子达芬奇100Tpro1.0版本

    1.DDR3硬件设计 2.DDR3引脚作用 信号 类型 作用 CK,~CK Input 一对差分信号时钟,可在CK的上升沿和下降沿采样 CKE Input 时钟使能,操作使能,为低时只能自刷新 CS ...

  2. 正点原子达芬奇artix7开发板连接usb和xilinx下载器冲突的解决办法

    最近试玩了一下手上这块a7,发现板载的fdti和jtag下载器里面的fdti驱动冲突,研究了一下找到一个折中的解决办法:首先开发板断电并断开下载器连接,将USB线与板载 USB Slave接口连接,打 ...

  3. pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  4. 正点原子阿波罗STM32F429开发板资料发布,采用底板+核心板

    正点原子阿波罗STM32F429开发板资料发布,采用底板+核心板.... https://www.amobbs.com/thread-5654611-1-1.html 正点原子STM32开发板 htt ...

  5. fpu测试_正点原子STM32F4/F7水星开发板资料连载第五十章 FPU 测试实验

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  6. 光盘显示0字节可用_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  7. 正点原子STM32103 战舰V3 开发板的ST LINK(SWD)接线图

    正点原子STM32103 战舰V3 开发板的ST LINK(SWD)接线如下图,5V供电旁边有个自锁开关,需要按下去(右下角有个POWER蓝色灯会点亮)才是上电的,另外另外根据实验测试使用ST LIN ...

  8. 达芬奇PRO板的FPGA功能学习笔记(一)

    达芬奇PRO板的FPGA功能学习笔记(一) 从编译到实现需要五个步骤: 1.写代码(verilog语言) 2.综合分析 3.写约束文件 约束文件主要是定义接口,命令第一个关键字代表命令的名称,其后的每 ...

  9. IMX6ULL裸机学习----LED正点原子在韦东山开发板上实现

    前言 一.IMX6ULL 启动流程? 二.LED代码移植 1.硬件介绍 2.代码移植 总结 前言 最近在学习IMX6ULL这个开发板,手边有韦东山老师的imx6ull全功能板子,为了练习学习的初步效果 ...

最新文章

  1. “重构”黑洞:26岁MIT研究生的新算法 | 人物志
  2. 10没有基于策略的qos_分布式QoS算法解析
  3. HTTPS协议,SSL协议及完整交互过程
  4. 手机python代码写好了怎么运行-想在手机上编写python代码?手机上玩转python的利器...
  5. React入门---事件与数据的双向绑定-9
  6. resize函数_每日一题手写函数防抖与节流
  7. 招募 | 清华大学计算机系副教授黄民烈招募NLP方向博士后
  8. loadrunner9.10安装及破解问题解决(转)
  9. nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  10. [HDOJ1823] Luck and Love(线段树,树套树)
  11. LINUX下system和execl有什么差异?
  12. 【TWVRP】基于matlab遗传算法求解带时间窗的载重约束外卖配送车辆路径规划问题【含Matlab源码 1417期】
  13. JavaWeb学习笔记(2)-B站尚硅谷
  14. 计算机类学术期刊SCI/EI期刊核心期刊有哪些?
  15. 今天搞事情,angularjs项目实例分析
  16. mikrotik桥接TP-link教程
  17. PL-VIO学习+注释
  18. 走进递归经典——汉诺塔问题详解
  19. windows文件格式转换为linux格式
  20. 在win10中AsciiDoc使用plantUML的使用报错:Dot Executable:C:\Program Files\Graphviz2.38 it should be an executa

热门文章

  1. 苏州华旃航天电器有限公司项目
  2. 简单的python决策树案例
  3. QCOM 9008刷机
  4. WALLPAPER-程序员壁纸
  5. 华为HCIE RS笔记-16以太网技术端口隔离,Smart Link,Monitor Link,端口镜像
  6. 输入框【普通输入框,邮箱输入框,验证码输入框,手机号码输入框】测试用例
  7. 专业老师讲解CAD分解图形的步骤
  8. BIM建模师考试试题及答案
  9. 7-138 质因子分解
  10. Spark系列 (五)Spark-GraphX的基本介绍与算子的简单使用---网络红人排名实例分解