ug901信息整理--逐步整理中

7 篇文章 0 订阅

这个文档是Vivado Design Suite用户指南中的Synthesis部分,介绍了Vivado综合的方法论、使用方法、设置流程、增量综合、第三方综合工具的使用、多线程RTL综合、综合属性的使用、块级综合策略、HDL编码技巧等内容。其中包括了VHDL、Verilog和SystemVerilog的优点、寄存器、锁存器、三态门、移位寄存器、乘法器、DSP块中的预加器和平方器等详细的讲解。

Vivado Design Suite User Guide for Synthesis(UG901)的引言一章介绍了Vivado Synthesis的基本知识。它解释了合成的方法和如何使用。本章还涵盖了运行合成、设置自下而上的断章取义流程、增量合成、使用Vivado IP的第三方合成工具、监控合成运行以及分析合成结果等主题。此外,本章探索了综合设计环境,并讨论了如何探索逻辑和运行时序分析。最后,它涵盖了RTL合成中的多线程和Vivado预配置策略。

《Vivado Design Suite用户指南》中的“使用合成设置”一章介绍了合成过程中可以使用的不同选项和设置。它涵盖了调试日志、使用Tcl运行合成以及更新VHDL示例等主题。本章还提供了有关FSM编码、RAM样式和SRL样式的信息。总的来说,本章提供了关于如何有效使用合成设置以优化合成设计的性能和功能的指导。

要在“设置”对话框的“约束”部分下选择“默认约束集”作为活动约束集,需要打开Vivado Design Suite并导航到“设置”对话框。在“约束”区域中,可以选择“默认约束集”作为活动约束集。有两种类型的设计约束:物理约束和定时约束,前者定义引脚位置和单元的绝对或相对位置,如块RAM、LUT、触发器和设备配置设置,后者定义设计的频率要求。Vivado设计套件在没有时间限制的情况下,仅针对导线长度和放置拥塞进行优化设计。要了解有关组织约束的更多信息,可以参考Vivado Design Suite用户指南:使用约束(UG903)[Ref 12]。应用选定的约束集时,Vivado合成会将此约束集作为设计更改的目标。

文中档提供了Vivado Synthesis工具中可用于优化合成过程的选项列表。其中一个选项是-bufg,它控制工具在设计中推断出的bufg的数量。该工具推断出指定的数量,并跟踪RTL中实例化了多少BUFG。例如,如果-bufg选项设置为12,并且RTL中实例化了三个bufg,那么Vivado合成工具最多可以推断出九个bufg。另一个选项是-directive,它取代了-effert_level选项。如果指定,此选项将使用不同的优化运行Vivado合成。有几个可用的值,包括Default(默认值)、RuntimeOptimized(运行时间优化)、AreaOptimized_high(区域优化高)、Area Optimized_medium(区域优化中等)、AlternateRoutable(可替代路由)、AreaSMapLargeShiftRegToBRAM、AreaMultThresholdDSP、FewerCarryChains和LogicCompact。每个值都有自己的一组策略和设置,可以进行自定义。其他选项包括-retimeing,它提供了一个选项,通过在组合门或LUT之间自动移动寄存器来提高时钟内顺序路径的电路性能,以及-max_bram,它描述了设计中允许的块RAM的最大数量。默认设置-1表示工具选择指定零件允许的最大数量。总的来说,这些选项可以用于自定义和优化Vivado合成工具中的合成过程。

介绍几个参数,第一个参数是“no_timing_driven”,它禁用默认的定时驱动合成算法。这导致合成运行时间减少,但忽略了定时对合成的影响。第二个参数是“-sfcu”,用于在单文件编译单元模式下运行合成。第三个参数是“-assert”,它使VHDL断言语句能够被评估。故障或错误的严重程度会停止合成流程并产生错误。严重级别的警告会生成警告。第四个参数是“-debug _log”,它在合成日志文件中打印出额外的信息,用于调试。应将此参数添加到“更多选项”字段中。第五个和第六个参数是“tcl.pre”和“tcl.post”,它们是在合成前后立即运行的tcl文件的挂钩。tcl.pre和tcl.post脚本中的路径相对于当前项目的关联运行目录:<project>/<project.runs>/<run_name>。有关tcl脚本的更多信息,请参阅Vivado Design Suite用户指南:使用tcl脚本(UG894)。要在脚本中定义相对路径,请使用当前项目或当前运行的DIRECTORY属性。

