原文链接: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 图形

  1. 文件说明

    • .net 文件:包含了电路中逻辑元素之间的网络连接信息。
    • .place 文件:记录了逻辑元素在FPGA上的物理位置。
    • .route 文件:描述了在FPGA上连接逻辑元素所需的路径。

    这些文件,连同输入的 .blif 文件和架构 .xml 文件,共同定义了电路的实现。

  2. 分析和可视化步骤

    • 分析阶段(--analysis:这个选项会让VPR重新运行分析阶段,生成用于可视化的数据。
    • 启用图形用户界面(--disp on:这个选项会开启VPR的图形用户界面,允许用户以图形方式查看和探索电路的布局和布线实现。
  3. 运行命令:通过终端运行以下命令可以启动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 图形并允许您探索电路实现。

最后修改:2023 年 11 月 18 日
如果觉得我的文章对你有用,请随意赞赏