[信息与通信]第5章VHDL设计进阶.ppt

上传人:sccc 文档编号:5615475 上传时间:2023-08-02 格式:PPT 页数:82 大小:869KB
返回 下载 相关 举报
[信息与通信]第5章VHDL设计进阶.ppt_第1页
第1页 / 共82页
[信息与通信]第5章VHDL设计进阶.ppt_第2页
第2页 / 共82页
[信息与通信]第5章VHDL设计进阶.ppt_第3页
第3页 / 共82页
[信息与通信]第5章VHDL设计进阶.ppt_第4页
第4页 / 共82页
[信息与通信]第5章VHDL设计进阶.ppt_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《[信息与通信]第5章VHDL设计进阶.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]第5章VHDL设计进阶.ppt(82页珍藏版)》请在三一办公上搜索。

1、Q:OUT STD_LOGIC_VECTOR(0 TO 7),Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0),Q=“01010010”Q(3 DOWNTO 0)=“0110”,在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如:B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);或 SIGNAL A:STD_LOGIC_VECTOR(1 TO 4),1.标准逻辑矢量数据类型STD_LOGIC_VECTOR,2.并置操作符,以下是一些并置操作示例:,SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNA

2、L d:STD_LOGIC_VECTOR(1 DOWNTO 0);.a=10d(1)1;-元素与元素并置,并置后的数组长度为4.IF a d=“101011”THEN.-在IF条件句中可以使用并置符 Q=“0101”&“0010”,3.CASE语句,CASE语句的一般格式为:CASE 条件表达式 IS WHEN 条件表达式的值=顺序处理语句;WHEN 条件表达式的值=顺序处理语句;.END CASE;,CASE语句根据所满足的条件直接选择多项顺序语句中的一项执行,当执行CASE语句时,首先计算表达式的值,然后根据条件句中与之相同的选择值,执行相应的顺序语句,最后结束CASE语句。,CASE语句

3、中条件表达式的值可以有以下4种不同的表示形式:WHEN 条件表达式的值=顺序处理语句;WHEN 条件表达式的值|值|值=顺序处理语句;WHEN 条件表达式的值 to 值=顺序处理语句;WHEN OTHERS=顺序处理语句;,CASE语句是无序的,所有表达式的值都是并行处理的;CASE语句所有表达式的值都必须穷举,且不能重复,不能 穷尽的值用OTHERS表示;对任意项输入的条件表达式,输出不确定。CASE语句中至少要包含一个条件语句。CASE语句执行中必须选中,且只能选中所列条件语句中的一条。条件句中的选择值必需在表达式的 范围内。关键词OTHERS只能出现一次,且只能作为最后一种条件取值,使用