在Vivado Design Suite User Guide for Synthesis中,当一个文件有声明,而另一个文件依赖于该声明时,问题是询问必要的编译顺序。Vivado IDE控制RTL源文件的编译,从“源”窗口“编译顺序”窗口中显示的图形层次结构的顶部到底部。Vivado工具会自动识别和设置最佳的顶级模块候选,并自动管理编译顺序。顶部模块文件和活动层次结构下的所有源将按正确顺序传递给合成和模拟。在“源”窗口中,弹出菜单提供“层次更新”命令。提供的选项为Vivado IDE指定了如何处理设计中对顶部模块和源文件的更改。默认设置“自动更新和编译顺序”指定该工具管理“编译顺序”窗口中显示的编译顺序,并显示使用的模块以及它们在“层次结构”窗口的层次结构树中的位置。要在合成前修改编译顺序,请选择一个文件,然后右键单击“层次更新”>“自动更新”,“手动编译顺序”,以便Vivado IDE可以自动确定设计的最佳顶层模块,并允许手动指定编译顺序。默认情况下,“手动编译”处于禁用状态。如果您选择一个文件并在“编译顺序”窗口中移动它,则会出现一个弹出菜单,询问您是否希望打开“手动编译”。

控制文件编译顺序是为了保证当一个文件有声明而另一个文件依赖于该声明时能够正确编译。Vivado IDE会从Sources窗口的Compile Order窗口的顶部到底部控制RTL源文件的编译顺序,并自动确定最佳的顶层模块候选项,并自动管理编译顺序。如果需要手动修改编译顺序,可以选择一个文件,右键点击Hierarchy Update,选择Manual Compile Order选项,这样Vivado IDE就可以自动确定设计的最佳顶层模块,并允许手动指定编译顺序。控制文件编译顺序可以确保设计能够正确编译,避免出现编译错误。

为什么要定义全局包含文件? 设计中可能会使用一些公共的头文件,这些头文件可能需要在设计中多个使用的Verilog源文件中重复使用。定义全局包含文件可以在任何其他源文件之前处理这些文件,从而确保它们在整个设计中可用。这样可以避免在多个源文件中重复包含相同的头文件。定义全局包含文件可以提高代码的可读性和可维护性。

这篇文档中,-flatten_hierarchy是用于控制Vivado综合工具如何处理层次结构的选项。它有三个可选值:full、none和rebuilt。full表示完全扁平化层次结构,none表示维持原始RTL的层次结构,rebuilt表示在综合前扁平化层次结构,在综合后重新构建层次结构。默认值是rebuilt。这篇文档中,-flatten_hierarchy是用于控制Vivado综合工具如何处理层次结构的选项。它有三个可选值:full、none和rebuilt。full表示完全扁平化层次结构,none表示维持原始RTL的层次结构,rebuilt表示在综合前扁平化层次结构,在综合后重新构建层次结构。默认值是rebuilt。

这篇文档中,-flatten_hierarchy是用于控制Vivado综合工具如何处理层次结构的选项。它有三个可选值:full、none和rebuilt。full表示完全扁平化层次结构,none表示维持原始RTL的层次结构,rebuilt表示在综合前扁平化层次结构,在综合后重新构建层次结构。默认值是rebuilt。

这篇文档中提到了-gated_clock_conversion,它是Vivado综合工具中的一个选项,用于控制门控时钟的转换。可以在Tools > Settings > Project Settings > Synthesis中设置该选项的取值,包括off、on和auto。当取值为on时,如果RTL代码中设置了gated_clock属性,则进行门控时钟转换。当取值为auto时,如果RTL代码中设置了gated_clock属性为TRUE或Vivado综合工具能够检测到门并设置了有效的时钟约束,则进行门控时钟转换。需要注意的是,如果在需要支持转换的层次结构或实例上放置了KEEP_HIERARCHY、DONT_TOUCH和MARK_DEBUG等属性,则可能会干扰门控时钟的转换。

