Writen By: Tokisakix
如何使用一键烧板脚本🚁
此烧板脚本对任意方式配置的开发环境都有效,因为 vivado 的烧板跟开发环境是相互独立的,如果你使用 Dev Container 或 WSL 配置环境,你需要回到 Windows 下打开 PowerShell 进行烧板。 此部分内容借鉴自 YatCPU 的烧板验证
原则上你可以在任意一个 lab 文件夹中使用下方的脚本进行烧板,下方的演示路径为 2023-fall-yatcpu-repo/mini-yatcpu/
生成 Verilog 文件
下面的教程以 ZYBO-Z710 开发板为例,其他开发板可以根据开发板名称自行替换。
根据开发板型号,在命令行输入对应型号的运行指令,运行相应目录的 Top.scala 文件,生成的结果位于 verilog/开发板名称 目录下的 Top.v,下方是参考的代码:
sbt "runMain board.z710.VerilogGenerator"
Lab 1–4 和 mini-yatcpu 中所有已实现的 FPGA 板级生成器统一接受两个位置参数:
sbt "runMain board.<板子包名>.VerilogGenerator [程序名[.asmbin]] [输出目录]"
- 第一个参数选择烧录到 FPGA 的二进制程序,接受
say_goodbye或say_goodbye.asmbin;生成前应先编译对应固件,将其放到该 Lab 的src/main/resources/。生成器只选择固件,不编译 C 源码。 - 第二个参数可选,指定生成
Top.v等 RTL 文件的目录,相对路径以当前 Lab 为基准。不传时使用verilog/<板子目录名>。 - 不传参数时保留各板原来的默认程序。参数多于两个、程序名为空或输出目录为空 时会报错。
z710v1.3的 Scala 包名为board.z710v1_3,目录名仍为z710v1.3。
例如,在相应 Lab 目录运行:
sbt "runMain board.z710.VerilogGenerator hello target/z710-hello"
sbt "runMain board.z710v1_3.VerilogGenerator say_goodbye.asmbin target/z710v13-goodbye"
sbt "runMain board.cloud_pynq.VerilogGenerator led_control_demo target/cloud-led"
也可以通过 Makefile 传入 PROGRAM 与 OUTPUT_DIR:
make z710 PROGRAM=hello OUTPUT_DIR=target/z710-hello
make cloud_pynq PROGRAM=say_goodbye OUTPUT_DIR=target/cloud-goodbye
cloud_pynq 的 Make 目标会先构建所选 CMake 固件目标;原来只生成 RTL 的其他板级
目标仍需预先准备固件。Vivado 脚本默认读取原来的 verilog/<板子目录名>/Top.v,
自定义 RTL 输出目录后,需要让相应 Vivado 工程读取该目录,或在生成比特流时
使用默认目录。
默认程序如下(均省略 .asmbin 后缀):
| 板子 | Lab 1 | Lab 2 | Lab 3 | Lab 4 | mini-yatcpu |
|---|---|---|---|---|---|
| basys3 | tetris | tetris | tetris | 未实现 | tetris |
| pynq | hello | hello | tetris | 未实现 | litenes |
| z710 | say_goodbye | say_goodbye | say_goodbye | say_goodbye | say_goodbye |
| z710v1.3 | say_goodbye | say_goodbye | say_goodbye | say_goodbye | 未实现 |
| cloud_pynq | led_control_demo | led_control_demo | led_control_demo | led_control_demo | 未实现 |
Lab 2、Lab 3 的 board.z710v1_3.PiVerilogGenerator 保留为兼容入口,默认程序为
pi,也接受相同的两个位置参数。课程填空应在生成实际 CPU RTL 前完成。
board.verilator.Top 的指令和内存由 C++ 仿真程序在运行时提供,不包含烧录 ROM,
继续使用原有仿真入口和运行时程序参数。
你也可以在配置好环境的 IDEA 中打开 src/main/scala/board/z710/Top.scala,点击 object VerilogGenerator extends App 一行左边的绿色三角形运行即可。
生成比特流二进制文件
执行下述指令,可以根据 verilog/z710/Top.v 生成二进制文件 vivado/z710/riscv-z710/riscv-z710.runs/impl_1/Top.bit。
假设你的 Vivado 安装目录是 ~/Xilinx(其他目录自行修改):
cd vivado/z710
~/Xilinx/Vivado/2020.1/bin/vivado -mode batch -source ./generate_bitstream.tcl
烧板
执行下述指令,可以将二进制文件 vivado/z710/riscv-z710/riscv-z710.runs/impl_1/Top.bit 烧录到跟设备连接的开发板上。
假设你的 Vivado 安装目录是 ~/Xilinx(其他目录自行修改):
cd vivado/z710
~/Xilinx/Vivado/2020.1/bin/vivado -mode batch -source ./program_device.tcl
如果烧板无误,你会看到黄灯亮起
后续将上述 program_device.tcl 换成 generate_and_program.tcl 可以将生成比特流和烧板在一个脚本中完成。
