VHDL硬件描述语言简介_第1页
VHDL硬件描述语言简介_第2页
VHDL硬件描述语言简介_第3页
VHDL硬件描述语言简介_第4页
VHDL硬件描述语言简介_第5页
已阅读5页,还剩170页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章第五章硬件描述语言硬件描述语言VHDL简介简介Intro. to VHDLlVHDLVery High Speed Integrated Circuit (VHSIC) Hardware Description LanguageDeveloped by TI, IBM, Intermetrics in 1983IEEE Std 1076-1987 and 1993lVHDL is a Hardware Description Language, VHDL is a Hardware Description Language, not a programming language. not

2、 a programming language.VHDL的优点的优点n用于设计复杂的、多层次的设计。支持设计用于设计复杂的、多层次的设计。支持设计库和设计的重复使用库和设计的重复使用n与硬件独立,一个设计可用于不同的硬件结与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。构,而且设计时不必了解过多的硬件细节。n有丰富的软件支持有丰富的软件支持VHDL的综合和仿真,从而的综合和仿真,从而能在设计阶段就能发现设计中的能在设计阶段就能发现设计中的Bug,缩短设缩短设计时间,降低成本。计时间,降低成本。n更方便地更方便地向向ASIC过渡过渡nVHDL有良好的可读性,容易理解。

3、有良好的可读性,容易理解。VHDL与计算机语言的区别与计算机语言的区别n运行的基础运行的基础n计算机语言是在计算机语言是在CPURAM构建的平台上运构建的平台上运行行nVHDL设计的结果是由具体的逻辑、触发器组设计的结果是由具体的逻辑、触发器组成的数字电路成的数字电路n执行方式执行方式n计算机语言基本上以串行的方式执行计算机语言基本上以串行的方式执行nVHDL在总体上是以并行方式工作在总体上是以并行方式工作n验证方式验证方式n计算机语言主要关注于变量值的变化计算机语言主要关注于变量值的变化nVHDL要实现严格的时序逻辑关系要实现严格的时序逻辑关系(一)(一)VHDL语言程序的基本结语言程序的基

4、本结构构Exampleentity and_2 is port (a, b: in std_logic; Y : out std_logic); end and_2;The Entity describesthe inputs and outputsarchitecture dataflow of and_2 isbegin Y=a and b;end dataflow;The Architecture describes the boxentity nameVHDL 大小写不敏感大小写不敏感Library IEEE;use IEEE.std_logic_1164.all;LibraryPac

5、kageAND_2abYVHDL 库库 (LIBRARY)n n n 设设计计库库IEEE库库预定义库预定义库( (隐含打开隐含打开) )STD库库STANDARD(隐含说明隐含说明)TEXTIO(用用USE说明说明)WORK库库资资 源源 库库(用用LIBRARY)其它库其它库STD_LOGIC_1164STD_LOGIC_ARITHSTD_LOGIC_UNSIGNEDNUMERIC_STDNUMERIC_BITMATH_REALMATH_COMPLEXVITAL_TIMINGVITAL_PRIMITIVE库说明语句:库说明语句:Library 库名库名;use 库名库名.程序包名程序包名.

6、项目名项目名;实体实体(Entity)n描述此设计功能输入输出端口(Port)n在层次化设计时,Port为模块之间的接口n在芯片级,则代表具体芯片的管脚A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equal:out std_logic );end eqcomp4;实体端口的模式实体端口的模式n输入(Input)n输出(Output)n双向(Inout):可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口n缓冲(Buffer):与Output类似,但允许该管脚名作为一些逻

