VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章

上传人:E**** 文档编号:89361639 上传时间:2019-05-24 格式:PPT 页数:74 大小:436.50KB
返回 下载 相关 举报
VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章_第1页
第1页 / 共74页
VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章_第2页
第2页 / 共74页
VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章_第3页
第3页 / 共74页
VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章_第4页
第4页 / 共74页
VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章》由会员分享,可在线阅读,更多相关《VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨7-13 第9章(74页珍藏版)》请在金锄头文库上搜索。

1、,第9章 仿真与逻辑综合,9.1 仿真 9.2 逻辑综合,在前面几章已经详细地介绍了VHDL语言的基本语句及其使用方法,同时还列举了许多利用VHDL语言设计一般逻辑电路的实例。为了验证这些设计模块是否正确,还需对这些设计模块进行仿真。目前,各国的相关公司和厂商已为设计者提供了众多的仿真工具,如Synopsys公司的VHDL System Symulator、Model Technology公司的SYNARIO VHDL Simulator、VEDA Design Automation公司的VULCAL等。,9.1 仿 真,通过这些仿真工具,设计者可对各设计层次的设计模块进行仿真,以确定这些设计

2、模块的功能、逻辑关系及定时关系是否满足设计要求。所以,仿真是利用VHDL语言进行硬件设计的一个必不可少的步骤,它贯穿设计的整个过程。 如第1章所述,在硬件系统设计过程中一般要进行3次仿真:行为级仿真、RTL级仿真和门级仿真。各级所要达到的仿真目的是不一样的,同时对VHDL语言的描述要求也有所不同。下面就仿真中的几个主要问题作一介绍。,图9-1 带允许端的十二进制计数器的仿真输入信号,9.1.1 仿真输入信息的产生 硬件系统通常是通过输入信号来驱动的,在不同输入信号的情况下其行为表现是产生不同的输出结果。因此仿真输入信息的产生是对系统进行仿真的重要前提,也是必须进行的步骤。仿真信息的产生通常有三

3、种方法:程序直接产生法、读TEXIO文件产生法和仿真波形输入法。,1程序直接产生法 所谓程序直接产生法,就是由设计者设计一段VHDL语言程序,由该程序直接产生仿真的输入信息。例如要对例8-41带允许端的十二进制计数器进行仿真。该计数器有3个输入端,仿真时要产生clr、en和clk 3个输入信号,如图9-1所示。 3个输入信号之间有严格的定时关系。这些定时波形可以用进程来产生。例如:, CONSTANT clk_cycle:TIME:=20 ns; PROCESS BEGIN test_clk=1; WAIT FOR clk_cycle/2; test_clk=0; WAIT FOR clk_c

4、ycle/2; END PROCESS; PROCESS BEGIN,产生周期为 20 ns的时钟信号,test_clr=0; test_en=1; 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;,产生复位和允许信号,上例中的第一个进程产生周期为20 ns的时钟脉冲test_clk。开始,test_clk=1,保持10 ns。然后,test_

5、clk=0,再保持10 ns,得到一个时钟周期。该进程没有指定敏感量,因此当进程执行到最后一条语句后又返回到最前面,开始执行进程的第一条语句。如此循环往复,就能产生出一串周期为20 ns的时钟脉冲。 上例中的第二个进程用来产生初始的复位(清除)信号和计数允许信号。该进程可产生宽20 ns的复位信号,复位260 ns后再使test_en有效(置为“1”),从而使计数器进入正常的计数状态。该进程的最后一条语句是WAIT语句,它表明该进程只执行一次,进程在WAIT语句上处于无限制的等待状态。,【例9-1】 利用程序直接产生输入信号。 LIBRARY IEEE; USE IEEE.STD_LOGIC_

6、1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY test_count12en IS END ENTITY test_count12en; ARCHITECTURE siml OF test_count12en IS COMPONENT count12en IS PORT (clk,clr,en: IN STD_LOGIC; qa,qb,qc,qd: OUT STD_LOGIC); END COMPONENT count12en;,CONSTANT clk_cycle:TIME:=20 ns; SIGNAL test_clk,test_clr,