这篇文档中,-fsm_extraction是一个Vivado综合工具的选项,用于控制有限状态机(FSM)的提取。默认情况下,FSM提取是启用的,但可以使用-fsm_extraction off选项禁用FSM提取。FSM提取是Vivado综合工具的一个特性,可以推断出同步FSM组件,并具有内置的FSM编码策略,以适应优化目标。

根据Xilinx Vivado Synthesis文档中的内容,Vivado Synthesis有特定的推断能力来推断同步有限状态机(FSM)组件。在HDL代码中,如果定义了状态寄存器、下一个状态函数和输出函数,则Vivado Synthesis可以推断出同步FSM组件。推断出的FSM组件将在日志文件中显示INFO消息,给出有关FSM组件及其编码的信息。例如,日志文件中的INFO消息可以显示:“INFO: [Synth 8-802] inferred FSM for state register 'state_reg' in module 'fsm_test'”表示Vivado Synthesis推断出了名为'state_reg'的状态寄存器所在的同步FSM组件。

这篇文档中提到了一个选项 -keep_equivalent_registers,它可以防止源自相同逻辑的寄存器被合并。这个选项可以通过在综合时使用 KEEP 属性来实现。具体来说,如果两个寄存器的输入逻辑相同,那么在使用了 -keep_equivalent_registers 选项后,这两个寄存器就不会被合并成一个。这个选项可以在 Vivado 综合时使用。

这篇文档中提到了一个选项 -keep_equivalent_registers,它可以防止源自相同逻辑的寄存器被合并。这个选项可以通过在综合时使用 KEEP 属性来实现。具体来说,如果两个寄存器的输入逻辑相同,那么在使用了 -keep_equivalent_registers 选项后,这两个寄存器就不会被合并成一个。这个选项可以在 Vivado 综合时使用。

在Vivado综合中,-resource_sharing选项用于设置算术运算符在不同信号之间的共享。auto值设置资源共享取决于设计的时序,on值启用资源共享,off值禁用资源共享。这个选项可以影响综合结果的面积和时序性能。

Vivado Synthesis中的control_set_opt_threshold选项将时钟启用优化的阈值设置为较低数量的控制集。此选项用于通过最小化控制集的数量和减少控制信号的逻辑来优化设计。默认值为auto,这意味着工具将根据目标设备选择一个值。支持任何正整数值。给定值是工具将控制集移动到寄存器的D逻辑中所需的扇出次数。如果扇出高于该值,则该工具会尝试让该信号驱动该寄存器上的control_set_pin。总之,此选项有助于优化设计中的时钟使能信号,并减少控制信号上的逻辑。

control_set_opt_threshold是用来优化同步控制信号的阈值。这个阈值可以设置为auto或非负整数。当阈值越高时,控制集优化就会越多,控制集就会减少。如果想要完全禁用控制集优化,可以将阈值设置为0。这个优化的目的是尽可能地减少控制集的数量,以便减少时序路径的长度和时钟树的复杂性,从而提高设计的性能。具体实现的方法是将控制集移动到寄存器的D逻辑中,并将控制信号引入寄存器的控制端口。

把控制集移动到寄存器的D逻辑中,可以在Verilog中使用initial关键字来给寄存器赋初值。同时,可以使用always块和posedge时钟信号来控制寄存器的复位和设置。具体实现方法可以参考代码示例。

“在本地主机上启动运行”是指Vivado Design Suite Synthesis工具中的选项,该选项允许用户在当前工作的机器上启动合成运行。该选项用于指定要启动的运行次数,并允许用户选择同时运行的作业数。本质上,这意味着合成过程将在本地计算机上执行,而不是在远程服务器上执行。

Launch runs on local host用于在本地主机上运行选项。可以通过设置Number of jobs下拉菜单来指定要启动的运行次数。但是需要注意的是,运行次数的数量会对Vivado工具使用的内存量产生很大的影响。如果将其设置为非常高的数量,则可能会导致工具占用大量内存,具体取决于设计中单个运行或OOC运行的大小。