7、辑的输入信号(2) ) 端口说明端口说明PORT ( 端口名端口名,端口名端口名 : 方向方向 数据类型数据类型;:端口名端口名,端口名端口名 : 方向方向 数据类型数据类型 );端口方向端口方向 实实体体INOUTINOUTBUFFERLINKAGEOut与Buffer的区别nEntity test1 is port(a: in std_logic; b,c: out std_logic ); end test1; architecture a of test1 is begin b = not(a); c = b;-Error end a;nEntity test2 is port(a:

8、in std_logic; b : buffer std_logic; c: out std_logic ); end test2; architecture a of test2 is begin b = not(a); c = b; end a;结构体(结构体(Architecture)n描述实体的行为描述实体的行为n结构体有三种描述方式结构体有三种描述方式n行为描述行为描述(behavioral)n数据流描述数据流描述(dataflow)n结构化描述结构化描述(structural)ENTITY描述電路的描述電路的I/O介面介面PackageARCHITECTURE描述電路的特性和運作描

9、述電路的特性和運作StructuralData FlowBehavioral不同的描述風格不同的描述風格结构体行为描述结构体行为描述Architecture behavioral of eqcomp4 is begincomp: process (a,b) beginif a=b then equal = 1; else equal =0;end if; end process comp;end behavioral ;高层次的功能描述,高层次的功能描述,不必考虑在电路中到不必考虑在电路中到底是怎样实现的。底是怎样实现的。结构体数据流描述结构体数据流描述描述输入信号经过怎样的变换得到输出信号描

10、述输入信号经过怎样的变换得到输出信号Architecture dataflow1 of eqcomp4 is begin equal = 1 when a=b else 0;end dataflow1;Architecture dataflow2 of eqcomp4 is beginequal = not(a(0) xor b(0) and not(a(1) xor b(1) and not(a(2) xor b(2) and not(a(3) xor b(3);end dataflow2;当当a和和b的宽度发生的宽度发生变化时,需要修改变化时,需要修改设计,当宽度过大设计,当宽度过大时,设

11、计非常繁琐时,设计非常繁琐结构体结构描述结构体结构描述architecture struct of eqcomp4 isbegin U0:xnor2 port map(a(0),b(0),x(0); U1:xnor2 port map(a(1),b(1),x(1); U2:xnor2 port map(a(2),b(2),x(2); U3:xnor2 port map(a(3),b(3),x(3); U4:and4 port map(x(0),x(1),x(2),x(3),equal);end struct;类似于电路的网络表,将各个器类似于电路的网络表,将各个器件通过语言的形式进行连接,与件

12、通过语言的形式进行连接,与电路有一一对应的关系。电路有一一对应的关系。一般用于大规模电路的层次化设一般用于大规模电路的层次化设计时。计时。三种描述方式的比较三种描述方式的比较描述方式描述方式优点优点缺点缺点适用场合适用场合结构化描结构化描述述连接关系清连接关系清晰,电路模晰,电路模块化清晰块化清晰电路不易理解、电路不易理解、繁琐、复杂繁琐、复杂电路层次化设电路层次化设计计数据流描数据流描述述布尔函数定布尔函数定义明白义明白不易描述复杂不易描述复杂电路,修改不电路,修改不易易小小门数设计门数设计行为描述行为描述电路特性清电路特性清楚明了楚明了进行综合效率进行综合效率相对较低相对较低大型复杂的电大

13、型复杂的电路模块设计路模块设计(二)(二)VHDL语言中的数据语言中的数据2.1VHDL标识符(标识符(Identifiers)n基本标识符由字母、数字和下划线组成基本标识符由字母、数字和下划线组成n第一个字符必须是字母第一个字符必须是字母n最后一个字符不能是下划线最后一个字符不能是下划线n不允许连续不允许连续2个下划线个下划线n保留字保留字(关键字关键字)不能用于标识符不能用于标识符n大小写是等效的大小写是等效的Decoder_1 ,FFT ,SIG_N,_Decoder_1,2FFT, NOT-ACK, TYR_ ,DATA_ _BUS , RETURN一般的,在书写程序时,应将一般的,在

14、书写程序时,应将VHDL的保留字的保留字大写或黑体大写或黑体,设计者,设计者自己定义的字符小写自己定义的字符小写,以,以使得程序使得程序便于阅读和检查便于阅读和检查。尽管。尽管VHDL仿真综仿真综合时不区分大小写,但一个优秀的硬件程序设合时不区分大小写,但一个优秀的硬件程序设计师应该养成良好的习惯。计师应该养成良好的习惯。例:例:一些合法的标识符:一些合法的标识符:S_MACHINE,present_state,sig3, Decoder_1 ,FFT ,SIG_N,不合法的标识符:不合法的标识符:present-state,3states,cons_,_now , _Decoder_1,2F

15、FT,NOT-ACK,,TYR_ ,DATA_ _BUS ,RETURNn数组型对象的某一元素数组型对象的某一元素n 标识符(表达式)标识符(表达式)n数组型对象的名字,数组下标范围中数组型对象的名字,数组下标范围中的一个值。的一个值。nB(3), A(M)VHDL下标名下标名n标识符(表达式标识符(表达式 方向方向 表达式)表达式)nA (0 TO 3) ,B( 4 TO 7),),nG(3 DOWNTO 0)VHDL段名段名2.2 VHDL数据对象(数据对象(Data Objects) 类似于一种容器,接受不同数据类似于一种容器,接受不同数据类型的赋值类型的赋值 -常数常数 信号信号 变量

16、变量数据对象数据对象常数(常数(Constant)n 固定值,不能在程序中被改变固定值,不能在程序中被改变n增强程序的可读性,便于修改程序增强程序的可读性,便于修改程序n在综合后,连接到电源和地在综合后,连接到电源和地n可在可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定中进行定义,其有效范围也相应限定n常数说明:常数说明:Constant 常数名:常数名: 数据类型数据类型:=表表达式达式 Constant data_bus_width: integer := 8;Constant ROM_Size: Integer := 16#FF

17、FF#;数据对象数据对象变量(变量(Variable)n临时数据,没有物理意义临时数据,没有物理意义n只能在只能在Process和和Function中中定义,定义,并只在其内部有效并只在其内部有效n要使其全局有效,先转换为要使其全局有效,先转换为Signal。n用用 进行赋值进行赋值n变量说明:变量说明: 变量名:变量名: 数据类型数据类型n 变量赋值变量赋值数据对象数据对象信号(信号(Signals)n 代表连线,代表连线,Port也是一种信号也是一种信号n在在Entity中和中和Architecture中定义中定义n用用 = 进行赋值进行赋值n信号说明:信号说明: signal 信号名:信

18、号名: 数据类型数据类型; signal count:bit_vector(3 downto 0):=“0011”; nsignal Enable: Bit;nsignal CLK, CLEAR: Bit:=1;数据对象信号数据对象信号信号举例信号举例nLIBRARY ieee;nUSE ieee.std_logic_1164.all;nENTITY simp ISnPORT (a, b, c, d : IN Std_Logic;ng : OUT Std_Logic);nEND simp;nARCHITECTURE logic OF simp ISnSIGNAL e,f : Std_Logic

19、;nBEGINne = a or b;nf=not(c or d);ng =e and f;nEND logic;信号赋值信号赋值信号和变量的作用范围信号和变量的作用范围信号和变量的区别信号和变量的区别信号与变量的区别信号与变量的区别architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if (clkevent and clk=1) then count = count + 1; if(count=0) then carryout = 1; else carryout

20、 = 0; end if; end if; end process; end rtl;architecture rtl of start is begin process(clk)variable count : integer range 0 to 7;begin if (clkevent and clk=1) then count := count + 1; if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;2.3 VHDL数据类型数据类型1. 标准数据类型标准数据类

21、型(编程者可直接使用编程者可直接使用) 预定义类型在预定义类型在VHDL标准程序包标准程序包STANDARD中定义,在应用中自动包含进中定义,在应用中自动包含进VHDL的源文件,的源文件,不需要不需要USE语句显示调用语句显示调用。数据类型如下:数据类型如下: 1.整数(整数(INTEGER)在在VHDL语言中,整数的表示范围为语言中,整数的表示范围为21474836472147483647,即从,即从(2311)到到(2311)。2.实数(实数(REAL)实数的定义值范围为实数的定义值范围为1.0E+381.0E+38。实数有正负数,书写时一定要有小数点。例实数有正负数,书写时一定要有小数点

22、。例如:如:1.0,+2.5,1.0E+383.位位(BIT)用来表示数字系统中的信号值。位值用字符用来表示数字系统中的信号值。位值用字符0或或者者1(将值放在引号中)表示。与整数中的(将值放在引号中)表示。与整数中的1和和0不同,不同,1和和0仅仅表示一个位的两种取值。仅仅表示一个位的两种取值。4.位矢量位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组数据。例如:位矢量是用双引号括起来的一组数据。例如:“001100”,X“00bb”。在这里位矢量前面的。在这里位矢量前面的X表示表示是十六进制是十六进制。使用位矢量时必须注明位宽,使用位矢量时必须注明位宽,即数组即数组中元素个数和排

23、列,例如:中元素个数和排列,例如:SIGNAL s1:BIT_VECTOR(15 DOWNTO 0);); 5.布尔量布尔量(BOOLEAN)一个布尔量具有两种状态一个布尔量具有两种状态,“真真”或者或者“假假”。没有没有数值的含义,也数值的含义,也不能进行算术运算不能进行算术运算。它。它能进行关系运能进行关系运算算。例如,它可以在。例如,它可以在if语句中被测试,测试结果产生语句中被测试,测试结果产生一个布尔量一个布尔量TRUE或者或者FALSE。 6.字符字符(CHARACTER)用用单引号单引号括起来,括起来,如如a。区分大小写。字符包括从。区分大小写。字符包括从a到到z中的任一个字母,

24、从中的任一个字母,从0到到9中的任一个数以及空格中的任一个数以及空格或者特殊字符,如或者特殊字符,如$,%等等。包集合等等。包集合standard中给出了预定义的中给出了预定义的128个个ASC码字符。码字符。7.字符串字符串(STRING)由双引号括起来的一个字符序列,也称字符矢量或字由双引号括起来的一个字符序列,也称字符矢量或字符串组。字符串常用于程序的提示和说明。字符串举符串组。字符串常用于程序的提示和说明。字符串举例如下:例如下:VATIABLE string_1 : STRING (0TO 3);string_1:= “a b c d”;8.时间时间(TIME)是一个物理量数据。包含

25、整数和单位两部分,而且整是一个物理量数据。包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。例如数和单位之间至少应留一个空格的位置。例如55 sec,2 min等。在包集合等。在包集合STANDARD中给出了时间的预定中给出了时间的预定义,其单位为义,其单位为fs,ps,ns,s,ms,sec,min和和hr。例。例如:如:20 s,100 ns,3 sec。在系统仿真时,时间数据特别有用,用它可以表示信在系统仿真时,时间数据特别有用,用它可以表示信号延时,从而使模型系统能更逼近实际系统的运行环号延时,从而使模型系统能更逼近实际系统的运行环境。境。9.错误等级错误等级(SEVER

26、ITY LEVEL)用来表征系统的状态,共有用来表征系统的状态,共有4种:种:note(注意),(注意),warning(警告),(警告),error(出错),(出错),failure(失败)。(失败)。在系统仿真过程中可以用这在系统仿真过程中可以用这4种状态来提示系统当前种状态来提示系统当前的工作情况,从而使设计人员随时了解当前系统工的工作情况,从而使设计人员随时了解当前系统工作的情况,并根据系统的不同状态采取相应的对策。作的情况,并根据系统的不同状态采取相应的对策。1 0 . 大 于 等 于 零 的 整 数 ( 自 然 数 )大 于 等 于 零 的 整 数 ( 自 然 数 )(NATURA

27、L),),正整数正整数(POSITIVE)这两种数据是整数的子类,这两种数据是整数的子类,NATURAL类数据为取类数据为取0和和0以上的正整数;而以上的正整数;而POSITIVE 则只能为正整数。则只能为正整数。2. 用户自定义数据类型用户自定义数据类型 格式:格式:type 数据类型名数据类型名 is 数据类型定义;数据类型定义;可以由用户定义的数据类型有:可以由用户定义的数据类型有:枚举枚举(ENUMERATED)类型;)类型;整数整数(INTEGER)类型;)类型;实数实数(REAL)、)、浮点数浮点数(FLOATING)类型;)类型;数组数组(ARRAY)类型;)类型;。“IEEE.

28、STD_LOGIC”九态数值模型如下:九态数值模型如下:U初始值;初始值; X 不定态;不定态; 1 逻辑逻辑1; 0 逻辑逻辑0; Z 高阻态;高阻态; W 弱信号不定;弱信号不定; L 弱信号弱信号0 H 弱信号弱信号1; 不可能情况不可能情况 。 3. IEEE 标准数据类型标准数据类型 “std-logic”和和“std-logic-vector”(三)(三)VHDL语言中的表达式语言中的表达式VHDL运算符运算符n逻辑运算符逻辑运算符AND、OR、NAND、NOR、XOR、NOTn关系运算符关系运算符=、/=、=n算术运算符算术运算符+、-、*、/n并置并置(连接连接)运算符运算符&

29、amp;1.逻辑运算符逻辑运算符在在VHDL语言中,共有语言中,共有6种逻辑运算符,他们分别是:种逻辑运算符,他们分别是: NOT 取反;取反; AND 与;与; OR 或;或; NAND 与非;与非; NOR 或非;或非; XOR 异或。异或。 这这6种逻辑运算符可以对种逻辑运算符可以对“STD_LOGIC ”和和“BIT”等逻等逻辑型数据、辑型数据、“STD_LOGIC _VECTOR”逻辑型数组及逻辑型数组及布布尔数据尔数据进行逻辑运算。进行逻辑运算。必须注意,运算符的左边和右边,必须注意,运算符的左边和右边,以及代入的信号的数据类型必须是相同的以及代入的信号的数据类型必须是相同的。 2

30、.算术运算符算术运算符VHDL语言中有语言中有5类算术运算符,他们分别是:类算术运算符,他们分别是:求和操作符:求和操作符: (加)、(减)(加)、(减)求积操作符求积操作符:*(乘)、(乘)、/(除)、(除)、MOD(求模)、(求模)、REM(取余)(取余)符号操作符:符号操作符: (正)、(负)(正)、(负)混合操作符:混合操作符: *(指数)、(指数)、ABS(取绝对值)(取绝对值)移位操作符:移位操作符:SLL(逻辑左移)、(逻辑左移)、SRL(逻辑右移)、(逻辑右移)、SLA(算术左移)、(算术左移)、SRA(算术右移)、(算术右移)、ROL(逻辑(逻辑循环左移)、循环左移)、ROR

31、逻辑循环右移)逻辑循环右移) 3.关系运算符关系运算符VHDL语言中有语言中有6种关系运算符,他们分别是:种关系运算符,他们分别是: = 等于;等于; /= 不等于;不等于; 小于;小于; 大于;大于; = 大于等于;大于等于;4.并置运算符并置运算符& 连接连接 SIGNAL g,h,i:STD_LOGIC;SIGNAL c,d,e:STD_LOGIC _VECTOR(1 TO 0);); d = i & NOT h;- -元素与元素并置,形成长度为元素与元素并置,形成长度为2的数组的数组 a = c & d; - -数组与数组并置,形成长度为数组与数组并置,形成长度

32、为4的数组的数组 5.VHDL操作符的优先顺序操作符的优先顺序 运算符运算符 优先级优先级NOT,ABS,* 最高优先级最高优先级 *,/,MOD,REM +(正号),(负号)(正号),(负号)+,& SLL,SLA,SRL,SRA,ROL,ROR =,/=,= AND,OR,NAND,NOR,XOR,XNOR 最低优先级最低优先级 (四)顺序描述语句(四)顺序描述语句1. 信号赋值语句和变量赋值语句信号赋值语句和变量赋值语句目标信号目标信号=表达式表达式目标变量:表达式目标变量:表达式2. If 语句语句语句格式:语句格式:if 条件条件 1 then 第第1组顺序语句;组顺序语句;

33、elseif 条件条件 2 then 第第2组顺序语句;组顺序语句; elseif 条件条件 n then 第第n组顺序语句;组顺序语句; else 第第n+1组顺序语句;组顺序语句;end if;IF语句的应用语句的应用n 八八-三优先级编码器真值表三优先级编码器真值表 输输 入入 输出输出 d7 d6 d5 d4 d3 d2 d1 d0 q2 q1 q0 0 x x x x x x x 1 1 1 1 0 x x x x x x 1 1 0 1 1 0 x x x x x 1 0 1 1 1 1 0 x x x x 1 0 0 1 1 1 1 0 x x x 0 1 1 1 1 1 1 1

34、 0 x x 0 1 0 1 1 1 1 1 1 0 x 0 0 1 1 1 1 1 1 1 1 0 0 0 0n nLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY priority_encoder IS PORT ( d : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; q : OUT STD_LOGIC_VECTOR ( 2 DOWNTO 0 ) ) ; END priority_encoder ; ARCHITECTURE example_if OF priority_encoder IS BEGIN PRO

35、CESS ( d ) BEGIN IF ( d (7)=0 ) THEN q= ”111”; ELSIF ( d (6) = 0 ) THEN q= ”110”; ELSIF ( d (5) = 0 ) THEN q= ”101”; ELSIF ( d (4) = 0 ) THEN q= ”100”; ELSIF ( d (3) = 0 ) THEN q= “011”; ELSIF ( d (2) = 0 ) THEN q= “010”; ELSIF ( d (1) =0 ) THEN q= “001”; ELSE q顺序处理语句;顺序处理语句;n : WHEN 条件表达式的值条件表达式的值=

36、顺序处理语句;顺序处理语句; END CASE;nWHEN 中的条件有下述四种方式:中的条件有下述四种方式: WHEN 值值=顺序处理语句;顺序处理语句; WHEN 值值值值值值=顺序处理语句;顺序处理语句;-若干若干可列的值。可列的值。 WHEN 值值TO 值值=顺序处理语句;某个区间的值。顺序处理语句;某个区间的值。 WHEN OTHERS=顺序处理语句;顺序处理语句; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT ( a,b,d0,d1,d2,d3 : IN STD_LOGIC ; q : OUT STD_L

37、OGIC ) ; END mux4;例:用例:用CASE语句设计四选一电路语句设计四选一电路 ARCHITECTURE example_case OF mux4 IS SIGNAL sel : INTEGER RANGE 0 TO 3 ; BEGIN PROCESS ( a,b,d0,d1,d2,d3 ) BEGIN sel=0; IF ( a=1 ) THEN sel=sel+1 ; END IF ; IF ( b=1 ) THEN sel q q q q=d3; END CASE; END PROCESS; END example_case;CASE语句设计的四选一电路实现语句设计的四选一

38、电路实现n上述程序所描述的是一个平衡结构的四选一电路上述程序所描述的是一个平衡结构的四选一电路.FGHOBUFabd0d1d2d3q用用IF语句设计四选一电路语句设计四选一电路 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (a, b, d0, d1-, d2, d3: IN STD_LOGIC; q: OUT STD_LOGIC); END mux4; ARCHITECTURE example_if OF mux4 IS BEGIN PROCESS (a, b, d0,d1,d2,d3) BEGIN IF (a

39、= 0 AND b = 0) THEN q = d0; ELSIF (a = 1 AND b = 0) THE q = d1; ELSIF (a = 0 AND b = 1) THEN q = d2; ELSIF (a = 1 AND b = 1) THEN q = d3; END IF; END PROCESS; END example_if; 用用IF语句设计四选一电路是权电路语句设计四选一电路是权电路GFd0abd1d2d3yF(四)并行描述语句(四)并行描述语句n1进程内部所有的语句都是顺序执行的,进程内部所有的语句都是顺序执行的,n 2. 进程和进程之间是并行执行的,进程和进程之间是

40、并行执行的,n 3进程的启动由进程的启动由PROCESS语句的敏感信号量语句的敏感信号量表中的信号量触发,也可以由表中的信号量触发,也可以由WAIT语句触发。语句触发。 1. 进程语句进程语句 (进程名:进程名:)process(敏感信号表)敏感信号表) 变量说明语句;变量说明语句;begin 一组顺序语句;一组顺序语句;end process (进程名进程名);当进程钟没有敏感信号表时,进程语句中必须当进程钟没有敏感信号表时,进程语句中必须有其他形式的敏感信号激励;而当进程中有敏有其他形式的敏感信号激励;而当进程中有敏感信号表时,进程语句中不允许再出现感信号表时,进程语句中不允许再出现wai

41、t、wait for、wait until和和wait on 中的任何一种敏感中的任何一种敏感信号激励语句,否则出错。信号激励语句,否则出错。用进程设计用进程设计D触发器触发器n LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff4 IS PORT (clk, d, clr, pset:IN STD_LOGIC; q:OUT STD_LOGIC ); END dff4; ARCHITECTURE rtl OF dff4 IS BEGIN clrpsetD QclknPROCESS (clk, pset, clr) BEGIN IF (clr

42、 = 0 ) THEN q = 0; ELSIF (pset = 0) THEN q = 1; ELSIF (clk EVENT AND clk = 1) THEN q = d; END IF; END PROCESS; END rtl; n利用进程语句设计一位加法器利用进程语句设计一位加法器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS PORT(a, b: IN STD_LOGIC; sum, carry: OUT STD_LOGIC); END half_adder; nARCHITECTURE behav

43、 OF half-adder IS BEGIN PROCESS (a, b) BEGIN sum= a XOR b AFTER 5nS; carry= a AND b AFTER 5nS; END PROCESS; END behav; 进程语句的启动进程语句的启动进程语句有两种工作状态:进程语句有两种工作状态:等待状态等待状态和和执行执行状态状态。当敏感信号表中的信号没有变化时,。当敏感信号表中的信号没有变化时,进程处于等待状态;当敏感信号表中的信号进程处于等待状态;当敏感信号表中的信号有变化时,进程处于执行状态,将顺序执行有变化时,进程处于执行状态,将顺序执行进程中的语句。当最后一个语句执

44、行完后,进程中的语句。当最后一个语句执行完后,就返回进程语句的开始,等待下一次敏感信就返回进程语句的开始,等待下一次敏感信号表中的信号变化。号表中的信号变化。进程启动的进程启动的WAIT语句语句n(1) 无限等待无限等待 WAIT;n(2) 敏感信号量变化等待敏感信号量变化等待 WAIT ON 信号名信号名,信号名,信号名; n(3) 条件等待条件等待 WAIT UNTIL 表达式;表达式;n(4) 时间等待时间等待 WAIT FOR 时间表达式;时间表达式; 例如例如 :WAIT FOR 20nS;-同步点在延时同步点在延时20nS后,后, WAIT ON clk, interrupt FO

45、R 5nS;-当信号当信号clk或或 interrupt变化变化5nS后启动后启动 进程。进程。 2. 并发信号赋值语句并发信号赋值语句 信号赋值语句在进程内部出现时,是顺序描述语句,信号赋值语句在进程内部出现时,是顺序描述语句,在进程之外出现时,以并发语句的形式出现。是并在进程之外出现时,以并发语句的形式出现。是并行执行的,执行顺序与书写顺序无关。行执行的,执行顺序与书写顺序无关。LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY gate IS PORT(a,b : IN STD_LOGIC); x,y,z :OUT STD_LOGIC);END

46、gate;ARCHITECTURE behave OF gate ISBEGIN x=a AND b; y=a OR b; z=a XOR b;END behave;ABXYZGATE例:产生右图电路符号的例:产生右图电路符号的VHDL程序程序3. 条件信号赋值语句条件信号赋值语句 目标信号目标信号=表达式表达式1 when 条件条件1 else 表达式表达式2 when 条件条件2 else 表达式表达式3 when 条件条件3 else 表达式表达式 n-1 when 条件条件n-1 else 表达式表达式n; ABXAND_GATELIBRARY IEEEUSE IEEE.STD_LOG

47、IC_1164.ALL;ENTITY and_gate IS PORT(a,b : IN STD_LOGIC); x:OUT STD_LOGIC);END and_gate;ARCHITECTURE rtl OF and_gate ISBEGIN x=0 when a=0 and b=0 else x=0 when a=0 and b=1 else x=0 when a=1 and b=0 else 1;END rtl;4. 选择信号赋值语句选择信号赋值语句 with 表达式表达式 select 目标信号目标信号=表达式表达式1 when 条件条件1, 表达式表达式2 when 条件条件2,

