




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习好资料欢迎下载第八章仿真与逻辑综合目前流行的VHDL仿真器回顾:MentorGraphics公司Aldec公司Cadence公司Altera公司QuartusIIModelSimActive-VHDLVerilog-XLMaxplusII8.1仿真输入端输出端absY00000100100111010010011110101111二选一选择器二选一选择器VHDL描述:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21aISPORT(a,b:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITY
2、mux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy<=a;ELSEy<=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;编辑输入波形文件方法仿真:EDA软件工具生产商为设计者提供了一个较为直观地生成仿真输入波形的工具波形编辑器。例如,Altera公司提供的MAX+plusn工具软件就有这样的波形编辑器一一WaveformEditor,利用它可以编辑各种各样的输入波形。选择器仿真结果 。必中片3 11- 4 %I亨,J1 * tVZIiL T-cf - T
3、 trii-ATT E Lll«J JKUI白A 里U悼b= II P1L4 Edit fit* 野业 A.Extp. VtaJlitiis Optiou iniw 珈"Q|注慌目 的用二 咐卷嚏面白色四圜向盘|_4 P"德”驾距IintFi10 口UEJQ.Dui»0u«如,QueQ»ji则_nn阳LrLn.n-nnr_njwmTiinnn8.1.1仿真输入信息的产生1 .程序直接产生方法由设计者设计一段VHDL语言程序,将它附加到仿真模块中,并由它来产生仿真的输入信息。例如:对例7-41带允许端的十二进制计数器进行仿真输入端输出端
4、clrenclkqdqcqbqa1XX000000X不变不变不变不变01T计数值加1真值表100010011010101100000001001000110100010101100111若要产生如下所示的测试波形:100200300400ns-1IIIIHIIH11IIIIIItest-clktest-clrtest-enCONSTANTclk_cycle:TIME:=20ns;PROCESSBEGINtest_clk<='1'产生周期为20ns 的时钟信号WAITFORclk_cycle/2;test_clk<='0'WAITFORclk_cycl
5、e/2;ENDPROCESS;PROCESSBEGINtest_clr<='0'test_en<='0'WAITFORclk_cycle/4;test_clr<='1'产生复位和允许信号WAITFORclk_cycle;test_clr<='0'WAITFORclk_cycle*10;test_en<=,0'WAITFORclk_cycle*3test_en<=,1'WAIT;ENDPROCESS;直接产生输入测试信号的完整vhdl程序:LIBRARYIEEE;USEIEEE.S
6、TD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYtest_count12enISENDtest_count12en;ARCHITECTUREsimlOFtest_count12enISCOMPONENTcount12enPORT(clk,clr,en:INSTD_LOGIC;qa,qb,qc,qd:OUTSTD_LOGIC);ENDCOMPONENT;CONSTANTclk_cycle:TIME:=20ns;SIGNALtest_clk,test_clr,test_en:STD_LOGICSIGNALt_qa,t_qb,t_qc,t
7、_qd:STD_LOGICBEGINU0:count12enPORTMAP(clk=>test_clk,clr=>test_clr,en=>test_en,qa=>t_qa,qb=>t_qb,qc=>t_qc,qd=>t_qd);PROCESSBEGINtest_clk<='1'WAITFORclk_cycle/2;test_clk<='0'WAITFORclk_cycle/2;ENDPROCESS;PROCESSBEGINtest_clr<='0'test_en<='0&
8、#39;WAITFORclk_cycle/4;test_clr<='1'WAITFORclk_cycle;test_clr<='0'WAITFORclk_cycle*10;test_en<=,0'WAITFORclk_cycle*3test_en<=,1'WAIT;ENDPROCESS;ENDsiml2读TEXTIO文件产生法仿真输入数据按定时要求按行存于一个文件中Testl.inclkclren0ns1005ns11110ns01115ns01120ns11125ns10130ns00135ns00140ns101.22
9、0ns101225ns100230ns000235ns000240ns100.280ns100285ns101290ns001295ns001300ns101.FILEintest:TEXTISIN"test.in”;SIGNALtest_clk,test_clr,test_en:STD_LOGIC;CONSTANTclk_cycle:TIME:=20ns;PROCESSVARIABLEli:LINE;VARIABLEclk.clr,en:STD_LOGIC;BEGINREADLINE(intestli);READ(li,clk);READ(li,clr);READ(li,en);W
10、AITFORclk_cycle/2;IF(ENDFILE(intest)THENWAIT;ENDIF;ENDPROCESS;仿真力仿真力(即仿真中的力延时,能使那些零延时事件得到适当的排队次序,以便在仿真过程中得到一致的结果.VHDL语言描述程序来描述系统的硬件,它所描述的仅仅是系统的行为和构造,最终表现为门电路之间的连接关系.因此,在处理中对某些部分先处理,对另外一些部分后处理并不要求有非常严格的顺序关系.仿真A是在对VHDL模块仿真时所采用的重要仿真机制,它能使那些零延时事件得到适当的排队次序,以便在仿真中得到一致的结果。众所周知,用VHDL语言程序来描述系统的硬件,它所描述的仅仅是系统的
11、行为和构造,因此,在处理中对哪些部分先处理,哪些部分后处理,在描述时并没有非常严格的顺序关系。例如,某一组合电路,其输入为a和b,其输出为q。它由一个反相器、一个与非门”和一个与门”构成,其连接关系如图7-3所示。用VHDL语言对该电路进行描述,其程序模块如例7-3所示。Libraryieee;Useieee.std_logic_1164.all;Entitysampleisport(a,b:instd_logic;q:outstd_logic);Endsample;Architecturebehavofsampleissignalc,d:std_logic;Beginc<=nota;d
12、<=not(bandc);q<=candd;Endbehav;在该模块的卞造体中,3个语句都是并发信号代入语句,因此只要其敏感量有变化,各语句都有可能并发地执行。现在假设起始值b="17a="1;'接着a从“1”变成“0”。第一条代入语句的敏感量为a,故该语句将执行一次,并使信号量c由“0”变“1”。第二、第三条语句都含有敏感量c,这样这两条语句都要各执行一次。在仿真中,第二、第三条语句既然是并发语句,按理来说,谁先执行,谁后执行其结果应该是一样的,但是事实并非如此。下面分析两种不同情况。若第三条语句先执行,由于原先d=“1;现在c="1;故q
13、将由“检为“1:接着执行第二条语句,由于b="1';c="1:故d由“1变为“0:d的这一变化又启动第三条语句,此时,d="0;c="1;故q=a0o输出q出现一个由“0变”1;再由“1变“0”的正跳变。若第二条语句先执行,由于b="1,"c="1”故d="0"d和c的变化使第三条语句执行,此时d="0;c="1,”故q=a0o从电路功能来看,无疑后者是正确的,即在a值由“1”变“0”的变化发生后,q值应始终维持原值“0”不变。两种不同情况的q输出波形如图7-4所示。假设彳t号
14、b为1端口a的信号有个变化(10)若第三条语句先执行,q=1d=1c=1再执行第二条语句b=1c=1d(10)d=0再次执行第三条语句=>q=0d=0q=0q由0至ij1再由1至U0q出现一个正跳变若第二条语句先执行,b=1c=1再执行第三条语句d=0c=1q始终维持0由上面分析可知,在仿真过程中,仿真次序不一致就会产生不同的仿真结果,这种情况当然是不允许的。为了取得与硬件动作一致的仿真结果,必须引入一个适当的仿真同步机制,使仿真结果和处理次序的先后无关。这种仿真同步机制就是A延时同步机制或称仿真A机制。所谓A延时同步机制,是指被敏感量激活的进程立即被执行,其执行结果在一个无限小的A延时
15、时间内保持。该执行结果有可能激发其他的进程,又会产生新的其他结果,这些结果又在后续的一个A延时时间内保持。如此重复,直至所有进程(或等价进程,如代入语句)都停止为止。最后一个A延时输出的结果才是真正该仿真时刻的结果,其他A延时时刻的结果往往被忽略。换一句话说,一个仿真时刻点是由若干个仿真A间隔构成的,该仿真时刻的仿真结果,取自最后一个仿真A时刻的结果。这样就解决了由于仿真时计算顺序不同所带来的不一致性。7.1.2仿真模块的编写在早期的EDA软件工具中,如AccoladeVHDLSimulator,它要求输入信号是由程序产生的。这样,当设计者用VHDL语言设计好一个电路功能模块以后,为了进行仿真
16、,还需编写一个仿真模块。当然,仿真模块应包含产生输入信息的程序以及描述电路的程序。一个描述十六进制计数器的仿真模块清单如例7-2所示。【例7-2】LIBRARYIEEEUSEIEEE.STD_LOGIC_1164.AL_LENTITYT_count16IS-PORT(clk,rst,load:INSTD_ULOGIC-data:INSTD_ULOGIC_VECTOR(3DOWNTO0)-count:OUTSTD_ULOGIC_VECTOR(3DOWNTO0)ENDT_count16;ARCHITECTUREstimulusOFT_count16ISCOMPONENTcount16PORT(cl
17、k,rst,load:INSTD_ULOGICdata:INSTD_ULOGIC_VECTOR(3DOWNTO0)count:OUTSTD_ULOGIC_VECTOR(3DOWNTO0)ENDCOMPONENTSIGNALclk_s,rst_s,load_s:STD_ULOGICSIGNALdtat_s:STD_ULOGIC_VECTOR(3DOWNTO;0)SIGNALcount_s:STD_ULOGIC_VECTOR(3DOWNTQ0)BEGINu0:count16PORTMAP(clk_s,rst_s,load_s,data_s,count_s);clock:PROCESSBEGINcl
18、k_s<='1'WAITFOR25n§clk_s<='0'WAITFOR25n§ENDPROCESSstimulusl:PROCESSBEGINRst_s<='1'WAITFOR40n§Rst_s<='0'Data_s<="0100"Load_s<='1'WAITFOR50n§load<='0'WAITFOR500nsload<='1'data<="0000&q
19、uot;WAITFOR50n§load<='0'WAITFOR11000nsWAIT;ENDPROCESSSENDstimulus;由于该模块仅仅用于仿真,所以实体中的端口描述部分是可以省略的。该仿真模块用元件映射语句,将十六进制计数器映射到该模块的U0元件,U0元件的输入信号由构造体的两个进程产生,并连接到U0元件的各输入端,从而实现仿真的信号输入。该模块的仿真输入信号波形和输出信号波形可在仿真器的视窗中观察到。对于使用波形编辑器产生输入信息的仿真器,一般不需要编写仿真模块,只要有已编译好的功能模块和相对应的输入波形文件,仿真器就能自动地根据输入信号的定时关系进行仿真,MAX+plusn的simulator就是这样做的。7.1.4不同级别的仿真要求1 .行为级仿真行为级仿真的目的是验证系统的数学模型和行为是否正确,因而在对系统描述时抽象程度较高。由于有这个前提,对行为级仿真模块的书写没有太多限制,凡是VHDL语言中的全部语句和数据类型都可以在程序中使用。在书写时应尽可能使用抽象程度高的描述语句,以使程序更简洁明了。另外,除了某些系统规定的定时关系外,一般的电路延时及传输延时在行为级仿真中都不予以考虑。2 .RTL级仿真通过行为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论