在Vivado Synthesis中,当你将流程设置为Out-of-Context时,需要指定运行的次数。这是因为该选项会在工具中设置一个新的运行,并将底层模块设置为顶层模块进行综合,而不会创建I/O缓冲区。该运行会保存综合后的网表,并创建一个存根文件(如果选择了该选项)以供以后使用。当再次运行顶层模块时,底向上综合会将存根文件插入到流程中,并将底层模块编译为黑盒。实现运行会插入底层网表,从而完成设计。因此需要指定运行次数以便完成该流程。

在Vivado Synthesis中,当你将流程设置为Out-of-Context时,需要指定运行的次数。这是因为该选项会在工具中设置一个新的运行,并将底层模块设置为顶层模块进行综合,而不会创建I/O缓冲区。该运行会保存综合后的网表,并创建一个存根文件(如果选择了该选项)以供以后使用。当再次运行顶层模块时,底向上综合会将存根文件插入到流程中,并将底层模块编译为黑盒。实现运行会插入底层网表,从而完成设计。因此需要指定运行次数以便完成该流程。

将底层模块设置为顶层模块进行综合和将底层模块创建I/O缓冲区有以下区别: - 底层模块设置为顶层模块进行综合时,综合工具会将底层模块视为一个独立的设计单元进行综合,而不会创建I/O缓冲区。这意味着底层模块不再是其他模块的子模块,而是一个独立的模块。而将底层模块创建I/O缓冲区时,综合工具会创建I/O缓冲区以便将底层模块连接到其他模块。 - 底层模块设置为顶层模块进行综合时,综合工具会保存综合后的网表,并创建一个存根文件(如果选择了该选项),以便后续使用。而将底层模块创建I/O缓冲区时,综合工具会创建I/O缓冲区以便将底层模块连接到其他模块,并将底层模块综合后的网表直接插入到设计中。 - 底层模块设置为顶层模块进行综合时,综合工具会将底层模块视为黑盒,并不会对其进行细节综合。而将底层模块创建I/O缓冲区时,综合工具会对底层模块进行细节综合,以便将底层模块连接到其他模块。 总之,将底层模块设置为顶层模块进行综合和将底层模块创建I/O缓冲区是两种不同的综合方式,它们有各自的优缺点,具体使用哪种方式需要根据实际情况进行选择。

将底层模块设置为顶层模块进行综合的优点是可以快速地对底层模块进行综合,同时可以在底层模块中进行仿真和调试。缺点是在底层模块中插入的I/O缓冲区可能会影响设计的时序和功耗,导致最终综合结果与实际硬件不一致。 创建底层模块的I/O缓冲区的优点是可以确保最终综合结果与实际硬件一致,同时可以减少时序和功耗问题。缺点是需要额外的设计和综合步骤,增加了设计的复杂度和时间成本。

Design Runs窗口是Vivado Design Suite中的一个窗口,用于显示项目中创建的合成和实现运行。它提供了配置、管理和启动运行的命令。要打开“设计运行”窗口,请选择“窗口>设计运行”。一个合成运行可以有多个实现运行。窗口中的树窗口小部件可用于展开和折叠合成运行。“设计运行”窗口报告运行状态,这些状态可以是未启动、正在进行、已完成或已过期。修改源文件、约束或项目设置后,运行将过期。要重置、删除或更改特定管路上的财产,请右键单击该管路并选择相应的命令。

设置自下而上的上下文外(OOC)流是Vivado Synthesis中的一个设计流选项,它允许较低级别的模块与顶层模块分开运行。该流程可以通过只合成必要的模块并将较低级别的运行视为顶层合成中的黑盒来提高运行时间和效率。要为OOC运行设置模块,请右键单击层次结构视图中的模块,然后选择“set As Out Of Context for Synthesis”选项。然而,需要注意的是,当OOC模块的较低级别中有处于OOC模式的Xilinx IP时,或者当OOC模件上有参数或OOC模块端口上有用户定义的类型时,不应使用此流,因为这可能会在稍后的流中导致错误。