48、表达式表达式3 when 条件条件3, 表达式表达式 n when 条件条件n, QMMUX40D1D2D3DSEL1.0LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mmux4 IS PORT(d0,d1,d2,d3: IN STD_LOGIC; sel:in std_logic_vector(1 downto 0); q:OUT STD_LOGIC);END mmux4;ARCHITECTURE rtl OF mmux4 ISBEGIN with sel select qa(0), c= x(0), b=b(0) ); 在端口元在端口元素中定

49、义素中定义输入输入在端口元在端口元素中定义素中定义输出输出IC 器件器件AIC 器件器件BIC 器件器件C连接导线连接导线连接导线连接导线用固定逻辑的用固定逻辑的IC硬件实现硬件实现VHDL组件组件VHDL组件组件VHDL组件组件信号信号信号信号用用VHDL结构实现结构实现任何一个任何一个VHDL程序都可以改变成一个组件,程序都可以改变成一个组件,并可随时应用到更大的程序中。使用的关键字并可随时应用到更大的程序中。使用的关键字是是COMPONENT和和SIGNALCOMPONENT描述预先定义的逻辑,并将其描述预先定义的逻辑,并将其存储在库中的软件包中;而存储在库中的软件包中;而SIGNAL是

50、逻辑电是逻辑电路内部的连接,和输入输出有区别。路内部的连接,和输入输出有区别。输入、输出使用端口语句在输入、输出使用端口语句在实体实体中定义,而信中定义,而信号在号在结构体结构体(ARCHITECTURE)内部用信号)内部用信号语句定义。语句定义。1G2G3GIN1IN2IN3IN4OUT1OUT2OUT31G2G3GIN1IN2IN3IN4OUT1OUT2OUT3ABXABXABXVHDL组件示例组件示例2输入与门输入与门XAB的的VHDL程序程序ENTITY and_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY and_gate;ARCHITE