7、test_en:STD_LOGIC; SIGNAL t_qa,t_qb,t_qc,t_qd:STD_LOGIC; BEGIN U0: count12en PORT MAP (clk=test_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=1; WAIT FOR

8、 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 ARCHITECTURE sim1; 根据例9-1的仿真程序可以得到仿真波形如图9-2所示。,图9-2 带允许端的十二进制计数器的仿真波形,2读TEXTIO文件产生法 在程序直接产生法中,仿真模块的编程人员必须了解输入信号的详细状态和它们与时间的关系,这对编程人员提出了太高的要求。为此,人们设计了一种用

9、数据文件输入仿真的办法,即仿真输入数据按定时要求按行存于一个文件(即TEXTIO文件)中。在仿真时,根据定时要求按行读出,并赋予相应的输入信号。图9-3(a)就是根据例9-1的仿真输入信号要求所设计的TEXTIO文件bar.in。,图9-3 TEXTIO文件bar.in的文件格式 (a) 输入文件bar.in;(b) 输出文件bar.out,在bar.in文件中每行包含2位数据,第1位为clk,第2位为reset,。每行数据之间的定时间隔为10 ns。如果在程序中每隔10 ns读入一行数据,并将读入值赋予对应的clk、reset,那么就产生了仿真输入信号。这一点利用TEXTIO中的READLI

10、NE和READ语句很容易实现。例如: FILE inv: TEXT IS IN “bar.in“; FILE outv: TEXT IS OUT “bar.out“; CONSTANT clk_cycle: TIME:=10 ns; CONSTANT stb: TIME:=2 ns;,BEGIN - Instantiate the Unit Under Test (UUT) uut: cn8 PORT MAP( clk = clkin, reset = resetin, count = count ); PROCESS VARIABLE li,lo: LINE; VARIABLE clk,re

11、set: STD_LOGIC; VARIABLE count_wr : std_logic_vector(3 downto 0);,BEGIN READLINE(inv,li); READ(li,clk); READ(li,reset); clkin=clk; resetin=reset; 该例描述了每隔10 ns从bar.in文件中读入一行数据,并将其对应值赋予clk.in、reset.in的情况。该进程除非碰到了bar.in文件的末尾标志,否则该进程中的语句将循环执行。这样就产生了所需的八进制计数器仿真输入信号。,利用仿真输入信号的具体仿真模块的实例如例9-2所示。仿真结果从输出文件bar

12、.out得到,如图9-3(b)所示。,【例9-2】 利用仿真输入信号的具体仿真模块的实例。 LIBRARY IEEE; LIBRARY STD; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.all; USE ieee.numeric_std.ALL; USE IEEE.STD_LOGIC_TEXTIO.ALL; USE STD.TEXTIO.ALL; ENTITY simtop_vhd1 IS END simtop_vhd1;,ARCHITECTURE behavior OF simtop_vhd1 IS - Compone

13、nt Declaration for the Unit Under Test (UUT) COMPONENT cn8 PORT(clk : IN std_logic;reset : IN std_logic; count : OUT std_logic_vector(2 downto 0); END COMPONENT; -Inputs SIGNAL clkin : std_logic := 0; SIGNAL resetin : std_logic := 0;,-Outputs SIGNAL count : std_logic_vector(2 downto 0); FILE inv: TE

14、XT IS IN “bar.in“; FILE outv: TEXT IS OUT “bar.out“; CONSTANT clk_cycle: TIME:=10 ns; CONSTANT stb: TIME:=2 ns; BEGIN - Instantiate the Unit Under Test (UUT) uut: cn8 PORT MAP(clk = clkin,reset = resetin, count = count);,PROCESS VARIABLE li,lo: LINE; VARIABLE clk,reset: STD_LOGIC; VARIABLE count_wr

15、: std_logic_vector(3 downto 0); BEGIN READLINE(inv,li); READ(li,clk); READ(li,reset); clkin=clk; resetin=reset; WAIT FOR clk_cycle-stb;,WRITE(lo,now,left,8); count_wr := 0,产生输入仿真信号时还应注意的一点是:输入控制信号和时钟信号最好不要在同一仿真时刻发生变化,应与时钟变化沿错开一定时间。这样做的好处是:防止仿真中因判别二者变化的先后不同而出现相反的结果,使仿真结果具有唯一性。这里再次提醒,目前有些EDA工具仍只支持87版的TEXTIO,本实例也只在ISE中进行了验证。,3仿真波形输入法 这种方法是利用波形编辑工具,编制出整个仿真期间系统每个输入端的定时波形,作为系统仿真的输入信号。这些输入波形以文件形式存于工作库中,例如MAX+Plus就以 .scf文件格式存于仿真库中。系统在仿真时按不同仿真时刻,顺序提取各输入波形当前的输入值,作为各输入端的仿真输入。具体操作细节见附录A中介绍EDA工具的部分。,9.1.2 仿

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号