我是 ,一名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 一时有效,点亮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 综合实现
管脚约束好后,进行综合实现,版图如下:
资源利用率;
三、简单测试
可以看到已经成功连接到了。再登录终端尝试单步调试和断点:
都没问题,搞定,继续弄毕业论文去了。