逻辑综合

更新时间:2023-12-09 01:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一 逻辑综合

1 逻辑综合的含义

实现在满足设计电路的功能,速度及面积等限制条件下,将行为级描述转化为指定的技术库中单元电路的连接。 2 逻辑综合的原因

RTL代码是理想的情况,在实际情况中会有门的延时,导线的延时,信号的转换时间及时钟信号到达各个触发器的时间不相等情况。 3 综合的过程

主要包括转译(Translation),优化(Optimization),映射(Mapping)三个过程。

3.1 转译:用HDL语言描述的电路转化为用GTECH库元件组成的逻辑电路的过程。GTECH

是synopsys的通用工艺库,它仅表示逻辑函数的功能,并没有映射到具体的厂家工艺库,是独立于厂家工艺的。

3.2 优化:根据设计者对电路设定延时和面积等约束条件对电路进行优化设计的过程。它

通过各种方法尽量满足设计者对电路的要求。

3.3 映射:把用GTECH库元件的电路映射到某一固定厂家的工艺库上,此时的电路包含了

厂家的工艺参数Library Cells.

4 综合的目标:

得到一个功能和时序都满足的网表。达到面积最小化,功耗最小化和性能最大化。

二 综合软件(DC)

Design Compile是synopsys的综合软件,它的功能是把RTL级的代码转化为门级网表。 DC综合的流程如下:

1 综合环境建立 1.1 启动文件

启动文件用来指定综合工具所需要的一些初始化信息。DC使用名为“.synopsys_dc.setup”的启动文件,启动时,DC会以下述顺序搜索并装载相应目录下的启动文件:1)、DC的安装目录;2)、用户的home目录;3)、当前启动目录。 注意:后装载的启动文件中的设置将覆盖先装载的启动文件中的相同设置。

search_path= search_path + {“.”, synopsys_root + “/dw/sim_ver” } search_path= search_path + { “~/risc32/synthesis/libraries” } target_library={ tcb773stc.db } synthetic_library={dw_foundation.sldb}

link_library = { “*”, dw_foundation.sldb, tcb773stc.db } symbol_library = { tcb773s.sdb }

