[信息与通信]第5章 VHDL设计进阶.ppt
《[信息与通信]第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 (
2、3 DOWNTO 0) ; SIGNAL 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语句时,首先计算表达式的值,然
3、后根据条件句中与之相同的选择值,执行相应的顺序语句,最后结束CASE语句。,CASE语句中条件表达式的值可以有以下4种不同的表示形式: WHEN 条件表达式的值=顺序处理语句; WHEN 条件表达式的值 | 值 | 值=顺序处理语句; WHEN 条件表达式的值 to 值=顺序处理语句; WHEN OTHERS=顺序处理语句;,CASE语句是无序的,所有表达式的值都是并行处理的; CASE语句所有表达式的值都必须穷举,且不能重复,不能 穷尽的值用OTHERS表示; 对任意项输入的条件表达式,输出不确定。 CASE语句中至少要包含一个条件语句。 CASE语句执行中必须选中,且只能选中所列条件语句中
4、的一条。 条件句中的选择值必需在表达式的 范围内。 关键词OTHERS只能出现一次,且只能作为最后一种条件取值,使用CASE语句需注意以下几点:,与IF语句相比,CASE语句组的程序语句是没有先后顺序的,所有表达式的值都并行处理。IF语句是有序的,先处理最起始、最优先的条件,后处理次优先的条件。,CASE语句存在以下问题: 对相同的逻辑功能,一般经综合后, CASE语句比IF语句的描述耗用更多的硬件资源,而且对于有的逻辑, CASE语句无法描述,只能用IF语句来描述,这是因为IF-THEN-ELSIF语句具有条件相与的功能和自然将逻辑值“_”包括进去的功能,有利于逻辑化简,而CASE语句只有条
5、件相或的功能。,5-11: 4选1多路选择器 ENTITY mux4_1 IS PORT(d : IN STD_LOGIC_VECTOR(3 DOWNTO 0); sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0); y : OUT STD_LOGIC); END mux4_1; ARCHITECTURE arch OF mux4_1 IS BEGIN PROCESS (d, sel) BEGIN CASE sel IS WHEN “00“ =yyyyy=x; END CASE; END PROCESS; END arch;,例7:3-8译码器 LIBRARY ieee
6、; USE ieee.std_logic_1164.ALL; ENTITY decode3_8 IS PORT(a,b,c : IN STD_LOGIC; g1,g2a,g2b : IN STD_LOGIC; y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END decode3_8;,ARCHITECTURE rtl OF decode3_8 IS SIGNAL ind:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN indyyyyyyyyy=“xxxxxxxx“; END CASE; ELSE y=“11111111“; END IF;
7、END PROCESS; END rtl;,例3:8-3编码器 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY encoder8_3 IS PORT(input : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END encoder8_3; ARCHITECTURE rtl OF encoder8_3 IS BEGIN PROCESS (input) BEGIN CASE input IS WHEN “01111111“ =yyyyyyyyy=“
8、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 = out1 out1 out1 out1 = 0; END CASE ;,4. 元件例化语句,元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示: COMPONENT 元件名 IS PORT (端口名表) ; E
9、ND COMPONENT 文件名 ;,元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。语句的表达式如下: 例化名 : 元件名 PORT MAP( 端口名 = 连接端口名,.);,全加器f_adder内部功能结构由两个半加器u1.u2和一个或门u3连接而成。 ain.bin分别是两个输入的相加位,cin为低位进位输入,cout为进位输出,sum为1位和输出。,元件例化:即引入一种连接关系,它将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。元件例化是使VHDL设计
10、实体构成自上而下层次化设计的一个重要途径。 元件例化可以是多层次的。,元件说明语句的书写格式为: COMPONENT 元件名 GENERIC 说明; PORT 说明; END COMPONENT ;,元件例化语句的格式为: 标号:元件名 PORT MAP(信号,),第5章 VHDL设计进阶,5.1 4位加法计数器的VHDL描述,5.1.1 4位加法计数器,【例5-1】 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 IS BE
11、GIN 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 CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHIT
12、ECTURE bhv OF CNT4 IS SIGNAL 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, 156E2(=15600), 45_234_287 (=45234287),整数与数学中整数的定义相
13、似,可以使用预定义运算操作符,如加“”、减“”、乘“”、除“”进行算术运算。在VHDL语言中,整数的表示范围为21474836472147483647,即从(2311)到(2311)。,物理量文字(VHDL综合器不接受此类文字)。如: 60s (60秒), 100m (100米), k (千欧姆), 177A (177安培),5.1.2 整数、自然数和正整数数据类型,在VHDL语言中,取值范围为 (2311)(2311)。一个整数类型和要被综合进逻辑的信号或变量在其范围上应有约束。例如: variable a: integer range 255 to 255; 整数可通过语句内带符号矢量来表
14、达给综合工具。,整数不能看为矢量,不能单独对某一位操作。 只能用于算术运算。,整数包括正整数,负整数和零。实际应用中,仿真器将INTEGER 作为有符号数处理.而VHDL综合器则作为无符号数处理,综合器无法对未给定范围的数进行综合,因此必须指定范围 如:SINGAL type1 : INTEGER RANGE 0 TO 15,6. 正整数(POSITIVE)和自然数(NATURAL)数据类型,自然数是整数的一个子类型,非负的整数,即零和正整数. 正整数也是整数的一个 子类型,包括非零和非负的整数.,VHDL源代码: SUBTYPE NATURAL IS INTEGER RANGE 0 TO I
15、NTEGERHIGE SUBTYPE 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仿真器中,综合器不支持实数,在实际的应用中,VHDL仿真器讲INT
16、EGER类型的数据作为有符号数处理,而综合器将INTEGER作为无符号数处理. VHDL综合器要求利用RANGE子句为所定义的整数限定取值的范围,然后根据所定义的范围决定它是信号还是变量的二进制数的位数,因为VHDL综合器无法综合未限定范围的整数类型的信号或变量.,注意:,实数:实数也都是十进制的数,但必须带有小数点,如: 1.335, 88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),在进行算法研究或实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义值范围为1.0E+38+1.0E+38。实数有正负数,书写时
17、一定要有小数点。例如: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
18、 ; - (十六进制表示,等于2#1110000#,等于224),以数制基数表示的文字由五部分组成:第一部分,用十进制数标明数制进位的基数; 第二部分,数制隔离符号“#”;第三部分,表示的文字;第四部分,指数隔离符号“#”;第五部分,用十进制数表示的指数部分,这一部分的数如果为零可以省去不写.,5.2 不同工作方式的时序电路设计,5.2.1 相关语法,1. 变量,2. 省略赋值操作符(OTHERS=X),为了简化表达才使用短语“(OTHERS=X)”,这是一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句: SIGNAL d1 : STD_LOGIC_VECTOR(4
19、DOWNTO 0); VARIABLE 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
20、CNT10; ARCHITECTURE behav OF CNT10 IS BEGIN 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;
21、 -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数值向端口输出 END PROCESS; END 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
22、 OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT 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)在第一个时钟到来时,LO
23、AD恰为高电平,装载数据,,(2)第二个时钟,以及以后的时钟信号都是移位时钟,(3)经过八个时钟后,QB向右串行依次移出所有的数据, 变量(VARIABLE) 变量是暂存数据的量。,变量说明的语法格式是: VARIABLE 变量名,变量名:数据类型 :=初始值;,例如:VARIABLE count: INTEGER RANGE 0 TO 99 : =0 变量只用于进程和子程序,它是一个局部量。变量必须在进程或子程序的说明性区域加以说明。不能将信息带出对它做出定义的当前设计单元。,在VHDL中,数据对象是可以赋予一个值的客体。常用的数据对象为常量、变量和信号,在使用前必须给予说明。,5.3 VH
24、DL数据对象,变量赋值是直接的、非预设的,它在某一时刻仅包含一个值。变量的赋值立即生效,不存在延时行为。变量常用在实现某种运算的赋值语句中。,变量赋值语句格式为: 目标变量名 := 表达式;,赋值语句 “:=” 右边的表达式必须与目标变量具有相同的数据类型,这个表达式可以是一个运算表达式也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合。,位置:进程 子程序,例 VARIABLE x, y: REAL; VARIABLE a, b: BIT_VECTOR( 0 TO 7 ) ; x := 100.0 ; -实数赋值, X是实数变量 y := 1.5+x ; -运算表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息与通信 信息与通信第5章 VHDL设计进阶 信息 通信 VHDL 设计 进阶
链接地址:https://www.31doc.com/p-2001082.html