专用集成电路(ASIC)芯片的集成度和主频以每两年翻一倍的速度发展,从而导致了电路设计周期的延长及电路逻辑功能错误发生率的攀升。
电路设计周期的延长增加了新技术领域中专用集成芯片的开发风险及开发成本,电路逻辑功能错误发生率的存在将会使芯片开发商承担更大的风险,并为此付出无法估量的代价。
专用集成电路设计中的重要环节是逻辑级描述、验证和逻辑级综合步骤。
当前,大规模ASIC芯片的前端设计流程中,其验证主要是针对寄存器传输级(RTL)代码的验证,验证工作量已占60%至70%之间[1],而系统级描述等设计工作量仅占30%左右。
同时,电路设计的验证过程是决定芯片设计完成后逻辑功能正确率的主要因素。验证之前的逻辑设计也非常重要,只有系统级逻辑功能的设计合理才会有效地减少验证阶段的工作量。
事实上,逻辑设计阶段的质量及效率之优劣,很大程度上保障了后续的逻辑综合及验证的工作质量。所有这些,均由ASIC前端设计工作中的逻辑设计与验证(LDV)来实现。
|
图1:LDV设计的基础流程。 |
大规模集成电路系统的设计通常采用自顶向下的方法,首先进行系统级行为描述,根据设计需求划分模块,分模块建模进行结构化设计。
通常采用hdl语言实现结构设计,以完成高层次的行为描述,再通过仿真工具进行系统级验证。如果验证结果正确,则综合到下一级(寄存器级或门级)仿真。每一级所进行的仿真,都是为了保证达到相应层次的基本设计要求。
最后利用所产生的门级电路网表,结合生产厂家提供的工艺库进行物理级实现,如:FPAG方式或ASIC模式等。逻辑设计与验证(LDV)步骤的主要流程如图1所示。
系统说明及行为描述
系统说明是芯片设计到逻辑和布局的第一步。它是在设计付诸实践之前来进行的,抽象地描述了被设计的数字电路的功能、端口以及整体的结构。然后根据系统说明进行行为描述来分析电路设计的功能、性能、服从的标准以及其它高级问题[2]。
下面以2×2同步数字交叉连接(SDXC)矩阵电路的设计为例,简单说明设计之前的系统说明及行为描述是如何完成的。2×2 SDXC矩阵电路由两个交换单元组成,每个交换单元实现两路STM-1码流的单步无阻塞时隙交换。每次时隙交换以STM-1帧中的一行(270字节)为单位。该设计中:
clk为时钟信号,控制每个交换单元中数据存储器数据的顺序写入及控制存储器中交换信息的顺序读出;使用复位信号reset对数据存储器的初值进行设定;读、写控制信号swap对数据存储器及控制存储器的读、写进行控制;使能位en对是否工作进行控制。图2是2×2交叉连接单元的端口示意图。
RTL描述(采用HDL来实现)
设计的行为描述可以采用HDL语言转化到RTL描述。RTL描述也被称之为数据流描述[3],一般采用HDL语言进行RTL描述更利于综合。首先,设计者需要制定所要设计数字电路的工作流程或结构框图,然后把整个任务划分为几个模块,分模块建模,采用HDL语言进行结构设计。设计时应注意每个模块都应有它的端口定义,而且功能必须明确;同时,为了优化综合,还要注意语句的选取及信号延时的添加方式等。这实际上是高层次的行为描述。
仍以2×2交叉连接电路中单个交换单元的设计为例进行介绍。首先,画出其结构框图[4],如图3所示。据此,可把整个设计分为若干模块。下面分别介绍:
|
图2:交叉连接单元的端口示意图。 |
1. 数据存储器
数据存储器由两页随机存取存储器(RAM)构成。因为时隙交换以同步数字体系(SDH)帧中的一行(270字节)为单位,因此数据存储器有270个存储单元,由于数据存储器中存放的是8位数据信息,所以字长为8位,由此,每个RAM的容量为270×8位。在每一个交换帧周期中,其中的一页RAM(非激活页)按照时序发生器产生的写地址,将输入数据顺序地写入其中,而另一页RAM(激活页)按照控制存储器输出的读地址,将上一个交换帧周期中写入的数据读出。在每一帧的边界处(270字节),两页RAM的读、写功能进行交换。
2. 控制存储器
控制存储器也由两页RAM组成,其存储容量与数据存储器相同,字长取为13位(由其功能决定),因此每个RAM的容量为270×13位。在交换帧周期中,由非激活页对微处理器发出的交换信息进行写入,由激活页将此信息读出作为数据存储器的读地址并控制输出选择模块。与数据存储器类似,两页RAM的功能将在帧边界处进行翻转。
3. 输出选择器
输出选择器由选择逻辑构成,用来选择此交换单元输出的数据源(输入1、输入2)。
4. 时序发生器
时序发生器由一个帧计数器与多个时钟分频器组成,可分别完成对控制存储器和数据存储器的读、写控制,并且为此交换单元内部各模块提供工作时钟。
功能验证
模块设计完成之后,为了查看其功能的正确性,需要进行验证。为此,需要设计测试激励代码[5],以实现对被测试对象(DUT)加载测试信号。对于较大规模的系统设计,测试代码的设计有时比本身的代码设计还要复杂。目前,有四种验证技术:仿真验证、静态验证、形式验证、物理验证与分析。其中,仿真验证多用于RTL级验证,形式验证多用于门级,而物理验证与分析多用于版图的验证。
本设计的验证采用仿真验证,用Synopsys公司的VCS仿真系统来实现。为了保证整个设计的功能正确性,需在单个模块设计完成后,相应地进行功能验证,以确保后续工作的正常进行并减少整个过程的工作量。以下是控制存储器设计的部分测试代码:
timescale lns/lns
module connect_test;
. . //端口类型定义
. . //connect_ram模块调用
initial
begin
clk=0;
|
图3:一个交换单元的结构图。 |
forever #50 clk=~clk;
end
always@(swap2)
begin
swap1=~swap2;
end
always
begin
#2700 swap2=~swap2;
end
..//复位、使能信号初始化
.. //输入数据及RAM读、写地址赋值
endmodule
其中,swap1、swap2分别是两页RAM的页翻转控制信号,完成对控制存储器的读、写操作控制。因为两者时刻反相,而每过2700时间单位之后,本身又要反相,所以编程时应注意,每当swap2变化时,才将swap2取反赋给swap1;若遇到敏感信号触发,可能会出现竞争冒险现象,而导致不定态的出现。当然,在此之前需正确地进行初值设定。在调试过程中,还会出现各种各样的问题,需要设计者针对病因,找出解决方法。
图4是采用Synopsys公司的VCS仿真系统对单个交换单元的设计进行仿真验证的示意图。从波形图的输出结果来看,此设计在功能上是完全符合要求的(数据的延迟输出是由于reset信号的作用)。
逻辑综合
ASIC逻辑综合,就是将RTL级的描述转换成门级网表的过程,也是将较高抽象层次的描述自动地转换到较低抽象层次描述的一种方法。在逻辑综合过程中为优化输出和满足工艺映射的需要,一定要有相应的约束条件,以实现对所设计结构的控制。也就是说,采用不同的约束条件如面积、延时、功耗和可测性等,对于同样的一个系统,所得到的系统结构存在很大的差异。
通过采用Synopsys公司的Design-vision工具对该设计进行综合,可以得到一正确的门级网表。
逻辑验证
|
图4:2×2交叉连接单元逻辑仿真(验证)波形图。 |
由于设计每经过一个设计阶段,都有可能引入新的错误,因此在综合优化成门级电路之后,需要结合生产厂商的仿真库。进行门级后仿真以验证设计的正确性,即逻辑验证。随着电路规模的增大,门级后仿真变得费时而又艰巨,因而,通常采用高效、快捷而又不失准确性的形式验证来代替繁琐的门级后仿真。形式验证主要是比较较低一级设计和高一级设计的逻辑行为的一致性,形式检验工具可让用户发现、诊断和消除无意识引入的错误。
本文小结
随着特征尺寸的减小,设计规模的增大,ASIC进入了超深亚微米时代,其前端设计变得越来越重要。本文结合2×2交叉连接电路实例,系统的论述了ASIC前端设计流程,介绍了系统说明、行为描述、RTL描述、逻辑综合和各个阶段的设计验证的重要性及应注意的问题,对涉足ASIC前端设计的人员具有一定的指导和参考价值。
参考文献:
[1] The Study on Verification Method of Digital ASICs Former Design, 罗琨、赵磊等,计算机工程与应用,2002
[2] verilog HDL-A Guide to Digital Design and Synthesis, Samir Palnitkar,Sunsoft Press,1996
[3] 数字集成系统的结构化设计与高层次综合,王志华、邓仰东,清华大学出版社,2000
[4] 同步数字交叉连接(SDXC)系统的设计与实现,黄光霞、阎鸿森,西安交通大学,2002
[5] Verilog HDL设计实例及其仿真与综合,王志华、邓仰东,清华大学出版社,2000
作者: 袁玉英,山东大学信息科学与工程学院,Email: yuanyuying@sdu.edu.cn |