synlib_wait_for_design_license = {\alias rt “report_timing” designer= XXXXX

company= “ASIC Lab, Fudan Univ.” search_path指定了综合工具的搜索路径。

target_library:为综合的目标库,它一般是由生产线提供的工艺相关的库。 synthetic_library:综合库,它包含了一些可综合的与工艺无关的IP。dw_foundation.sldb是Synopsys提供的名为Design Ware的综合库,它包含了基本的算术

运算逻辑、控制逻辑、可综合存储器等IP,在综合是调用这些IP有助于提高电路性能和减少综合时间。

link_library:链接库,它是DC在解释综合后网表时用来参考的库。一般情况下,它和目标库相同;当使用综合库时,需要将该综合库加入链接库列表中。

symbol_library为指定的符号库。

synlib_wait_for_design_license用来获得DesignWare-Foudation的许可(license)。 alias语句与UNIX相似,它定义了命令的简称。

最后的designer和company项则表明了设计者和所在公司。 1.2 设计实体

在DC中,总共有8种设计实体:

设计(Design):一种能完成一定逻辑功能的电路。设计中可以包含下一层的子设计。 单元(Cell):设计中包含的子设计的实例。

参考(Reference):单元的参考对象,即单元是参考的实例。 端口(Port):设计的基本输入输出口。 管脚(Pin):单元的输入输出口。 连线(Net):端口间及管脚间的互连信号。 时钟(Clock):作为时钟信号源的管脚或端口。 库(Library):直接与工艺相关的一组单元的集合。 2 逻辑综合的过程

DC通过Script文件,自动完成模块的综合过程,其内容如下: 2.1 向DC输入用Verilog或VHDL描述的设计: RTL design entry

编码指南

RTL级的HDL描述实际是电路结构的文本描述,它是技术无关的,类似于网表。HDL语言先于综合工具出现,综合工具只能根据HDL代码进行逻辑推断,对完成同一功能而书写方式不同的HDL代码,综合工具会产生不同逻辑电路。所以不能依靠DC去修正不符合规范的代码。写代码时,需清楚描述的硬件电路拓扑结构。

RTL描述内容如下:寄存器的结构;电路的拓扑;寄存器之间的功能;DC仅对寄存器之间的逻辑进行优化,不会对寄存器的排列进行优化。

输入命令:read和analyze&elaborate,推荐用analyze&elaborate

analyze&elaborate允许设计者在设计的GTECH建立之前,首先去分析设计的语法错误和进行HDL代码转换。 Analyze做语法的检查并产生一个“.syn”文件,存储于work路径下的定义的设计库内,可供后来elaborate使用。对于一个analyzed设备,只需用elaborate重新输入,节省时间。Read就不行。 2.2 设定约束:Environment constraints

定义设计的工艺参数,I/O端口属性,统计wire-load模型

Set_operating_conditions:设置工作条件命令

芯片供应商提供的库通常有max,type,min三种类型,代表操作环境为最坏(worst),典型(type),最好(best)三种情况。芯片的操作环境包括:操作温度,供电电压,制造工艺偏差和RC树模型。一般说来,电压越低,操作温度越高,工艺偏差系数越大,产品速度越慢,反之,速度越快。当电压,温度和工艺偏差有波动的时候,乘以系数K因子来模拟这种影响计算延时。Tree_type定义了环境的互连模型,通过定义这个值选取适当的公式来计算互连线的延迟。

如:命令set_operating_conditions –min BEST –max WORST 用于指示DC对设计的WORST和BEST条件,同时优化。

Set_wire_load -mode :设置连线负载模型 向DC提供wire_load信息。在DC综合的过程中,连线延时是通过设置连线负载模型确定。连线负载模型基于连线的扇出,估计它的电阻电容等寄生参数,它由foundary提供。根据导线负载模型(wire_load_model),DC可以估算出连线的电容,电阻和面积。找出这条线所驱动的负载,得出其扇出数,通过以网表可以查出相应的线的长度。通常技术库里包含许多负载模型,每一种wire-load模型都代表一定模块的尺寸。

导线负载模型模式(wireload model mode)用来选择穿过层次边界时的线的模型,有top,enclosed,segmented三种模式,如果不指定模式,默认的模式是top。

Set_load :设定输出负载

综合出来的电路必须要驱动下一级电路,如果负载取得过小,下级电路无法正常工作,负载取得过大,会增大上一电路的难度。用set_load命令可以设置端口或者线上的电容负载,从而保证输出路径的时序(transition time)。

set_driving_cell -cell -pin :设置输入驱动

驱动是指施加到待综合电路的驱动能力。如果取值不当,综合出来的电路就不能正常工

作。如果驱动太大,综合出来的电路的负载很大;驱动太小,信号的变化边沿会很差。set_drive命令用特定的驱动阻抗来设置输入端口的驱动强度。保证输出路径的时序,确定输入信号的transition time。在默认的情况下,DC认为驱动输入的单元的驱动能力为无穷大,即transition time 为0。

DRC的设计规则约束:

set_max_transition :设置最大传输时间

Transition time是指改变某线所驱动的pin所需用的时间,该时间的计算方法是基于工艺库的。输出的传输时间是输入传输时间及输出负载的函数关系。DC在优化的过程中就是确保所有net的对应的传输时间小于所设定的最大传输时间。

set_max_capacitance :设置线负载电容

Transition time不能提供对net(线)的电容的直接控制,此命令可实现独立于传输时间约束的最大容值的约束。对于连接 输出pin上的net,其对应的容值是net本身的电容加上所连接的pin的容值,DC将这个计算结果与所设定的Max_capacitance比较,决定是否违反设计规则约束。

set_max_fanout :设置最大扇出负载

设置某线所能驱动的负载数量上线,如果某线的扇出负载过重,DC可通过改变单元的驱动强度来修正该约束违例的情况。

这些约束用于的input ports,output ports或current_design,一般在技术库内部设置。当技术库的内部设置不能满足时,可用以上命令设置。例如;

set_max_transition 0.3 current_design set_max_capacitance 1.5 find(port,”out1”) set_max_fanout 3.0 all_outputs()

2.3 设计和面积约束:Design and clock constraints

描述设计的目标,包括时序和面积约束,要注意约束必须是可实现的,否则会导致面积超额,功耗增加或时序不能满足要求。 主要包括两点:

? 约束综合模块的最大面积( set_max_area )

? 约束综合模块timing path(Create_clock, Set_input_delay, Set_output_delay)

IC代码的综合过程可以说就是时序分析过程,DC会将设计打散成一个个路经,这些路经上有cell延迟和net延迟,然后DC会根据加的约束,来映射库中符合这种延迟以及驱动的器件。从而达到综合的目的。

Create_clock:用于定义时钟的周期和波形(duty及起始沿);

时钟的必要定义有时钟的来源(port or pin)及时钟的周期。附加选项有占空比,offset/skew和时钟名称。通过时钟定义约束了寄存器到寄存器之间的延时

例如:create_clock –period 40 –waveform{0 20} CLK周期40ns 上升沿0 ns,下降沿20 ns;

Set_clock_transition

在pre_layout必须设置一个固定的transition值(由技术库提供),因为时钟网有很大的fanout.这样可使DC根据该时钟计算实际的延时值。

Set_clock_skew:设置时钟的skew及delay

pre_layout 和post_layout命令选项不一样。Pre-layout需要估计时钟树的延时和抖动,post-layout用户不需定义时钟的延时和抖动,他们由时钟树决定。 clock transition time也不需定义。

Set_input_delay: 约束输入延时

定义信号相对于时钟的到达时间,指一个信号,在时钟沿之后多少时间到达。 例如:set_input_delay –max 23.0 –clock CLK { dataout } Set_output_delay:约束输出延时

定义从输出端口数据不可用开始距后一个时钟沿的时间:即时钟周期间去cell从上一个时钟沿开始的工作时间。

如:set_output_delay –max 19.0 –clock CLK {dataout}

Set_dont_touch_network,

常用于port或net阻止DC隔离该net,和该net向连的门具有dont_touch属性。常用于CLK和RST

例如:Set_dont_touch_network{CLK,RST} 。

当一个模块例用原始的时钟作为输入,在该模块内部利用分频逻辑产生了二级时钟,则应对二级时钟output port上设置set_dont_touch_network.

当一个电路包含门时钟逻辑时,若在时钟的输入设置set_dont_touch_network,则阻止DC 隔离该门逻辑,导致DRC发现时钟信号冲突,对门RESET同样。

Set_dont_touch

应用于current_design,cell,net,references.阻止DC对模块中的这些元素进行技术映射。 例如: Set_dont_touch find(cell,”sub1”)

Set_dont_use

用于.setup文件用此命令可将技术库中的某些cell滤出,禁止DC映射; 例如: Set_dont_use {mylib/SD*},将技术库中名字以SD起头的flip-flops。

Set_false_path :忽略路径

如果一个设计中有多个时钟是异步的,或者是这些时钟虽然对于端口的时序有影响,但是在设计中没有相应的时钟引脚,那么就要考虑亚稳态的问题。false path路径的鉴别在

设计中很关键,如果不对false path路径进行标识,DC会对所有的路径进行优化,从而影响关键时序路径。一般用于异步电路和没有逻辑和功能意义的路径。

Set_multicycle_path:设置多周期路径

因为DC假设所有的路径都是单周期的,为了满足时序,对多周期路径会做不必要的优化,从而影响相邻路径或面积。所以这个命令用于隔离多周期路径,通知DC通过这条路径所需的周期数。

Set_max_delay:设置最大延时

对于仅包含组合逻辑的模块,用此命令约束所有输入到输出的总延时。 例如: set_max_delay 5 –from all_inputs() –to all_outputs

对于含有多个时钟的模块,可用通常的方法定义一个时钟,用此命令进行约束定义时钟和其他时钟的关系。

例如: set_max_delay 0 -from CK2 -to all_register(clock_pin)

Set_min_delay:设置最小延时

对于仅包含组合逻辑的模块,定义指定路径的最小延时 例如: Set_min_delay 3 –from all_inputs() 2.4 编译: Compile design into mapped gates

将GETCH 逻辑网络映射为技术库的gate cell,使设计满足用户的约束。

对于一个层次设计分两步实现:映射各子模块到逻辑门,不考虑约束;根据时序和面约束优化逻辑,修正模块分界间的违例;

Synopsys 推荐三种编译策略,由设计者根据设计的结构及定义选择。 ? Top-down hierarchical compile

就是将整个设计作为一个模块进行编译,仅需top level约束。对单时钟的设计很适用。 ? Time-budget compile

是一种Bottom-Up的方法,各自模块可独立编译,适合于划分合理,各自模块的时序约束能够被明确定义的设计。

? Compile-characterize-write-script-recompile(CCWSR);

适用于不能很好定义子模块内部连结的大型设计,不受硬件存储器的限制。这种方法首先编译每个子模块,需要top level约束;然后用top level约束characterize每一子模块, top level的时序信息被传播给各个子模块;在执行write_script命令生成子模块的约束文件;最后re-compile每一格模块。

设计综合使用compile命令进行(该命令对当前设计有效),该命令的格式如下: compile

-map_effort low | medium | high

-area_effort none | low | medium | high -incremental_mapping

-map_effort:综合器映射的努力程度,有low, medium, high三个选项,缺省为medium -area_effort:综合器面积优化的努力程度,有low, medium, high三个选项,缺省为同map_effort的值

-incremental_mapping:值是综合器在前一次综合结果的基础上进行进一步优化,不改变电路结构

2.5 设计优化:Optimizing design

使设计的电路获得最快的逻辑及最小的面积的过程。

Logic optimization(包括flatten和structure )和Gate optimization。

Flatting: 目的在于通过移去中间变量,减少输入和输出之间的逻辑层次,提高速度,但会带来面积上的压力。

Structuring:用于结构逻辑,如超前进位加法器,目的就是通过添加中间变量,使逻辑共享。但会增加逻辑的延时。

Removing hierarchy: 因为DC无法跨越模块间优化,一些不好的划分会阻止DC获得更好的结果,所以我们移去不必要的层次,使设计划分合理,获得更好的结果。

Optimizing for Area:DC总是优先根据时序来优化设计,对于时序非关键而对面积敏感的模块,可在初始编译中定义面积的需求,不用定义时序的约束。另外,对具有高驱动强度的门设置dont_use属性,因为高驱动强度的门虽然加快了逻辑的速度,但具有较大的面积。

Incrementally compile:设计映射为门后,时序和面积约束可被再定义,这时设计采用incrementally编译。 incrementally编译确保DC维持以前的电路结构,只做门级的优化,可改善设计的时序与性能,不会增加不必要的逻辑。 2.6 设计结果报告 2.6.1 报告时延信息

使用report_timing命令可以报告时延信息(该命令对当前设计有效),命令如下:

report_timing -to <路径终点列表> -from <路径起点列表> -nworst <路径数>

-to <路径终点列表>:需要计算时延的路径的终点 -from <路径起点列表>:需要计算时延的路径的起点

-nworst <路径数>:报告的路径数(缺省为1,由时延裕量最小的路径开始报起) 2.6.2 报告面积信息

使用report_area命令可以报告面积信息(该命令对当前设计有效)。 2.7 设计的保存

使用write命令来实现设计的保存,命令格式如下: Write -format -hierarchy -output

-format:指定保存的格式,缺省为db -hierarchy:指令DC保存所有设计层次 -output:指定保存的文件名

2.8 时序文件的导出

DC可以导出的时序文件包括时序描述文件和时序约束文件两种。前者描述了设计的时序情况主要用于进行综合后的动态仿真;后者带有关键路径的时延约束信息,主要供后端工具进行时延驱动的布局布线。无论哪中时序文件都采用标准延时文件(SDF)的格式。

SDF用于做gate-level动态时序仿真。SDF文件分为如下两种:pre_layout 和post_layout

post_layout的SDF文件由DC在设计回注了RC延时值和lumped电容后产生。PT也 可产生SDF文 件。DC命令如下:

write_timing –format sdf-v2.1 –output SDF包含的时序信息组成如下:

IOPATH delay:cell delay,根据输出的wire loading 和输入信号的transition计算 INTERCONNECT delay:是一条路的driving cell的output pin和driven cell的input pin RC delay。

SETUP timing check:根据技术库的描述,确定时序cell的setup-time HOLD timing check:根据技术库的描述,确定时序cell的hold-time 2.8.1 时序文件的导出

在DC中,使用write_sdf命令导出时序描述文件,命令格式如下: write_sdf

-version <文件版本>

-instance <实例名> <时序描述文件名>

-version <文件版本>:指定导出的SDF文件的版本,可选项有1.0和2.1,缺省为2.1 -instance <实例名>:指定导出当前设计中某个实例的时序描述文件 2.8.2 时序约束文件的导出

在DC中,使用write_constraints命令来到出时序约束文件,命令的格式如下:

write_constraints -output <文件名> -format

-max_paths <路径数> -max_path_timing -from <起点列表> -to <终点列表>

-output <文件名>:导出的时序约束文件名

-format:时序约束文件的格式,可选项有:synopsys,sdf,sdf-v2.1 -max_paths <路径数>:时序约束文件所包含的路径数,缺省为1 -max_path_timing:指令DC导出示延最大的路径 -from <起点列表>:路径的起点列表 -to <终点列表>:路径的终点列表

本文来源:https://www.bwwdw.com/article/x3ut.html

Top