对全局控制信号设置多周期路径的方法
2011-06-14李斌,张磊,张勇
李 斌,张 磊,张 勇
(中国电子科技集团公司第五十四研究所,河北石家庄050081)
0 引言
近年来,数字集成电路设计工艺越来越先进,电路规模越来越大,工作频率越来越高,如何使得时序满足设计要求,成为IC设计者必须考虑的问题。对于一些大规模的数据运算电路,其中包含很多运算单元,这些运算单元可能是相同结构的,但是在不同的运算阶段,输入数据可能不同,各个运算单元处于的工作状态是不一样的;为了设计的实现,设计者一般会选择数据运算阶段指示信号来做为全局控制信号,各个运算单元会根据当前全局控制信号的状态值来确定各自的工作状态。
1 时序紧张的GCS
在超大规模电路中,全局控制信号产生来源可能是外部输入信号,或者是内部模块生成,但是都连接到了大部分的二级模块,这些二级模块的工作状态,就由当前的全局控制信号的状态值来进行变换。
全局控制信号的示意图如图1所示,当全局控制信号进入不同的状态时,相关运算单元处于相应的工作模式。
图1 全局控制信号示意图
全局控制信号的逻辑描述语言如下:
if GCS=′1′then
statement;
end if;
上述语言中的信号GCS为全局控制信号。对于全局控制信号的使用,在逻辑设计阶段,由于没有时序信息,通过软件仿真只要满足了功能要求即可。
在综合时,由于没有物理走线的信息,只采用了一个平均的线负载模型,走线延时相对于门延时较小,可以不计算在内;如果时序要求比较宽松,全局控制信号就可以满足约束的要求。
但是到了物理后端的布局布线阶段,这时就有了真实的走线信息。由于全局控制信号连接了大部分的二级模块,是基于全片进_行布线的(如图1所示)。无论怎么摆放,都会出现一些被控制模块相对距离较远的情况(如图1中的运算单元7),导致全局控制信号的走线延时过大,甚至大于门延时;当工作时钟频率较高时,全局控制信号无法在一个时钟周期内收敛,就出现了时序违反,设计的功能就无法完成。所以如何使全局控制信号在布线阶段能够满足时序要求,成为了设计者重点关注的问题。
2 低控制优先级的GCS
在逻辑设计时,完成一个模块的编写之后,会使用仿真软件进行功能仿真,在对软件仿真得到的波形仔细分析之后可以发现,虽然全局控制信号已经有效,运算单元进入工作状态,但是此刻运算数据还没有到来,该运算单元模块依然空闲,即程序没有翻转。在等待了若干时钟周期之后,运算数据到来,才真正的开始工作,可以利用这个等待时间来改善全局控制信号的时序。
采用以下方法对时序紧张的全局控制信号进行处理:
在被控制的二级模块中,生成一个合适的、时序满足要求的使能信号。在逻辑描述中,把全局控制信号和二级模块使能信号结合使用,并且保证二级模块使能信号的控制优先级始终高于全局控制信号,即二级模块使能信号有效时才去检测全局控制信号的逻辑;同时要求全局控制信号的变化一定在二级模块使能信号有效之前若干周期时发生。这样就可以把全局控制信号设置为具有多周期路径特性的信号了。
可设置多周期路径的全局控制信号的逻辑描述语言描述如下:
if LOCAL_ EN=′1′then
if GCS=′1′then
statement;
end if;
end if;
上述信号LOCAL_EN为二级模块电路内部的控制信号,GCS为全局控制信号。
这样的写法可以在综合时使用指令来改善布线时的时序压力。
3 多周期路径设置指令
在综合工具Design_Compiler 手册中,有一条设置多周期路径(Multicycle Path) 属性的指令,该指令可以将一个普通信号设置为具有多周期路径特性的信号。具有该特性的信号,在时序检查时,时序收敛是在多个周期内完成的。
设置多周期路径属性的约束指令如下:
set_multicycle _pathnsetup/-hold-from clkthrough gcs
指令中,set_multicycle _path 为设置多周期的命令;clk为检查时钟;gcs为全局控制信号;setup为建立时间的检查项;hold为保持时间的检查项;n为周期数,这个数值一定要小于设计中最大容忍的时钟周期数,也就是当二级模块使能信号变化时,全局控制信号就已经至少稳定了n个周期。
当指令中n为1时,全局控制信号时序收敛就是一个周期内完成的,那么就和其他信号一样进行一个周期内的时序检查;大于1时,只要在n个时钟周期内完成收敛都可以满足时序检查。这样就大大减轻了布线时的时序压力。
4 GCS多周期路径设置举例
选取一个已经实现的电路来进行举例分析,该电路的频率为250 M,时钟的周期为4 ns,电路的规模为500万门,流片的工艺为Gsmc0.18 μ m。电路的功能为实现64 K点的快速傅里叶变换(FFT)运算,采用4组并行基16蝶算单元,完成一组64 K数据FFT运算,内部包含了大量的数据运算通道。
设计中使用的仿真工具为Modelsim,综合工具为Design_Compiler ,布局布线工具为Encounter,时序分析工具为Prime Time。
由于在FFT运算中存在多级蝶形运算,为了指示电路处于哪一级的运算,电路产生了一个全局控制信号(i_tran_ctrl/ Stage),并连接到了大多数的二级模块,该信号控制着电路中的蝶算单元进入不同的工作状态。
首先不对全局控制信号Stage做多周期路径的设置,然后使用 Design_Compiler 进行电路的综合,交付物理设计人员使用Encounter进行布局布线,最终使用PT(Prime_Time) 对布线结果进行时序分析。时序报告中存在着很多的时序违反,检查其中一条路径,该路径经过了全局控制信号Stage,时序分析结果如表1所示。
表1 非多周期路径描述布线后的结果
可以看出,由于此路径需要在一个时钟周期内完成收敛,而路径过长,走线延时较大,结果导致了时序违反。
接下对算法以及电路结构进行分析,发现在各个运算蝶形运算单元进行运算时,当全局控制信号(Stage)有效之后,并不是立即就进行运算,而是等待了若干时钟周期之后才开始运算。所以就生成了一个运算使能信号(Rb _en _in),这个使能信号确保在每次运算过程中都一直有效,且与当前运算级数无关。使用Modelsim工具进行仿真,得到的波形如图2所示。
图2 64 KFFT电路仿真
选择该使能信号(Rb _en_in)做为二级模块使能信号,在逻辑描述中的控制优先级高于全局控制信号,并且通过仿真得知,该使能信号变换前7个周期,全局控制信号Stgae就已经稳定了,所以只要设置多周期路径的时序收敛检查周期数小于7即可满足要求。
在使用软件仿真工具对电路功能仿真完备且无误之后,在综合时加入对全局控制信号设置多周期路径的指令,设置的多周期路径指令如下:
set_multicycle _path 4-setup/-hold-from i_top/i_tran _ctrl/ sys _clk through i__top/i tran _ctrl/stage
布线后再次对该路径进行时序分析,其结果显示如表2所示。
表2 设置多周期路径布线后的结果
可以看出,由于对全局控制信号Stage设置了多周期路径的属性,在进行时序检查时,Stage到达的时间依然是6.3 ns左右,但是时序检查的sys _clk长度,由一个时钟周期的4 ns变更为了4个时钟周期的16 ns;即只要被检查的全局控制信号Stage在4个周期内到达,都是满足时序要求的。
由此全局控制信号的时序就变得宽松了,在布局布线阶段不再是布线的难点,并且对电路功能本身及电路结构没有负面影响,只是增加了设计初期的架构分析和综合时指令的插入。
5 结束语
如果在设计中存在时序紧张的全局控制信号,那么针对不同的二级模块生成不同的二级模块使能信号,通过对全局控制信号设置多周期路径的方式可以更好地实现时序收敛。熟练地掌握并应用这门技术,会减少设计时的难度,更好地实现设计功能。
[1]Release U-2005.06-QA.Synopsys Design Compiler User Guide[S].
[2]ReleaseU-2005.06-QA.Synopsys PowerCompilerUser Guide[S].
[3]Release U-2005.06-QA.SynopsysPrime Time User Guide[S].
[4]高 峰,周永川.MATLAB中多EDA软件实现数字系统设计[J].无线电通信技,2010,215(3):31-33.