验证设计验证a什么是约束随机回归测试为什么约束检查很重要1约束随机回归测试是一种在特定约束条件下生成随机测试用例的技术以确保生成的输入激励满足某些设计要求。2在传统的定向测试方法中工程师需要定义并提供设计输入的激励并将设计的实际输出与预期结果进行比较。定向测试的问题在于可扩展性和可维护性。随着设计在不同项目间不断交互且复杂度越来越高定义和维护设计输入激励的效率低下。3在随机约束回归测试中工程师通过编写约束来定义合法的输入行为并借助工具生成各种合法的激励。约束随机回归测试可以轻松生成数百万个测试用例同时支持快速迭代和修改测试用例从而加速验证过程。4这并不是说传统的定向测试就无用了。实际上工程师通常依赖约束随机回归测试生成初始覆盖率报告检查覆盖率并识别覆盖率缺口。某些覆盖率缺口的收敛需要验证工程师编写定向测试来完成。5约束的正确性决定了激励模式的全面性。错误的约束可能会导致某些合法场景在随机回归测试中未被覆盖。因此设计和验证团队共同进行约束检查会议非常重要。b如何验证轮询仲裁器的公平性1可以为每个请求者关联一个计数器用于记录每个请求者被授权的事务数量。在测试结束时所有计数器的值应该相同或接近。或者我们也可以为每个请求者关联一个计数器用于记录自上次被授权以来经过的时间。在测试结束时如果某个计数器的值明显大于其他计数器则说明该仲裁其未能保证公平性。2对于一个有3个请求者的仲裁器需要测试以下场景①每个周期内3个请求者均有效确保所有请求者都能公平获得授权②每个周期内只有请求者0和1有效确保仲裁器在0和1之间轮流进行。相同的有0和2有效1和2有效的情况③每个周期内只有0有效确保请求者0始终获得授权。相同的只有1有效或2有效的情况。c什么是代码覆盖率1代码覆盖率是数字验证DV中的一项基本指标用于衡量测试平台对RTL代码的覆盖程度。代码覆盖率主要包括以下几个方面语句/行覆盖率条件/分支覆盖率翻转覆盖率状态机覆盖率。2代码覆盖率由仿真工具生成。例如在DV回归测试期间VCS会合并每个单独测试用例的代码覆盖率。3设计人员和DV工程师需要共同分析某些RTL代码未被覆盖的原因。未覆盖的RTL代码可能意味着代码冗余或不可达或者需要编写定向测试以提高覆盖率。对于冗余代码设计者应该考虑删除冗余RTL代码。d什么是功能覆盖率如何写功能覆盖率1100%的代码覆盖率并不意味着验证的完整性。代码覆盖率的一个根本局限在于它没有考虑设计规范和事件序列。功能覆盖率正是为了解决这一局限性而引入的。2功能覆盖率有2种测量方式覆盖组covergroup、覆盖属性coverproperty。3覆盖组covergroupcg_example()(posedge clkiff(resetvalid));value_a:coverpoint vala[2:0]{bins value0{3b000};bins value1{3b001};bins value2_6{3b010:3b110};ignore_bins ignore{3b111};}value_b:coverpoint valb{bins value0{1b0};bins value1{1b1};}value_AxB_0:cross value_a,value_b;value_AxB_1:cross value_a,value_b{ignore_bins ignoredbinsof{value_b.value1};}endgroup cg_example i_cg_example;initial begin i_cg_examplenew();end4覆盖属性1它通常直接内联在RTL种或通过单独的文件绑定到RTL。2与断言属性assert property不同覆盖属性可用于检查设计功能的某些方面是否已经被测试到。例如以下断言属性用于检查valid有效时data不应该为未知值。assertproperty((posedge clk)disableiff(reset)valid|-!$isunknown(data));3如果data从未为未知值或者valid从未拉高则上述断言会通过。如果是后者则存在覆盖率漏洞但断言属性不会告诉我们这一点。因此还应该再编写一个覆盖属性来确保valid为高的条件至少被命中一次。例如coverproperty((posedge clk)disableiff(reset)valid);如果我们需要关注某些特定的数据值是否被命中例如数据达到最大值则可以这样编写覆盖属性coverproperty((posedge clk)disableiff(reset)valid(dataMAX_VAL));形式验证a什么是形式验证FV它与动态验证DV有何不同1FV是一种使用数学工具分析所有可能设计空间的过程而不仅仅是检查特定激励模式的结果。DV类似于向目标投掷飞镖而FV则类似于用滚筒将整个目标涂满。2FV和DV在以下几个方面存在根本区别①设计空间分析FV在假设条件的约束下分析所有可能的设计空间而DV每次仅仅针对特定的测试向量或激励②属性行为在FV和DV中断言assert和覆盖cover属性的行为相同但假设assume属性的行为不同。在FV中假设属性用于约束设计空间而在DV中它们的行为与断言属性完全相同。DV使用system verilog约束来限制设计空间。3调试方式在FV中如果出现失败工具会从一系列可能的失败中提供一个示例工程师将使用该失败的跟踪记录进行调试。而在DV中当仿真失败时工程师需要通过查看波形文件来进行调试。4跟踪周期在FV中失败的跟踪通常仅持续几十个周期。工具会生成到达目标的最小路径因此跟踪记录较小且包含较少的额外活动。而在DV中失败的跟踪可能持续数千个周期通常涉及完整的系统启动和许多其他随机事件然后才会触发复杂的缺陷。bFV的优缺点1优点①完全覆盖FV通过探索假设属性约束下的所有可能设计空间本质上提供了完全覆盖②发现边界场景FV能够发现用户未曾想到或通过长时间随机仿真难以触发的边界场景③生成最小示例大多数FV引擎能够生成所需行为或失败跟踪的最小示例这使理解和调试变得容易④无界时间分析验证FV能够让我们提出并回答关于设计行为在无界时间范围内的问题例如使用覆盖属性检查某些FSM状态的可达性问题这些问题通常无法通过仿真工具高效解决。2缺点①数学限制某些问题由于基础教学理论的限制无法通过数学的方法证明FV工具受此限制②资源限制并非所有问题都能在合理的内存或时间内解决例如随着设计规模增大设计中的时序逻辑可能增多为了探索时序元素的所有可能值所需的内存可能呈指数级增长并耗尽所有可用计算资源随着设计规模增大设计中的流水线级数可能增多为了测试所有流水线级所需的时间可能呈指数级增长最终可能超出FV工具的能力范围。c什么是即时断言什么是并发断言1即时断言是一种非时序类型的断言它在过程块中执行其解释方式与if语句相同。2如果表达式的值为X/Z/0则视为假否则断言则视为通过。以下是一个即时断言的示例always_comb begin state_onehot:assert($onehot0(state))$info(state is ont-hot or all 0);else$fatal(2,state is not one-hot or all 0);state_unknown:assert(statebx)$warning(state signal is unknown);case(state)2b00:out 1b1;2b01:out 1b0;2b10:out 1b1;default:out1bx;endcase end在实践中即时断言用的较少而并发断言更常见。3并发断言是基于时钟语义的并使用采样变量值进行断言评估。moduledff(input clk,reset_n,en,d,output logic q);always_ff(posedge clk)if(~reset_n)q0;elseif(en)qd;assert_dff_behave:assert_dff_behave:assertproperty((posedge clk)disableiff(!reset_n))en|(q$past(d));endmoduled什么是交叠蕴含什么是非交叠蕴含1在SVA语句中蕴含implication等价于if-then结构。蕴含操作符在先行算子匹配时才执行后续的属性检查。蕴含操作符语法antecedent |- consequent 或者antecedent | consequent。2其中|-表示交叠蕴含 |表示非交叠蕴含。3对于交叠蕴含如果先行算子匹配则后续算在同一时钟周期内立即评估。如果先行算子不匹配则后续算子不评估。4对于非交叠蕴含如果先行算子匹配则后续算子在下一个时钟周期评估。显然这种形式的蕴含用于跨多个周期的事件。与交叠蕴含类似如果先行算子为假则后续算子不评估。e什么是形式化属性验证FPV1FPV是一种用于证明给定设计是否满足使用SVA描述的一组设计属性的方法。2FV工具首先将RTL设计、时钟/复位规格等要求以及约束/假设属性作为输入随后通过数学分析所有可能的设计空间以证明断言属性的正确性并验证覆盖属性是否可达。3断言和覆盖属性可以嵌入到RTL中也可以在RTL外部编写。尽管通常我们仅约束RTL设计的输入但有时也可以在RTL设计中加入假设条件。4FPV的目标是实现完全验证即所有断言属性均被完全证明且所有覆盖属性均可达。需要注意的是实现完全验证并不一定意味着RTL设计没有缺陷。FPV的质量依赖于合理的设计约束以及断言和覆盖属性的完整性。5FPV的另一个有趣的应用是连接性检查。现代SOC通常需要连接数十个第二方和第三方的IP并通过顶层多路复用模块将外部引脚导向不同的功能模块。FPV可用于验证这些连接性是否正确实现。设计者或集成人员可以通过电子表格或某种映射文件指定连接性。许多FV工具可以读取这些电子表格并将其隐式地转换为断言。这些断言随后可以像任何标准FPV断言一样被证明。由于SOC顶层连接逻辑通常较为简单因此使用这些生成的断言通常能够较快地完成验证。6如果发现任何失败FV工具可以在调试过程中反标出连接性问题整体的调试过程也相对简单。f如果FPV无法实现完整验证怎么办1FPV并非总能实现完全验证这通常是因为设计规模过大或FPV无法在特定时间或有限的计算资源内完成。2给出了几种可能的解决方法①分层分治可以先专注于子模块的FPV然后在顶层模块的FPV中将子模块黑盒化或抽象化。如果选择黑盒子模块则必须在顶层模块FPV中通过假设属性正确指定子模块的输出行为。如果选择抽象子模块则可以通过缩小数据路径宽度或减少缓冲区条目来降低子模块的设计规模或者为子模块设计行为编写行为级模型并在顶层模块FPV中使用模块替代子模块的RTL。②分阶段实施FPV计划通常一段RTL设计可以工作于多种模式工程师可以一次专注于一种模式。在FPV中专注于功能模式忽略调试模式和DFT相关的功能。③如果FPV能够达到足够的边界周期数可以接收部分验证。例如如果设计的流水线深度为10而FPV能达到30个周期的边界则我们就会有充足的信息确信FPV已经覆盖了足够多的流水线场景。g什么是形式化等价性验证FEV1FEV可以定义为比较两个模型以确定它们是否等价。其中一个模型叫规范SPEC模型另一个模型叫实现IMP模型。2FEV在现代设计流程中有多种应用场景①C模型与RTL对比计算密集型设计如视频和像素处理通常基于C模型定义参考行为并期望RTL在验证过程中产生相同结果。Cadence的jasper gold工具包常用于此场景。②RTL和RTL对比。在时序修复过程中设计者可能重新设计流水线逻辑或缩短关键路径。时序修复后可以运行FEV以确保两种RTL是等价的。在低功耗设计中通过门控时钟减少时钟翻转是常见做法。但必须确保门控时钟的正确实现否则错误的状态信号值可能导致数据损坏。传统的仿真方法无法全面覆盖所有边界情况FEV可用于对比开启和关闭时钟门控的设计以确保门控插入不会改变设计的行为。新思的formality和cadence的conformal通常用于此场景。③RTL和网表对比在逻辑综合中rtl被综合为门级网表必须验证综合后的网表与原RTL是等价的。在功能ECO过程中设计者有时需要手动修改综合后的网表必须验证修改后的网表和更新后的RTL等价。④网表与网表对比在物理设计中必须验证最终的布局布线PR网表与综合网表的等价性。在功能ECO或时序ECO过程中设计者可能需要手动修改最终的PR网表必须验证其与综合网表是否匹配。3需要注意FEV并不总能实现完全验证尤其是在C模型与RTL的等价性验证以及时钟门控的验证场景中。此时可以借鉴之前讨论的FPV解决方法在FEV过程中灵活应对。实现、综合、功耗代码规范检查a在代码检查中最关键的错误有哪些1通常在完成RTL编码后设计人员需要运行语法检查工具lint。这有助于避免明显的拼写错误并提高代码质量。在现代ASIC设计流程中语法检查是RTL签收的必要步骤。lint被视为一种形式检查即不需要激励。最常用的lint工具是新思的spyglass lint。其有助于检测各种rtl错误最严重的错误包括模块输入端无驱动源、模块输出无负载、加减法没有考虑溢出、乘法运算的右操作数RHS位数不足无法容纳最终的乘积结果、运算符两侧操作数的信号位宽不匹配、在RTL中存在自决表达式、阻塞赋值与非阻塞赋值存在使用不当的情况。CDC检查a如何在CDC检查中定义CDC/SGDC约束1spyglass CDC是工业界常用的工具用于检测设计是否已妥善处理跨始终域问题。2在运行spyglass CDC流程前需要向spyglass提供一些输入。其中最重要的输入是CDC约束条件即SGDC。设计人员需要指定①当前设计旨在限制CDC检查的范围②源时钟和生成时钟列表③有效端口/输入约束列表。设计人员可从诸如set_input_delay之类的synopsys设计约束SDC中得出这些约束条件④有效端口/输出约束列表。设计人员可从诸如set_output_delay之类的synopsys设计约束SDC中得出这些约束条件⑤有效时钟组约束条件列表。设计人员可从SDC如set_clock_group)中得出这些约束条件。与STA不同默认情况下CDC分析流程假定所有时钟彼此异步且会尝试对每一组可能的时钟对执行跨时钟域检查。设计人员应该使用set_clock_groups来明确哪些时钟是同步的哪些情况下无需进行跨时钟域检查。3与复位域交叉RDC检查不同CDC检查不需要了解复位信息但将其作为spyglass的SGDC的一部分是个不错的主意因为CDC和RDC只是spyglass的不同目标。4current_designmy_design#specifysource clockclock-nameclk0-domain d0-period1-tag clk0 clock-nameclk1-domain d0-period1-tag clk1 clock-nameclk2-domain d1-period2-tag clk2#specifyclock group#clk0and clk1 are sync clock;clk2 are aync to both clk0 and clk1set_clock_groups-group1{clk0,clk1}-group2 clk2#specifyclocks that each port is sync toabstract_port-portsi_addr-clockclk0abstract_port-portsi_wen-clockclk1abstract_port-portso_data-clockclk2#specifylow active resetreset-namereset_n-value05有一些可选的SGDC约束条件是①限定词列表用户可使用qualifier来界定spyglass CDC无法识别的跨时钟域同步方案②由set_clock_sense命令生成的有效时钟感知约束列表③有效跨时钟域伪路径cdc_false_path约束条件列表④set_case_analysis列表。set_case_analysis会在时序逻辑和组合逻辑中确定性传播⑤准静态约束列表。quasi_static约束不会超出时序元件和纯黑盒进行传播只有当逻辑简化为缓冲器或反相器时该约束才会通过组合逻辑进行传播。6一般来说设计人员应该避免使用set_case_analysis和quasi_static因为它们可能会掩盖真正的CDC违规行为。此外set_case_analysis会引入CDC模式从而导致CDC检查收敛前的迭代次数增多和运行时间延长。复位域交叉CDC检查a同步复位和异步复位的区别1同步复位具有以下特点①若时钟路径存在故障则其无法发挥作用②同步复位对毛刺具有免疫性这是因为同步复位需要时钟进行翻转③鉴于同步复位和常规数据路径并无差异且整个设计均为同步设计使得STA更方便④同步复位的实现需要在每个触发器的输入端增设一个多路复用器MUX。2异步复位具有以下特点①无需切换时钟即可复位设计②异步复位中意外出现的毛刺可能会造成严重后果③异步复位会在设计中引入异步时序路径因为复位可能在任何时候生效从而导致可能的亚稳态问题。通常通过使用复位同步器以同步方式释放异步复位并且STA需要检查复位移除时间和恢复时间④异步复位是在晶体管层面于触发器内部实现的。3注意在设计中异步复位的异步特性使得RDC检查成为必要的步骤。bRDC检查功能具体有什么作用1通常情况下原始复位信号在进入逻辑电路之前会先进行同步处理。因此复位信号是异步激活的而随后则是同步释放的。2在现代SOC设计中存在多个复位域的情况不少见。一个复位域可能处于复位状态而另一个处于活动状态。如果活动域处于复位域的下游就会产生问题。当复位信号生效时会形成一条异步时序路径到下游的活动域从而导致该活动域出现亚稳态问题。3RDC检查有助于在设计中识别此类问题例如①在接入复位逻辑区域之前原始复位信号未进行同步处理②当源寄存器处于复位状态时目标寄存器仍处于有效状态③源触发器和目标触发器的复位操作未使用同一时钟进行同步。4最受欢迎的RDC工具是新思科技的spyglass RDC它与spyglass CDC完美接入。设计人员通常先完成CDC检查然后再开始RDC检查。c常见的RDC技术/方案有哪些以下是一些常见的RDC技术方案用于消除RDC违规问题。1若目标寄存器为同步器则此路径可免受亚稳态影响且能够通过RDC检查2当源触发器复位信号有效时若目标触发器处于时钟门控状态则不会出现亚稳态问题3如果在源触发器复位断言时使用隔离单元对目标触发器的输入进行钳位那么就不会出现亚稳态问题4如果目标触发器在源触发器复位信号生效时已经处于复位状态那么就不会出现RDC问题5如果目标触发器在源触发器复位断言时处于断电状态那么就不会有RDC问题6当源触发器复位信号有效时若目标触发器的写使能为0则可以避免RDC问题7如果源触发器具有稳定的输出值并且其复位信号有效时的输出值与其复位值相同则目标触发器不会出现RDC违规8异步FIFO在RDC中需要特殊处理因为读端口和写端口具有独立的时钟和复位信号。通常异步FIFO的两端必须同时复位。假设读端复位但写端未复位那么写端可能无法生成满状态同样假设写端复位但读端未复位那么读端可能无法生成空状态。综合a什么是线负载模型下的综合什么是合理性综合1在RTL设计工程师将设计交付给实现工程师之前进行一些合理性综合是很有必要的。这样做的目的是确保不存在语法检查错误以及不会出现导致时序无法收敛的时序违规问题。2有时也把合理性综合叫零线负载ZWL综合。在估算互连延迟方面有两种可用的模式WLM模式和拓扑模式。WLM模式不具备设计的物理视图信息而拓扑模式则能够感知物理布局信息。3在WLM模式下针对所有网络所计算得出的电阻和电容完全相同。然而在这种情况下互连延迟很可能会出现被高估或低估的情况。因此生成的网表中可能会存在缓冲过度和缓冲不足的逻辑门。在后续阶段可能需要借助物理设计工具对该网表进行额外的迭代优化。4在开展ZWL综合时工具不会对RC延迟进行计算。因此设计人员会采用更为保守的时钟设计裕量来对此进行补偿。b什么是拓扑综合/生成式综合1在合理性sanity综合过程中并不考虑诸如单元如何布局以及线路如何布线等物理信息。然而在生成式综合过程中则必须将物理信息纳入考虑。新思科技的综合工具DCdesign compiler的拓扑模式有助于达成这一目标。2拓扑模式在综合过程中会基于布线拥塞情况的估算来进行初步布局。采用拓扑模式所得到的RC值与布局完成后的实际结果高度相关。3DC建议采用两遍综合流程。在该流程中布局工具利用第一遍生成的网表进行布局规划设计而基于此布局规划对第二遍生成的网表进行布局与布线操作。c运行综合之前的基本设置有哪些如何执行set_app_var以及创建milkyway设计库1首先建议在运行综合之前设置search_path这样设计人员就无需指定文件的绝对路径。此外设计人员还应指定目标技术库以及链接库以解析设计内部的所有实例。set_app_var search_path$search_path rtl constraints libsset_app_var target_library16nm_wc.db set_app_var link_library* $target_library2若要进行拓扑综合/生成式综合就需要物理数据的支持。下面展示如何为DC拓扑模式设置Milkyway设计库。set_app_var mw_reference_library./mw_libs/sc ./mw_libs/macrosset_app_var mw_design_library./design_lib3若这是首次加载物理工艺数据工程师必须创建一个milkyway设计库作为容器。该库用于打包参考库、技术文件、TLU plus模型以供DC拓扑工具使用。d什么是DC的综合流程能否编写一个简单的DC综合脚本1DC中的RTL综合流程读取设计与库文件→读取DC-T的布局规划文件→读取SDC文件→执行综合→生成报告→保存结果。2读取设计与库文件首先读取RTL文件也可以读取DDC文件。在指定顶层设计后进行链接并检查是否存在无法解析的子设计。同时建议对设计层级进行检查以确保库文件正确加载。这里使用重定向redirect将报告保存到文件中。#readverilogread_ddc{design_c.dd}#specifythe top level designcurrent_design design_top#goodpractice todoexplicit link,and checkifthere is any sub-design unable to resolveredirect-tee-file precompile.rpt{link}#checkconnectivity and hierarchy issue in the designredirect-append-tee file precompile.rpt{check_design}#listdb libraries in the design,and the name of the libraries which may be different from the file nameredirect-append-tee-file precompile.rpt{list_libs}#writeunmapped DDC format design filewrite_file-format ddc-hier-output output/design_top_unmapped.ddc3)读取DC-T的布局规划文件#inthe1st pass synthesis,usedefaultfloorplan#inthe2nd pass synthesis,doDC-topographical systhesis and load thefloorplan(DEF file)extract_physical_constraints[-allow_physical_cells]my_design.def#loadoptional supplementary floorplan dataread_floorplan my_design_suppl_fp.tcl4)读取SDC文件在加载SDC后应当检查其完整性和正确性。#checkvalues/options of port constraintsredirect-append-tee-file precompile.rpt{report_port-verbose}#checkvalues/options of clock constraintsredirect-append-tee-file precompile.rpt{report_clocks-skew-attr}#checkthe incompleteness of the SDCredirect-append-tee-file precompile.rpt{check_timing}#checkforinvalid exceptionsredirect-append-tee-file precompile.rpt{report_timing_requirements-ignored}5)执行综合实际的综合过程始于compile_ultra指令随后进入扫描链插入以及视情况开展增量编译。采用时序路径分组path groups以重点关注关键路径。最后一步是针对网表情况进行面积优化操作。compile_ultra compile_ultra[-scan][-retime][-spg]-incremental optimize_netlist-area6)生成报告报告生成从report_constraints和report_qor开始。若要报告单个路径的时序使用report_timing命令。#summarizeall violatorsreport_constraint-all_violators report_qor#reportarea in db library area unitreport_area#reportpath groups to confirmifthe sub-critical path not being optimized is due to incorrect path groupsreport_path_group report_timing[-delay max/min][-to pin_port_clock_list][-from pin_port_clock_list][-through pin_port_clock_list][-group][-input_pins][-transition][-capacitance][-nets][-nworst #][-max_paths #]7)保存结果综合结果可以保存为三种不同格式门级网表、映射DDC文件、ICC2文件。define_name_rules verilog-perserve_struct_ports change_name-rule verilog-hier write_file-format verilog-hier-output output/design_top_mapped.v write_scan_def-outdesign.defwrite_file-format ddc-hier-output output/design_top_mapped.ddc write_icc2_file-output output/design_top_icc2e进行综合分析前需要检查哪些内容1在实际运行compile_ultra之前我们需要检查以下几项内容①设计应当由DC完整读入且不应存在黑盒或缺失库文件②需对设计中的检查项进行复查例如输入无悬空、输出无空载、无位宽不匹配、无连线环路、无组合逻辑环路等③DC需正确加载SDC文件例如可通过report_timing_requirements -ignored命令对无效的约束例外情况进行检查④SDC需完备即不存在时钟缺失、寄存器未进行时钟约束、端口无约束等情况。可使用check_timing命令来检查SDC的完备性⑤作为一种可选方案设计人员可指示DC不采用超低阈值电压ULVT/极超低阈值电压ELVL单元。这将在布局布线过程中预留更多时序裕量。fDC综合优化的常用技术有哪些1有多种技术可以提升综合结果根据需求或具体适用性应用优化指令、采用恰当的编译选项、利用时序路径组将更多注意力聚焦于关键路径、增量编译。2应用优化指令①high—effort时序优化默认禁用如需启用执行set_app_var compile_timing_high_effort true②设置建立时间优化优先于设计规则检查默认情况下在优化期间设计规则检查的优先级高于时序。若要更改此设置执行set_cost_priority -delay③禁用时钟网络中的设计规则检查DRC修复。通常在时钟树综合CTS之前并不希望进行时钟树缓冲处理。若要对整个时钟网络禁用DRC修复执行set_auto_disable_rdc_nets -on_clock_network true④测试就绪综合是指在拼接扫描链之前的综合过程中考虑扫描寄存器对面积和时序的影响。在进行综合前通过执行set_scan_configuration -style multiplexed_flip_flop | clocked_scan | sad | aux_clock_lssd来指定扫描方案随后执行compile_ultra -incremental -scan。⑤多核优化可执行set_host_options -max_cores 4命令。若要确认主机选项设置情况执行report_host_options。3应用编译参数设置在compile_ultra指令中可以选择性启用以下四个开关选项①-spg该选项通过启用寄存器复制来实现负载均衡。默认情况下此u选项不会考量跨层级的负载情况。若需启用跨层级的寄存器复制功能可执行set_app_var compile_register_replication_across_hierarchy true。②retime该选项针对潜在的时序关键路径对寄存器进行移位操作。其目的仅在减小非流水线寄存器之间的WNS。③-no_autoungroup此选项关闭自动取消分组功能。默认情况下自动取消分组功能处于开启状态它会移除那些分组效果不佳的子设计层次结构。④no_boundary_optimization无边界优化此选项用于停用边界优化。在默认设置中边界优化处于启用状态。启用时该功能在维持电路层次结构的同时还会开展一系列操作通过补码传播将互补信号相连以简化逻辑、借助常量传播移除冗余逻辑门、利用未连接引脚传播移除输出未连接的冗余逻辑门。4采用路径分组将关键路径和非关键路径分组使DC能够分别对其进行优化。通常我们有4个路径组输入端口路径、输出端口路径、寄存器到寄存器路径、输入输出端口直通路径。group_path-name INPUT-from[all_inputs]-to[all_registers]group_path-name OUTPUT-from[all_outputs]-to[all_registers]group_path-name REG2REG-from[all_registers]-to[all_registers]group_path-name COMBO-from[all_inputs]-to[all_outputs]5增量编译在首轮综合完成后可以选择增量编译的方式获取更优质量。逻辑等价性检查LECa什么是LEC为什么要进行LEC1逻辑等价性检查LEC是一种形式化验证方法用于将修订后的设计在形式验证术语中叫IMP模型与参考设计在形式验证术语中叫SPEC模型进行比较。在以下几种情况下需要进行LEC①设计人员有必要对综合网表即经修订的设计与寄存器传输级即参考设计进行比对以此确保综合优化与扫描链插入操作不会对设计初衷产生改变②物理设计人员需将布局布线PnR网表即修正后的设计与综合网表即参考设计加以比较以确保布局布线的结果以及ECO不会改变综合网表的各项功能③设计人员可能会开展工程变更ECO操作目的在于增添新特性或修补漏洞。经工程变更后的寄存器传输级描述与综合网表之间不应该出现任何不一致的情况。2最常用的LEC工具包括cadence的conformal LEC和新思的formality。bLEC的流程是怎样的又是如何开展关键点映射的1LEC流程LEC设置→LEC关键点映射→LEC对比→LEC报告生成→不等效调试。2LEC设置步骤读取参考设计→读取修订后的设计→如果模块是宏或已经在模块级通过LEC则指定notranslate模块以进行黑盒处理→设置特定的约束条件例如在对比寄存器传输级RTL和综合网表时设置set case analysis以忽略扫描端口。3LEC关键点映射工具首先会在参考设计和修改后的设计中将主输入、主输出、触发器、锁存器、黑盒识别为关键点随后将相应的参考关键点与修改后的关键点进行配对之后再开展逻辑等效性检查对比。4在LEC报告生成过程中设计人员通常会生成以下报告报告未映射点不可达点、未映射点、额外点、报告对比数据不等效、终止、报告黑盒情况检查是否存在任何不期望的黑盒、报告被忽略的输入和输出端口、报告引脚约束条件、报告输出固定状态、报告悬空引脚、报告重命名规则指导LEC如何执行关键点映射。5LEC的不等效调试①未进行映射的黑盒引脚会导致不等效情况出现如果引脚名称不匹配请使用重命名规则。②未映射的DFF/锁存器/切除/原始输入导致不等效在LEC过程中对DFF或锁存器进行优化和合并解决环路切割不均衡的问题对测试信号或扫描信号加以约束。③映射错误会导致不等效情况的出现手动对映射有误的对象进行重新映射。在解决所有映射问题后设计人员便可着手调试实际存在的不一致问题其可能的根源包括不平衡的浮动信号可能会引起不等效的情况在RTL中对悬空引脚进行处理逻辑在LEC与实际实现过程中的优化方式存在差异进而导致不等效。ECO流程a什么是ECO为什么需要ECO1ECO是一种将逻辑或门电路直接引入与RTL发生的变更相对应的网表中的操作方法。2现代设计实现流程包含多个成本高昂且耗时的步骤涵盖逻辑综合、布局布线、时序验证等。若重新运行整个流程往往需要数天甚至数周的时间。ECO通常用于处理设计后期的修订而无需对设计进行全面重新实现。3大致说ECO分为功能ECO和时序ECO。从学术角度说当需要对RTL进行修改时功能ECO很重要。出现这种情况可能是由于需要修复RTL中的错误、改进性能功耗面积PPA指标甚至是在项目后期出现了设计规格变更。4ECO通常仅作用于布局布线PnR网表。例如当在STA/时序验证过程中发现建立时间和保持时间违例情况时就需要用到时序ECO。b功能ECO的流程是什么1功能ECO可以手动完成也可以通过诸如新思的Formality ECO和cadence的Conformal ECO这样的ECO工具来实现。2设计工程师首先需要确定能够以最低成本完成的RTL修复方案。在直观审视旧的综合网表与新的RTL之间的差异后设计工程师应该编制ECO脚本。此脚本将作为旧综合网表的一个修补程序。借助旧的综合网表与ECO脚本生成新的综合网表。随后应启动LEC流程以确保新的综合网表与新的RTL在逻辑上等效。3需要注意上述忽略了实际实现中的一些细节例如扫描链以及内建自测试的插入操作。此外若功能ECO修复操作引入了新的触发器则可测试设计DFT团队也应该参与进来。功耗a什么是静态功耗、动态功耗、短路损耗功耗1静态功耗静态功耗即电路的漏电功耗。即便电路中不存在任何动态活动只要其处于通电状态静态功耗便会存在。当为晶体管施加电源后鉴于硅材料的物理特性以及制造过程中存在的缺陷晶体管会不可避免产生漏电现象。静态功耗的典型例子包括晶体管的漏极-源极漏电以及硅衬底漏电。2动态功耗动态功耗是用于对晶体管本征电容进行充电或放电所消耗的功耗。只有当信号在低电平与高电平之间翻转时才会产生动态功耗。例如时钟在每一个周期都会发生翻转如果未采用时钟门控技术时钟信号传输路径会消耗大量动态功耗。3短路损耗功耗当NMOS和PMOS晶体管在一小段时间内同时处于导通状态时就会出现短路损耗功耗在此期间电流会直接从电源流向地从而形成短路电流。在一阶分析中我们假设晶体管在转换期间的上升/下降时间为零因此可以忽略短路损耗功耗。然而在更精确的分析中我们应该假设晶体管的转换时间为有限的因此每次信号翻转时都会存在短路损耗功耗。→在数字设计领域短路损耗功耗属于设计工程师无法直接调控的因素。因此大部分工作重点都放在降低静态功耗和动态功耗方面。b如何降低静态功耗、动态功耗、短路损耗功耗1静态功耗与电路泄露电流以及电源电压Vdd成正比因此降低静态功耗可采用通过调节衬底偏置进行动态阈值电压调节、在设计中使用多阈值电压单元、在条件允许的情况下使用高阈值电压单元、动态电源电压调整、在设计中采用多电源电压方案、在待机模式中切断电源。2动态功耗可通过公式P0.5CLVdd*(Vmax-Vmin*f来衡量。所以降低动态功耗的方法减小电压摆幅、采用动态电源电压调节性能要求不高用较低的电压性能要求较高用较高的电压、在设计中使用多Vdd对性能要求不高的逻辑使用较低电压性能要求较高的逻辑使用较高电压、在待机模式下关闭电源、降低时钟频率、采用动态频率调节策略、多时钟策略对性能要求不高的逻辑使用低频时钟、若逻辑处于非活跃状态可采用时钟门控技术切断时钟信号、通过减小毛刺现象降低电路的翻转活动、对逻辑与架构进行优化从而减小负载电容。3短路损耗降低方法①降低电源电压、开关活动或时钟频率这与降低动态功耗的方法类似②匹配芯片上输入和输出信号的上升/下降时间虽然就单个门电路而言这并非最优解决方案但我们能够在芯片层面将短路电流的总量控制在一定范围内③若将电源电压降低至低于晶体管阈值电压之和则可消除短路电流这是因为对于任意输入电压值两个器件都不会同时处于导通状态。c在功耗敏感型设计中为何需要隔离单元1若一个电源域包含驱动端另一个电源域包含负载端则这两个电源域会产生相互作用。若驱动逻辑断电接收逻辑的输入值可能会在高电平1与低电平0之间处于浮空状态。这种情况存在以下问题①可能会导致流过接收逻辑的电流显著增加进而对电路造成损坏②由于输入悬空可能会漂移至未定义值因此会引发功能性问题。2为规避以上问题需要在不同电源域之间插入隔离单元以确保输入至接收逻辑的信号值始终具有确定性。隔离措施可针对电源域的输入或输出实施。3隔离单元存在2种运行模式在正常模式下其功能类似于缓冲器在隔离模式下它将输出一个固定的预设值。4为避免出现一个电源域到另一个电源域的异步时序正常模式与隔离模式之间的转换必须保持同步。通常在芯片层级电源管理模块会同步地激活或停用隔离单元。需要注意尽管隔离单元主要应用在功耗敏感型设计种但在防止亚稳态在不同复位域间传播方面隔离单元同样发挥作用。d时钟门控的结构1时钟门控单元有效节省功耗此外使用集成电路时钟门控ICG技术能够节省芯片面积。以一条512位的数据总线为例若采用单个ICG即可实现对其进行启用或禁止操作而若使用多路复用器则需要512个。24类门控单元①基于低电平锁存与门的ICG②基于或门的ICG③基于高电平锁存或门的ICG④基于与门的ICGeSRAM有哪些功耗状态1SRAM主要有4种功耗状态活动、浅睡眠、深度睡眠、关机。2在活动状态所有设备开启外设逻辑和存储阵列均有电这是正常运行模式。在浅睡眠状态部分外围逻辑关闭包括SRAM位线预充电逻辑、读多路复用器、写多路复用器、DFT逻辑但存储阵列本身仍然保持供电因此在这种情况下存储内容得以保留。在深度睡眠状态下更多的外围逻辑关闭而存储阵列本身仍然保持通电因此在此状态下可以实现更好的节能效果同时保留存储内容。3SRAM宏单元通常配备独立端口用于控制SRAM的电源状态。具体包括1个低功耗浅睡眠LSLP端口、1个低功耗深睡眠DSLP端口、1个关闭SD端口。SD端口优先于LSLP端口和DSLP端口即如果SD端口置为1那么无论LSLP端口和DSLP端口取值如何SRAM均处于关闭状态。4SRAM功耗状态时序功耗状态控制要求设计正确驱动LSLP/DSLP/SD端口并且这些端口存在某些时序约束例如①在置位LSLP/DSLP/SD端口前SRAM必须在特定时长内不进行任何访问操作②在置位LSLP/DSLP/SD端口前SRAM的门控时钟必须保持特定时长③在置位LSLP/DSLP/SD端口后这些端口需要在一定时长内维持高电平即保持最小高电平脉冲宽度④在撤销LSLP/DSLP/SD端口后这些端口需要在一定时长内维持低电平即保持最小低电平脉冲宽度⑤在撤销对LSLP/DSLP/SD端口的置位操作后SRAM必须在特定时长内不进行任何访问操作且时钟需保持门控状态。