4、CASE语句需注意以下几点:,与IF语句相比,CASE语句组的程序语句是没有先后顺序的,所有表达式的值都并行处理。IF语句是有序的,先处理最起始、最优先的条件,后处理次优先的条件。,CASE语句存在以下问题:对相同的逻辑功能,一般经综合后,CASE语句比IF语句的描述耗用更多的硬件资源,而且对于有的逻辑,CASE语句无法描述,只能用IF语句来描述,这是因为IF-THEN-ELSIF语句具有条件相与的功能和自然将逻辑值“_”包括进去的功能,有利于逻辑化简,而CASE语句只有条件相或的功能。,5-11:4选1多路选择器ENTITY mux4_1 ISPORT(d:INSTD_LOGIC_VECTO

5、R(3 DOWNTO 0);sel:INSTD_LOGIC_VECTOR(1 DOWNTO 0);y:OUTSTD_LOGIC);END mux4_1;ARCHITECTURE arch OF mux4_1 ISBEGINPROCESS(d,sel)BEGINCASE sel ISWHEN 00=yyyyy=x;END CASE;END PROCESS;END arch;,例7:3-8译码器LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY decode3_8 ISPORT(a,b,c:INSTD_LOGIC;g1,g2a,g2b:INSTD_LOG

6、IC;y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decode3_8;,ARCHITECTURE rtl OF decode3_8 ISSIGNAL ind:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINindyyyyyyyyy=xxxxxxxx;END CASE;ELSEy=“11111111;END IF;END PROCESS;END rtl;,例3:8-3编码器LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY encoder8_3 ISPORT(input:IN STD_LOGIC_V

7、ECTOR(7 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END encoder8_3;ARCHITECTURE rtl OF encoder8_3 ISBEGINPROCESS(input)BEGINCASE input ISWHEN 01111111=yyyyyyyyy=xxx;END CASE;END PROCESS;END rtl;,例 SIGNAL value:INTEGER range 0 TO 15;SIGNAL out1:STD_LOGIC;CASE value IS END CASE;.CASE value IS WHEN 0=

8、out1 out1 out1 out1=0;END CASE;,4.元件例化语句,元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示:COMPONENT 元件名 IS PORT(端口名表);END COMPONENT 文件名;,元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。语句的表达式如下:例化名:元件名 PORT MAP(端口名=连接端口名,.);,全加器f_adder内部功能结构由两个半加器u1.u2和一个或门u3连接而成。ain.bin分别是两个输入的相加位,cin为

9、低位进位输入,cout为进位输出,sum为1位和输出。,元件例化:即引入一种连接关系,它将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。元件例化是使VHDL设计实体构成自上而下层次化设计的一个重要途径。元件例化可以是多层次的。,元件说明语句的书写格式为:COMPONENT 元件名 GENERIC 说明;PORT 说明;END COMPONENT;,元件例化语句的格式为:标号:元件名 PORT MAP(信号,),第5章 VHDL设计进阶,5.1 4位加法计数器的VHDL描述,5.1.1 4位加法计

10、数器,【例5-1】ENTITY CNT4 IS PORT(CLK:IN BIT;Q:BUFFER INTEGER RANGE 15 DOWNTO 0);END;ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q=Q+1;END IF;END PROCESS;END bhv;,5.1.3 4位加法计数器的另一种表达方式,【例5-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY

11、 CNT4 IS PORT(CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF CNT4 ISSIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=Q1+1;END IF;Q=Q1;END PROCESS;END bhv;,图6-2 4位加法计数器工作时序,归纳,数据类型,BUFFER模式,重载函数,计数器结构,1 整数,整数:整数都是十进制的数,如:5,678,0

12、,156E2(=15600),45_234_287(=45234287),整数与数学中整数的定义相似,可以使用预定义运算操作符,如加“”、减“”、乘“”、除“”进行算术运算。在VHDL语言中,整数的表示范围为21474836472147483647,即从(2311)到(2311)。,物理量文字(VHDL综合器不接受此类文字)。如:60s(60秒),100m(100米),k(千欧姆),177A(177安培),5.1.2 整数、自然数和正整数数据类型,在VHDL语言中,取值范围为(2311)(2311)。一个整数类型和要被综合进逻辑的信号或变量在其范围上应有约束。例如:variable a:int

13、eger range 255 to 255;整数可通过语句内带符号矢量来表达给综合工具。,整数不能看为矢量,不能单独对某一位操作。只能用于算术运算。,整数包括正整数,负整数和零。实际应用中,仿真器将INTEGER 作为有符号数处理.而VHDL综合器则作为无符号数处理,综合器无法对未给定范围的数进行综合,因此必须指定范围如:SINGAL type1:INTEGER RANGE 0 TO 15,6.正整数(POSITIVE)和自然数(NATURAL)数据类型,自然数是整数的一个子类型,非负的整数,即零和正整数.正整数也是整数的一个 子类型,包括非零和非负的整数.,VHDL源代码:SUBTYPE N

14、ATURAL IS INTEGER RANGE 0 TO INTEGERHIGESUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGERHIGE,7.实数(REAL)数据类型,1.0 十进制浮点数 0.0 十进制浮点数 65971.333333 十进制浮点数 65_971.333_3333 与上一行等价 8#43.6#e+4 八进制浮点数 43.6E4 十进制浮点数,在进行算法研究或实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义值范围为1.0E+38+1.0E+38。实数有正负数,书写时一定要有小数点。实数类型只能用于VHDL仿真器中,综

15、合器不支持实数,在实际的应用中,VHDL仿真器讲INTEGER类型的数据作为有符号数处理,而综合器将INTEGER作为无符号数处理.VHDL综合器要求利用RANGE子句为所定义的整数限定取值的范围,然后根据所定义的范围决定它是信号还是变量的二进制数的位数,因为VHDL综合器无法综合未限定范围的整数类型的信号或变量.,注意:,实数:实数也都是十进制的数,但必须带有小数点,如:1.335,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),在进行算法研究或实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义值范围为1.

16、0E+38+1.0E+38。实数有正负数,书写时一定要有小数点。例如:1.0,+2.5,1.0E+38,实数类型的数据,VHDL综合器不支持,因为实数类型的数据实现相当复杂,目前的电路规模难以承受,注意:,以数制基数表示的文字:用这种方式表示的数由五个部分组成。SIGNAL d1,d2,d3,d4,d5,:INTEGER RANGE 0 TO 255;d1=10#170#;-(十进制表示,等于 170)d2=16#FE#;-(十六进制表示,等于 254)d3=2#1111_1110#;-(二进制表示,等于 254)d4=8#376#;-(八进制表示,等于 254)d5=16#E#E1;-(十六

17、进制表示,等于2#1110000#,等于224),以数制基数表示的文字由五部分组成:第一部分,用十进制数标明数制进位的基数;第二部分,数制隔离符号“#”;第三部分,表示的文字;第四部分,指数隔离符号“#”;第五部分,用十进制数表示的指数部分,这一部分的数如果为零可以省去不写.,5.2 不同工作方式的时序电路设计,5.2.1 相关语法,1.变量,2.省略赋值操作符(OTHERS=X),为了简化表达才使用短语“(OTHERS=X)”,这是一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句:SIGNAL d1:STD_LOGIC_VECTOR(4 DOWNTO 0);VARI

18、ABLE a1:STD_LOGIC_VECTOR(15 DOWNTO 0);.d1 0);a1:=(OTHERS=0);,5.2.2 带有复位和时钟使能的10进制计数器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLK,RST,EN:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 ISB

19、EGIN PROCESS(CLK,RST,EN)VARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN IF RST=1 THEN CQI:=(OTHERS=0);-计数器复位 ELSIF CLKEVENT AND CLK=1 THEN-检测时钟上升沿 IF EN=1 THEN-检测是否允许计数 IF CQI 0);-大于9,计数值清零 END IF;END IF;END IF;IF CQI=1001 THEN COUT=1;-计数大于9,输出进位信号 ELSE COUT=0;END IF;CQ=CQI;-将计数值向端口输出 END PROCESS;EN

20、D behav;,【例5-3】,5.2.3 带有并行置位的移位寄存器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHFRT IS-8位右移寄存器 PORT(CLK,LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB:OUT STD_LOGIC);END SHFRT;ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS(CLK,LOAD)VARIABLE REG8:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN IF CLK

21、EVENT AND CLK=1 THEN IF LOAD=1 THEN-装载新数据 REG8:=DIN;ELSE REG8(6 DOWNTO 0):=REG8(7 DOWNTO 1);END IF;END IF;QB=REG8(0);END PROCESS;-输出最低位END behav;,【例6-4】,图6-5 例6-4的工作时序,(1)在第一个时钟到来时,LOAD恰为高电平,装载数据,,(2)第二个时钟,以及以后的时钟信号都是移位时钟,(3)经过八个时钟后,QB向右串行依次移出所有的数据,变量(VARIABLE)变量是暂存数据的量。,变量说明的语法格式是:VARIABLE 变量名,变量名:

22、数据类型:=初始值;,例如:VARIABLE count:INTEGER RANGE 0 TO 99:=0 变量只用于进程和子程序,它是一个局部量。变量必须在进程或子程序的说明性区域加以说明。不能将信息带出对它做出定义的当前设计单元。,在VHDL中,数据对象是可以赋予一个值的客体。常用的数据对象为常量、变量和信号,在使用前必须给予说明。,5.3 VHDL数据对象,变量赋值是直接的、非预设的,它在某一时刻仅包含一个值。变量的赋值立即生效,不存在延时行为。变量常用在实现某种运算的赋值语句中。,变量赋值语句格式为:目标变量名:=表达式;,赋值语句“:=”右边的表达式必须与目标变量具有相同的数据类型,

23、这个表达式可以是一个运算表达式也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合。,位置:进程 子程序,例VARIABLE x,y:REAL;VARIABLE a,b:BIT_VECTOR(0 TO 7);x:=100.0;-实数赋值,X是实数变量 y:=1.5+x;-运算表达式赋值,Y也是实数变量 a:=b;a:=“1010101”;-位矢量赋值,A的数据类型是位矢量 a(3 TO 6):=(1 1 0 1);-段赋值,注意赋值格式 a(0 TO 5):=b(2 TO 7);a(7):=0;-位赋值,信号(SIGNAL)信号是电子电路内部硬件实体相互连接的抽象表示

24、。信号能够代表连线,也可内连元件,端口也是信号。,信号说明的语法格式为:SIGNAL 信号名,信号名:数据类型:=初始值;,信号作为一种数值容器,不但可以容纳当前值,也可以保持历史信息。初始值的设置不是必需的,而且,初始值仅在VHDL仿真中有效。与变量相比,信号的硬件特征更为明显,它具有全局性特征。,位置:程序包,实体,结构体,块。,SIGNAL temp:STD_LOGIC:=0;SIGNAL flaga,flagb:BIT;SIGNAL data:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL a:INTEGER RANGE 0 TO 15;,信号和端口的区别:端

25、口有方向说明,而信号没有方向说明。信号可以看作实体内部的端口端口实质作了隐式的信号定义,并附加了数据流动的方向。信号本身是一种显式的定义,在实体中定义的端口,在结构体中作为信号直接使用,不必再加说明。,信号包括I/O引脚信号以及IC内部缓冲信号,有硬件电路与 之对应,故信号之间的传递有实际的附加延时。信号通常在构造体、包集合和实体中说明;信号不能在 进程中说明(但可以在进程中使用)。,赋值语句中的表达式必须与目标信号具有相同的数据类型。,硬件中的信号总是同时工作的,即信号同时在各个模块中流动,这就是硬件电路的并发性。HDL体现了实际电路中信号“同时”流动的这种基本特性。,信号赋值语句表达式为:

26、目标信号名=表达式;符号“=”表示赋值操作,即将数据信息传入。数据信息传入时可以设置延时过程,这与器件的实际传播延时十分接近。因此信号值的代入采用“=”代入符,而不是像变量赋值时那样用“:”。信号赋值语句举例:x=y;a=1;s1=s2 AFTER 10 ns;,但信号定义时初始赋值符号“:”,即仿真的时间坐标是从赋初始值开始的。TYPE four IS(x,0,1,z);SIGNAL s1:four;-VHDL规定,默认值取LEFTMOST项SIGNAL s2:four:=x;SIGNAL s3:four:=1;,信号和变量的主要区别:1.变量是一个局部量,只能用于进程或子程序中;信号是一个

27、全局量,它可以用来进行进程之间的通信。2.变量的赋值立即生效,不存在延时行为;信号赋值至少要有延时信号赋值具有非立即性,信号之间的传递具有延时性。3.信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。4.信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件。变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。,5.信号赋值可以出现在进程中,也可以直接出现在结构体中,但它们的运行含义不同:前者属顺序信号赋值,此时的赋值操作要视进程是否已被启动,后者属并行信号赋值,其赋值操作是各自独立并行发生的。6.在进程中变

28、量和信号的赋值形式与操作过程不同:进程对信号敏感而不对变量敏感。信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(共享变量除外)。,在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变量。在执行下一条语句时,该变量的值即为上一句新赋的值。在信号的赋值语句中,该语句即使被执行,其值不会使信号立即发生代入,在下一条语句执行时,仍使用原来的信号值。直到进程结束之后,所有信号赋值的实际代入才顺序进行处理。因此,实际代入过程和赋值语句的执行是分开进行的。如例12所示。,例:信号赋值与变量赋值的比较 信号赋值:architecture rtl of sig is signal a,b:std

29、_logic;-定义信号 begin process(a,b)begin a=b;b=a;end process;end rtl;,-结果是 a 和 b 的值互换,变量赋值:architecture rtl of var is begin process variable a,b:std_logic;-定义变量 begin a:=b;b:=a;end process;end rtl;,-结果是a和b的值都等于b的初值,当进程运行时,信号赋值将自上而下顺序执行,但第一项赋值操作并不会发生,这是因为信号赋值是在进程结束时才起作用。因为在进程结束更新时,d的最后一个赋值为c,因此执行结果为该式。,x

30、=b+c;y=b+c;,x=b+a;y=b+c;,4-2SIGNAL a,b,c,y,z:INTEGER;PROCESS(a,b,c)BEGIN y=a*b;z=c-x;y=b;END PROCESS;4-3 ARCHITECTURE fun1 OF adder_h IS BEGIN sum=a XOR b;carry=a AND b;END ARCHITECTURE fun1;,常量(CONSTANT)常量是指那些在设计描述中不会变化的值,常量说明就是对某一常量名赋予一个固定的值。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。常量所赋的值应和定义的数据类型一致。常量一旦赋值就不

31、能再改变,具有全局性。,常量说明的一般格式如下:CONSTANT 常量名,常量名:数据类型:=取值;,位置:程序包,实体,结构体,块,进程。,设计实体的电源电压指定:CONSTANT Vcc:real:=5.0;,某一模块信号输入/输出的延迟时间:CONSTANT DELAY:time:=100ns;,某单片机总线上数据设备向量:CONSTANT PBUS:BIT_VECTOR:=“10110011”CONSTANT PBUS1:INTEGER:=15,【例5-5】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK,

32、D1:IN STD_LOGIC;Q1:OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS(CLK)VARIABLE QQ:STD_LOGIC;BEGIN IF CLKEVENT AND CLK=1 THEN QQ:=D1;END IF;Q1=QQ;END PROCESS;END;,【例5-6】.ARCHITECTURE bhv OF DFF3 IS SIGNAL QQ:STD_LOGIC;BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN QQ=D1;END IF;Q1=QQ

33、;END PROCESS;END;,【例5-8】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK,D1:IN STD_LOGIC;Q1:OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF3 IS SIGNAL A,B:STD_LOGIC;BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN A=D1;B=A;Q1=B;END IF;END PROCESS;END;,【例5-9】LIBRARY IEEE;USE IEEE.STD_LOG

34、IC_1164.ALL;ENTITY DFF3 IS PORT(CLK,D1:IN STD_LOGIC;Q1:OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS(CLK)VARIABLE A,B:STD_LOGIC;BEGIN IF CLKEVENT AND CLK=1 THEN A:=D1;B:=A;Q1=B;END IF;END PROCESS;END;,【例5-10】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(i0,i1,i2,i3,a,b:I

35、N STD_LOGIC;q:OUT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISsignal muxval:integer range 7 downto 0;BEGINprocess(i0,i1,i2,i3,a,b)begin muxval q q q q null;end case;end process;END body_mux4;,【例5-11】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;q:O

36、UT STD_LOGIC);END mux4;ARCHITECTURE body_mux4 OF mux4 ISBEGINprocess(i0,i1,i2,i3,a,b)variable muxval:integer range 7 downto 0;begin muxval:=0;if(a=1)then muxval:=muxval+1;end if;if(b=1)then muxval:=muxval+2;end if;case muxval is when 0=q q q q null;end case;end process;END body_mux4;,例5-10的RTL电路,例5-

37、11的RTL电路,例5-10的错误的工作时序,例5-11的正确工作时序,5.4 双向电路和三态控制电路设计,5.4.1 三态门设计,【例5-13】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tri_s IS port(enable:IN STD_LOGIC;datain:IN STD_LOGIC_VECTOR(7 DOWNTO 0);dataout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END tri_s;ARCHITECTURE bhv OF tri_s ISBEGINPROCESS(enable,datain)

38、BEGIN IF enable=1 THEN dataout=datain;ELSE dataout=ZZZZZZZZ;END IF;END PROCESS;END bhv;,8位3态控制门电路,5.4.2 双向端口设计,【例5-14】library ieee;use ieee.std_logic_1164.all;entity tri_state isport(control:in std_logic;in1:in std_logic_vector(7 downto 0);q:inout std_logic_vector(7 downto 0);x:out std_logic_vector(

39、7 downto 0);end tri_state;architecture body_tri of tri_state isbeginprocess(control,q,in1)beginif(control=0)then x=q;else q=in1;x=ZZZZZZZZ;end if;end process;end body_tri;,例6-13的仿真波形图,例6-13的综合结果,【例5-15】(以上部分同上例)process(control,q,in1)beginif(control=0)then x=q;q=ZZZZZZZZ;else q=in1;x=ZZZZZZZZ;end if;

40、end process;end body_tri;,图6-14 例6-14的仿真波形图,例6-14的综合结果,5.4.3 三态总线电路设计,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tristate2 IS port(input3,input2,input1,input0:IN STD_LOGIC_VECTOR(7 DOWNTO 0);enable:IN STD_LOGIC_VECTOR(1 DOWNTO 0);output:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END tristate2;ARCHITECTUR

41、E multiple_drivers OF tristate2 ISBEGINPROCESS(enable,input3,input2,input1,input0)BEGIN IF enable=00 THEN output Z);END IF;IF enable=01 THEN output Z);END IF;IF enable=10 THEN output Z);END IF;IF enable=11 THEN output Z);END IF;END PROCESS;END multiple_drivers;,【例5-16】,例6-15错误的综合结果,library ieee;use

42、ieee.std_logic_1164.all;entity tri isport(ctl:in std_logic_vector(1 downto 0);datain1,datain2,datain3,datain4:in std_logic_vector(7 downto 0);q:out std_logic_vector(7 downto 0);end tri;architecture body_tri of tri isbegin q Z);q Z);q Z);q Z);end body_tri;,【例5-17】,图6-18 例6-16正确的综合结果,5.4.4 顺序条件语句IF语句,

