版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字逻辑综合6.1逻辑综合的基本概念6.2逻辑综合工具DesignCompiler6.3DesignCompiler逻辑综合分析6.4静态时序分析及设计约束6.5综合实例分析6.6小结
6.1逻辑综合的基本概念
6.1.1逻辑综合定义本章中我们具体研究如何将RTL设计模型映射为具有可制造性的电路门级网表,并且保证映射后的器件能完成预期的功能,这个映射的过程就称为逻辑综合。与C语言编译器是C语言和机器语言的沟通媒介相类似,逻辑综合也是HDL代码和门级网表之前沟通的桥梁。典型的数字系统前端设计流程如图6.1所示。图6.1典型的数字系统前端设计流程
6.1.2逻辑综合步骤
数字电路逻辑综合设计的基本流程如图6.2所示,主要包括三个基本步骤:转换、逻辑优化和映射。图6.2逻辑综合设计的基本流程
设计者提供的约束条件直接决定了逻辑综合结果的优劣。在综合过程中,我们需要添加各种约束来优化设计,产生满足时序要求的最小面积设计。综合后的时序和面积的折中曲线如图6.3所示,最优化的设计是在面积与延时中取一个最佳的平衡。图6.3时序和面积的折中曲线
6.2逻辑综合工具DesignCompiler
DesignCompiler(DC)是Synopsys公司的综合工具。DC自20世纪80年代诞生之日起,作为综合工具的领导者,得到了集成电路设计公司的广泛使用。DC支持多种设计类型,为最优化设计提供约束驱动,最终生成基于工艺库的门级网表。DC可以从速度、面积和功耗等方面来优化组合和时序电路,并支持平直(Flatten)或层次化(Hierarchy)设计。
6.2.1DesignCompiler的功能
DC可以灵活处理不同设计中出现的各类问题,具有强大的综合功能。设计者利用DC可以完成以下工作。
(1)利用用户指定的门阵列、FPGA或标准单元库,生成高速、面积优化的专用集成电路。
(2)可以在不同晶圆厂工艺或者工艺节点之间灵活地进行设计转换。
(3)探索设计的权衡,包括延时、面积、不同负载(温度、电压)时的功耗等设计约束条件。
(4)优化有限状态机的综合,包括状态的自动分配和状态的优化。
(5)当第三方环境仍支持延时信息和布局布线约束时,可将输入网表、输出网表和电路图整合在一起输入至第三方环境。
(6)自动生成和分割层次化电路图。
DC具有较好的兼容性,可以支持不同的文件格式,来协调综合上下游的工作流程,有效缩短了设计周期,其支持的输入输出文件格式见表6.1。
6.2.2DC-Tcl工具语言
Tcl是ToolCommandLanguage的缩写,是一种工具命令语言。它是由加州大学伯克利分校的JohnK.Ousterhout开发而成的。Tcl功能强大且易于学习,广泛应用于网络通信、计算机管理、网页设计中,是一种公开的符合工业标准的界面和脚本语言。
DC-Tcl在Tcl的基础上,扩展丰富了Tcl的功能,使用者既能灵活方便地使用Tcl命令,又能根据电路特性,对设计进行分析和优化。
DC-Tcl所提供的变量、循环和子程序等,有利于Synopsys的命令建立脚本。特别说明的是,DC-Tcl所编写的脚本,并不适用于Tclshell。DC-Tcl将Tcl集成到Synopsys的工具里。
Tcl命令可以用两种方式执行,一种是在DC-Tcl里交互式地执行,如例6.1所示;另一种是批处理模式,如例6.2所示。
例6.1
dc_shell>echo"Runningmy.tcl..."
dc_shell>source-echo-verbosemy.tcl
例6.2
unix%dc_shell-fmy.tcl|tee-imy.log
通过UNIX命令tee可以在屏幕上显示运行结果,也可以将结果写入指定的文件中。
Tcl命令由一个或多个字符组成,字符与字符之间由空格分隔。Tcl脚本由一系列的命令组成,如果在一条命令中需要换行,则要加上“\”分隔。例6.3为一个典型的DC-Tcl脚本。
Tcl的变量名由字符、数字和下划线组成。变量前加“$”,表示变量的替换,与C语言和Verilog语言不同,Tcl不需要首先声明变量,其命令可以是任意长度的字符串,如例6.4所示。
Tcl可以在一个命令嵌套使用另一个命令的返回值,只要用中括号“[]”将嵌套命令包住即可。在例6.5中,第三个例子先执行expr$x-9,结果为25,再执行sety“x-9is25”。“expr”是进行数学运算的Tcl函数。
例6.7
dc_shell>set_output_delay2-clockClk[get_portsout*]
表示把输出约束加到以out开头的所有端口上。
在DC中,每个设计由6个设计实体组成,分别为设计(design)、端口(port)、单元(cell)、管脚(pin)、连线(net)和时钟(clock)。前5个设计实体在网表中都有定义,而clock是个特殊的端口,采用例6.8所示的命令定义时钟。
例6.8
create_clock-period4[get_portsclk]
图6.4和图6.5分别展示了6个设计实体在Verilog代码和门级电路中的表达。图6.4门级代码中的设计实体表达图6.5门级电路中的设计实体表达
命令get_* 用于返回当前设计,包括DC的memory和库中的设计实体。get_cells返回到设计中的单元和实例,get_clocks返回到当前设计中的时钟,get_designs返回DCmemory中的designs等等,如例6.9所示。
例6.9
dc_shell>get_designs*
{TOPENCODERREGFILEPLL}
dc_shell>get_ports{C?O*}
{OUT[0]OUT[1]}
dc_shell>get_pins*/Q*
{I_ENC/Q0I_ENC/Q1I_REG/Q[0]I_REG/Q[1]}
命令all_* 和get_* 一样,能返回到当前设计中的实体,不同的是all_* 能返回所有索引物集,如例6.10所示。
例6.10
dc_shell>all_inputs
{ABCDCLK}
dc_shell>all_outputs
{OUT[0]OUT[1]}
dc_shell>all_registers
{I_REG/Z_reg[0]I_REG/Z_reg[1]}
6.3DesignCompiler逻辑综合分析
6.3.1DC设计配置在进行设计之初,首先创建一个DC工作目录,RTL代码、库文件和约束文件等都保存在这个目录中,DC工具也将在这个目录下进行启动。这个目录称为当前工作目录(CurrentWorkingDirectory,CWD),如图6.6所示。图6.6DC工作目录
1.dc_shell命令行方式
在UNIX命令行中进入CWD,键入dc_shell命令。该方式是以文本界面方式运行DC,操作如下:
unix%cdrisc_design
unix%dc_shell
在DC启动的过程中会自动执行一个名为“.synopsys_dc.setup”的脚本,该脚本为隐藏文件,需要在CWD中用“ls-a”命令才可以显示。该脚本中配置了一些DC综合的初始环境。例6.11是一个初始环境的配置脚本。这个脚本中通常会配置一些诸如综合库和别名的设置等初始化设置和项目相关变量。
该文件通常存放于3个目录之中,当前目录(CWD)中的 .synopsys_dc.setup优先级最高。宿主目录中的 .synopsys_dc.setup次之,$SYNOPSYS/admin/setup目录中的 .synopsys_dc.setup优先级最低,如图6.7所示。图6.7.synopsys_dc.setup所在目录结构
2.dc_shell-t命令行方式
该方式是以Tcl工具命令语言方式为基础的,但又在该脚本语言上扩展了实现DC的命令。用户可以在shell提示符下输入“dc_shell-t”来运行该方式,与dc_shell命令行方式相似,该方式的运行环境也是文本界面。执行命令后成功启动dc_shell显示的界面如图6.8所示。图6.8成功启动dc_shell显示的界面
3.Design_Vision图形界面方式
Design_Vision是DC的图形操作界面,该方式通过菜单、对话框的界面来实现各项功能。在shell提示符下输入“dvt”启动图形操作界面,启动界面如图6.9所示。图6.9DC图形操作界面
6.3.2逻辑综合工艺库
当进行映射操作时,设计者需要晶圆厂提供的工艺技术库文件进行逻辑综合。典型的 .lib库格式单元如图6.10所示。图6.10.lib库
在DC中,被综合的电路最终都必须映射到目标库(targetlibrary)上。DC会在库中选择功能正确的逻辑门单元,使用库中的时序信息来计算电路的路径延迟。target_library是DC的保留变量,这个变量可以选择不同的综合库文件进行综合,如例6.12所示。
例6.12
dc_shell>set_app_vartarget_librarysc_max.db
link_library也是保留变量,用于分辨读入设计中的逻辑门和子模块的功能,如例6.13所示。
例6.13
dc_shell>set_app_varlink_library"*$target_library"
“ * ”一般放在$target_library之前,表示DC先搜索内存里已有的库。读入设计时,DC会自动搜索内存中已有的库,然后再搜索 $link_library中其他的库。当DC读入的是门级网表时,需要把link_library设成指向生成该网表的目标库。否则DC将找不到网表中的器件。DC搜寻变量是通过 $search_path指定的目录进行查找的。
symbol_library由晶圆厂提供,它包含了所有库单元的图形化标识。DC利用symbol_library生成具有连接关系的电路图。该电路图通过DC的图形化界面Design_Vision进行查看。当用户生成一个电路,DC会将门级网表和symbol_library中的图形标识进行对应关联,如例6.14所示。
例6.14
dc_shell>set_app_varsymbol_librarysc.sdb
6.3.3DesignCompiler的基本设计流程
DC逻辑综合的基本流程如图6.11所示。以下介绍流程的分步骤。图6.11DC逻辑综合的基本流程
1.DC基本设计流程的步骤
(1)使用导入(read)命令将HDL代码转换为通用的布尔门阵列,也就是gtech.db(generictechnology)库中的逻辑器件。(2)使用读取(source)命令将约束条件读入DC中,再对GTECH网表施加时序、功耗和面积等方面的约束,使其满足设计目标。
(3)使用编译(compile)命令,将电路按照设计约束进行综合和优化,并映射到晶圆厂工艺库中的逻辑器件,此时的网表已经包含了实际的工艺参数。
(4)使用报告(report)命令,产生设计报告。设计者通过报告分析、评估该网表是否满足预期需求。若不满足预期需求,可对设计约束或者RTL进行修改,直到满足需求为止。
(5)使用写入(write)命令,将满足设计需求的门级网表以ddc的格式保存在磁盘上。
2.DC设计流程中各步骤的命令
以下对设计流程中各步骤的命令进行详细介绍。
(1)读入设计文件(read_file)。DC首先将RTL设计文件读入到memory中。在读入层次化结构的设计中,用户需要指定顶层文件。有两种方式完成这一步骤:一种是read_file的方式,另一种是analyze+elaborate的方式。
例6.15中,先后用3个read_verilog命令读取了A.v、B.v和C.v3个设计文件,DC认为最后一个读取的文件C.v中的设计为顶层设计,A.v和B.v则作为它的子模块。
例6.15
dc_shell>read_verilogA.v
dc_shell>read_verilogB.v
dc_shell>read_verilogC.v
例6.16中,用一个read_verilog命令加花括号 {} 读取了A.v,B.v和C.v3个设计文件,DC认为花括号列表中第一个读取的文件A.v中的设计为顶层设计,而B.v和C.v是它的子模块。
例6.16
dc_shell>read_verilog{A.vB.vC.v}
为了避免人为因素导致的错误,建议用户在使用完read_file命令后,采用current_design命令显示的指定顶层进行设计。例6.17中用current_design命令显示MY_TOP为顶层设计。
例6.17
dc_shell>read_verilog{A.vB.vTOP.v}
dc_shell>current_designMY_TOP
analyze+elaborate方式:analyze命令首先将Verilog或VHDL源文件读入memory中,并检查语法规范。之后将RTL源代码转换成二进制格式的中间文件,存放于CWD中。elaborate命令将analyze产生的二进制中间文件转换为GTECH网表,并且指定顶层设计。在命令中加入 -parameters选项可以设置设计中的参数,这是在读文件过程中唯一能改变设计参数的方法。elaborate命令还自动地执行了link命令(read_file不会执行link命令),完成链接操作。elaborate命令对于VHDL代码允许选择不同的结构体。
例6.18所示,设计顶层为MY_TOP,并且用户指定的参数设置会代替源代码中的默认参数。
两种读入文件方式的比较见表6.2。
(2)链接设计(link)。在一个完整的设计中,每个单元必须关联到工艺库中的器件,并且描述它的每一个引用,这个过程就叫做链接。链接可以用link命令执行,这个命令会用到link_library和search_path两个系统变量去解释设计中的各种应用。如上文所述,elaborate命令中包含了link命令的操作,而如果用read_file读入文件,则必须用link命令进行链接。
设计者还可以在link命令后加上check_design命令。check_design命令能够检查当前设计内部表达的一致性,能发现一些问题并报出警告和错误。例6.19所示,未连接pin和递归层次结构产生的错误都会在检查后进行提示。
(3)添加设计约束(constraint)。为了满足目标,设计者会添加关于时序、面积和功耗等方面的约束条件。DC会根据这些约束条件对设计进行有效的优化。为了增强脚本的可读性,设计者通常会单独建立一个约束的Tcl文件,然后在运行DC的脚本中用source命令执行该约束脚本。在执行完约束脚本后,通常还会执行check_timing命令。该命令会报告出当前设计的时序属性,未施加约束的节点,以及一些潜在错误和警告,供设计者参考,协助设计者进一步完善约束脚本。典型示例如例6.20所示。
(4)编译综合(compile)。添加设计约束后,设计者需要根据约束要求将GTECH网表中的逻辑器件映射到变量 $target_library中指定库中的实际器件。该步骤主要使用compile命令,compile命令在逻辑层到门级网表层的各个层面进行综合和优化。这个优化过程是根据设计者施加的约束进行驱动的。
compile_ultra命令除了具有compile的基本功能外,还提供可对时序、面积、功耗等方面的并发优化手段来满足高性能设计,这些优化手段既可以打破模块之间的边界进行边界优化,也可以在算法层面直接进行优化,并提供高级时序分析以及关键路径的重编译,如例6.21所示。
(5)报告分析(report)。编译完成后得到门级网表可能并不完全满足约束条件,这时设计者可以使用“report_*”命令来生成报告,查看设计信息。
“report_timing”命令生成的是设计时序报告;
“report_constraint”命令生成的是设计规则和时序违反约束;
“report_area”命令生成的是面积报告。
例6.22是命令“report_timing”生成的报告,最后一行中的(VIOLATED)表示设计违例。设计者需要修改约束或者RTL代码来消除违例。
(6)保存网表(write)。完成以上步骤后,设计者可以得到所需的门级网表。这时可以使用write命令将生成的网表文件保存在磁盘上,并通过 -format选项选择保存文件的格式。如例6.23所示,保存的文件可以是 .v格式、.vhd格式或 .ddc格式。其中 .ddc格式是Synopsys内置的内部数据库文件格式,不仅有网表中的器件连接信息,还包含网表的时序信息。.ddc格式是二进制格式文件,具有最快的读取速度,也是最常使用的文件格式。
例6.23
dc_shell>write-formatddc
Writingddcfile'MY_DESIGN.ddc'.
1
dc_shell>write-formatverilog
Writingverilogfile'/home/gy/dc_lab/DC_2013.12/lab3/MY_DESIGN.v'.
1
使用DC进行电路综合的基本流程如图6.12所示。各阶段中使用的基本命令也包含其中。例6.24为结合以上步骤编写的DC运行脚本。在DC终端用“source”命令执行该脚本,就可自动完成以上综合的各个步骤,有利于简化综合操作流程以及完成交互式的任务。图6.12使用DC进行电路综合的基本流程
6.4静态时序分析及设计约束
6.4.1静态时序分析在综合过程中,DC使用内建的静态时序分析工具DesignTime来估算路径延迟以指导优化,最终产生时序报告,如图6.13所示。图6.13DC的静态时序分析示意图
静态时序分析主要包括以下三个主要步骤。
(1)将设计分解成时间路径的集合。
(2)计算每一条路径的延迟。
(3)所有的路径延迟都进行检查,并与时间约束比较,检查是否满足约束条件。
DC通过以下方法将设计分解为时序路径的集合。每条路径都设置有一个起点和一个
终点。
起点:
◆除了时钟的输入端口;
◆时序器件的时钟端口。
终点:
◆除了时钟的输出端口;
◆时序器件除时钟端口外的其他输入端口。
时序路径示意图如图6.14所示,当前设计(CURRENT_DESIGN)时序路径的起点有A、B、FF2/CLK_IN和FF3/CLK_IN,终点有C、D、FF2/D和FF3/D。将这些起点和终点连接在一起就可以得到4条时序路径,分别设置为路径1、路径2、路径3和路径4。图6.14时序路径示意图
时序路径组示意图如图6.15所示,图中包括5个终点,其中3个由CLK1控制,共计8条路径。CLK2仅控制一个终点,共有3条路径。输出端口为一个终点,它不受任何时钟控制,只有一条路径,属于默认组。这样,12条路径被分为CLK1,CLK2和默认路径3个路径组。图6.15时序路径组示意图
在计算路径延迟时,DC将每一条路径分成时间弧。时间弧描述单元或连线的时序特性。单元的时间弧由工艺库定义,包括:
◆单元的延迟;
◆时序检查(触发器的setuptime/holdtime检查,触发器clk→q的延迟等)。
连线的时间弧由网表定义。路径的延迟与起点的边沿有关,图6.16中,假设连线延迟为0,如果起点为上升沿,则该条路径的延迟等于1.5 ns。如果起点为下降沿,则该条路径的延迟为2.0 ns。这说明单元的时间弧都是边沿敏感的。图6.16时间弧的边沿敏感
6.4.2亚稳态
每个晶圆厂提供的工艺库文件中,都规定了每个触发器的建立时间(Setuptime)和保持时间(Holdtime)。设触发器由时钟的上升沿触发,在时钟上升过程中,输入信号是不允许发生任何变化的。如果在信号建立或保持时间中对其采样,得到的结果可能是“0”,“1”,“Z”或“X”的任意情况,这种情况称之为亚稳态。在综合过程中,设计者一般只考虑建立时间,而保持时间主要在后端物理版图设计中加以考量。亚稳态时序图如图6.17所示,数据稳定的有效时间至少要满足“setup”和“hold”时间的总和。图6.17亚稳态时序图
6.4.3时钟的约束
图6.14中介绍了寄存器间路径、输入路径、输出路径和组合逻辑路径4种路径。本小节将对这4种路径的时序约束进行详细讨论。
首先明确一个概念,寄存器间的路径可以通过约束时钟来实现。寄存器间的时序路径如图6.18所示,寄存器之间存在组合逻辑X。寄存器FF3的建立时间为0.2 ns。我们可以通过create_clock命令,将一个周期为2 ns所示时钟施加在端口Clk上,并取名为MCLK,如例6.25所示。
例6.25
dc_shell>create_clock-period2-nameMCLK[get_portsClk]
例6.25命令中的“2”表示2个时间单位,时间单位在工艺文件库中加以定义(此例中时间单位为1 ns)。依据该约束命令,DC可以计算出X逻辑的最大延迟为2 ns - 0.2 ns = 1.8 ns。如果X逻辑延迟超过1.8 ns,则寄存器FF3采样值为亚稳态,所以DC会尽力综合将X逻辑的延迟限制在1.8 ns以内。同时在满足时序约束的前提下,DC也会保证电路的功耗和面积的最优化。图6.18寄存器间的时序路径
图6.19所示为理想时钟与实际时钟示意图,寄存器时钟端输入的时钟信号经过前级时钟树及各级负载影响,波形已不再是理想时钟,因此在设计时钟约束时,需要考虑不确定性(uncertainty),延迟(latency)和转换时间(transition)三个因素的影响。图6.19理想时钟与实际时钟示意图
如例6.26所示,时钟的uncertainty可以通过set_clock_uncertainty命令进行设置。
例6.26
dc_shell>create_clock-period2-nameMCLK[get_portsClk]
dc_shell>set_clock_uncertainty0.3MCLK
latency为时钟沿到来的延迟。设计者需要在时钟树上加入缓冲器(buffer)来平衡时钟到达不同寄存器之间的延迟。这些缓冲器延迟加上线延迟就产生了latency。latency主要有两种形式:一种是时钟源到被综合模块时钟端口之间的延迟,称为SourceLatency;另一种是被综合模块时钟树上的延迟,称为NetworkLatency。set_clock_latency命令默认设置为NetworkLatency,如要设置SourceLatency可加选项 -source,如例6.27及图6.20所示。图6.20ClockLatency示意图
例6.27
dc_shell>set_clock_latency-source4[get_clocksClk]
dc_shell>set_clock_latency3[get_clocksClk]
在实际中,时钟的跳变沿并不是理想的瞬时变化,而是有一定的斜率,transition描述的就是这个斜率的持续时间,如例6.28所示。
例6.28
dc_shell>set_clock_transition0.5[get_clocksClk]
6.4.4输入输出路径的设计约束
图6.21所示为输入路径的设计约束示意图,要计算出逻辑N的最大延迟,并对其进行逻辑综合,就必须首先提供前级模块M的延迟,如例6.29所示。图6.21输入路径的设计约束示意图
例6.29
dc_shell>create_clock-period2[get_portsClk]
dc_shell>set_input_delay-max0.6-clockClk[remove_from_collection\[all_inputs][get_portsClk]]
例6.29所示,用set_input_delay设置M逻辑的延迟在0.6 ns以内,其中 -max选项表示M逻辑延迟最大不超过0.6 ns,中括号内返回的是除了时钟端口以外的所有输入端口的物集。为了不产生亚稳态,从FF1的时钟端的上升沿,到FF2时钟端的上升沿捕获,中间信号传输限制在一个时钟周期内完成。由此可以计算出被约束逻辑N延迟为2 ns - 0.2 ns - 0.6 ns = 1.2 ns。
图6.22所示为输出路径的设计约束示意图,要计算组合逻辑S的最大延迟,并对其进行综合,必须提供后级模块T的延迟,如例6.30所示。图6.22输出路径的设计约束示意图
例6.30
dc_shell>create_clock-period2[get_portsClk]
dc_shell>set_output_delay-max0.7-clockClk[all_outputs]
例6.30所示,用set_output_delay设置S逻辑的延迟在0.7 ns以内,其中 -max选项表示约束逻辑延迟最大不超过0.7 ns。为了不产生亚稳态,从FF3的时钟端的上升沿开始,到FF4时钟端的上升沿捕获,中间信号传输限制在一个时钟周期内完成。由此可以计算出被约束逻辑S延迟为2 ns - 0.1 ns - 0.7 ns = 1.2 ns。
6.4.5组合逻辑路径的设计约束
组合逻辑路径的设计约束有两种情况,分别如图6.23和图6.24所示。图6.23组合逻辑路径的设计约束情况一图6.24组合逻辑路径的设计约束情况二
在第一种情况中,被综合模块包含在时序逻辑中。首先要设置前级模块中的逻辑E和后级模块中的G逻辑,才能对组合逻辑F进行综合。如例6.28所示,逻辑E的最大延迟设置为不超过0.4 ns,逻辑G的最大延迟不超过0.2 ns。为了避免亚稳态,从FF1时钟端的上升沿开始,到FF4时钟端的上升沿捕获,中间信号传输限制在一个时钟周期内完成。由此可以计算出被约束逻辑F的延迟为2 ns - 0.4 ns - 0.2 ns - 0.1 ns = 1.3 ns,DC命令如例6.31所示。
例6.31
dc_shell>create_clock-period2[get_portsClk]
dc_shell>set_input_delay-max0.4-clockClk[get_portsB]
dc_shell>set_output_delay-max0.2-clockClk[get_portsD]
在第二种情况中,由于被综合模块中既没有时序逻辑器件,也没有时钟端口,因此我们就必须设置一个虚拟时钟,才能对模块添加约束。如例6.32所示,先使用create_clock命令建立一个周期为2ns的虚拟时钟VClk,由于没有指明这个时钟来自于哪个端口,所以这是一个虚拟的时钟。通过这个VClk,可以设置逻辑M和T的延迟。为了不产生亚稳态,从FF1的时钟端的上升沿开始,到FF4时钟端的上升沿捕获,中间信号传输限制在一个时钟周期内完成。由此可以计算出被约束逻辑Combo延迟为2 ns - 0.4 ns - 0.2 ns - 0.1 ns = 1.3 ns。
例6.32
dc_shell>create_clock-period2-nameVClk
dc_shell>set_input_delay-max0.4-clockVClk[get_portsB]
dc_shell>set_output_delay-max0.2-clockVClk[get_portsD]
6.4.6时间预算设计
在6.4.5小节中,我们介绍了如何使用set_input_delay和set_output_delay设置前后级模块逻辑延迟。但在实际设计中,电路规模较大,通常需要对设计模块进行划分。而多数设计者仅负责其中的一部分,无法准确设置前后级的组合逻辑延迟,这时就需要设置时间预算,如图6.25所示。图6.25时间预算设计示意图
通常,我们可以将一个时钟周期的60%时间留给前级或后级逻辑,40%的时间留给被综合逻辑。这样每个设计者在模块接口间就留下了20%的工程余量,从而保证在模块连接时不会出现亚稳态。工具建议的时间预算设计示意图如图6.26所示,时钟周期为10 ns,每个设计工程师在综合自己模块时需要约束自己的输入和输出模块在4 ns之内,DC相应的命令如例6.33所示。
例6.33
dc_shell>create_clock-period10[get_portsCLK]
dc_shell>set_input_delay-max6-clockCLK[remove_from_collection\
[all_inputs][get_portsCLK]
dc_shell>set_output_delay-max6-clockCLK[all_ouputs]图6.26工具建议的时间预算设计示意图
6.4.7设计环境约束
虽然设计者可以使用create_clock,set_input_delay,set_output_delay等命令来设置电路约束。但为了保证包括输入/输出路径在内每一条时序路径延迟约束的精确性,还应该提供设计的环境属性,如图6.27所示。图6.27环境约束示意图
了计算精确的输出电路时间,DC必须明确输出器件所驱动的总电容负载。在默认情况下,DC认为输出端口外部电容负载为0。设计者可以使用set_load命令指定外部电容负载为常数值,如图6.28所示,DC命令如例6.34所示。
例6.34
dc_shell>set_load[expr{30.0/1000}][get_portsB]图6.28指定常数负载示意图
同样可以用load_of命令指定工艺库中某一器件的引脚为负载,如图6.29所示,DC命令如例6.35所示。
例6.35
dc_shell>set_load[load_ofmy_lib/AN2/A][get_portsB]图6.29指定实际器件负载示意图
对于输入,为了精确计算输入电路的时间,DC必须明确到达输入端口的转换时间。在DC中用set_driving_cell命令表明输入端口是由一个真实的外部单元驱动。默认情况下,DC假设输入端口上外部信号对应的转换时间为0。但是如果使用set_driving_cell命令在输入端加上驱动,DC将会计算实际的转换时间,如图6.30所示,DC命令如例6.36所示。
例6.36
dc_shell>set_driving_cell-lib_cellOR3B[get_portsA]
dc_shell>set_driving_cell-lib_cellFD1-pinQn[get_portsA]图6.30指定驱动器件示意图
在无法明确每个输入端口驱动和输出端口负载的情况下,设计者需要对输入输出端口进行预测。该预测必须遵守以下准则:
(1)保守预测,假设驱动单元的驱动能力较弱。
(2)限制每一个输入端口的输入负载。
(3)估算输出端口驱动的模块数目。
如果电路在不同的“nominal”电压和温度的条件下工作,需要为设计设置不同的环境条件。工艺库中通常有设置不同的工作环境变量,这时可以用set_operating_conditions命令进行加载,并可以用report_liblibname命令将所有工作条件列出来,见表6.3。
设置工作条件命令如例6.37所示。
例6.37
dc_shell>set_operating_conditions-max"slow_125_1.62"
线负载模型(WireLoadModel,WLM)是根据连线的扇出来估算连线的RC寄生参数,一般由晶圆厂中的工艺库建立,用户也可以根据实际状况建立线负载模型,如例6.38所示。
设置线负载模型命令如例6.39所示。
例6.39
dc_shell>set_wire_load_model-name160KGATES
为了方便设计,可以建立一个DC-Tcl脚本描述所有设计约束,在使用工具时直接用source命令进行调用,如例6.40所示。
6.4.8多时钟同步设计约束
以图6.31中的多时钟同步设计为例,一个3GHz时钟源通过9分频、6分频、4分频和3分频分别得到子时钟CLKA、CLKC、CLKD和CLKE。但只有CLKC时钟驱动的模块需要进行综合,而其他的时钟只是连接到外围的触发器,其主要作用是为输入输出端口设置约束,那么应该如何设置多时钟同步约束呢?图6.31多时钟同步设计
CLKC输入到待综合的模块中,则其定义与单时钟相同,如例6.41所示。
例6.41
dc_shell>create_clock-period2[gets_portsCLKC]
由于CLKA、CLKD和CLKE没有输入到待综合模块中,因此我们需要使用虚拟时钟。虚拟时钟不驱动任何寄存器,它主要用于说明I/O端口与输入时钟的延迟。多时钟同步输入约束如图6.32所示,DC将根据这些约束,决定最严格的约束条件,如例6.42所示。
例6.42
dc_shell>create_clock-period2[gets_portsCLKC]
dc_shell>create_clock-period3-nameCLKA
dc_shell>set_input_delay-max0.55-clockCLKA[gets_portsIN1]图6.32多时钟同步输入约束
设置好上述约束后,DC会找出波形上升沿间隔的多种情况,然后按照最严格的情况进行综合约束。多时钟同步时钟如图6.33所示,逻辑N必须满足:tN < min(2 - 0.55 - tsetup,1 - 0.55 - tsetup)。图6.33多时钟同步时钟
对于输出电路,我们用同样的方法定义虚拟时钟并施加约束。多时钟同步输出约束如图6.34所示,其中,选项 -add_delay表示输出端口OUT1有两个约束。如果不加该选项,第二个“set_output_delay”将覆盖第一个“set_output_delay”命令,如例6.43所示。图6.34多时钟同步输出约束
DC会找出波形上升沿间隔的多种情况,然后按照最严格的情况进行综合约束。图6.35所示为多时钟同步时钟,逻辑S必须满足:tS < min(1 - 0.52,0.67 - 0.15),即:tS < 0.48。图6.35多时钟同步时钟
6.4.9异步电路设计约束
在之前的小节中,我们讨论的都是同步电路,各时钟都是来源于同一个时钟源。但在实际的数字系统中经常存在由不同时钟源控制的异步电路。在这些不同的时钟之间,频率和相位都没有固定的关系,并且某些时钟在设计中没有对应的端口。在进行异步电路设计时,特别容易出现亚稳态问题,如图6.36所示。图6.36异步电路设计
为了避免亚稳态问题,可以在设计中使用双时钟触发器,或者用异步FIFO等电路连接不同时钟域的边界路径等。对于穿越异步边界的任何路径,必须禁止对这些路径做时序综合。由于不同时钟域间的相位关系是不确定的,一直处于变化中,所以对这些路径做时序约束没有意义,需要采用set_false_path命令解除异步路径的时序约束,如图6.37以及例6.44所示。图6.37异步电路约束示意图
6.4.10多时钟系统的时序约束
在之前的设计约束中,默认信号变化在一个时钟周期内完成,并且达到稳定值,以满足寄存器建立时间和保持时间的要求。但是在有些设计中,某些特殊的路径并不能或者不需要一个时钟周期完成。多时钟电路约束示意图如图6.38所示,时钟周期定义为10 ns,按设计规格,如果加法器的延迟为6个时钟周期,那么该如何约束电路呢?图6.38多时钟电路约束示意图
图6.39所示为多时钟建立时间约束,DC将会仅仅在第6个时钟上升沿,即60 ns处,建立时序分析,假设允许加法器最大延迟是:60-Tsetup,DC命令如例6.45所示。
例6.45
dc_shell>create_clock-period10[get_portsClk]
dc_shell>set_multicycle_path-setup6-to[get_pinsC_reg[*]/D]图6.39多时钟建立时间约束
如果使用DC综合出一条同时满足上述两个约束的路径会极大增加电路的复杂度。在时间为60 ns的时刻,引起寄存器C_reg的D引脚变化是在时钟Clk在0 ns时刻的触发沿。所以应该在0 ns处做保持时间检查,如图6.40所示,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度浙江商业职业技术学院单招《英语》模考模拟试题含答案详解【典型题】
- 2024-2025学年度火电电力职业鉴定试题附答案详解(综合卷)
- 2024-2025学年度助听器验配师通关题库(研优卷)附答案详解
- 2024-2025学年度粮油食品检验人员考前冲刺练习题附参考答案详解【黄金题型】
- 2024-2025学年度火电电力职业鉴定考前冲刺练习及参考答案详解【完整版】
- 2024-2025学年度文化教育职业技能鉴定全真模拟模拟题及参考答案详解【培优A卷】
- 2025年排水管网设计考核试卷及答案
- 护理小组长沟通技巧
- 2026五年级道德与法治下册 社会公德教育
- 上海临港经济发展集团校招试题及答案
- 三级 模块二 项目六 功能促进 任务三 指导或协助老年人使用安全防护性辅助器具
- 2026年安徽工贸职业技术学院单招职业技能测试题库附答案详解ab卷
- 2026贵州省气象部门第二批公开招聘应届毕业生22人考试参考题库及答案解析
- 2026年咸宁职业技术学院单招职业倾向性测试题库及答案详解(网校专用)
- 浙江省名校协作体2024-2025学年高三下学期联考英语试题+答案
- 2026年上饶职业技术学院单招职业技能测试模拟测试卷附答案解析
- 2026年浙江机电职业技术学院单招综合素质考试模拟试题含详细答案解析
- 黑龙江2025年黑龙江省疾病预防控制中心招聘27人笔试历年参考题库附带答案详解
- (2025年)室内装修三级安全教育试卷及答案
- 器材仓库制度规范
- 电厂设备刷漆制度规范
评论
0/150
提交评论