要在Vivado Synthesis中手动设置自下而上的流和导入网表,您需要将较低级别的网表或第三方网表实例化为黑盒,并在合成完成后将其放入完整的设计中。要创建较低级别的网表,请设置一个以该网表为顶层模块的项目,并在运行合成之前设置上下文外(OOC)模式。合成后,打开合成的设计,并使用write_edif-Tcl命令创建较低级别设计的edif网表。要在设计中实例化较低级别的网表,请使用VHDL中的组件语句描述端口,或使用Verilog中的包装文件。最后,在project模式下将较低级别的网表添加到Vivado项目中,或者在Non-project模式下使用read_edif或read_verilog-Tcl命令在合成后合并网表。要设置自下而上的流,请选择任何HDL对象作为单独的上下文外(OOC)流运行,并通过在层次结构视图中找到该模块并右键单击“set as out of context for Synthesis”选项将其设置为OOC运行。

OOC综合后的网表需要在后续的设计流程中使用。在重新运行顶层模块时,自下而上的综合会将存储在之前OOC综合中的网表插入到设计流程中,并将其编译为黑盒。然后,在实现流程中,将插入下层网表,从而完成整个设计。如果选择了生成存根文件的选项,则还需要使用存根文件,该文件是带有输入和输出以及黑盒属性的下层模块。如果没有选择生成存根文件的选项,则需要手动创建存根文件并在项目中设置。因此,OOC综合后的网表需要与存根文件一起使用,以完成整个设计流程。

在实现流程中,插入下层网表是指将高层次的Verilog HDL语句编译成一个扁平化的门级网表,然后可以用于定制编程可编程逻辑器件(例如Virtex®设备)。这个过程被称为综合。在综合期间,为每个块使用最佳综合流程进行综合,不同的综合方法用于算术块、互连逻辑和有限状态机(FSM)组件。

综合后的网表包含综合后的设计逻辑,包括各个模块之间的连接关系、逻辑门的类型和数量等信息。同时,综合后的网表中还包含了时序信息和资源利用率等综合结果。在Vivado IDE中,可以通过打开综合后的设计来查看网表文件。

要在Vivado Design Suite中创建较低级别的网表,您可以使用合成功能。首先,您需要用VHDL或Verilog编写RTL代码。然后,您可以使用Vivado Synthesis工具来综合您的设计并创建一个较低级别的网表。合成过程将您的RTL代码转换为门级网表,可用于进一步的实现和验证。您可以使用《用户指南》中描述的合成方法和合成属性来优化合成结果,并创建更高效的网表。

给定的语句描述了一种在上下文外模式下运行合成的方法,而无需在该级别插入任何I/O缓冲区。运行合成后,可以打开合成设计,并可以在Tcl控制台中键入write_edif-Tcl命令,以edif格式编写合成设计。EDIF是一种标准格式,用于表示电子设计自动化(EDA)工具中的设计。此命令可用于导出合成设计,以便在其他EDA工具中进行进一步分析或实现。

在该文件中,提到了两种网表类型:模块(Module)和网(Net)。同时,该文件还提到了可以通过Verilog-2001属性或Verilog meta comments来设置这些对象的约束条件。此外,该文件还提到了可以使用Vivado synthesis来探索逻辑设计的不同方面,如网表、层次结构和逻辑原理图等。

要在设计中实例化较低级别的网表,可以使用Xilinx Vivado设计套件。首先,您需要使用Vivado中的合成工具从您的设计中生成网表。一旦您有了网表,您就可以在设计中实例化它,方法是在设计层次结构中创建一个新的模块或实体,并将网表作为子组件添加。这可以使用Vivado中的“添加模块”功能来完成。然后,您可以将网表的输入和输出连接到设计模块的输入和输出来。最后,您可以在Vivado中运行实现工具,为您的设计生成比特流。

Vivado IDE提供了多种探索设计逻辑的方法。Netlist(网表)和Hierarchy(层次)窗口提供了设计的层次树状视图,而Schematic(示意图)窗口允许选择性逻辑扩展和层次显示。设备窗口提供设备、放置的逻辑对象和连接的图形视图。所有这些窗口交叉探测以显示最有用的信息。通过在这些窗口中选择逻辑对象,“网络列表”窗口会自动展开以显示所选的逻辑对象,有关实例或网络的信息会显示在“实例”或“网络财产”窗口中。综合设计窗口显示RTL逻辑层次结构的图形表示,每个模块的大小与其他模块的大小成相对比例。右键单击“网表”窗口并选择“显示层次”,或按F6键,即可打开“层次”窗口。通过选择一个或多个实例、网络或时序路径,然后从窗口工具栏、右键单击菜单或按F4键选择“图解”,可以打开“图解”窗口。

