《2022年VHDL评估教案 .pdf》由会员分享,可在线阅读,更多相关《2022年VHDL评估教案 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、名师精编优秀教案名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 名师精编优秀教案第八章仿真与逻辑综合8.1 仿真目前流行的VHDL仿真器Mentor Graphics 公司 ModelSim Aldec 公司 Active-VHDL Cadence 公司 Verilog -XL Altera 公司 Maxplus II Quartus II等回顾:二选一选择器二选一选择器VHDL描述:LIBRARY IEEE
2、; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21a IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one; 输入端输出端a b s Y 0 0 0 0 0 1 0 0 1 0
3、0 1 1 1 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 1 1 1 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 11 页 - - - - - - - - - 名师精编优秀教案编辑输入波形文件方法仿真:EDA 软件工具生产商为设计者提供了一个较为直观地生成仿真输入波形的工具波形编辑器。例如, Altera 公司提供的MAX+plus工具软件就有这样的波形编辑器Waveform Editor ,利用它可以编辑各种各样的输入波形。二选一
4、选择器仿真结果8.1.1 仿真输入信息的产生1程序直接产生方法由设计者设计一段VHDL语言程序,将它附加到仿真模块中,并由它来产生仿真的输入信息。例如:对例7-41 带允许端的十二进制计数器进行仿真真值表输入端输出端clr en clk qd qc qb qa 1 X X 0 0 0 0 0 0 X 不变不变不变不变0 1 计数值加1 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - -
5、- - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 名师精编优秀教案若要产生如下所示的测试波形:test-clk test-clrtest-en CONSTANT clk_cycle:TIME:=20ns; PROCESS BEGIN test_clk=1; WAIT FOR clk_cycle/2; test_clk=0; WAIT FOR clk_cycle/2; END PROCESS; PROCESS BEGIN test_clr = 0; test_en = 0; WAIT FOR clk_cycle/4; test_clr = 1; WAI
6、T FOR clk_cycle; 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 BEGIN test_clk=1; WAIT FOR clk_cycle/2; test_clk=0; WAIT FOR clk_cycle/2; END PROCESS; PROCESS BEGIN test_clr = 0; test_en = 0;
7、WAIT FOR clk_cycle/4; test_clr = 1; WAIT FOR clk_cycle; test_clr = 0;WAIT FOR clk_cycle*10; test_en= 0;WAIT FOR clk_cycle*3 test_en= 1;WAIT; END PROCESS; END siml 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 名师精编优秀教案2 读 TEXTIO文
8、件产生法仿真输入数据按定时要求按行存于一个文件中Test1.in clk clr en 0ns 1 0 0 5ns 1 1 1 10ns 0 1 1 15ns 0 1 1 20ns 1 1 1 25ns 1 0 1 30ns 0 0 1 35ns 0 0 1 40ns 1 0 1 . .220ns 1 0 1 225ns 1 0 0 230ns 0 0 0 235ns 0 0 0 240ns 1 0 0 . .280ns 1 0 0 285ns 1 0 1 290ns 0 0 1 295ns 0 0 1 300ns 1 0 1 . . . . . .FILE intest: TEXT IS I
9、N “ test.in”;SIGNAL test_clk , test_clr , test_en:STD_LOGIC; CONSTANT clk_cycle:TIME:=20ns; PROCESS VARIABLE li:LINE; VARIABLE clk. clr,en: STD_LOGIC; BEGIN READLINE(intest ,li);READ(li,clk);READ(li,clr);名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 1
10、1 页 - - - - - - - - - 名师精编优秀教案READ(li,en);WAIT FOR clk_cycle/2; IF (ENDFILE(intest) THEN WAIT; END IF; END PROCESS; 仿真仿真 (即仿真中的延时),能使那些零延时事件得到适当的排队次序,以便在仿真过程中得到一致的结果 . VHDL 语言描述程序来描述系统的硬件,它所描述的仅仅是系统的行为和构造,最终表现为门电路之间的连接关系.因此 ,在处理中对某些部分先处理,对另外一些部分后处理并不要求有非常严格的顺序关系. 仿真 是在对 VHDL模块仿真时所采用的重要仿真机制,它能使那些零延时事
11、件得到适当的排队次序,以便在仿真中得到一致的结果。众所周知,用VHDL语言程序来描述系统的硬件,它所描述的仅仅是系统的行为和构造, 因此,在处理中对哪些部分先处理,哪些部分后处理,在描述时并没有非常严格的顺序关系。例如,某一组合电路,其输入为a 和 b,其输出为q。它由一个反相器、一个 “ 与非门 ” 和一个 “ 与门 ” 构成,其连接关系如图7-3 所示。用 VHDL语言对该电路进行描述,其程序模块如例7-3 所示。Library ieee; Use ieee.std_logic_1164.all; Entity sample is port(a,b:in std_logic; q:out
12、std_logic); End sample; Architecture behav of sample is signal c,d:std_logic; Begin c=not a; d=not (b and c); q q=0 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 名师精编优秀教案q 由 0 到 1 再由 1 到 0 q 出现一个正跳变若第二条语句先执行,b=1 c=1 再执行第三条语句d=0
13、c=1 q 始终维持0 由上面分析可知,在仿真过程中, 仿真次序不一致就会产生不同的仿真结果,这种情况当然是不允许的。为了取得与硬件动作一致的仿真结果,必须引入一个适当的仿真同步机制,使仿真结果和处理次序的先后无关。这种仿真同步机制就是 延时同步机制或称仿真 机制。所谓 延时同步机制,是指被敏感量激活的进程立即被执行,其执行结果在一个无限小的 延时时间内保持。 该执行结果有可能激发其他的进程,又会产生新的其他结果,这些结果又在后续的一个延时时间内保持。如此重复,直至所有进程(或等价进程,如代入语句 )都停止为止。最后一个延时输出的结果才是真正该仿真时刻的结果,其他延时时刻的结果往往被忽略。换一
14、句话说,一个仿真时刻点是由若干个仿真 间隔构成的,该仿真时刻的仿真结果,取自最后一个仿真 时刻的结果。这样就解决了由于仿真时计算顺序不同所带来的不一致性。7.1.2 仿真模块的编写在早期的EDA软件工具中,如Accolade VHDL Simulator,它要求输入信号是由程序产生的。这样,当设计者用VHDL语言设计好一个电路功能模块以后,为了进行仿真,还需d=0 q=0 abcdqabcdq名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 11 页 -
15、- - - - - - - - 名师精编优秀教案编写一个仿真模块。当然, 仿真模块应包含产生输入信息的程序以及描述电路的程序。一个描述十六进制计数器的仿真模块清单如例7-2 所示。【例 7-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY T_count16 IS - - PORT(clk, rst, load: IN STD_ULOGIC ;- - data: IN STD_ULOGIC_VECTOR(3 DOWNTO 0);- count: OUT STD_ULOGIC_VECTOR(3 DOWNTO 0);END T_count16;AR
16、CHITECTURE stimulus OF T_count16 IS COMPONENT count16 PORT(clk, rst, load: IN STD_ULOGIC ;data: IN STD_ULOGIC_VECTOR(3 DOWNTO 0);count: OUT STD_ULOGIC_VECTOR(3 DOWNTO 0);END COMPONENT ;SIGNAL clk_s, rst_s, load_s: STD_ULOGIC;SIGNAL dtat_s: STD_ULOGIC_VECTOR(3 DOWNTO 0);SIGNAL count_s: STD_ULOGIC_VEC
17、TOR(3 DOWNTO 0);BEGIN u0: count16 PORT MAP(clk_s, rst_s, load_s, data_s, count_s);clock: PROCESS BEGIN clk_s=1;WAIT FOR 25 ns ;clk_s=0;WAIT FOR 25 ns ;END PROCESS;stimulus1: PROCESS BEGIN Rst_s=1;WAIT FOR 40 ns ;Rst_s=0;Data_s=0100;Load_s=1;WAIT FOR 50 ns ;load=0 ;WAIT FOR 500 ns ;load=1 ;data=0000
18、;WAIT FOR 50 ns ;load=0 ;WAIT FOR 11000 ns ;WAIT;名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 名师精编优秀教案END PROCESS;END stimulus;由于该模块仅仅用于仿真,所以实体中的端口描述部分是可以省略的。该仿真模块用元件映射语句,将十六进制计数器映射到该模块的u0 元件, u0 元件的输入信号由构造体的两个进程产生,并连接到u0 元件的各
19、输入端,从而实现仿真的信号输入。该模块的仿真输入信号波形和输出信号波形可在仿真器的视窗中观察到。对于使用波形编辑器产生输入信息的仿真器,一般不需要编写仿真模块,只要有已编译好的功能模块和相对应的输入波形文件,仿真器就能自动地根据输入信号的定时关系进行仿真, MAX+plus的 simulator 就是这样做的。7.1.4 不同级别的仿真要求1行为级仿真行为级仿真的目的是验证系统的数学模型和行为是否正确,因而在对系统描述时抽象程度较高。由于有这个前提,对行为级仿真模块的书写没有太多限制,凡是VHDL语言中的全部语句和数据类型都可以在程序中使用。在书写时应尽可能使用抽象程度高的描述语句,以使程序更
20、简洁明了。另外,除了某些系统规定的定时关系外,一般的电路延时及传输延时在行为级仿真中都不予以考虑。2RTL级仿真通过行为级仿真以后,下一步就是要将行为级描述的程序模块改写为RTL描述的程序模块。 RTL级仿真是为了使仿真模块符合逻辑综合工具的要求,使其能生成门级逻辑电路。根据目前逻辑综合工具的具体要求,有些VHDL 语言中规定的语句是不能进行逻辑综合的,如 WAIT、卫式语句、某些属性等(详见文献 3)。另外,在程序中绝对不能用浮点数,尽可能少用整数,最好使用STD_LOGIC和 STD_LOGIC_VECTOR 这两种类型来表示数据(当然,不同类型的逻辑综合工具有不同要求)。在 RTL仿真中
21、,尽管可以不考虑门电路延时,但是像传输延时等一些附加延时在某些情况下还应加以考虑,并用TRANSPORT 和 AFTER语句在程序中体现出来。当然,在逻辑综合时,它们都将被忽略,因为综合工具是不能产生这种延时的。3门级电路仿真RTL程序模块经逻辑综合以后就生成了门级电路。既然 RTL程序模块已经通过仿真,为什么还要对门级电路进行仿真呢? 这主要有以下几个原因:第一, 在 RTL仿真中一般不考虑门的延时,也就是说进行零延时仿真。在这种情况下,系统的工作速度不能得到正确的验证。不仅如此, 由于门延时的存在还会给系统内部工作过程及输入和输出带来意想不到的影响。第二,在RTL描述中像 “ X”那样的状态,在描述中是可以将其屏蔽的,但是利用逻辑综合工具,根据不同的约束条件,对电路进行相应变动时,这种情况就有可能发生传播。在门级仿真中出现这种状态是不允许的。一般情况下,要生成门电路时,输入和输出端口只能限定使用STD_LOGIC和STD_LOGIC_VECTOR 这样的数据类型名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 11 页 - - - - - - - - -