2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程1)数字集成电路设计流程介绍唐长文2002年7月8日2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程2)内容一、设计流程介绍1、流程图及设计步骤2、EDA软件二、硬件描述语言简介1、传统自下向上的设计方法2、基于硬件描述语言的自顶向下的设计方法3、硬件描述语言--VHDL介绍4、VHDL语言设计实例三、数字系统的结构设计-行为级或RTL级设计1、系统规范2、系统框架3、系统源代码设计4、系统行为级仿真四、数字系统的电路设计--门级电路设计1、FPGA逻辑综合2、ASIC逻辑综合3、综合后仿真五、数字系统的版图设计1、FPGA器件实现2、基于标准单元ASIC版图的自动化生成3、版图后仿真六、版图验证和管子级仿真1、DRC&LVS2、Star_sim管子级仿真2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程3)一、设计流程介绍•设计流程图C语言仿真Matlab仿真COSSAP仿真HDL代码设计FPGA逻辑综合ASIC逻辑综合HDL代码风格FPGA综合后仿真OK?标准单元布局布线FPGA逻辑综合约束ASIC逻辑综合约束标准单元仿真库HDL行为级仿真OK?NOYESNOFPGA布局布线综合后仿真OK?FPGA厂商仿真库FPGA版图后仿真OK?版图后仿真OK?YESYESNONONOFPGA下载硬件验证版图DRC&LVS版图后管子级仿真OK?管子级模型库流片YESYESNOYES2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程4)数字集成电路设计主要分为四大步:1、行为级、RTL级源代码设计2、电路设计-门级电路设计(1)FPGA逻辑综合(2)ASIC逻辑综合3、版图设计(1)FPGA版图布局布线设计(器件实现)(2)ASIC版图布局布线设计(基于标准单元库)4、版图验证(DRC&LVS)•设计的步骤2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程5)•EDA软件(1)FPGA设计需要的软件源代码设计和仿真9Active-HDLFPGA逻辑综合9SynopsysFPGAExpress、SynplicitySynplify、ExamplarLeonardoSpectrum、XST(XilinxSynthesisTech)FPGA器件实现9XilinxFoundationISE、AlteraMaxplusII2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程6)(2)ASIC设计需要的软件源代码设计和仿真9Active-HDLASIC逻辑综合9SynopsysDesignCompiler、CadenceAmbitASIC版图布局布线9CadenceSiliconEnsemble5.22002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程7)二、硬件描述语言介绍1、传统的自顶向下设计方法:自下至上的硬件设计方法的主要步骤是:•详细编制技术规格书,并画出相同控制流图;•功能细化,划分功能模块,并画出相同的功能框图;•功能模块的细化和电路设计;•功能模块的拼接,系统调试。为了进一步说明传统的自下至上的设计方法,下面以一个六进制计数器的设计来作一说明:第一步,要设计六进制计数首先要选择逻辑单元块和器件。第二步,电路设计。第三步,由中规模的分立器件拼接出图2的电路图,然后进行调试及测试,一直到达到设计的要求。2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程8)电路设计表1、触发器状态变化表Q2Q1Q0前一状态当前状态前一状态当前状态前一状态当前状态100000120001113011111411111051110006100000图2、六进制计数器电路图图1、六进制计数器状态转移图2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程9)缺点1、系统设计时存在的问题只有在后期才能较容易发现;2、对系统设计人员有较高的要求;3、设计周期长;4、设计的主体是电原理图,不便于管理。2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程10)2、基于硬件描述语言的自顶向下的设计方法•所谓硬件描述语言,就是可以描述硬件电路的功能,信号连接关系及时序关系的语言。它能比电原理图更有效地表示硬件电路的特性。利用硬件描述语言来表示逻辑器件及系统硬件的功能和行为,是基于硬件描述语言的自顶向下的设计方法的一个重要特征。•所谓自顶向下的设计方法,就是从系统总体要求出发,自上至下地逐步将设计内容细化,昀后完成系统硬件的整体设计。•在基于硬件描述语言的自顶向下的逻辑设计方法中,设计者自上至下分成3个层次对系统硬件进行设计:行为级描述,寄存器级描述,工艺库级逻辑综合。2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程11)第一层,行为级描述。•所谓行为级描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为级描述的目的是试图在系统设计的初期,通过对系统行为描述的仿真来发现设计中存在的问题。并不真正考虑其实际的操作和算法的实现。考虑更多的是系统的结构及其工作过程是否能达到系统设计规范的要求。下面还以六进制计数数器为例,说明一下如何用VHDL语言,以行为方式来描述它的工作特性。2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程12)libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;useIEEE.std_logic_unsigned.all;entityCOUNTERisport(rs:inSTD_LOGIC;clk:inSTD_LOGIC;count_out:outSTD_LOGIC_VECTOR(2downto0));end;architecturebehavofCOUNTERissignalcount:STD_LOGIC_VECTOR(2downto0);beginprocess(reset,clk)beginif(rs='1')then--asynchronousresetcount=(others='0');elsif(clk'eventandclk='1')thenif(count=101)thencount=(others='0');elsecount=count+1;endif;endif;endprocess;count_out=count;endbehav;2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程13)第二层,寄存器级描述。•用行为方式描述的系统结构有可能部分描述抽象程度过高,是不可以直接映射到具体逻辑单元结构的硬件实现。因此必须将行为级描述的VHDL语言该写成寄存器级描述。DFFDFF逻辑云逻辑云逻辑云逻辑云inputclockoutput2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程14)LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYcounterISPORT(clk:INSTD_LOGIC;rs:INSTD_LOGIC;count_out:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDcounter;ARCHITECTURERTLOFcounterISSIGNALnext_count:STD_LOGIC_VECTOR(2DOWNTO0);BEGINcount_proc:PROCESS(rs,clk)BEGINIFrs='0'THENnext_count=000;ELSIF(clk'EVENTANDclk='1')THENCASEnext_countISWHEN000=next_count=001;WHEN001=next_count=011;WHEN011=next_count=111;WHEN111=next_count=110;WHEN110=next_count=100;WHEN100=next_count=000;WHENOTHERS=next_count=XXX;ENDCASE;ENDIF;count_out=next_count;ENDPROCESS;ENDRTL;2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程15)第三层,工艺库级逻辑综合。•逻辑综合是利用逻辑综合工具,例如FPGAExpress(针对FPGA设计),DesignCompiler(针对ASIC设计),将行为级或者寄存器级描述转换成门级网络表。•逻辑综合生成门级网表,可以有两种硬件实现选择。第一种是由自动布局布线工具,如SiliconEnemble,生成ASIC版图。第二种是将网表转换成FPGA(现场可编程门阵列)映射文件,由FPGA硬件实现。2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程16)libraryIEEE;useIEEE.std_logic_1164.all;libraryIEEE,LIB_MTC45000;--SpecificASICLibraryuseLIB_MTC45000.MTC45000_VCOMPONENTS.all;entitycounterisport(clk,rs:instd_logic;count_out:outstd_logic_vector(2downto0));endcounter;architectureSYN_behavofcounteriscomponentAO6Nport(A,B,C:instd_logic;Z:outstd_logic);endcomponent;componentAO7Aport(A,B,C:instd_logic;Z:outstd_logic);endcomponent;componentAO7port(A,B,C:instd_logic;Z:outstd_logic);endcomponent;componentIVport(A:instd_logic;Z:outstd_logic);endcomponent;componentFD2Qport(CD,CP,D:instd_logic;Q:outstd_logic);endcomponent;signalcount_out_1_port,next_count23_1_port,count_out_2_port,next_count23_2_port,next_count23_0_port,count_out_0_port,n52:std_logic;2002年版权,复旦大学专用集成电路与系统国家重点实验室(设计流程17)begincount_out=(count_out_2_port,count_out_1_port,count_out_0_port);U23:AO6Nportmap(A=count_out_2_port,B=count_out_0_port,C=count_out_1_port,Z=next_count23_2_port);U24:AO7Aportmap(A=count_out_1_port,B=count_out_2_port,C=n52,Z=next_count23_1_port);U25:AO7portmap(A=count_out_1_port,B=n52,C=count_out_2_port,Z=next_count23_0_port);U26:IVportmap(A=count_out_0_port,Z=n52);next_count_reg_2_label:FD2Qportmap(CD=rs,CP=clk,D=next_count23_2_port,Q=count_out_2_port);next_count_reg_1_label:FD2Qportm