原文链接:VTR Quick Start — Verilog-to-Routing 8.1.0-dev documentation (verilogtorouting.org)
VTR部署
克隆工程:
git clone -b vFCCM_2023_NoC_Placement https://github.com/verilog-to-routing/vtr-verilog-to-routing.git
设置环境
- VTR需要一些系统包和Python包才能构建和运行流程。
- 在Ubuntu 18.04、20.04和22.04上,你可以使用以下命令安装所需的系统包:
./install_apt_packages.sh
然后,你可以选择在一个新的Python虚拟环境中安装所需的Python包,方法如下:
make env # 可选:安装Python虚拟环境
source .venv/bin/activate # 可选:激活Python虚拟环境
pip install -r requirements.txt # 安装Python包(如果运行了之前的命令,则在虚拟环境中安装,否则系统范围内安装)
注意:如果你选择使用Python虚拟环境,在每一个新的终端窗口中使用VTR流程或回归测试之前,你需要记得激活它:source .venv/bin/activate
创建
从顶层运行:
make
这将构建所有必需的工具。
VTR流程在64位Linux系统上经过了测试。虽然理论上它也应该可以在其他平台上工作(如32位Linux,带cygwin的Windows),但这没有经过测试。
有关构建 VTR 的完整信息,包括设置所需的系统包和 Python 包,请参阅可选构建信息页面。
请注意,VTR的官方发布版本中包含的工具已经过相互兼容性测试。如果你下载了这些工具的不同版本,它们可能不与VTR发布版本相兼容。如果在构建过程中有任何经验或反馈,官方都鼓励与他们分享,以改善其他用户的体验。
验证安装
要验证 VTR 是否已正确安装,请运行:
./vtr_flow/scripts/run_vtr_task.py regression_tests/vtr_reg_basic/basic_timing
你应该看到以下预期输出,显示基本的测试通过了:
k6_N10_mem32K_40nm/single_ff OK
k6_N10_mem32K_40nm/single_ff OK
k6_N10_mem32K_40nm/single_wire OK
k6_N10_mem32K_40nm/single_wire OK
k6_N10_mem32K_40nm/diffeq1 OK
k6_N10_mem32K_40nm/diffeq1 OK
k6_N10_mem32K_40nm/ch_intrinsics OK
k6_N10_mem32K_40nm/ch_intrinsics OK
运行VTR
现在,让我们尝试采用一个简单的预合成电路(由LUT和触发器组成),并使用VPR工具在特定的FPGA架构上实现它。
设置环境变量
export VTR_ROOT=~/vtr-verilog-to-routing
在预合成电路上运行VPR
首先,让我们在主目录中创建一个目录,我们可以在其中工作:
#Move to our home directory
cd ~
#Make a working directory
mkdir -p vtr_work/quickstart/vpr_tseng
#Move into the working directory
cd ~/vtr_work/quickstart/vpr_tseng
现在,让我们调用 VPR 工具来实现:
- 指定电路文件:
$VTR_ROOT/vtr_flow/benchmarks/blif/tseng.blif
是BLIF (Berkeley Logic Interchange Format) 文件的路径,这个文件描述了要实现的电路。 - 指定FPGA架构文件:
$VTR_ROOT/vtr_flow/arch/timing/EArch.xml
是FPGA架构的XML描述文件的路径。这个文件定义了FPGA的逻辑块、交换矩阵和其他配置。 - 设置路由通道宽度:
--route_chan_width 100
是VPR命令的一个选项,用于指定路由通道的宽度。这个参数对于FPGA的布线非常重要,因为它决定了可用于路由的并行路径数量。 执行VPR:以上文本构成了VPR的命令行调用。在命令行中输入这些内容(替换
$VTR_ROOT
为实际的路径)会启动VPR,执行以下任务:- 解析:读取并处理给定的电路文件和架构文件。
- 布局:将电路中的逻辑块放置到FPGA的物理位置。
- 布线:连接逻辑块,以实现电路的功能。
- 优化:根据指定的参数(如通道宽度),调整布线以优化性能。
$VTR_ROOT/vpr/vpr \
$VTR_ROOT/vtr_flow/arch/timing/EArch.xml \
$VTR_ROOT/vtr_flow/benchmarks/blif/tseng.blif \
--route_chan_width 100
当 VPR 实现电路时,这将产生大量输出,但您应该看到类似于以下内容的内容:
VPR FPGA Placement and Routing.
Version: 8.1.0-dev+2b5807ecf
Revision: v8.0.0-1821-g2b5807ecf
Compiled: 2020-05-21T16:39:33
Compiler: GNU 7.3.0 on Linux-4.15.0-20-generic x86_64
Build Info: release VTR_ASSERT_LEVEL=2
University of Toronto
verilogtorouting.org
vtr-users@googlegroups.com
This is free open source code under MIT license.
#
#Lots of output trimmed for brevity....
#
Geometric mean non-virtual intra-domain period: 6.22409 ns (160.666 MHz)
Fanout-weighted geomean non-virtual intra-domain period: 6.22409 ns (160.666 MHz)
VPR suceeded
The entire flow of VPR took 3.37 seconds (max_rss 40.7 MiB)
显示 VPR 成功 ,以及 VPR 运行所花费的时间(在本例中为 \~3 秒)。VPR suceeded
您还将看到 VPR 生成的各种结果文件,这些文件定义了电路实现:
> ls *.net *.place *.route
tseng.net tseng.place tseng.route
以及一个 VPR 日志文件,其中包含上次调用时 VPR 打印的内容:
> ls *.log
vpr_stdout.log
以及描述实现特征的各种报告文件:
> ls *.rpt
packing_pin_util.rpt report_timing.hold.rpt report_unconstrained_timing.hold.rpt
pre_pack.report_timing.setup.rpt report_timing.setup.rpt report_unconstrained_timing.setup.rpt
可视化电路实现
注意本部分要求在编译 VPR 时提供图形支持。有关详细信息,请参见 VPR 图形。
文件说明:
.net
文件:包含了电路中逻辑元素之间的网络连接信息。.place
文件:记录了逻辑元素在FPGA上的物理位置。.route
文件:描述了在FPGA上连接逻辑元素所需的路径。
这些文件,连同输入的
.blif
文件和架构.xml
文件,共同定义了电路的实现。分析和可视化步骤:
- 分析阶段(
--analysis
):这个选项会让VPR重新运行分析阶段,生成用于可视化的数据。 - 启用图形用户界面(
--disp on
):这个选项会开启VPR的图形用户界面,允许用户以图形方式查看和探索电路的布局和布线实现。
- 分析阶段(
- 运行命令:通过终端运行以下命令可以启动VPR的图形界面:
> $VTR_ROOT/vpr/vpr \
$VTR_ROOT/vtr_flow/arch/timing/EArch.xml \
$VTR_ROOT/vtr_flow/benchmarks/blif/tseng.blif \
--route_chan_width 100 \
--analysis --disp on
$VTR_ROOT
是VTR安装路径的环境变量。vpr/vpr
是VPR工具的执行路径。arch/timing/EArch.xml
是定义FPGA架构的文件。benchmarks/blif/tseng.blif
是描述电路的BLIF文件。--route_chan_width 100
设置路由通道的宽度。--analysis
和--disp on
是使能分析和显示图形界面的选项。
这应该会打开 VPR 图形并允许您探索电路实现。