我是 雪天魚默伍,一名FPGA愛好者,研究方向是FPGA架構(gòu)探索和數(shù)字IC設(shè)計(jì)。
關(guān)注公眾號(hào)【集成電路設(shè)計(jì)教程】巡验,獲取更多學(xué)習(xí)資料际插,并拉你進(jìn)“IC設(shè)計(jì)交流群
”。
QQIC設(shè)計(jì)&FPGA&DL交流群
群號(hào):866169462
显设。
前言
為了完成自己的畢設(shè)框弛,得用OpenOCD作上位機(jī),測(cè)試下RISC-V的單步調(diào)試以及GDB調(diào)試等操作捕捂,然后看了下tinyriscv-verilator
的調(diào)試模塊支持這些操作瑟枫,所以來移植下該版本的tinyriscv,以博客進(jìn)行記錄指攒。
一些基礎(chǔ)操作這里不再贅述慷妙,不會(huì)的讀者可以去看我的另一篇博客:手把手教你移植 tinyriscv 到FPGA上
https://blog.csdn.net/qq_44447544/article/details/123251073
一、下載源碼
碼云鏈接:https://gitee.com/liangkangnan/tinyriscv/tree/verilator/
打包下載即可允悦,解壓后膝擂,將RTL添加到新建工程源碼中。添加完成后隙弛,如下圖所示:
可以看到 jtag 調(diào)試模塊更新了架馋,將tap、dtm全闷、dmi以及dm模塊都獨(dú)立實(shí)現(xiàn)了叉寂。
二、移植到Aritx-7
開發(fā)板;正點(diǎn)原子達(dá)芬奇FPGA開發(fā)板(v1)总珠,芯片型號(hào)為 xc7a35tfgg484-1
調(diào)試器:FT4232H
2.1 添加 mmcm IP
在 tinyriscv_soc_top.sv
頂層模塊中例化了 mmcm IP屏鳍,所以要進(jìn)行添加,點(diǎn)擊左側(cè)導(dǎo)航欄中的 IP Catalog局服,搜索 Clocking,選擇下圖所示的IP:
配置如下圖所示;
然后點(diǎn)擊 ok钓瞭,彈出的彈窗選擇 Generate
。
可以看到此IP已經(jīng)不再是缺失狀態(tài)了腌逢。
2.2 管腳約束
首先來看下此版本的tinyriscv的頂層接口:
可以看到和master 版本基本差不多降淮,去掉了單獨(dú)的UART Pins,將UART功能放在了GPIO復(fù)用功能中搏讶。管腳約束的話佳鳖,時(shí)鐘約束到板卡時(shí)鐘管腳上,復(fù)位按鈕約束到按鈕上媒惕,halted_ind_pin 信號(hào)和 dump_wave_en_o 信號(hào)均約束到LED上系吩,jtag、gpio和flash spi均約束到空閑IO上即可妒蔚。
約束文件:
# 時(shí)鐘約束50MHz穿挨,占空比50%
create_clock -period 20.000 -name sys_clk_pin -waveform {0.000 10.000} -add [get_ports clk_50m_i]
# 時(shí)鐘引腳
set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports clk_50m_i]
# 復(fù)位引腳
set_property -dict {PACKAGE_PIN U2 IOSTANDARD LVCMOS33} [get_ports rst_ext_ni]
# CPU停住指示引腳,halted_ind_pin 為1時(shí)有效月弛,點(diǎn)亮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 相關(guān)設(shè)置
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 綜合實(shí)現(xiàn)
管腳約束好后,進(jìn)行綜合實(shí)現(xiàn)科盛,版圖如下:
資源利用率;
三帽衙、簡(jiǎn)單測(cè)試
生成比特流下載到開發(fā)板上,然后通過OpenOCD進(jìn)行連接贞绵。
可以看到已經(jīng)成功連接到了厉萝。再登錄終端嘗試單步調(diào)試和斷點(diǎn):
都沒問題,搞定榨崩,繼續(xù)弄畢業(yè)論文去了谴垫。
- 更多技術(shù)文章和學(xué)習(xí)資料,請(qǐng)關(guān)注我的公眾號(hào):【集成電路設(shè)計(jì)教程】
- 全平臺(tái)統(tǒng)一:【雪天魚】