VHDL评估教案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第八章仿真与逻辑综合8.1仿真目前流行的VHDL仿真器MentorGraphics公司ModelSimAldec公司Active---VHDLCadence公司Verilog---XLAltera公司MaxplusIIQuartusII等回顾:二选一选择器二选一选择器VHDL描述:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21aISPORT(a,b:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy=a;ELSEy=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;输入端输出端absY00000100100111010010011110101111编辑输入波形文件方法仿真:EDA软件工具生产商为设计者提供了一个较为直观地生成仿真输入波形的工具——波形编辑器。例如,Altera公司提供的MAX+plusⅡ工具软件就有这样的波形编辑器——WaveformEditor,利用它可以编辑各种各样的输入波形。二选一选择器仿真结果8.1.1仿真输入信息的产生1.程序直接产生方法由设计者设计一段VHDL语言程序,将它附加到仿真模块中,并由它来产生仿真的输入信息。例如:对例7-41带允许端的十二进制计数器进行仿真真值表输入端输出端clrenclkqdqcqbqa1XX000000X不变不变不变不变01↑计数值加1000000010010001101000101011001111000100110101011若要产生如下所示的测试波形:test-clktest-clrtest-en…CONSTANTclk_cycle:TIME:=20ns;…PROCESSBEGINtest_clk='1';WAITFORclk_cycle/2;test_clk='0';WAITFORclk_cycle/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;100200300400ns0产生周期为20ns的时钟信号产生复位和允许信号直接产生输入测试信号的完整vhdl程序:LIBRARYIEEE;USEIEEE.STD_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_LOGIC;SIGNALt_qa,t_qb,t_qc,t_qd:STD_LOGIC;BEGINU0: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';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文件产生法仿真输入数据按定时要求按行存于一个文件中Test1.inclkclren0ns1005ns11110ns01115ns01120ns11125ns10130ns00135ns00140ns101…..…...…………220ns101225ns100230ns000235ns000240ns100…..…...…………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(intest,li);READ(li,clk);READ(li,clr);READ(li,en);WAITFORclk_cycle/2;IF(ENDFILE(intest))THENWAIT;ENDIF;ENDPROCESS;……仿真⊿仿真⊿(即仿真中的⊿延时),能使那些零延时事件得到适当的排队次序,以便在仿真过程中得到一致的结果.VHDL语言描述程序来描述系统的硬件,它所描述的仅仅是系统的行为和构造,最终表现为门电路之间的连接关系.因此,在处理中对某些部分先处理,对另外一些部分后处理并不要求有非常严格的顺序关系.仿真Δ是在对VHDL模块仿真时所采用的重要仿真机制,它能使那些零延时事件得到适当的排队次序,以便在仿真中得到一致的结果。众所周知,用VHDL语言程序来描述系统的硬件,它所描述的仅仅是系统的行为和构造,因此,在处理中对哪些部分先处理,哪些部分后处理,在描述时并没有非常严格的顺序关系。例如,某一组合电路,其输入为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=not(bandc);q=candd;Endbehav;在该模块的构造体中,3个语句都是并发信号代入语句,因此只要其敏感量有变化,各语句都有可能并发地执行。现在假设起始值b=“1”、a=“1”,接着a从“1”变成“0”。第一条代入语句的敏感量为a,故该语句将执行一次,并使信号量c由“0”变“1”。第二、第三条语句都含有敏感量c,这样这两条语句都要各执行一次。在仿真中,第二、第三条语句既然是并发语句,按理来说,谁先执行,谁后执行其结果应该是一样的,但是事实并非如此。下面分析两种不同情况。若第三条语句先执行,由于原先d=“1”,现在c=“1”,故q将由“0”变为“1”;接着执行第二条语句,由于b=“1”,c=“1”,故d由“1”变为“0”。d的这一变化又启动第三条语句,此时,d=“0”,c=“1”,故q=“0”。输出q出现一个由“0”变“1”,再由“1”变“0”的正跳变。若第二条语句先执行,由于b=“1”,c=“1”,故d=“0”。d和c的变化使第三条语句执行,此时d=“0”,c=“1”,故q=“0”。从电路功能来看,无疑后者是正确的,即在a值由“1”变“0”的变化发生后,q值应始终维持原值“0”不变。两种不同情况的q输出波形如图7-4所示。假设信号b为1端口a的信号有个变化(10)若第三条语句先执行,d=1c=1再执行第二条语句b=1c=1d(10)q=1d=0再次执行第三条语句=q=0q由0到1再由1到0q出现一个正跳变若第二条语句先执行,b=1c=1再执行第三条语句d=0c=1q始终维持0由上面分析可知,在仿真过程中,仿真次序不一致就会产生不同的仿真结果,这种情况当然是不允许的。为了取得与硬件动作一致的仿真结果,必须引入一个适当的仿真同步机制,使仿真结果和处理次序的先后无关。这种仿真同步机制就是Δ延时同步机制或称仿真Δ机制。所谓Δ延时同步机制,是指被敏感量激活的进程立即被执行,其执行结果在一个无限小的Δ延时时间内保持。该执行结果有可能激发其他的进程,又会产生新的其他结果,这些结果又在后续的一个Δ延时时间内保持。如此重复,直至所有进程(或等价进程,如代入语句)都停止为止。最后一个Δ延时输出的结果才是真正该仿真时刻的结果,其他Δ延时时刻的结果往往被忽略。换一句话说,一个仿真时刻点是由若干个仿真Δ间隔构成的,该仿真时刻的仿真结果,取自最后一个仿真Δ时刻的结果。这样就解决了由于仿真时计算顺序不同所带来的不一致性。7.1.2仿真模块的编写在早期的EDA软件工具中,如AccoladeVHDLSimulator,它要求输入信号是由程序产生的。这样,当设计者用VHDL语言设计好一个电路功能模块以后,为了进行仿真,还需d=0q=0abcdqabcdq编写一个仿真模块。当然,仿真模块应包含产生输入信息的程序以及描述电路的程序。一个描述十六进制计数器的仿真模块清单如例7-2所示。【例7-2】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYT_count16IS--PORT(clk,rst,load:INSTD_ULOGIC;--data:INSTD_ULOGIC_VECTOR(3DOWNTO0);--count:OUTSTD_ULOGIC_VECTOR(3DOWNTO0));ENDT_count16;ARCHITECTUREstimulusOFT_count16ISCOMPONENTcount16PORT(clk,rst,load:INSTD_ULOGIC;data:INSTD_ULOGIC_VECTOR(3DOWNTO0);count:OUTSTD_ULOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT;SIGNALclk_s,rst_s,load_s:STD_ULOGIC;SIGNALdtat_s:STD_ULOGIC_VECTOR(3DOWNTO0);SIGNALcount_s:STD_ULOGIC_VECTOR(3DOWNTO0);BEGINu0:count16PORTMAP(clk_s,rst_s,load_s,data_s,count_s);clock:PROCESSBEGINclk_s='1';WAITFOR25ns;clk_s='0';WAITFOR25ns;ENDPROCESS;stimulus1:PROCESSBEGINRst_s='1';WAITFOR40ns;Rst_s='0';Data_s=0100;Load_s='1';WAITFOR50ns;load='0';WAITFOR500ns;load='1';data=0000;WAITFOR50ns;load='0';WAITFOR11000ns;WAIT;ENDPROCESS;ENDstimulus;由于该模块仅仅用于仿真,所以实体中的端口描述部分是可以省略的。该仿真模块用元件映射语句,将十六进

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功