资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
六、六、VHDLVHDL语言的并行语句语言的并行语句1、并行信号赋值语句、并行信号赋值语句4、进程语句、进程语句3、块语句、块语句2、条件信号赋值语句、条件信号赋值语句5、元件例化语句、元件例化语句6、生成语句、生成语句7、并行过程调用语句、并行过程调用语句结构体结构体结构体中的并行语句模块结构体中的并行语句模块1、并行信号赋值语句、并行信号赋值语句赋值目标赋值目标 = 表达式表达式例例 ARCHITECTURE curt OF bc1 ISSIGNAL s1, e, f, g, h : STD_LOGIC ;BEGIN output1 = a AND b ; output2 = c + d ; g = e OR f ; h = e XOR f ; s1 = g ;END ARCHITECTURE curt;2、条件信号赋值语句、条件信号赋值语句赋值目标赋值目标 = 表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE . 表达式表达式 ;例例 ENTITY mux IS PORT ( a,b,c : IN BIT ; p1,p2 : IN BIT ; z : OUT BIT ); END; ARCHITECTURE behv OF mux IS BEGIN z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; END;选择信号赋值语句选择信号赋值语句WITH 选择表达式选择表达式 SELECT 赋值目标信号赋值目标信号 =表达式表达式 WHEN 选择值,选择值, 表达式表达式 WHEN 选择值,选择值, ., 表达式表达式 WHEN 选择值;选择值;例例 .WITH selt SELECTmuxout = a WHEN 0|1 , - 0或或1 b WHEN 2 TO 5 , - 2或或3,或,或4或或5 c WHEN 6 , d WHEN 7 , Z WHEN OTHERS ; .3、块语句、块语句块标号块标号 : BLOCK (块保护表达式)块保护表达式) 接口说明;接口说明; 类属说明;类属说明; BEGIN 并行语句;并行语句; END BLOCK 块标号块标号 ; 与大部分的与大部分的VHDL语句不同,语句不同,BLOCK语句的应语句的应用,包括其中的类属说明和端口定义,都不会影响用,包括其中的类属说明和端口定义,都不会影响对原结构体的逻辑功能的仿真结果。对原结构体的逻辑功能的仿真结果。例例 . b1 : BLOCK SIGNAL s1: BIT ; BEGIN S1 = a AND b ; b2 : BLOCK SIGNAL s2: BIT ; BEGIN s2 = c AND d ; b3 : BLOCK BEGIN Z = s2 ; END BLOCK b3 ; END BLOCK b2 ; y = s1 ; END BLOCK b1 ;.4、进程语句、进程语句 进程标号进程标号: PROCESS ( 敏感信号参数表敏感信号参数表 ) IS 进程说明部分进程说明部分 BEGIN 顺序描述语句顺序描述语句; END PROCESS 进程标号进程标号;PROCESS语句结构的一般表达格式如下语句结构的一般表达格式如下 在一个结构体中多个在一个结构体中多个PROCESS语句可以同时并发运语句可以同时并发运行,而进程内部语句之间是顺序关系。行,而进程内部语句之间是顺序关系。 PROCESS语句在语句在VHDL程序中,是描述硬件并行工作程序中,是描述硬件并行工作行为的最常用、最基本的语句。行为的最常用、最基本的语句。 PROCESS 组成组成PROCESS语句结构语句结构进程说明进程说明顺序描述语句顺序描述语句敏感信号参数表敏感信号参数表信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句(1) 进程说明部分主要定义一些局部量,可包括数据进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。明部分中不允许定义信号和共享变量。(2) 顺序描述语句部分可分为赋值语句、进程启动语顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句句、子程序调用语句、顺序描述语句和进程跳出语句等。等。(3)为启动进程,在进程中必须包含有一个显式的为启动进程,在进程中必须包含有一个显式的敏敏感信号量表感信号量表或者包含一个或者包含一个WAITWAIT语句语句;敏感信号表应当;敏感信号表应当紧跟在紧跟在PROCESSPROCESS之后,含有敏感信号表的进程语句中之后,含有敏感信号表的进程语句中不允许再显式出现不允许再显式出现WAITWAIT语句。语句。说明说明1. 1. PROCESSPROCESS为一无限循环语句为一无限循环语句2. 2. PROCESSPROCESS语句具有顺序语句具有顺序/ /并行运行双重性并行运行双重性3. 3. 进程必须由敏感信号的变化来启动进程必须由敏感信号的变化来启动4. 4. 信号是多个进程间的通信线信号是多个进程间的通信线PROCESS语句特点语句特点5. 5. 一个进程中只允许描述对应于一个时钟信号的同步时序一个进程中只允许描述对应于一个时钟信号的同步时序逻辑逻辑 例例:ENTITY mul ISPORT (a, b, c, selx, sely : IN BIT; data_out : OUT BIT );END mul;ARCHITECTURE ex OF mul IS SIGNAL temp : BIT;BEGINp_a : PROCESS (a, b, selx) BEGIN IF (selx = 0) THEN temp = a; ELSE temp = b; END IF; END PROCESS p_a;p_b: PROCESS(temp, c, sely) BEGIN IF (sely = 0) THEN data_out = temp; ELSE data_out = c; END IF; END PROCESS p_b;END ex;上例的综合结果上例的综合结果例例: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLR: IN STD_LOGIC; IN1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); OUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY CNT10;ARCHITECTURE ART OF CNT10 IS BEGIN PROCESS (IN1,CLR) IS BEGIN IF (CLR= 1 OR IN1= 1001) THEN OUT1=0000; -有清零信号,或计数已达有清零信号,或计数已达9,OUT1输出输出0 ELSE -否则作加否则作加1操作操作 OUT1 连接端口名,连接端口名,.) ; 元件例化就是将预先设计好的设计实体定义为一个元元件例化就是将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。级的设计层次。COMPONENT 元件名元件名 IS GENERIC (类属表);类属表); - 元件定义语句元件定义语句 PORT (端口名表);端口名表);END COMPONENT 文件名;文件名;元件定义元件定义( (声明声明) )语句语句元件例化语句元件例化语句例例: :利用元件例化语句设计如下所示电路利用元件例化语句设计如下所示电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ND2 ISPORT(A,B:IN STD_LOGIC; C:OUT STD_LOGIC);END ENTITY ND2;ARCHITECTURE ARTND2 OF ND2 ISBEGIN CC1,C=S2,B=D1); -名字关联方式名字关联方式 U3:ND2 PORT MAP (S1,S2,C=Z1); -混合关联方式混合关联方式END ARCHITECTURE ARTORD41;例例: :6、生成语句、生成语句标号:标号: FOR 循环变量循环变量 IN 取值范围取值范围 GENERATE 说明;说明; BEGIN 并行语句;并行语句; END GENERATE 标号标号 ;表达式表达式 TO 表达式表达式 ; - 递增方式,如递增方式,如1 TO 5表达式表达式 DOWNTO 表达式表达式 ; - 递减方式,如递减方式,如5 DOWNTO 1标号:标号: IF 条件条件 GENERATE 说明;说明; BEGIN 并行语句;并行语句; END GENERATE 标号标号 ;取值范围取值范围 生成语句有一种复制作用,在设计中,只要根据某生成语句有一种复制作用,在设计中,只要根据某些条件,设定好某一元件或设计单位,就可以利用生成些条件,设定好某一元件或设计单位,就可以利用生成语句复制一组完全相同的并行元件或设计单元电路结构。语句复制一组完全相同的并行元件或设计单元电路结构。:生成语句的两种形式生成语句的两种形式例例: :利用生成语句产生的八个相同的电路模块利用生成语句产生的八个相同的电路模块 主要的主要的VHDL程序如下:程序如下:COMPONENT COMP IS PORT (X:IN STD_LOGIC;Y: OUT STD_LOGIC);END COMPONENT COMP;SIGNAL A,B:STD_LOGIC_VECTOR (0 TO 7);GEN: FOR I IN ARANGE GENERATE U1:COMP PORT MAP (X= A(I), Y=B(I);END GENERATE GEN;7、并行过程调用语句、并行过程调用语句PROCEDURE 过程名(参数过程名(参数1;参数;参数2;);) IS 声明语句;声明语句;BEGIN 顺序处理语句;顺序处理语句;END 过程名;过程名; 并行过程调用语句可以作为一个并行语句直接出现并行过程调用语句可以作为一个并行语句直接出现在结构体或块语句中。并行过程调用语句的功能等效于在结构体或块语句中。并行过程调用语句的功能等效于包含了同一个过程调用语句的进程。并行过程调用语句包含了同一个过程调用语句的进程。并行过程调用语句的语句调用格式与前面讲的顺序过程调用语句是相同的。的语句调用格式与前面讲的顺序过程调用语句是相同的。过程调用的实质内容要先装入程序包中(过程调用的实质内容要先装入程序包中(PackagePackage): :过程名(关联参数表)过程名(关联参数表);并行过程调用:并行过程调用:位置关联方式位置关联方式名字关联方式名字关联方式 =参数关联方式参数关联方式例:例:设有一过程设有一过程PROCEDURE vect(a,b:IN BIT; x,y:INOUT BIT); 则调用时:则调用时:位置关联方式:位置关联方式:vect(in1,in2,out1,out2);名字关联方式:名字关联方式:vect(a=in1,b=in2,x=out1,y=out2);使用说明使用说明1、过程的参数表中可以使用过程的参数表中可以使用IN、OUT、INOUT三种;三种;(不能理解为端口)(不能理解为端口)2、过程可以返回多个变量(通过、过程可以返回多个变量(通过OUT、INOUT 定义的定义的参数返回);参数返回);3、参数对象可以为常量(、参数对象可以为常量(IN方式)、信号、变量;方式)、信号、变量;4、在进程外的过程调用为并行过程调用;在进程内的为、在进程外的过程调用为并行过程调用;在进程内的为顺序过程调用;顺序过程调用;函数调用:函数调用:FUNCTION 函数名(参数函数名(参数1;参数;参数2) RETURN 数据类型名数据类型名 IS 定义变量语句;定义变量语句;BEGIN 顺序处理语句;顺序处理语句;RETURN 返回变量名返回变量名;END 函数名;函数名;函数调用的实质内容要先装入程序包中(函数调用的实质内容要先装入程序包中(PackagePackage): :函数名(关联参数表)函数名(关联参数表);使用说明使用说明1、函数的参数表中只能为函数的参数表中只能为IN的信号与常量;的信号与常量;2、函数返回值只有一个(通过、函数返回值只有一个(通过RETURN实现,由函数名实现,由函数名传给调用者);传给调用者);3、也可以像过程一样使用位置关联方式和名字关联方式;、也可以像过程一样使用位置关联方式和名字关联方式; 1 1、过程可以有多个返回值,函数只有一个过程可以有多个返回值,函数只有一个; ;2 2、参数传递方式不同、参数传递方式不同: : 过程(过程(IN OUT INOUTIN OUT INOUT) 函数(函数(ININ) 过程(过程(Procedure) 函数(函数(FunctionFunction)两者的主要区别:两者的主要区别:1 库的种类库的种类A. IEEEA. IEEE库库B. STDB. STD库库C. WORKC. WORK库库D. VITALD. VITAL库库七、七、VHDLVHDL库库2 库的用法库的用法 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.STD_ULOGIC ; USE IEEE.STD_LOGIC_1164.RISING_EDGE ; USE语句的使用有两种常用格式: USE 库名库名.程序包名程序包名.项目名项目名 ; USE 库名库名.程序包名程序包名.ALL ; 库库的的作作用用范范围围从从一一个个实实体体说说明明开开始始到到它它所所属属的的结结构构体体、配配置置为为止止,当当有有两两个个实实体体时时,第第二二个个实体前要另加库和包的说明。实体前要另加库和包的说明。程序包程序包程序包程序包常数说明常数说明VHDL数据类型说明数据类型说明元件定义元件定义子程序子程序定义程序包的一般语句结构如下: PACKAGE PACKAGE 程序包名程序包名 IS - IS - 程序包首程序包首 程序包首说明部分;程序包首说明部分; END END 程序包名程序包名; ; PACKAGE BODY PACKAGE BODY 程序包名程序包名 IS - IS - 程序包体程序包体 程序包体说明部分以及包体内程序包体说明部分以及包体内顺序顺序语句;语句; END END 程序包名程序包名; ;3 VHDL程序包程序包例例: : 程序包首程序包首PACKAGE logic IS TYPE three_level_logic IS (0,1,z); -数据类型项目数据类型项目 CONSTANT unknown_value : three_level_logic :=0; - 常数项目常数项目 FUNCTION invert (input: three_level_logic) RETURN three_level_logic; -函数项目函数项目 END logic;PACKAGE BODY logic IS FUNCTION invert (input: three_level_logic); -函数项目描述函数项目描述 BEGIN CASE input IS WHEN 0 = RETURN 1; WHEN 1 = RETURN 0; WHEN Z = RETURN Z; END CASE; END invert;END logic;程序包程序包体体 USE logic.three_level_logic, logic.invert; -使用数据类型和使用数据类型和 函数两个项目函数两个项目ENTITY inverter IS PORT(x: IN three_level_logic ; y: OUT three_level_logic);END inverter;ARCHITECTURE inverter_body OF inverter ISBEGIN kk: PROCESS BEGIN Y=invert(x) AFTER 10ns; WAIT ON x; END PROCESS; END inverter_body;该包使用例该包使用例: PACKAGE seven IS SUBTYPE segments is BIT_VECTOR(0 TO 6) ; TYPE bcd IS RANGE 0 TO 9 ; END seven ; USE WORK.seven.ALL ; - WORK库默认是打开的,库默认是打开的, ENTITY decoder IS PORT (input: bcd; drive : out segments) ; END decoder ; ARCHITECTURE simple OF decoder IS BEGIN WITH input SELECT drive = B1111110 WHEN 0 , B0110000 WHEN 1 , B1101101 WHEN 2 , B1111001 WHEN 3 , B0110011 WHEN 4 , B1011011 WHEN 5 , B1011111 WHEN 6 , B1110000 WHEN 7 , B1111111 WHEN 8 , B1111011 WHEN 9 , B0000000 WHEN OTHERS ; END simple ; 例例: :常用的预定义的程序包常用的预定义的程序包STD_LOGIC_1164程序包程序包STD_LOGIC_ARITH程序包程序包STD_LOGIC_UNSIGNED和和STD_LOGIC_SIGNED程序包程序包STANDARD和和TEXTIO程序包程序包std_logic_1164.all;std_logic_1164.all;定义标准逻辑类型数据定义标准逻辑类型数据std_logic_signed.all;std_logic_signed.all;有符号的算术运算有符号的算术运算std_logic_unsigned.all;std_logic_unsigned.all;无符号的算术运算无符号的算术运算std_logic_arith.all;std_logic_arith.all;定义了有符号与无符号类型,及基于这些类型上的定义了有符号与无符号类型,及基于这些类型上的算术运算算术运算
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号