资讯详情

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

我是 ,一名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 综合实现

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

资源利用率;

三、简单测试

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

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

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

标签: 6ni37ic集成电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台