目录
一、基本用法
二、命令行详解
2.1、阶段选项(Stage Options)
2.2、图形选项(Graphics Options )
2.3、常规选项(General Options)
2.4、文件名选项(Filename Options )
2.5、电路网表选项(Netlist Options)
一、基本用法
VPR至少需要两个命令行参数:
vpr architecture circuit
architecture 是一个 FPGA 架构描述文件。一个基于 XML 的架构描述语言,用于描述目标 FPGA 架构。
circuit 是一个以 BLIF 格式表示的技术映射电路网表,用于实现。
二、命令行详解
VPR有很多选项。运行 "vpr --help" 将显示所有可用选项及其用法信息。
-h, --help
显示帮助消息,然后退出。
2.1、阶段选项(Stage Options)
如果没有指定 --pack、--place、--route 或 --analysis 选项,则 VPR 将运行所有阶段(装箱、布局、布线和分析)。
--pack
运行装箱阶段
Default: off 默认值:关闭(off)
--place
运行布局阶段
Default: off 默认值:关闭(off)
--route
运行布线阶段。如果布线成功,则还会自动运行分析阶段(analysis)。
Default: off 默认值:关闭(off)
--analysis
运行最终的分析阶段(例如时序、功耗)。
Default: off 默认值:关闭(off)
2.2、图形选项(Graphics Options )
--disp {on | off}
控制是否启用 VPR 的交互式图形界面。图形界面对于检查和调试 FPGA 架构和/或电路实现非常有用。
Default: off 默认值:关闭(off)
--auto <int>
可以设置为 0、1 或 2。这会确定在查看图形后,您需要点击“Proceed”按钮以继续执行的频率。数字越大,程序暂停的频率就越低。
Default: 1 默认值:1
--save_graphics {on | off}
如果设置为开启(on),此选项将自动将 VPR 生成的最终布局和最终布线保存为 PDF 文件,无需任何用户交互。文件名分别为 vpr_placement.pdf 和 vpr_routing.pdf。
Default: off 默认值:关闭(off)
--graphics_commands <string>
一组用分号分隔的图形命令。图形命令必须用引号括起来(例如:--graphics_commands "save_graphics place.png;")。
save_graphics <file>
将图形保存到指定的文件(.png/.pdf/.svg)。如果 <file> 中包含 {i},它将被替换为一个整数,每次调用图形时会递增。
set_macros <int>
设置布局宏绘图状态。
set_nets <int>
设置网路绘图状态。
set_cpd <int>
设置关键路径延迟绘图状态。
set_routing_util <int>
设置布线利用率绘图状态。
set_clip_routing_util <int>
设置是否将布线利用率值裁剪到 [0, 1] 范围内。需要在图像之间保持一致比例时很有用。
set_draw_block_outlines <int>
设置是否绘制块周围的轮廓线。
set_draw_block_text <int>
设置是否在块上绘制标签文本。
set_draw_block_internals <int>
设置块内部绘制的级别。
set_draw_net_max_fanout <int>
设置要绘制的网络的最大扇出(如果扇出超过此值,则不会绘制该网络)。
set_congestion <int>
设置布线拥塞绘图状态。
exit <int>
使用指定的退出码退出 VPR。
实例:
"save_graphics place.png; \set_nets 1; save_graphics nets1.png;\set_nets 2; save_graphics nets2.png; set_nets 0;\set_cpd 1; save_graphics cpd1.png; \set_cpd 3; save_graphics cpd3.png; set_cpd 0; \set_routing_util 5; save_graphics routing_util5.png; \set_routing_util 0; \set_congestion 1; save_graphics congestion1.png;"
上述命令切换了各种图形设置(例如绘制网络、绘制关键路径),然后将结果保存为 .png 文件。
请注意,在执行这些命令后,绘图状态会被重置为先前的状态。
与交互式图形界面的选项 `<--disp>` 类似,`--auto` 选项控制了指定此选项的命令被调用的频率。
2.3、常规选项(General Options)
--version
显示版本信息,然后退出。
--device <string>
指定要使用架构文件中的哪个设备布局/平面图。
默认值:auto
"auto" 使用满足电路资源需求的最小设备。其他值被认为是架构文件中定义的 FPGA 网格布局部分的设备布局名称。
注意:如果架构中同时包含 <auto_layout> 和 <fixed_layout> 规范,指定一个 auto 设备将使用 <auto_layout>。
-j, --num_workers <int>
控制 VPR 可以使用的并行工作器数量:
1:表示 VPR 将串行执行,即不使用并行工作器。
>1:表示 VPR 可以并行执行,最多使用指定的并发数。
0 :表示 VPR 可以与主机机器支持的最大并发数一起执行。
如果没有指定此选项,可以从 VPR_NUM_WORKERS 环境变量中设置;否则将使用默认值。
注意:为了编译 VPR 以允许使用并行工作器,必须在系统中安装 libtbb-dev。
默认值:1
--timing_analysis {on | off}
关闭 VPR 的时序分析。如果关闭时序分析,则无需在架构文件中指定各种时序分析参数。
Default: on
--echo_file {on | off}
生成关键内部数据结构的回显文件。这些文件通常用于调试 vpr,并且通常以 .echo 结尾。
Default: off
--target_utilization <float>
设置目标设备利用率。这对应于要使用的设备网格单元的最大目标比例。值为1.0表示将使用适合电路的最小设备。
Default: 1.0
--constant_net_method {global | route}
指定如何处理常量网络(即驱动到常量值的网络):
global: 将常量网络视为全局网络(不进行布线)。
route: 将常量网络视为普通网络(进行布线)。
Default: global
--clock_modeling {ideal | route | dedicated_network}
ideal: 将时钟引脚视为理想引脚(即时钟没有布线延迟)。
route: 将时钟网络视为普通网络(即使用区块间布线进行布线)。
dedicated_network: 使用架构的专用时钟网络(实验性功能)。
Default: ideal
--two_stage_clock_routing {on | off}
使用专用时钟网络对时钟网络进行两阶段布线。
第一阶段:从网络源(例如,I/O 引脚)到专用时钟网络的根节点(例如,芯片中心)。
第二阶段:从时钟网络根节点到网络的接收器。
请注意,此选项仅在指定时钟架构时生效,请参考时钟架构格式;在读取路由资源图时(即--read_rr_graph),此选项无效。
Default: off
--exit_before_pack {on | off}
在开始进行打包之前导致 VPR 退出(用于收集统计信息)。
Default: off 默认值:off 关闭
--strict_checks {on, off}
控制 VPR 是否以严格模式(作为错误)执行某些一致性检查,还是将其视为警告。
通常,这些检查指示目标架构存在问题,或者与 VPR 的内部数据结构/算法一致性存在问题(可能会影响优化质量)。在特定的情况和特定的架构上,这些检查可能过于严格,可以将其关闭。
警告:在关闭此选项时要非常谨慎 - 确保您完全理解为什么出现了问题,以及为什么将其视为警告而不是错误是可以接受的。
Default: on
--terminate_if_timing_fails {on, off}
控制VPR在布线后是否应终止执行,如果未满足时序要求。
Default: off 默认值:off 关闭
2.4、文件名选项(Filename Options )
默认情况下,VPR会在用户提供的电路名称后附加`.blif`、`.net`、`.place`和`.route`作为文件名,并在工作目录中查找与电路名称相同的SDC文件。使用以下选项可以覆盖此默认的命名行为。
--circuit_file <file>
以BLIF格式表示的技术映射用户电路的路径。
Note:注意:如果指定了`circuit`位置参数,则会将其视为电路名称。
--circuit_format {auto | blif | eblif}
输入技术映射用户电路的文件格式。
auto: 根据文件扩展名推断文件格式(例如,.blif或.eblif)。
blif: 严格的结构化BLIF格式。
eblif:带扩展的结构化BLIF格式。
Default: auto
--net_file <file>
用户电路打包后的net格式文件的路径。
Default: circuit.net
--place_file <file>
最终布局文件的路径。
Default: circuit.place
--route_file <file>
最终布线文件的路径。
Default: circuit.route
--sdc_file <file>
SDC时序约束文件的路径。
Default: circuit.sdc
--write_rr_graph <file>
将VPR在最后阶段生成的路由资源图以RR Graph文件格式写出。可以使用`--read_rr_graph`选项将输出文件读入VPR中。
`<file>`描述生成的路由资源图的文件名。接受的扩展名为`.xml`和`.bin`,用于以XML或二进制(Cap'n Proto)格式写入图形。
--read_rr_graph <file>
读取名为`<file>`的路由资源图文件,并在布局和布线阶段加载该图形以供使用。文件扩展名应为`.xml`或`.bin`。
路由资源图覆盖了关于开关、节点和边的所有架构定义。其他信息,如网格信息、块类型和段信息,将与架构文件匹配以确保准确性。
可以通过使用`--write_rr_graph`选项获取该文件。
--read_vpr_constraints <file>
从指定的XML文件中读取布局约束,要求打包和布局必须遵守这些约束。
--write_vpr_constraints <file>
根据当前布局将新的布局约束写入指定的XML文件。
--read_router_lookahead <file>
从指定的文件中读取前瞻数据,而不是计算它。
--write_router_lookahead <file>
将前瞻数据写入指定的文件。
--read_placement_delay_lookup <file>
从指定的文件中读取布局延迟查找表,而不是计算它。
--write_placement_delay_lookup <file>
将布局延迟查找表写入指定的文件。
--outfile_prefix <string>
输出文件的前缀。
2.5、电路网表选项(Netlist Options)
默认情况下,VPR会移除缓冲器LUT,并迭代地扫描电路网表以移除未使用的主输入/输出、网络和模块,直到无法再移除为止。
这意味着VPR会对电路网表进行优化,删除不必要的部分以减少资源使用和提高性能。它会首先移除缓冲器LUT,因为它们可能不是必需的,并且可能引入额外的延迟。然后,它会迭代地扫描网表,检查哪些主输入/输出、网络和模块没有被使用,然后将其移除。这可以减少电路的规模和复杂度,从而提高布局和布线的效率。最终,VPR将达到一种状态,无法再移除任何未使用的部分,这时候优化过程结束。
--absorb_buffer_luts {on | off}
控制是否将以线路方式编程的LUT(即实现逻辑恒等的LUT)吸收到下游逻辑中。
这个选项控制是否将作为线路(实现逻辑恒等性)编程的LUT合并到下游逻辑中。当一个LUT被编程为实现逻辑恒等性时,它的输出始终与输入相同。如果这个选项被启用,VPR会尝试将这样的LUT与其下游逻辑合并,从而减少LUT的数量和延迟。这种优化可以提高电路的效率和性能。
通常情况下,上游工具会在BLIF电路中引入缓冲LUT,以便对信号进行重命名(类似Verilog中的assign语句)。吸收这些缓冲器可以减少实现电路所需的LUT数量。
偶尔会出于其他目的插入缓冲LUT,此选项可用于保留它们。禁用缓冲吸收也可以改善输入和后综合网表/SDF之间的匹配。
这意味着禁用缓冲吸收功能可以保留原始电路中插入的缓冲器,而不会将其合并到后续的逻辑中。这在某些情况下可能是有意义的,例如当需要与原始的综合后网表或时序约束进行精确匹配时。禁用缓冲吸收功能可以确保原始电路的结构和逻辑不被改变,以满足特定的需求。
Default: on
--const_gen_inference {none | comb | comb_seq}
控制输入电路中常量生成器的推断/检测方式。在时序分析过程中,不会考虑常量生成器及其驱动的信号。
none: 不进行常量生成器的推断。实际上为常量的信号将被视为非常量。
comb: VPR将从没有非常量输入的组合逻辑块中推断常量生成器(始终是安全的)。
comb_seq: VPR将从仅具有常量输入的组合逻辑块和时序逻辑块中推断常量生成器(通常是安全的)。
注意:在罕见情况下,`comb_seq` 可能会错误地将某些块识别为常量生成器。这只会发生在时序电路原语具有完全独立于任何数据输入的内部状态演化的情况下(例如,硬化的 LFSR 块、嵌入式热传感器)。
Default: comb_seq
--sweep_dangling_primary_ios {on | off}
控制是否对电路中的孤立主输入和主输出(即不驱动任何信号,也不被任何信号驱动)进行清理和从电路中移除。
这个选项控制是否对那些在电路中没有连接到其他信号的主输入和主输出进行清理和移除操作。通常,这些孤立的主输入和主输出是无效的,因此将它们从电路中移除可以减少电路的复杂性和冗余。
禁用对主输入/输出的清理可以改善输入和后合成网表之间的匹配。这在进行形式验证时通常很有用。通过保留未连接的主输入/输出,可以更好地比较原始电路和后综合电路之间的结构和逻辑。
Default: on
--sweep_dangling_nets {on | off}
控制是否清理悬空网络(即不驱动或不被其他信号驱动的网络)并将其从电路网表中移除。
Default: on
--sweep_dangling_blocks {on | off}
控制是否清理悬空的逻辑块(即不驱动任何其他信号的块)并将其从电路网表中移除。
Default: on
--sweep_constant_primary_outputs {on | off}
控制是否清理由常量值驱动的主输出,并将其从电路网表中移除。
当设置为启用时,该选项将删除由常量值驱动的主输出。这些主输出可能是不必要的,因为它们始终具有固定的值,不会对电路的功能产生影响。这样做可以减少电路的规模和复杂性,提高布局和布线的效率。但需要注意,如果在后续的分析或验证中需要使用这些主输出,可能需要禁用该选项以保留它们。
Default: off
--netlist_verbosity <int>
控制网表处理的详细程度(常量生成器检测、被删除的网表组件)。较高的值会产生更详细的输出。
Default: 1