1、第八章第八章 仿真与逻辑综合仿真与逻辑综合8.1 系统仿真及可测试设计系统仿真及可测试设计n n系统仿真的重要性:1.1.项目成功的关键,仿真时间占整个设计的90%。2.2.在逻辑综合和布线之前对VHDL模型的逻辑功能进行仿真,可提高效率。n n仿真的手段:软硬件协同验证方式。n n仿真的两个目的:1.1.功能仿真2.2.时序仿真仿真的三个阶段:1.行为级仿真2.RTL级仿真3.门级仿真仿真方法仿真方法n n功能仿真功能仿真验证设计模块的逻辑功能验证设计模块的逻辑功能n n时序仿真时序仿真验证设计模块的时序关系验证设计模块的时序关系n n不论是功能仿真还是时序仿真,仿真的方法有不论是功能仿真还
2、是时序仿真,仿真的方法有两种:两种:1.1.交互式交互式仿真方法仿真方法2.2.测试平台法测试平台法 利用利用测试平台测试平台(testbench)(testbench)对被测试单元输入信号对被测试单元输入信号测试矢量,通过波形输出,文件记录输出,或测试矢量,通过波形输出,文件记录输出,或与测试平台中的设定输出矢量来进行比较,可与测试平台中的设定输出矢量来进行比较,可以验证仿真结果。以验证仿真结果。仿真输入信息的产生(仿真输入信息的产生(1)n n程序直接产生法:程序直接产生法:由设计者设计一段由设计者设计一段VHDLVHDL语言,由该程序直语言,由该程序直接产生仿真的输入信息。接产生仿真的输
3、入信息。n n例:例:对例对例7-417-41的带允许端的十二进制计数器进的带允许端的十二进制计数器进行仿真。行仿真。entity count12en isport(clk,clr,en:in std_logic;qa,qb,qc,qd:out std_logic);end count12en;十二进制计数器输入信号实例十二进制计数器输入信号实例library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity test_count12en isend test_count12en;仿真模块的实体可省略
4、端口描述库及包集合引用部分构造体描述部分构造体描述部分architecture siml of test_count12en isarchitecture siml of test_count12en iscomponent count12en component count12en port(clk,clr,en:in std_logic;port(clk,clr,en:in std_logic;qa,qb,qc,qd:out std_logic);qa,qb,qc,qd:out std_logic);end component;end component;constant clk_cycl
5、e:time:=20 ns;constant clk_cycle:time:=20 ns;signal test_clk,test_clr,test_en:std_logic;signal test_clk,test_clr,test_en:std_logic;signal t_qa,t_qb,t_qc,t_qd:std_logic;signal t_qa,t_qb,t_qc,t_qd:std_logic;用于激励及观察的信号声名部分begin u0:count12en port map(clk=test_clk,clr=test_clr,en=test_en,qa=t_qa,qb=t_qb,
6、qc=t_qc,qd=t_qd);被测试单元的元件例化部分产生产生clk输入的进程输入的进程 process begin test_clk=1;wait for clk_cycle/2;test_clk=0;wait for clk_cycle/2;end process;产生周期为20ns的时钟周期产生初始复位信号和计数允许信号产生初始复位信号和计数允许信号processprocess begin begin test_clr=0;test_clr=0;test_en=1;test_en=1;wait for clk_cycle/4;wait for clk_cycle/4;test_clr
7、=1;test_clr=1;wait for clk_cycle;wait for clk_cycle;test_clr=0;test_clr=0;wait for clk_cycle*10;test_en=0;wait for clk_cycle*3;test_entest_clk,clr=test_clr,en=test_en,qa=t_qa,qb=t_qb,qc=t_qc,qd=t_qd);process variable li:line;variable clk_v,clr_v,en_v:std_logic;begin readline(intest,li);read(li,clk_v
8、);read(li,clr_v);read(li,en_v);test_clk=clk_v;test_clr=clr_v;test_en=en_v;wait for clk_cycle/4;if(endfile(intest)then wait;end if;end process;end sim2;被测试单元元件例化部分仿真延时仿真延时 :n n仿真仿真 延时的作用:延时的作用:使零延时事件得到适当使零延时事件得到适当的排队次序,以便在仿真过的排队次序,以便在仿真过程中得到一致的结果。程中得到一致的结果。library ieee;use ieee.std_logic_1164.all;ent
9、ity sample is port(a,b:in std_logic;q:out std_logic);end sample;architecture behav of sample issignal c,d:std_logic;begin c=not(a);d=not(b and c);q=c and d;end behav;两种不同情况的两种不同情况的q输出波形输出波形 c=not(a);d=not(b and c);q=c and d;同步机制就是对那些零延时的事件,在仿真中加一个无限小的时间量,这个无限小的时间量比VHDL语言中的最小时间单位1 fs还小,也就是说即使加有限个延时,也
10、决不会使其超过仿真时间的最小分辨率1 fs。n n输入信号输入信号A A的变化,要在的变化,要在QQ输出表现出来需要三个输出表现出来需要三个仿真仿真 延时,由于有限个延时延时,由于有限个延时 认为是可忽略的,认为是可忽略的,所以所以a,c,d,qa,c,d,q值的跳变被认为是发生在同一仿真时刻值的跳变被认为是发生在同一仿真时刻0 ns0 ns处。处。n n引入延时引入延时 的目的是为了便于排出仿真计算的次的目的是为了便于排出仿真计算的次序序,在仿真波形中是不反映计算过程的,而只反映在仿真波形中是不反映计算过程的,而只反映最终的计算结果。最终的计算结果。n n这样处理以后,使得仿真结果和硬件动作
11、就完全这样处理以后,使得仿真结果和硬件动作就完全一致起来了。一致起来了。仿真程序模块的书写仿真程序模块的书写(1)1.1.可简化实体描述可简化实体描述2.2.程序中包含输出错误信息的语句:程序中包含输出错误信息的语句:在仿真中往往要对波形、定时关系进行检查,在仿真中往往要对波形、定时关系进行检查,如不满足要求,应输出仿真错误信息,以引如不满足要求,应输出仿真错误信息,以引起设计人员的注意。在起设计人员的注意。在VHDLVHDL语言中语言中ASSERTASSERT语句就专门用于错误验证及错误信息输出。语句就专门用于错误验证及错误信息输出。语句书写格式:语句书写格式:assert assert 条
12、件条件 report report 输出错误信息输出错误信息 severity severity 出错级别出错级别;条件为检查内容,如果条件不满足,就输出错条件为检查内容,如果条件不满足,就输出错误信息和出错级别误信息和出错级别(note,warning,error,failure)(note,warning,error,failure)仿真程序模块的书写仿真程序模块的书写(2)如建立时间的检查程序:如建立时间的检查程序:process(wr)-write operationprocess(wr)-write operationBeginBeginif(wrevent and wr=1)the
13、nif(wrevent and wr=1)then if(cs=1 and wr=1)then if(cs=1 and wr=1)then sram(adr_in)=din after 2 sram(adr_in)=din after 2 ns;ns;end if;end if;end if;end if;wr_rise=now;wr_rise=800 ps)report setup error din(sram)severity warning;-din setup time check end process;仿真程序模块的书写仿真程序模块的书写(3)3 用配置语句选择不同仿真构造体 使用
14、configuaration语句可以获得较佳的系统性能。设计者为系统的实体,设计不同结构的构造体与实体对应,进行对比仿真,以寻求最佳的系统结构。仿真程序模块的书写仿真程序模块的书写(4)4 4 不同级别或层次的仿真有不同要求不同级别或层次的仿真有不同要求(1 1)行为级仿真的目的和仿真是验证系统的)行为级仿真的目的和仿真是验证系统的数数学模型学模型和和行为行为是否正确。凡是是否正确。凡是VHDLVHDL语言中的语言中的语句和数据类型都可在程序中使用。在书写时语句和数据类型都可在程序中使用。在书写时应尽可能使用应尽可能使用抽象程度高抽象程度高的描述语句,以使程的描述语句,以使程序更简洁。该层仿真
15、序更简洁。该层仿真不考虑不考虑一般的电路延时和一般的电路延时和传输延时。传输延时。(2 2)RTLRTL级仿真的目的:使仿真模块级仿真的目的:使仿真模块符合逻辑综符合逻辑综合工具的要求合工具的要求,使其能生成门级逻辑电路。目,使其能生成门级逻辑电路。目前的综合工具,前的综合工具,VHDLVHDL中中某些语句不能使用某些语句不能使用,如如attribute,guarded block;attribute,guarded block;仿真程序模块的书写仿真程序模块的书写(5)最好使用最好使用std_logicstd_logic和和std_logic_vectorstd_logic_vector两种
16、两种数据类型数据类型;不考虑门电路延时,不考虑门电路延时,考虑传输延时考虑传输延时。(3 3)门级电路仿真:)门级电路仿真:RTLRTL程序模块经逻辑综合之程序模块经逻辑综合之后生成门级电路。后生成门级电路。进行门级仿真的原因:进行门级仿真的原因:a.a.在在 RTLRTL仿真中一般不考虑门的延时,系统的仿真中一般不考虑门的延时,系统的工作速度不能得到正确的验证。工作速度不能得到正确的验证。b.RTLb.RTL中的某些状态,在进行门级综合以后会发中的某些状态,在进行门级综合以后会发生状态的转移变异,不能保证系统工作正常。生状态的转移变异,不能保证系统工作正常。8.2 逻辑综合逻辑综合n n逻辑
17、综合就是将逻辑综合就是将较高抽象较高抽象层次的描述自动转换层次的描述自动转换到到较低抽象较低抽象层次描述的一种方法。层次描述的一种方法。n n逻辑综合就是将逻辑综合就是将RTLRTL级的描述转换成级的描述转换成门级网表门级网表的过程。的过程。n n设计人员设计人员不需要详细的了解逻辑综合的细节不需要详细的了解逻辑综合的细节,只需要使用逻辑综合工具就可以得到系统的门只需要使用逻辑综合工具就可以得到系统的门级网络表。级网络表。一般逻辑综合的过程逻辑综合过程要求的输入为:RTL描述的程序模块;约束条件,如面积、速度、功耗、可测性;支持工艺库,如TTL工艺库、MOS工艺库、CMOS工艺库。输出的是门级
18、网表。约束条件约束条件n n在逻辑综合过程中为在逻辑综合过程中为优化输出和工艺映射优化输出和工艺映射的需要,的需要,一定要有相应的一定要有相应的约束条件约束条件,以实现对所设计结构的,以实现对所设计结构的控制。控制。n n采用不同的约束条件,如面积、延时、功耗和可测采用不同的约束条件,如面积、延时、功耗和可测性等,对于同样的一个系统,其实现的系统结构是性等,对于同样的一个系统,其实现的系统结构是不一样的。不一样的。面积约束条件面积约束条件面积约束条件面积约束条件:一般采用工艺库中门级宏单元所用:一般采用工艺库中门级宏单元所用的单位来指定面积的约束条件。的单位来指定面积的约束条件。max_are
19、a 1200 max_area 1200 时间延时约束条件时间延时约束条件时间延时约束条件时间延时约束条件:常用方法是指定输入输出的最:常用方法是指定输入输出的最大延时时间,用延时约束条件来引导优化和映射。大延时时间,用延时约束条件来引导优化和映射。使用延时模型,可对节点进行定时分析,给出最好使用延时模型,可对节点进行定时分析,给出最好和最坏的延时情况。和最坏的延时情况。max_delay 1.7 data_outmax_delay 1.7 data_out属性描述属性描述n n用属性描述来用属性描述来界定设计的环境界定设计的环境,例如由属性来,例如由属性来规定所设计电路的负载数、驱动能力和输
20、入信规定所设计电路的负载数、驱动能力和输入信号定时。号定时。n n负载:通过负载计算可推出因负载的轻重而使负载:通过负载计算可推出因负载的轻重而使输出波形变坏的程度。输出波形变坏的程度。set_load 6 xbusset_load 6 xbusn n驱动:规定驱动器电阻大小,控制驱动电流的驱动:规定驱动器电阻大小,控制驱动电流的大小。大小。set_drive 2 ybusset_drive 2 ybusn n到达时间:信号的到达时间:信号的迟到时间迟到时间加上在该电路中的加上在该电路中的延时时间延时时间不应该超过用户对该电路的延时限制。不应该超过用户对该电路的延时限制。工艺库工艺库n n工艺
21、库持有综合工具所必要的全部信息。工艺库持有综合工具所必要的全部信息。n n比如,比如,ASICASIC单元的逻辑功能,该单元的面积、输入到单元的逻辑功能,该单元的面积、输入到输出的定时关系、输出的扇出限制和对单元所需的定输出的定时关系、输出的扇出限制和对单元所需的定时检查。时检查。Library(xyz)Cell(and2)area:5 pin(a1,a2)direction:input;capacitance:1;Pin(o1)direction:output;function:”a1*a2”;time()intrinsic_rise:0.37;intrinsic_fall:0.56;ris
22、e_resistance:0.1234;fall_resistance:0.4567;related_pin:”a1,a2”;电路的总延时:电路的总延时:n n总延时总延时 =固有延时固有延时 +负载延时负载延时 +引线延时引线延时 +输入级波形延时输入级波形延时1.1.固有延时,即惯性延时固有延时,即惯性延时-不带任何负载的门延不带任何负载的门延时时2.2.负载延时负载延时驱动输出时因负载电容所产生的附驱动输出时因负载电容所产生的附加延时;加延时;3.3.引线延时引线延时信号在引线上传送的延时,它和单信号在引线上传送的延时,它和单元的物理特征有关;元的物理特征有关;4.4.输入级波形斜度延时
23、输入级波形斜度延时由于输入波形不够陡所由于输入波形不够陡所引起的延时。引起的延时。逻辑综合的基本步骤:逻辑综合的基本步骤:RTL描述至未优化的布尔描述的转换:该过程不受用户控制,由逻辑综合工具转换成中间结果。布尔优化描述:采用大量算法和规则,先进行展平设计,将非优化的布尔描述转换到最低级描述,再优化这种描述,最后再用公共项去简化逻辑,减少门的个数。门级映射:该映射过程取出经优化后的布尔描述,并利用从工艺库中得到的逻辑和定时上的信息去做网表,网表是对用户所提出的面积和速度目标的一种体现。展平过程实际上就是将所有的逻辑关系都转换成简单的AND和OR的表达式,消去中间项。优点:级数少速度快。隐含缺点:如果所带负载多,延时增加,速度慢,没有共享项,占用面积大。存在难于展平的电路。提取公因素:使输入输出之间的逻辑级数增加,延时增加,设计面积小。布尔优化描述