ASIC设计流程和方法
endmodule
这个代码在RTL级仿真时是不会有任何问题 的,其中潜在的问题留待后面讨论。
2.2同步设计和跨a,-t*O域数据传输
尽管异步系统有很多优势,如低功耗,也没有同 步系统中让工程师头疼的时钟分布以及skew问题, 但是其复杂的各种握手协议,以及异步电路在测试 上的困难,使得同步系统还是数字电路设计的首选。 同步设计的一个特点就是所有的时序单元都是对统 一的时钟边沿敏感。要使整个芯片只采用一个时钟 并不现实,因此,异步时钟域之间的数据传输以及其 中的一些问题将是本节讨论的重点。 通常,为了能够更好的综合和STA,需要对设计 进行划分,一般的原则是将异步时钟域之间有数据 交换的部分独立出来单独处理,其他的模块都在单 一的同步时钟域中工作。对于这些模块如何在综合 过程中特殊处理在下面的章节中讨论,本节主要讨 论在代码设计中需要考虑的问题。 异步时钟之问的亚稳态(Metastability)问题,亚 稳态主要是由于被采样数据的变化十分靠近采样时 钟的边沿引起的,这样接收(采样)触发器的输出就 是亚稳态,并在传输过程中发散而引发逻辑错误,也 就是通常所说的同步失败。在同步时钟域中的这种
AS l C设计流程和方法
国家高性能集成电路设计中心 王永清王礼生
ASIC的复杂性不断提高,同时工艺在不断地改 进,如何在较短的时间内开发一个稳定的可重用的 ASIC芯片的设计,并且一次性流片成功,这需要一 个成熟的ASIC的设计方法和开发流程。本文结合 NCverilog,DesignCompile,Astro等ASIC设计所用到 的EDA软件,从工艺独立性、系统的稳定性、复杂性 的角度对比各种ASIC的设计方法,介绍了在编码 设计、综合设计、静态时序分析和时序仿真等阶段经 常忽视的问题以及避免的办法,从而使得整个设计 具有可控性。
万方数据
问题是Hold问题,可以通过EDA工具或插入buffer 消除,因为EDA工具可以检测到这种问题。那么在 异步接收设计中通过两级Flipflop来消除这种可能 出现的亚稳态。现在也有工具检测代码中可能出现 的亚稳态问题。 多位接收控制信号之间的skew引起的问题如 图l,如果其中一位如C2延迟大于C1,Ck采样的 数据就变成了C2=1,CI=O,如果按照无skew传输的 波形是C2’的样子,应该是00才对。而skew是不 可避免的,可能是由于C2C1信号的Launch时钟本 身的skew引起,也可能是传输延迟引起。对于简单 的情况,我们可以通过简化逻辑,尽量让控制信号是 1位宽。而这样的问题同样出现在多位宽的数据接 收情况。这时通常推荐使用异步FIFO接收,或者通 过握手协议接收。有的系统设计数据交换协议约定, 异步接收过程中,当某个事件发生后(如图1中采 样到V信号为1后)的1个Cycle后(也可以约定 多个Cycle)数据肯定是正确的;也可以消除这种 skew问题,但是,这种实现需要后端设计时保证这 些相关信号的skew不会超过约定的周期,同时发送 方的数据也要保持足够的周期数。如图1中c2”信 号,如果skew2>Period(一个CK Cycle),则收到V 信号一个Cycle后采样数据还是错误的。
1.基本的AS l C设计流程
ASIC设计流程可以粗分为前端设计和后端设 计,如果需要更细的划分,可以分成如下几个步骤: 1.包括系统结构分析设计、RTL编码以及功能 验证; 2.逻辑综合、PreLayout STA以及形式验证 (RTL代码与逻辑综合生成的Netlist之间); 3.Floorplan、Placement、ClockTree插入以及全局
述流程中的1,2,4,6这几个部分。同时,这个流程是 一个迭代的过程。对于一些通常的问题以及其中的 一些方法,已经有大量的文献中提到,本文将不再赘 述,因此本文着力于讨论在设计各个阶段中一些容 易被忽视的或者可能带来潜在危险的地方。
结构分析设计、RTL编码
这一阶段在整个ASIC设计中占非常重要的地 位,结构分析设计阶段主要是从产品的功能定义出 发,对产品采用的工艺、功耗、面积、性能以及代价进
IO
Pads、边界扫描逻辑、核心功能逻辑,以及PLL时
钟模块,然后再对核心功能逻辑依据功能进一步细 化。核心功能部分将是RTL编码设计的重点部分, 下面就这一部分展开说明。
4.形式验证(逻辑综合的Netlist与带有CT信 息的Netlist之间)、STA;
5.Detailed Routing,DRC; 6.Postlayout
gen——clk(cka,rst——13,ckb);
cka,rst_n; ckb;
reg[1:o]ck—cnt;
always@fposedge
cka)begin
if(!rst—n)
ck—cnt else ck—cnt end assign <=ck—cnt+l; <=0;
ckb=ck——cnt[1];
2.1良好的编码风格
编码风格对芯片的正确性、可读性、可维护性以 及综合后芯片的性能、面积都有很大的影响。自然, 对于编码中遇到的所有问题一一阐述不是一篇论文
STA,带有反标延迟信息的门级仿
真;
7.Tape—Out
所能做到的,下面只对一些经常遇到的可能产生错 误的地方进行重点说明。 无论从可重用设计的角度还是代码仿真行为与
涨]l几n厂
v
ni
r,.啦二l薪,皇瞿浦形
r'’.矗二。Ic,。u,偿县涮,}弘r'’,clemx,9时f耋譬浦}眵
图1 Skew引起的异步接收问题
的主要问题出现在综合、CTS插入以及STA分析的
万方数据
时候,在后面将进行特别的分析讨论。
3.2异步时钟域
2.5总线实现 在这里只讨论总线实现的方式,不涉及总线的 协议。在设计总线时将面临着两种基本方式的选择, 是采用三态总线还是采用多路选择结构的总线。在 全定制设计时,设计者似乎更喜欢采用三态,挂在总 线上的各个部件可以分布在芯片的各个部分。同时, 由于可以减少连线的数量,它必须保证在任何时候, 不发生总线冲突,如果多个驱动总线可能导致严重 的错误,需要通过一些措施消除这种隐患,比如三态 的使能通过解码器产生Onehot的编码,防止多驱动 引起的逻辑错误和对芯片的损害;同时,三态总线需 要连到上拉电阻上,以防止在一段时间内不驱动总 线产生总线数据不确定,而DC等综合并不支持。另 外,三态总线的电容负载也是一个不可忽视的问题, 对性能和面积造成不利的影响,其负载主要来自总 线连接的多个电路单元,总线布局本身带来一定的 负载;最后,三态总线给DFT设计也带来困难。基于 这些理由,在非定制ASIC设计时,我们实在不必要 选择三态总线的方式。相比之下,采用多路选择器 的问题是较多连线带来的布线拥塞问题,选择器的 延迟问题基本上不是什么问题,深亚微米设计中,门 的延迟差别已经变少,同时多层金属也带来了足够 的布线资源。 在编码设计中我们通过划分,将异步时钟域接 收模块分离成独立的模块,其他模块都采用单独的 时钟,综合约束相对简单。对于那些带有异步时钟域 的模块,如果不进行约束,DC总是试图去满足采样 时钟的setup/hold时间,事实上,设计者并不关心异 步时钟域之问的这些问题,而其Metastability问题在 编码阶段已经解决。通常,可以设置异步时钟域之间
Clock主要的优点在于能够降低功耗面
积,也可以简化逻辑从而提高频率。在编码时需要 考虑无Glitch的门控信号设计。同时,在DFT设计 时,由于触发器的时钟是前一级逻辑的输出(其他 派生时钟也有同样的问题),为了测试这类触发器, 需要为时钟增加一级Mux,在正常工作模式下,采用 派生时钟,在扫描测试时采用正常的时钟。门控时钟
Capt ureEdge Cl
旷
3Kewl
触发器使用,这样可以消除输入引起的Glitch,如果
I
∥/
乙一一一一・一一一一F
/
Sk
设计中有多个时钟域,可以对每个时钟分配两个 DFF接收Reset信号。
C2
c2~…一l……fli‘
一十一一一一一一卜一
:厂…一
2.4门控时钟
Gated
c2~一弋、一土一一一一一一L√,一一一一一~・一一
布线(Global Routing)
行初步的评估,从而制定相应的设计规划,对于规模 很大的ASIC设计,在这一阶段估算芯片的功耗面 积非常困难。在这里引入一个ASIC设计中很重要 的概念:划分(Partitioning),在不同的设计阶段这个 概念都将提到。首先,必须在芯片的Top一1级进行功 能划分,Top一1级通常可以分为4个大的功能模块,
当然,这还是一个比较粗的流程,其中每个步骤 还可以分得更细,通常所说的前端设计主要包括上
万方数据
k‘●^,^…^-,^:……一
I…H巾国集成电路
■—■■一 China
Integrated
Circuit
珏{‘ ”7。
的结果。例如:
例1:
module片的行为一致性的角度来说,采用工艺独立 的设计是必要的,一些工程师在编码时可能用到一 些延迟单元或者延迟线,来生成一个脉冲来操作,由 于延迟单元对温度、电压以及制造工艺敏感,这些因 素的改变也会改变生成的脉冲的宽度,因此,可能在 仿真的时候没有问题,或者在某些操作条件下没有 问题,而实际芯片工作时或者工作条件改变时芯片 就没有按照设计目标工作了。 在RTL级编码时应该尽量避免采用例化标准 单元门的方式编码,这不仅降低代码的可读性,当采 用新的单元库或者新的工艺时,这些代码就需要反 复的修改,综合工具也不会对这些代码进行逻辑优 化。 其他问题如:由于没有对所有的条件分支赋值 引起潜在的Latch问题、always块中的敏感列表问 题,以及阻塞赋值与非阻塞赋值的选择问题很多文 献中都提到,就不再赘述。下面提到一个容易被忽 视的问题,在定义时序块时,有些信号是需要复位 的,有些不需要复位,如果编码时把它们写在一个 always块中,综合出来的电路就不是我们设想的。对 于那些不需要复位的信号,综合后可能把复位信号 连到对应的触发器使能端,这样导致RTL代码和 Netlist的行为不一致,而这类问题在形式验证时也 没法发现,需要通过大量的门级仿真才可能发现。 ASIC设计应该尽量避免采用Latch作为时序 单元,Latch设计潜在的问题,如:如果使能输入端有 Glitch,就会导致锁存噪声数据。或者你能够保证数 据稳定时间可以包住使能信号,可你很难保证在使 能关闭的瞬间D输入端没有Glitch,尤其在接收总 线数据的时候。同时,Latch设计还带来STA和DFT 的困难,而采用触发器的设计,;通过Setup/Hold时间 的检查报出这些问题。因此,尽管Latch设计有面 积、低功耗等方面的优势,由于这些潜在的风险使得 设计变得不可控,因此不推荐使用。 尽量避免把时钟当作信号使用,在RTL验证时 不会出现什么问题,但是,如果在后端设计的时候忽 略了对这些点的时钟skew控制,就会产生意想不到