43、(1)IF 条件句 Then 顺序语句 END IF;(2)IF 条件句 Then 顺序语句 ELSE 顺序语句 END IF;(3)IF 条件句 Then IF 条件句 Then.END IF END IF,(4)IF 条件句1 Then 顺序语句1 ELSIF 条件句2 Then 顺序语句2 ELSIF 条件句3 Then 顺序语句3.ELSE 顺序语句n+1 END IF,【例5-18】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY control_stmts ISPORT(a,b,c:IN BOOLEAN;output:OUT BOOLE

44、AN);END control_stmts;ARCHITECTURE example OF control_stmts IS BEGIN PROCESS(a,b,c)VARIABLE n:BOOLEAN;BEGIN IF a THEN n:=b;ELSE n:=c;END IF;output=n;END PROCESS;END example;,【例5-19】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder IS PORT(din:IN STD_LOGIC_VECTOR(0 TO 7);output:OUT STD_LOGIC_VECT

45、OR(0 TO 2);END coder;ARCHITECTURE behav OF coder IS SIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN PROCESS(din)BEGIN IF(din(7)=0)THEN output=000;ELSIF(din(6)=0)THEN output=100;ELSIF(din(5)=0)THEN output=010;ELSIF(din(4)=0)THEN output=110;ELSIF(din(3)=0)THEN output=001;ELSIF(din(2)=0)THEN output=101;

46、ELSIF(din(1)=0)THEN output=011;ELSE output=111;END IF;END PROCESS;END behav;,5.5 进程语句结构,5.5.1 进程语句格式,PROCESS语句结构的一般表达格式如下 进程标号:PROCESS(敏感信号参数表)IS 进程说明部分 BEGIN 顺序描述语句 END PROCESS 进程标号;,5.5.2 PROCESS 组成,5.5.3 进程要点,1.PROCESS为一无限循环语句,2.PROCESS中的顺序语句具有明显的顺序/并行运行双重性,3.进程必须由敏感信号的变化来启动,4.进程语句本身是并行语句,5.信号是多个

47、进程间的通信线,6.一个进程中只允许描述对应于一个时钟信号的时序逻辑,5.6 仿真延时,5.6.1 固有延时,z=x XOR y AFTER 5ns;,z=x XOR y;,5.6.2 传输延时,z=TRANSPORT x AFTER 10 ns;,5.6.3 仿真,x=9;y=x;z=x AFTER 5ns;,1.惯性延时:系统或器件的输出信号要发生变化必须有一段时间的延时,这段延时时间常称为系统或器件的惯性或惯性延时。因为大多数器件在行为仿真时都会呈现惯性延时,在VHDL语言中,惯性延时是缺省的,即在语句中如果不做特别说明,产生的延时一定是惯性延时。有时,设计人员为了逼真地仿真硬件电路的实

48、际工作情况,常在代入语句中加入惯性延时语句,例如:b=a AFTER 10 ns。惯性延时的重要特点是:当一个系统或器件,它的输入信号变化周期小于系统或器件的惯性(或惯性延时)时,其输出将保持不变(见惯性延时示例)。惯性延时说明只在行为仿真时有意义,逻辑综合时将被忽略,或者在逻辑综合前必须去掉延时说明。因为实际延时量的大小取决于最终的硬件电路的固有物理延时。,常用惯性延时表示元件所具有的特性为:仅当其输入值保持给定的时间长度,输出端才有响应。这个特性常用于表示忽略输入尖峰的元件,如触发器,逻辑门等。,传输延时:在VHDL语言中,传输延时不是缺省的,必须在语句中明确说明。传输延时常用于描述总线延

49、时、连接线的延时及ASIC芯片中的路径延时。具有传输延时的代入语句格式如下所示:b=TRANSPORT a AFTER 20 ns;语句中“TRANSPORT”是专门用于说明传输延时的前置词。如惯性延时示例中的门电路的惯性延时若用传输延时来替代,就得到传输延时示例图中的波形结果。由波形图可见,同样的门电路,当有10 ns的脉冲波形输入时,经20ns传输延时后,将在输出端完全复现输入端的输入波形,而不管输入波形的形状和宽窄如何。,例4:LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY mux4_1 IS PORT(d0,d1,d2,d3:IN STD

50、_LOGIC;sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);q:OUT STD_LOGIC);END mux4_1;ARCHITECTURE behav OF mux4_1 ISBEGIN WITH sel SELECTq=d0 AFTER 10 ns WHEN”00”,d1 AFTER 10 ns WHEN”01”,d2 AFTER 10 ns WHEN”10”,d3 AFTER 10 ns WHEN”11”,X AFTER 10 ns WHEN others;END behav;,3.信号的延迟:延迟机制的引入:仿真期间,要对某类事件排序,特别是必须排定零延迟事件

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号