问题是关于在Vivado合成中运行时序分析。时间分析对于确保路径具有有效实施所需的约束非常重要。Vivado合成是定时驱动的,并根据提供的约束条件调整输出。在设计中指定的物理约束(如Pblocks和LOC约束)越多,时序分析结果就越准确。然而,结果仍然包含对路径延迟的一些估计。综合设计使用路由延迟的估计来执行分析。时序分析可以在这个级别上运行,以确保覆盖正确的路径,并对时序路径有更一般的了解。

Running Timing Analysis讲了如何使用Vivado synthesis进行时序分析,以确保路径有足够的约束条件进行有效实现。Vivado synthesis是时序驱动的,根据提供的约束条件调整输出。随着在设计中分配更多的物理约束,如Pblocks和LOC约束,时序分析的结果变得更加准确。可以在这个级别上运行时序分析,以确保正确的路径被覆盖,并获得更一般的时序路径的概念。但是需要注意的是,只有在实现(放置和路由)后进行的时序分析才包括路由的实际延迟。在综合设计上运行时序分析不如在实现设计上运行时序分析准确。

使用Tcl运行Synthesis是Vivado Design Suite中的一项功能,它允许用户使用Tcl命令自动化合成过程。用户可以使用指定合成设置和选项的Tcl命令创建一个脚本文件,然后运行该脚本来启动合成过程。对于需要重复执行相同合成任务或希望自定义GUI中可用选项之外的合成过程的用户,此功能可以节省时间和精力。《综合用户指南》(UG901)提供了有关如何使用此功能的更多详细信息。

综合设计是将RTL(Register Transfer Level)指定的设计转化为门级表示的过程。实现设计是将门级表示的设计映射到目标设备上的过程。在Vivado® IDE中,综合和实现环境被集成在一起,可以进行综合和实现的推按钮流程。使用综合和实现设置可以配置命令选项,以应用于综合或实现设计运行。通过监视综合或实现进度,查看日志报告和取消运行,可以管理运行数据,允许使用不同的RTL源版本,目标设备,综合或实现选项以及物理或时间约束进行反复运行尝试。

Multi-Threading in RTL Synthesis讲了啥? 回答:Multi-Threading in RTL Synthesis是Vivado Design Suite User Guide中的一章,介绍了在RTL综合中使用多线程技术的方法和优化策略。它描述了如何在Vivado Synthesis中启用多线程,并且介绍了多线程综合的优点和限制。此外,该章节还介绍了如何通过控制资源分配和任务调度来优化多线程综合的性能和效率。最后,该章节还提供了一些示例和最佳实践,帮助用户更好地理解和应用多线程综合技术。

Table 1-2: Vivado Preconfigured Strategies介绍了Vivado综合工具中预定义的各种综合策略及其相应的设置。该表格列出了各种不同的综合选项和策略,如默认流程、优化高延迟、优化中等面积等。这些选项可以通过设置来定制化设计的综合过程。表格中还包括了一些全局设置,如-gated_clock_conversion、-bufg、-retiming等。通过使用这些预定义的策略,可以更好地优化设计的综合过程。

Synthesis Attributes 是Vivado Design Suite用户指南中的一章,介绍了使用综合属性进行综合的相关知识。其中包括支持的属性、在XDC文件中使用综合属性的方法、综合属性传播规则等内容。此章还介绍了如何使用综合属性来优化综合结果,提高综合效率。

综合策略和综合属性是Vivado综合工具中两个不同的概念。综合策略是预定义的一组综合选项,可以在综合设置中选择使用。这些选项可以用于自定义设计的综合过程,包括指定综合开关、优化等级、时序约束等。综合属性是一组自定义属性,可以在RTL或XDC文件中定义,用于指定特定层次结构或信号的综合选项。综合属性可以用于防止综合工具优化特定对象,或者指定特定层次结构或信号的综合选项。总的来说,综合策略是一组全局的综合选项,而综合属性是针对特定层次结构或信号的自定义综合选项。