51、CTURE andfunction OF and_gate ISBEGIN X=A AND B; END ARCHITECTURE andfunction;ENTITY OR_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY OR_gate;ARCHITECTURE ORfunction OF OR_gate ISBEGIN XIN1,B=IN2,X=OUT1);G2:AND_gate PORT MAP (A=IN3,B=IN4,X=OUT2);G3:OR_gate PORT MAP (A=OUT1,B=OUT2,X=OUT3);SIGNAL OUT1

52、,OUT2:BIT;END ARCHITECTURE Logicoperation; (五)时钟信号的(五)时钟信号的VHDL描述方描述方法法1. 时钟边沿的描述时钟边沿的描述 0CLK1CLK(1)上升沿)上升沿CLKCLKeventCLKevent AND CLK=1VHDL属性描述:属性描述:0CLK1CLK(2)下降沿)下降沿CLKCLKeventclkEVENT AND CLK=0VHDL属性描述:属性描述:2. 时序电路中进程敏感信号时序电路中进程敏感信号 例:例:D触发器功能描述触发器功能描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENT

53、ITY dff1 IS PORT(clk,d:IN STD_LOGIC; q:OUT_LOGIC);END dff1;ARCHITECTURE rtl OF dff1 ISBEGINPROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN q=d; END IF; END PROCESS;END rtl;3. 同步复位、置位信号同步复位、置位信号 PROCESS(时钟信号名)(时钟信号名) BEGIN IF 时钟边沿表达式时钟边沿表达式 AND 复位复位/置位表达式置位表达式 THEN 复位置位语句;复位置位语句; ELSE 其他执行语句;其他执行语句; EN

