您好,欢迎访问三七文档
第四章验证与VCS使用本章将讲述的内容:第一节验证。什么是验证。为什么需要验证。验证的重要性。如何进行验证第二节VCS简单使用方法2.]什么是VCS2.2VCS可以做什么2.3怎样进行验证2.4VCS的工作方式2.5VCS使用方法举个简单例子2.6VirSim的图形方式和每个窗口的介绍附录A.VCS的参数附录B.vi.rsim简明帮助附录C.simv简明帮助第一节验证当代码编写完之后,怎么确定是正确的呢,代码能不能符合设计要求,能不能完成所需要的功能,这就是验证所要做的工作。验证在设计中有很重要的地位,从设计流程中可以看到,几乎设计工作每前进一步,都要进行验证。对验证的要求,大多数人认为只要编译通过之后,能实现功能就可以了,其实决不仅仅这么简单,验证的目的应该是尽量多的找到代码中的错误,不管是编写错误还是功能错误,找出的错误越多,验证工作就做的越好越好.既然验证这么重要,如何进行验证呢?对于验证来说,不同等级的验证,它的方法是不一样的,什么是验证的等级,从设计流程(下图)可以看到,验证可以大致分为单独子模块验证、功能模块验证、系统顶级验证。。单独子梑块验证,福要做的工作是验证它的功能和逻辑是否符合设计要求。功能模块验证,需要验证这个模块的功能可不可以满足要求,是否会有非法数据或不该有的输出,错误的状态等。。系统顶级验证,更关注于系统整体的行为方式,模块间的联系和通讯,总线信号,数据流路径是否满足设计要求,数据处理或时序正确与否等,验证隔要一个支持的平台,这就是test_bench,在这个测试平台上,有激励信号产生器、被测模块、响应分析和监测器,(下图)激励与控制:输入端口设置,测试向址,测试模式设置,同步。响应分析器和监测器:可以及时监控输出信号变化,可以判断输出信号是正确、合法、错误、非法等等。Stjmulus&ControlModuleMonitor&Analyzertestbench可以用verilog描述语言搭建,也可以用C语言编写,如果用C语言编写,还擂要相关的编译器并和与verilog的接口。第二节VCS的简单使用方法2.1什么是VCSVCS的全称是VerilogComp仆eSimulator,是Synopsys公司的强有力的电路仿真工具,可以进行电路的时序模拟。2.2vcs的工作方式VCS运行首先把输入的verilog源文件编译,然后生成可执行的模拟文件,也可以生成VCD或者VCD+记录文件。然后运行这个可执行的文件,可以进行调试与分析;或者查看生成的VCD或者VCD+记录文件。还生成了一些供分析和查看的文件,以便千调试。2.3怎样进行仿真和验证仿真测试一个模块的大致步骤如下:(1)首先需要编写好模块的verilog代码。(2)搭建testbench,充分了解被测模块的特性,编写测试向址,输入端口的激励,编写响应分析和监测部分。(3)运行VCS进行模拟,查看输出或者波形。(4)若发现错误,分析错误类型和原因,修改代码或者修正测试方法,直到符合测试要求。2.4vcs的运行方式VCS的运行方式有两种,一种是交互校式(interactivemode),一种是批处理模式(batchmode),两种方式各有优劣,具体用在不同的情况下。在测试小模块或者底层模块,情况不太复杂的时候,而又需要很详细信息的时候,可以采用交互模式,交互性能更好,显示更直观;当进行复杂测试而关注千整体性能,而不必去查看每个信号的时候,只捅要查看所需要关心的信号即可,这种情况可以用批处理模式。2.5vcs简单使用例子下面用一个简单的例子来说明如何使用VCS这是个四位全加器的verilog代码,存储为add4.v,modulead山4(clk,inl,in2,sum,car1-y);output(3:0)sum;outputinputinput[3:0]reg[3:0]regintegerinitialbeginsum=O;carry=O;endcarry;elk;inl,in2;sum;carry;temp;always@(posedgeelk)begi11temp=inl+in2;sum=temp;if(temp15)carry=l;elsecarry=0;endendmodule然后再根据这个模块写一个测试模块,也称之为testbench,存为top.v,moduletop;regclk_reg;reg[3:0)inl_reg,in2_reg;wire(3:0]sum;wirecarry;addr4a4(clk_reg,inl_reg,in2_reg,sum,carry);parameterd=100;initialbeginclk_reg=O;inI_reg=0;in2_reg=0;repeat(I6*100)begin#dinl_reg=inl_reg+l;in2_reg=in2_reg+1;//$display($stime,,inl_reg+%din2_reg+%d=swn%dcarryis%d,in1_reg,in2_reg,sum,carry);II$display($stjme,,%b+%b=%bandcar内is%b,inl_reg,in2_reg,sum,can-y);end//$strobe($stime,,inl_reg%bin2_reg%bsum%bcarry%b,inl_reg,in2_reg,sum,cany);#1$finish(2);endalwaysbegin#50clk_reg=~clk_reg;endalways@(sum)begin//$display($stime,,inl_reg+%din2_reg+%d=sum%dcarry_regis%d,inl_reg,in2_reg,sum,can-y_reg);$邮play($stime,,nowataclockposedge,theoperationis::%d+%ct=%ctandcarryis%ct,inl_reg,in2_reg,sum,can-y);//$stop;endendmodule最简单的仿真,只要运行vcs.filename即可,filename可以有很多个,比如上面的例子:vcstop.vadd4.v然后,如果没有发现编译错误,将会出现VCS的说明和一些信息,接下来的就是它的执行悄况,翻译top.v和add4.v,可以自动发现顶层模块,如果定义了timescale将显示用的timescale信息,如果没有,就显示NoTimescalespecified。然后将产生一个名为simv的可执行文件,这个就是模拟仿真文件。下面是运行结果:Parsingdesignfile'top.v'Parsingdesigi1file'add4.v'TopLevelModules:topNoTimescalespecifiedlof2uniquemodulestogeneratelofImodulesdoneInvokingloader...邓imvgenerationsuccessfullycompleted下面我们来运行一下这个simv可执行文件,s1mvc1结果将显示:ChronologicVCSsimulatorcopyrightI991-2001Con即nsSynopsysproprietaryinformationCompilerversion6.0;Runtjmeversion6.0;Jan815:3720020nowataclockposedge,theoperationis::0+150nowataclockposedge,theoperationis::1+250nowataclockposedge,theoperationis::2+350nowataclockposedge,theoperationis::3+450nowataclockposedge,theoperationis::4+550nowataclockposedge,theoperationis::5+650nowataclockposedge,theoperationis::6+750nowataclockposedge,theoperationis::7+850nowataclockposedge,theoperationis::8+950nowataclockposedge,theoperationis::9+I050nowataclockposedge,theoperationis::10+1150nowataclockposedge,theoperationis::11+1250nowataclockposedge,theoperationis::12+.1350nowataclockposedge,theoperationis::13+1450nowataclockposedge,theoperationis::14+1550nowataclockposedge,theoperationis::15+1650nowataclockposedge,theoperationis::0+1750nowataclockposedge,theoperationis::I+1850nowataclockposedge,theoperationis::2+1950nowataclockposedge,theoperationis::3+2050oowataclockposedge,theoperationis::4+2150nowataclockposedge,theoperationis::5+2250nowataclockposedge,theoperationis::6+2350nowataclockposedge,theoperationis::7+2450nowataclockposedge,theoperationis::8+............(略)$finishatsimulationtime160001VCSSimulationReportTime:160001CPUTime:0.100seconds;Datastructuresize:0.0MbTueJan815:37:3120020=0andcarryis01=2andcarryis02=4andcarryis03=6andcarryis04=8andcarryis05=10andcarryis06=12andcarryis07=14andcarryis08=0andcarryis19=2andcar·ryis110=4andcarryis1lI=6andcarryisI12=8andcanyis113=10andcarryis.I14=12andcarryisI15=14andcarryis10=0andcarryis01=2andcarryis02=4andcanyis03=6andcarryis04=8andcarryis0S=10andcarryis06=12andcarryis07=14andcarryis08=0andcarryis1验证输出的这些信息,就可以发现,模块的设计是正确的,满足和全加器的设计要求。注意到top.v文件中的注释掉的几行,也可以用其他方式显示,特殊悄况需要特殊处理。2.6图形方式的VCS下面用图形方式启动VCS,可以进行更方便的控制和监测,V_CS-RItop.vadd-+.\j(!J斗即:心压.立.」J.芦互式图芷翌前二习比Run回三百忑}运行上面的命令会打开YirSim主程序,Interactive窗口会自动打开。2.6.IVirSim概况Virsim是基千OSF/Motif的图形化仿真调试系统,Virsim可以和VCS、EPICpowermill以及TimemiU一起协同工作。利用Vir邓im与VCS交互式的工作方式可以在模拟的过程中显示仿真结果,结果可以存到一种叫做VCD+的文件中。这种图形化的调试系统可以支持三种基本的调试方式:波
本文标题:VCS使用中文教程
链接地址:https://www.777doc.com/doc-5984966 .html