Vivado综合工具提供了多种综合策略,包括自顶向下综合、自底向上综合、区块综合、增量综合等。其中,自顶向下综合策略将设计分成不同的模块,先综合顶层模块再逐层往下综合;自底向上综合策略则是从最底层开始综合,逐层往上综合;区块综合策略可以将大型设计分成多个区块,分别综合再合并;增量综合策略则是只综合有变化的部分,提高综合效率。

自顶向下综合是一种综合方法,它从顶层设计开始,逐步向下分解,将设计分解成多个子模块,每个子模块再进行综合。这种方法可以帮助设计者更好地控制设计的复杂度,提高综合的效率和质量。自顶向下综合可以让设计者更好地理解整个设计的结构,更好地控制各个子模块的功能和性能,同时也可以更好地进行时序约束的管理。此外,自顶向下综合还可以帮助设计者更好地进行模块化设计,使得设计更加灵活和可重用。

自底向上综合是一种综合策略,用于将设计分层并分别综合,然后将它们合并以形成完整的设计。这种方法可以提高综合的效率和准确性,因为每个层次的综合都可以使用不同的优化选项和约束。在Vivado中,可以使用“设置底部向上的非上下文流”来设置自底向上综合。这种方法可以让综合器根据设计的层次结构从底层开始逐步综合,直到整个设计完成。

自顶向下综合是一种将设计分层的方法,使得设计者可以将整个设计划分成多个模块,每个模块都可以独立设计和优化。这种方法可以使得设计更加灵活和可重用,因为模块之间的接口可以被定义和优化,从而使得模块可以在不同的设计中重复使用。此外,自顶向下综合还可以帮助设计者更好地进行设计分析和优化,因为设计者可以在每个模块中使用不同的综合策略和约束,从而达到更好的综合结果。因此,自顶向下综合是一种非常重要的设计方法,可以帮助设计者更好地进行模块化设计,从而使得设计更加灵活和可重用。

把设计分成多个区块,每个区块独立综合可以提高综合效率,同时减少资源占用和设计的功耗。区块之间的接口也更清晰,易于调试和维护。此外,区块综合还可以针对不同的区块使用不同的综合策略,提高综合效果。

区块综合的优点是可以让设计人员在综合时针对不同层次的模块应用不同的设置和策略,从而更好地优化设计。这种方法可以避免使用OOC综合流程所带来的额外复杂性,并且可以更好地利用全局设置和策略。此外,区块综合还可以提高综合效率和设计质量。

使用OOC综合流程会带来多次综合运行,需要将OOC约束与其余设计的约束分开处理,增加了设计流程的复杂性。同时,如果OOC模块中有IP被综合,那么在顶层综合时,这些IP会被推断为黑盒,无法引用其内部的对象,这也会增加设计的复杂性。

在顶层综合时,这些IP会被推断为黑盒,因为在Out-of-Context (OOC)模式下,IP的细节信息被分开处理,而且不会被包含在综合结果中。因此,在后续的实现流程中,无法引用其内部的对象。如果想要引用其内部的对象,需要关闭IP的OOC模式。同时,如果OOC模块中存在参数或用户定义类型的端口,或者存在Xilinx IP,则不应使用Bottom-Up OOC流程,因为这可能会导致后续流程中的错误。

把IP推断为黑盒意味着该IP的源代码不可见,只能看到其接口和功能描述。此时,IP的特征包括:无法查看其内部实现细节,不能进行针对性的优化和调试,只能通过提供的接口和文档来使用和集成该IP。

在这篇文档中,综合后的网表信息可以从多个角度进行查看和分析。可以通过Netlist和Hierarchy窗口查看综合后的逻辑层次结构,可以通过Schematic窗口进行逻辑设计的扩展和探索,可以通过Device窗口查看设计的逻辑和层次结构、资源利用和时序估计等信息。同时,选择其他窗口中的逻辑对象时,Netlist窗口会自动展开以显示所选逻辑对象,并在Instance或Net Properties窗口中显示有关实例或网的信息。通过这些窗口,可以更好地了解和使用综合后的网表信息。

根据这篇文章,知道网表信息可以用来分析综合结果和逻辑设计,了解设计的资源利用情况和性能表现。同时,网表信息也可以用来进行后续的布局布线和时序分析。