54、D IF;END PROCESS;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 IS PORT(clk,d,clr:IN STD_LOGIC; q:OUT STD_LOGIC);END dff1;ARCHITECTURE rtl OF dff1 ISBEGINPROCESS(clk) BEGIN IF (clkEVENT AND clk=1)THEN IF(clr=1)THEN q=0; ELSE q=d; END IF; END IF; END PROCESS;END rtl;4. 异步复位、置位信号异步复位、置位信号 LIBRAR

55、Y IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff2 IS PORT(clk,d,clr:IN STD_LOGIC; q:OUT STD_LOGIC);END dff2;ARCHITECTURE rtl OF dff2 ISBEGINPROCESS(clk,clr) BEGIN IF(clr=1)THEN q=0; ELSEIF (clkEVENT AND clk=1)THEN q=d; END IF; END IF; END PROCESS;END rtl;(七)子程序(七)子程序子程序:在主程序调用它以后能够将处理结果返回主子程序:在主程序调用它以后

56、能够将处理结果返回主程序的程序模块。在程序的程序模块。在VHDL语言中,子程序有两种类语言中,子程序有两种类型:过程(型:过程(procedure)和函数()和函数(function)。过程和函。过程和函数的主要区别体现在以下几个方面:数的主要区别体现在以下几个方面:(1)过程可以具有多个返回值,而函数只能有一个)过程可以具有多个返回值,而函数只能有一个返回值。返回值。(2)过程通常用来定义一个算法,而函数用来产生)过程通常用来定义一个算法,而函数用来产生一个特定的值。一个特定的值。(3)过程中的参数可以具有)过程中的参数可以具有3种端口模式:种端口模式:in、out、inout,而函数中的参

