ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:146.39KB ,
资源ID:3428601      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3428601.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VHDL评估教案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VHDL评估教案.docx

1、VHDL评估教案第八章 仿真与逻辑综合8.1 仿真目前流行的VHDL仿真器 Mentor Graphics 公司 ModelSim Aldec 公司 Active-VHDLCadence 公司 Verilog -XLAltera 公司 Maxplus II Quartus II等回顾:二选一选择器输入端输出端absY00000100100111010010011110101111二选一选择器VHDL描述:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21a IS PORT( a,b : IN STD_LOGIC; s: IN STD_L

2、OGIC; 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; 编辑输入波形文件方法仿真: EDA软件工具生产商为设计者提供了一个较为直观地生成仿真输入波形的工具波形编辑器。 例如,Altera公司提供的MAX+plus工具软件就有这样的波形编辑器Waveform Editor,利用它可以编辑各种各样的输入

3、波形。二选一选择器仿真结果8.1.1仿真输入信息的产生 1程序直接产生方法 由设计者设计一段VHDL语言程序,将它附加到仿真模块中,并由它来产生仿真的输入信息。 例如:对例7-41带允许端的十二进制计数器进行仿真真值表输入端输出端clrenclkqdqcqbqa1XX000000X不变不变不变不变01计数值加1 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 若要产生如下所示的测试波形:0400ns100200300test-clk test-clr test-enCONSTANT clk_cycle:TIME:=20ns

4、;PROCESS BEGIN test_clk=1;产生复位 和允许信号产生周期为20ns的时钟信号 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; WAIT FOR clk_cycle; test_clr = 0; WAIT FOR clk_cycle*10; test_en= 0; WAIT FOR clk_cycle*3 test_entest_clk

5、, 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; WAIT FOR clk_cycle/4; test_clr = 1; WAIT FOR clk_cycle; test_clr = 0; WAIT FOR clk_cycle*10; test_en= 0;

6、 WAIT FOR clk_cycle*3 test_en= 1; WAIT; END PROCESS; END siml 2 读TEXTIO文件产生法仿真输入数据按定时要求按行存于一个文件中Test1.in clkclren0ns1005ns11110ns01115ns01120ns11125ns10130ns00135ns00140ns101.220ns101225ns100230ns000235ns000240ns100.280ns100285ns101290ns001295ns001300ns101.FILE intest: TEXT IS IN “test.in”;SIGNAL te

7、st_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); READ(li,en); WAIT FOR clk_cycle/2;IF (ENDFILE(intest) THEN WAIT;END IF;END PROCESS;仿真 仿真(即仿真中的延时),能使那些零延时事件得到适当的排队次序,以便

8、在仿真过程中得到一致的结果.VHDL语言描述程序来描述系统的硬件,它所描述的仅仅是系统的行为和构造,最终表现为门电路之间的连接关系.因此,在处理中对某些部分先处理,对另外一些部分后处理并不要求有非常严格的顺序关系.仿真是在对VHDL模块仿真时所采用的重要仿真机制,它能使那些零延时事件得到适当的排队次序,以便在仿真中得到一致的结果。 众所周知,用VHDL语言程序来描述系统的硬件,它所描述的仅仅是系统的行为和构造,因此,在处理中对哪些部分先处理,哪些部分后处理,在描述时并没有非常严格的顺序关系。例如,某一组合电路,其输入为a和b,其输出为q。它由一个反相器、 一个“与非门”和一个“与门”构成,其连

9、接关系如图7-3所示。 用VHDL语言对该电路进行描述,其程序模块如例7-3所示。 Library ieee;Use ieee.std_logic_1164.all;Entity sample isport(a,b:in std_logic; q:out std_logic);End sample;Architecture behav of sample is signal c,d:std_logic;Begin c=not a; d=not (b and c); q=c and d;End behav;在该模块的构造体中,3 个语句都是并发信号代入语句,因此只要其敏感量有变化,各语句都有可能

10、并发地执行。现在假设起始值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”变

11、“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的信号有个变化(10)若第三条语句先执行,d=1c=1再执行第二条语句b=1c=1 d (10)q 由0到1 再由1到0 q出现一个正跳变 若第二条语句先执行,b=1c=1再执行第三条语句d=0c=1q始终维持0 由上面分析可知,在仿真过程中,仿真次序不一致就

12、会产生不同的仿真结果,这种情况当然是不允许的。为了取得与硬件动作一致的仿真结果,必须引入一个适当的仿真同步机制,使仿真结果和处理次序的先后无关。这种仿真同步机制就是延时同步机制或称仿真机制。 所谓延时同步机制,是指被敏感量激活的进程立即被执行,其执行结果在一个无限小的延时时间内保持。该执行结果有可能激发其他的进程,又会产生新的其他结果,这些结果又在后续的一个延时时间内保持。如此重复,直至所有进程(或等价进程,如代入语句)都停止为止。最后一个延时输出的结果才是真正该仿真时刻的结果,其他延时时刻的结果往往被忽略。换一句话说,一个仿真时刻点是由若干个仿真间隔构成的,该仿真时刻的仿真结果,取自最后一个

13、仿真时刻的结果。这样就解决了由于仿真时计算顺序不同所带来的不一致性。 7.1.2 仿真模块的编写 在早期的EDA软件工具中,如Accolade VHDL Simulator,它要求输入信号是由程序产生的。这样,当设计者用VHDL语言设计好一个电路功能模块以后,为了进行仿真,还需编写一个仿真模块。当然,仿真模块应包含产生输入信息的程序以及描述电路的程序。一个描述十六进制计数器的仿真模块清单如例7-2所示。 【例7-2】 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY T_count16 IS- - PORT(clk, rst, load: IN S

14、TD_ULOGIC;- - data: IN STD_ULOGIC_VECTOR(3 DOWNTO 0);- - count: OUT STD_ULOGIC_VECTOR(3 DOWNTO 0);END T_count16; ARCHITECTURE 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;

15、 SIGNAL clk_s, rst_s, load_s: STD_ULOGIC;SIGNAL dtat_s: STD_ULOGIC_VECTOR(3 DOWNTO 0); SIGNAL count_s: STD_ULOGIC_VECTOR(3 DOWNTO 0);BEGIN u0: count16 PORT MAP(clk_s, rst_s, load_s, data_s, count_s);clock: PROCESSBEGINclk_s=1;WAIT FOR 25 ns;clk_s=0;WAIT FOR 25 ns;END PROCESS; stimulus1: PROCESSBEGIN

16、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;WAIT FOR 50 ns;load=0;WAIT FOR 11000 ns;WAIT; END PROCESS;END stimulus; 由于该模块仅仅用于仿真,所以实体中的端口描述部分是可以省略的。 该仿真模块用元件映射语句,将十六进制计数器映射到该模块的u0元件,u0元件的输入信号由构造体的两个进程产生,并连接到u0元件的各输入端,从而实现仿真的信号输入。该模块的仿真输入信

17、号波形和输出信号波形可在仿真器的视窗中观察到。 对于使用波形编辑器产生输入信息的仿真器,一般不需要编写仿真模块,只要有已编译好的功能模块和相对应的输入波形文件,仿真器就能自动地根据输入信号的定时关系进行仿真,MAX+plus的simulator就是这样做的。7.1.4 不同级别的仿真要求 1行为级仿真 行为级仿真的目的是验证系统的数学模型和行为是否正确,因而在对系统描述时抽象程度较高。由于有这个前提,对行为级仿真模块的书写没有太多限制,凡是VHDL语言中的全部语句和数据类型都可以在程序中使用。在书写时应尽可能使用抽象程度高的描述语句,以使程序更简洁明了。 另外,除了某些系统规定的定时关系外,一

18、般的电路延时及传输延时在行为级仿真中都不予以考虑。 2RTL级仿真 通过行为级仿真以后,下一步就是要将行为级描述的程序模块改写为RTL描述的程序模块。RTL级仿真是为了使仿真模块符合逻辑综合工具的要求,使其能生成门级逻辑电路。根据目前逻辑综合工具的具体要求,有些VHDL语言中规定的语句是不能进行逻辑综合的,如WAIT、卫式语句、某些属性等(详见文献3)。另外,在程序中绝对不能用浮点数,尽可能少用整数,最好使用STD_LOGIC和STD_LOGIC_VECTOR这两种类型来表示数据(当然,不同类型的逻辑综合工具有不同要求)。在RTL仿真中,尽管可以不考虑门电路延时,但是像传输延时等一些附加延时在

19、某些情况下还应加以考虑,并用TRANSPORT和AFTER语句在程序中体现出来。当然,在逻辑综合时,它们都将被忽略,因为综合工具是不能产生这种延时的。 3门级电路仿真 RTL程序模块经逻辑综合以后就生成了门级电路。既然RTL程序模块已经通过仿真,为什么还要对门级电路进行仿真呢? 这主要有以下几个原因: 第一,在RTL仿真中一般不考虑门的延时,也就是说进行零延时仿真。在这种情况下,系统的工作速度不能得到正确的验证。不仅如此,由于门延时的存在还会给系统内部工作过程及输入和输出带来意想不到的影响。 第二,在RTL描述中像“X”那样的状态,在描述中是可以将其屏蔽的,但是利用逻辑综合工具,根据不同的约束条件,对电路进行相应变动时,这种情况就有可能发生传播。在门级仿真中出现这种状态是不允许的。 一般情况下,要生成门电路时,输入和输出端口只能限定使用STD_LOGIC和STD_LOGIC_VECTOR这样的数据类型

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1