2.6 设计的分析和综合处理
本节将对设计进行分析和综合(Analysis&Synthesis),内容主要包括分析和综合的概念、分析和综合的属性选项、分析和综合的实现,以及查看分析和综合的结果。
2.6.1 分析和综合的概念
设计的分析和综合是一个处理工程,它将设计源文件转换为原子网表(Atom Netlist),用于映射到器件资源。Quartus 编译器综合符合标准的 Verilog HDL(.v)、VHDL(.vhd)和SystemVerilog(.sv)。编译器也综合块设计文件(Block Design File,BDF)、原理图文件和由其他EDA工具生成的Verilog Quartus映射(Verilog Quartus Mapping,VQM)文件。
综合检查逻辑的完整性和设计的一致性,并且检查边界连接和语法错误。综合也最小化和优化设计逻辑。例如,综合从“行为”语言(如Verilog HDL、VHDL和SystemVerilog)中推断D触发器、锁存器和状态机。当有利时,综合可以用Quartus Prime IP核库中的模块代替运算符,如“+”或“-”。在综合期间,编译器可以更改或删除用户逻辑和设计节点。Quartus Prime综合可以最大限度地减少逻辑门的数量,消除冗余逻辑,并确保有效地使用器件资源。
综合结束时,编译器生成一个原子网表,如图 2.34 所示。原子(Atom)是指 FPGA 器件中最基本的硬件资源。原子包括有组织的逻辑单元查找表、D 触发器、I/O 引脚、块存储器资源、DSP块和原子之间的连接。原子网表是原子元素的数据库,设计综合要求在硅片中实现。
图2.34 Quartus Prime综合后的结果
编译器的Analysis&Synthesis(分析和综合)模块综合设计文件,并为每个设计分区创建一个或多个项目数据库。设计者可以指定影响综合处理的不同设置。
编译器在综合快照中保留Analysis&Synthesis(分析和综合)的结果。
1.时序驱动综合
时序驱动(Timing-Driven)的综合用于指导编译器在综合期间考虑设计者给出的时序约束。时序驱动综合运行初始时序分析以得到网表时序信息,然后综合将性能优化集中在时序关键设计元素上,同时优化非时序关键部分的面积。
时序驱动的综合保留了时序约束,并且不执行与时序约束冲突的优化。时序驱动的综合可能会增加所要求器件资源的数量。具体地,可能增加 ALUT 和寄存器的数量。总的面积可能增加或减少。运行时间和峰值存储器的使用会略微增加。
2.分散综合优化
设计者可以启动可选的分散综合(Fractal Synthesis)优化,这些优化对于深度学习加速器,以及超出所有可用 DSP 资源的其他高吞吐量、算术密集型设计非常有用。对于这样的设置,分散综合可以减少20%~45%的面积。
分散综合是一组综合优化,它们以最优的方式为算术密集型设计使用FPGA资源。这些综合优化由乘法器正则化和重定时,以及连续算术封装(打包)组成。针对具有大量低精度算术运算(如加法和乘法)的设计进行优化。设计者可以在“Advanced Analysis&Synthesis Settings”(高级分析和综合设置)对话框中使能工程级的分散综合,或者在 Assignment Editor(分配编辑器)中通过实体分配实现。
为了使用分散综合优化,识别分散综合引擎关注的基本算术构件块,并使用FRACTAL_SYNTHESIS属性来标记它。可以使用下面的方法指定属性。
(1)在RTL中,使用altera_attribute:
(2)在QSF文件中添加如下的分配:
3.乘法器正则化和重定时
乘法器正则化和重定时执行高度优化的软件乘法器。如果需要,编译器可以将向后重定时用于两个或更多的流水线级。当使能分散综合时,编译器将乘法器正则化和重定时应用于有符号和无符号乘法器。乘法器正则化和重定时只使用逻辑资源,不使用DSP块。
一个使用分散综合的简单点乘运算的Verilog HDL描述如代码清单2-2所示。
代码清单2-2 一个使用分散综合的简单点乘的Verilog HDL描述
对该设计执行Analysis&Synthesis后,“Console Message”窗口给出的信息如图2.35所示。从图中可知,该乘法器使用的是逻辑资源,并没有使用DSP块。
图2.35 “Console Message”窗口
4.减少编译时间
Quartus Prime Pro 软件支持各种策略,以减少整体编译时间。在大型设计上运行包括所有编译器模块的完整编译可能非常耗时。可以使用下面技术来减少设计的整体编译时间。
(1)并行编译。编译器检测并使用多个处理器以减少编译时间(使用具有多个处理器内核的系统)。
(2)增量优化。将编译分解为单独的阶段,允许在运行完整编译之前,在各个编译阶段对结果进行迭代分析并优化设置。
(3)对改变的块快速重新编译。编译器重用以前的编译结果,不会重新处理未更改的设计块。建议此流程在HDL中进行小的设计更改,或者添加或更改Signal Tap调试逻辑。
2.6.2 分析和综合的属性选项
本节将对分析和综合的属性选项进行说明,通过设置这些属性选项为设计定制综合处理过程。读者可以通过以下方式打开Compiler Settings。
(1)在Quartus Prime Pro主界面主菜单下,选择Assignments->Settings;
(2)在图2.29所示的“Tasks”窗口中找到并单击“Settings...”。
打开如图 2.36 所示的“Settings-top”对话框。在该对话框左侧的“Category”窗口中,找到并单击“Compiler Settings”选项。在右侧的“Compiler Settings”窗口中,给出了需要设置的编译器参数。下面对这些参数的含义进行详细说明,以帮助读者能正确设置编译器参数。
图2.36 “Settings-top”对话框
1.使能中间适配器快照
为了节约编译时间,编译器不保存规划的、布局的、布线的或重定时的快照。但是,设计者可以启用“Enable Intermediate Fitter Snapshots”选项,以生成和保留规划、布局、布线和重定时阶段的快照。此外,设计者可以独立运行适配阶段中间的任何阶段以生成该阶段的快照。
注
必须启用“Enable Intermediate Fitter Snapshots”选项,才能使用快速编译功能。
2.优化模式
以下选项用于指导综合期间编译器优化工作的重点,如表 2.3 所示。指定一个平衡(Balanced)策略或者为性能(Performance)、面积(Area)、布线能力(Routability)、功耗(Power)或编译时间(Compile Time)进行优化。设置会影响综合和适配。
表2.3 优化模式
注
(1)使能“Aggressive Compile Time”将启用Intel Quartus Prime设置文件(Quartus Prime Settings File),它不能被其他.qsf文件设置覆盖。
(2)通过使用.qsf分配,如果为Design Space Explorer II使能扩展的优化模式,然后为该项目修订打开“Compiler Settings”选项卡,则“Compiler Setting”选项卡指示扩展优化模式将恢复为“Compiler Settings”选项卡其中的一个优化模式。
3.允许寄存器重定时
允许寄存器重定时(Allow Register Retiming)选项控制是否全局禁止重定时。当打开该选项时,编译器自动执行寄存器重定时优化,移动穿过组合逻辑的寄存器。当关闭该选项时,编译器会在全局范围内阻止进行任何重定时优化。可选地,为指定设计部分的任何设计实体或实例分配“Allow Register Retiming”。在主界面主菜单下,选择Assignments->Assignment Editor,以指定实体级别和实例级别的分配,或使用下面的语法直接在.qsf中进行分配。
(1)设计实体abc禁止寄存器重定时。
set_global_assignment-name ALLOW_REGISTER_RETIMING ON set_instance_assignment-name ALLOW_REGISTER_RETIMING OFF-to"abc|"set_instance_assignment-name ALLOW_REGISTER_RETIMING ON-to"abc|def|"
(2)除实体abc外,禁止整个设计寄存器重定时。
set_global_assignment-name ALLOW_REGISTER_RETIMING OFF set_instance_assignment-name ALLOW_REGISTER_RETIMING ON-to"abc|"set_instance_assignment-name ALLOW_REGISTER_RETIMING OFF-to"abc|def|"
4.高级综合设置
单击图 2.36 右侧“Compiler Settings”窗口中的“Advanced Settings(Synthesis)...”按钮,出现“Advanced Analysis&Synthesis Settings”对话框,如图2.37所示。
图2.37 “Advanced Analysis&Synthesis Settings”对话框
下面将介绍高级分析和综合设置的选项,如表2.4所示。
表2.4 高级分析和综合设置的选项
续表
续表
续表
续表
5.HDL参数设置界面
在图 2.36 所示的“Settings-top”对话框左侧的“Category”窗口中,找到并展开“Compiler Settings”选项。在展开项中:
(1)单击“VHDL Input”选项,右侧的“VHDL Input”窗口如图2.38所示,在该窗口中提供了用于直接编译和仿真VHDL输入文件的选项。
图2.38 “VHDL Input”窗口
(2)单击“Verilog HDL Input”选项,右侧的“Verilog HDL Input”窗口如图 2.39 所示,在该窗口中提供了用于直接编译和仿真Verilog HDL输入文件的选项。
图2.39 “Verilog HDL Input”窗口
2.6.3 分析和综合的实现
本节将对前面的设计进行分析和综合(Analysis&Synthesis)过程,主要步骤包括:
(1)在 Quartus Prime Pro 设计的主界面中,找到并单击“Compilation Dashboard”选项,出现如图2.40所示的界面。
在图2.40所示的界面中,给出了完整的处理流程,包括Compile Design(编译设计,可以自动执行完整的处理流程)、IP Generation(IP生成)、Analysis&Synthesis(分析和综合)、Fitter(适配器,自动执行完整编译流程中的适配过程)、Fitter(Implement)(适配器实现,自动执行编译过程中适配过程的实现阶段)、Plan (规划)、Early Place (早期布局)、Place(布局)、Route(布线)、Fitter(Finalize)(适配器完成),自动执行编译过程中适配过程的完成阶段)、Timing Analysis(时序分析)、Power Analysis(功耗分析)、Assembler(Generate programming files)(装配器,生成编程文件)和 EDA Netlist Writer (EDA网表写入)。
图2.40 “Compilation Dashboard”界面
单击图中的按钮,可以打开不同处理流程对应的设置窗口。
① 单击IP Generation前面的按钮,打开“Settings-top”对话框,如图2.41所示。在该对话框右侧的为“IP Settings”窗口。在该窗口中,可以设置 IP 核产生的 HDL 语言类型(IP generation HDL preference)、IP重新生成策略(IP Regeneration Policy)等。
图2.41 “Settings-top”对话框
② 单击Analysis&Synthesis前面的按钮,打开如图2.36所示的“Settings-top”对话框。
(2)单击 Analysis&Synthesis 前面的按钮,运行分析和综合的过程。从运行分析和综合的过程可知,Quartus Prime Pro的编译过程是强关联性的,即下一个处理阶段强依赖于前面处理阶段的完成,如果在执行下一个处理阶段时没有执行前一个处理阶段,则编译流程会自动执行前一个处理阶段。如图2.42所示,在执行Analysis&Synthesis(分析和综合)处理阶段时,自动先执行了IP Generation的处理阶段。当正确处理完所对应的阶段时,在该阶段前面用标记,否则用标记。从图2.42可知,编译过程成功地执行了IP Generation和Analysis&Synthesis。
图2.42 运行完分析和综合后的编译流程界面
2.6.4 查看分析和综合的结果
本节将通过Quartus Prime Pro软件提供的工具查看对设计执行分析和综合后的结果。
1.查看综合总结
单击图 2.42 中 Analysis&Synthesis 后的按钮,可以打开“Compilation Report-top”界面,如图2.43所示。此外,如图2.44所示,也可以通过单击“Tasks”窗口中“Compilation”标题栏下的“Compilation Report”选项打开“Compilation Report-top”界面。
图2.43 “Compilation Report-top”界面
图2.43的Synthesis文件夹下保存了综合的报告选项(与设计有关)。完整的综合报告选项如表2.5所示。
表2.5 完整的综合报告选项(与设计有关)
在图2.43所示界面左侧的“Table of Contents”窗口中,找到并展开“Synthesis”。在展开项中,找到并展开“Partition ‘root_partition’”。在展开项中,找到并单击“Resource Usage Summary for Partition‘root_partition’”。在右侧窗口中,给出了使用FPGA器件的资源列表。
图2.44 “Tasks”窗口
思考与练习2-3:根据所使用资源的列表,给出在该设计中使用的资源。
① 使用的ALM的个数为_________,触发器的个数为___________。
② 使用的I/O引脚的数量为_________________。
③ 最大扇出节点为_____________,扇出量为_____________________。
2.查看RTL视图
单击图2.42中Analysis&Synthesis后的按钮,可以打开RTL Viewer视图。此外,如图2.44所示,也可以通过单击“Tasks”窗口中“Analysis”标题栏下的“RTL Viewer”选项,打开RTL Viewer视图,如图2.45所示。
图2.45 RTL Viewer视图
从图 2.45 中可知,RTL Viewer 视图给出了该设计的逻辑结构,该逻辑结构由 3 部分组成:
(1)第一部分包括两个D触发器,输入a和b分别连接到一个D触发器的输入;
(2)两个D触发器的输出连接到由4个逻辑门组成的组合逻辑电路中;
(3)4 个逻辑门的输出连接到 6 个 DS 触发器的输入端。在此需要特别注意,标识为z[0]~reg0 和 z[1]~reg0 的两个触发器的输入端虽然连接到了相同的逻辑门输出,但是两个触发器输入端的标识有所不同,一个触发器的输入端有取反标识。
因此,该电路由组合逻辑和时序逻辑构成。输入一级的触发器和输出一级的触发器有重定时功能。
思考与练习 2-4:输入级触发器的作用是_________________,输出级触发器的作用是___________。
(提示:两级触发器的功能有所差异)
下面给出一些操作小技巧。
(1)当把鼠标的光标放到图2.45电路中的每个连线上时,会自动弹出该网络的名字。
(2)鼠标右键单击图 2.45 电路中的任意一个设计元素,如 D 触发器或逻辑门,出现浮动菜单,如图2.46所示。在浮动菜单内,选择Locate Node。出现浮动子菜单,在浮动子菜单内,可以选择Locate in Design File,可以找到RTL网表所对应的Verilog HDL描述。这样可以很容易地建立Verilog HDL描述和数字逻辑硬件之间的对应关系。
图2.46 定位菜单选项
(3)在Quartus Prime Pro主界面主菜单下,选择Window,如图2.47所示。通过勾选不同选项前面的复选框,可以实现在不同选项之间的切换。
图2.47 在不同选项之间进行切换
3.查看映射后视图
单击图 2.42 中 Analysis&Synthesis 后的按钮,可以打开 Technology Map Viewer(Post-Mapping)视图。此外,如图 2.44 所示,也可以通过单击“Tasks”窗口中“Analysis”标题栏下的“Technology Map Viewer(Post-Mapping)”选项,打开 Technology Map View(Post-Mapping)视图,如图2.48所示。
图2.48 Technology Map View(Post-Mapping)视图
很明显,映射后的网表和 RTL 网表有所不同,这是因为映射后,综合工具将逻辑单元转换为器件的资源。典型地,将 RTL 网表中的组合逻辑门电路用 LUT 代替,这是因为FPGA是基于查找表结构的,设计中的组合逻辑使用FPGA内的LUT实现。
下面对这个网表结构进行简要分析。
(1)选中标识为“a_1”的 D 触发器,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Properties。在“Technology Map View:Post-Mapping”对话框的左侧出现“Properties”窗口,如图 2.49(a)所示,单击该窗口中的“Fan-in”和“Fan-out”标签,可以查看该触发器的扇入和扇出。很明显,该触发器的扇入为clk和a;扇出为z_1[4]、z_1[2]和z_1[0]。
(2)选中标识为“z_1[0]”的查找表,单击鼠标右键,出现浮动菜单。在浮动菜单内,选择Properties。在“Technology Map View:Post-Mapping”对话框的左侧出现“Properties”窗口,如图 2.49(b)所示,单击“z_1[0]”标签,在该标签页下面的窗口中,分别单击“Fan-in”(扇入)、“Fan-out”(扇出)、“Ports”(端口)和“Equation”(等式)标签,查看该LUT的细节。
(3)单击图 2.49(b)中的“F”标签,如图 2.49(c)所示,在该标签页下方分别单击“Ports”(端口)、“Truth Table”(真值表)和“Equation”(等式)标签,查看LUT内的逻辑关系。
思考与练习 2-5:请读者自行分析设计元件的属性(提示:为什么 LUT 内的逻辑和RTL的关系是取反的,适配后的结果就能说明这个现象)。
图2.49 不同设计元素的属性窗口