57、数只具有一种端口模式:,而函数中的参数只具有一种端口模式:in1. 子程序子程序过程过程 过程的书写结构:过程的书写结构: PROCEDURE 过程名(参数过程名(参数1;参数;参数2;)IS 定义语句定义语句; -变量或常量定义变量或常量定义 BEGIN 顺序处理语句顺序处理语句 -过程描述语句过程描述语句 END 过程名;过程名; 参数的对象类型包括常量、信号和变量;参数的对象类型包括常量、信号和变量;端口模式包括端口模式包括in、out和和inoutLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY procedure1 IS PORT(din

58、1:IN INTEGER RANGE 0 TO 31; din2:IN INTEGER RANGE 0 TO 31; dout:OUT INTEGER RANGE 0 TO 31);END PROCEDURE1;过程定义在结构体中及过程的调用过程定义在结构体中及过程的调用ARCHITECTURE a1 OF procedure1 ISprocedure jfq (d1:IN INTEGER RANGE 0 TO 31; d2:IN INTEGER RANGE 0 TO 31; fout:OUT INTEGER RANGE 0 TO 31)IS BEGIN fout:=d1+d2; END jfq;BEGIN PROCESS VARIABLE fo:INTEGER RANGE 0 TO 31;jfq(din1,din2,fo); dout=fo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论