DSP_VOLDING_FASTCLOCK是一个合成属性,用于控制使用DSP折叠时哪个端口成为新的更快时钟。它可以采用两个布尔值:“yes”和“no”。如果设置为“是”,该工具将使用该端口作为连接新时钟的端口。如果设置为“否”,工具将不使用此端口。此属性仅在RTL中受支持,并且应仅放置在端口或引脚上。

这篇文章中,EXTRACT_ENABLE是一个属性,它控制寄存器是否推断使能信号。Vivado工具根据启发式算法来提取或不提取使能信号,但在某些情况下,工具的默认行为可能不是用户想要的,这时可以使用EXTRACT_ENABLE属性来覆盖默认行为。如果存在不需要的使能信号连接到寄存器的CE引脚上,此属性可以强制将其连接到D输入逻辑上。反之,如果工具没有推断出在RTL中指定的使能信号,此属性可以告诉工具将该使能信号移动到寄存器的CE引脚上。EXTRACT_ENABLE属性只能用于RTL代码中的寄存器,它可以取值"yes"和"no"。

这篇文章中提到了EXTRACT_ENABLE,它是一个在寄存器上的属性,仅在RTL代码中支持。它控制寄存器是否推断使能信号。通常,Vivado工具会根据启发式算法来提取或不提取使能信号,以使大多数设计受益。但在某些情况下,如果Vivado的行为不理想,这个属性可以覆盖工具的默认行为。如果有一个不希望的使能信号传递到触发器的CE引脚,这个属性可以强制将它移到D输入逻辑。相反,如果工具没有推断出在RTL中指定的使能信号,这个属性可以告诉工具将该使能信号移动到触发器的CE引脚。EXTRACT_ENABLE属性可以取布尔值"yes"和"no"。在Verilog中的示例是:(* extract_enable = "yes" *) reg my_reg; 在VHDL中的示例是:attribute extract_enable : string; attribute extract_enable of my_reg: signal is "no"。

使能信号在触发器的CE引脚和在D输入逻辑的区别在于触发器的CE引脚是控制触发器工作的主要使能信号,只有在CE为高电平时,触发器才会根据D输入信号进行状态更新,否则状态不会改变。而在D输入逻辑中的使能信号,只是控制D输入信号是否被传递到触发器的D输入端,它并不直接控制触发器的工作,因此如果使能信号为低电平,D输入信号也不会被传递到触发器的D输入端。

在这篇文章中,FSM_SAFE_STATE的信息是什么? 回答:在这篇文章中,FSM_SAFE_STATE是一个属性,用于指示Vivado综合器在状态机中插入逻辑来检测非法状态,并在下一个时钟周期将其置于已知的良好状态。FSM_SAFE_STATE属性可以放置在状态机寄存器中,并可以在RTL或XDC中设置。合法的FSM_SAFE_STATE值包括:"auto_safe_state"、"reset_state"、"power_on_state"和"default_state"。其中"auto_safe_state"使用Hamming-3编码进行自动纠错,"reset_state"使用Hamming-2编码检测进行强制将状态机置于复位状态,"power_on_state"使用Hamming-2编码检测进行强制将状态机置于上电状态,"default_state"强制将状态机置于RTL中指定的默认状态。

FSM_SAFE_STATE是一个属性,用于指示Vivado综合器在状态机中如何插入逻辑来检测非法状态,并在下一个时钟周期将其置于已知的良好状态。FSM_SAFE_STATE有四种合法值,分别是auto_safe_state、reset_state、power_on_state和default_state。其中,auto_safe_state使用Hamming-3编码进行自动校正,可以纠正一个位/翻转;reset_state使用Hamming-2编码检测一位/翻转,并将状态机强制置于复位状态;power_on_state使用Hamming-2编码检测一位/翻转,并将状态机强制置于上电状态;default_state将状态机强制置于RTL中指定的默认状态。要使default_state工作,必须在RTL中存在一个默认或其他状态。在Verilog中,可以使用如下代码指定FSM_SAFE_STATE属性:(* fsm_safe_state = "reset_state" *) reg [7:0] my_state; 在VHDL中,可以使用如下代码指定FSM_SAFE_STATE属性:attribute fsm_safe_state : string; attribute fsm_safe_state of my_state : signal is "power_on_state";

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值