第4章 VHDL语言基础_第1页
第4章 VHDL语言基础_第2页
第4章 VHDL语言基础_第3页
第4章 VHDL语言基础_第4页
第4章 VHDL语言基础_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

1、FPGA-CPLDFPGA-CPLD原理及应用原理及应用 FPGA-CPLD原理及应用 第4章 VHDL语言基础第四章 VHDL语言基础FPGA-CPLD原理及应用 第4章 VHDL语言基础硬件特性工程(实体)外部外部(可视部分,也称端口)内部内部(不可视,也称内部功能和算法)FPGA-CPLD原理及应用 第4章 VHDL语言基础 库库实体实体(Entity) 结构体结构体 (Architecture)进程或其它并进程或其它并行结构行结构配置配置(Configuration)VHDL结构 程序包程序包FPGA-CPLD原理及应用 第4章 VHDL语言基础uLibrary(程序库)uPackag

2、e(程序包)uEntity(实体)uArchitecture(结构体)uConfiguration(配置)VHDL程序由5个部分组成FPGA-CPLD原理及应用 第4章 VHDL语言基础一个实体可以拥有多个不同的结构体,而每个结构体在实体中的地位是相同的。可以利用配置语句为实体指定一个结构体。VHDL程序由5个部分组成库存放已编译过的实体、结构体、程序包和配置。程序包由一组对外可见的信号、常量、数据类型、子程序、属性等组成的程序集合。实体描述系统的外部信号接口。结构体描述系统的行为,系统数据流程,系统组织结构形式。配置FPGA-CPLD原理及应用 第4章 VHDL语言基础-eqcomp4 is

3、 a four bit equality comparatorLibrary IEEE;use IEEE.std_logic_1164.all;entity eqcomp4 isport(a, b:in std_logic_vector(3 downto 0); equal :out std_logic);end eqcomp4;architecture dataflow of eqcomp4 isbegin equal = 1 when a=b else 0;End dataflow;VHDL组成eqcomp4.vhd包实体结构体文件名和实体名一致每行;结尾关键字begin关键字end后跟实

4、体名关键字end后跟结构体名库FPGA-CPLD原理及应用 第4章 VHDL语言基础一、实体(Entity)u描述此设计功能输入输出端口(Port)u在层次化设计时,Port为模块之间的接口u在芯片级,则代表具体芯片的管脚A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equal: out std_logic );end eqcomp4;FPGA-CPLD原理及应用 第4章 VHDL语言基础Port (端口名称,端口名称:端口模式 数据类型; 端口名称,端口名称:端口模式 数据类型 );端口声明

5、确定输入、输出端口的数目和类型。确定输入、输出端口的数目和类型。u输入(Input)u输出(Output)u双向(Inout):可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口u缓冲(Buffer):与Output类似,但允许该管脚名作为一些逻辑的输入信号FPGA-CPLD原理及应用 第4章 VHDL语言基础端口模式符号图INOUTBUFFERINOUTFPGA-CPLD原理及应用 第4章 VHDL语言基础out 和 buffer 的区别FPGA-CPLD原理及应用 第4章 VHDL语言基础OUT、INOUT与BUFFER模式的区别FPGA-CPLD原理及应用 第4章

6、VHDL语言基础例:一个完整描述(3 比特 计数器)FPGA-CPLD原理及应用 第4章 VHDL语言基础计数器等效描述(out与buffer的区别)FPGA-CPLD原理及应用 第4章 VHDL语言基础指端口上流动的数据表达格式,为预先定好的数据类型,如:指端口上流动的数据表达格式,为预先定好的数据类型,如:bit、bit_vector、integer、std_logic、std_logic_vector 等。等。 例:例: entity m81 is port (a: in std_logic_vector(7 downto 0); sel: in std_logic_vector(2 d

7、ownto 0); b:out bit ); end entity m81;3、数据类型FPGA-CPLD原理及应用 第4章 VHDL语言基础作用:用于描述设计实体的内部结构以及实体端口之间的作用:用于描述设计实体的内部结构以及实体端口之间的逻辑关系逻辑关系两个组成部分:两个组成部分: 说明部分说明部分: :对数据类型、常数、信号、子程序、对数据类型、常数、信号、子程序、 元件等元素的说明。元件等元素的说明。 功能描述部分功能描述部分: :以各种不同的描述风格对系统的以各种不同的描述风格对系统的 逻辑功能进行描述。逻辑功能进行描述。常用的描述风格有:常用的描述风格有: 行为描述、数据流描述、结

8、构化描述。行为描述、数据流描述、结构化描述。二、 结构体FPGA-CPLD原理及应用 第4章 VHDL语言基础结结构构体体结结构构体体说说明明结结构构体体功功能能描描述述 常数说明常数说明 数据类型说明数据类型说明 信号说明信号说明 例化元件说明例化元件说明 子程序说明子程序说明 块语句块语句 进程语句进程语句 信号赋值语句信号赋值语句 子程序调用语句子程序调用语句 元件例化语句元件例化语句 二、 结构体FPGA-CPLD原理及应用 第4章 VHDL语言基础实体与结构体的关系设计实体结构体1结构体2结构体3结构体n。 一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。F

9、PGA-CPLD原理及应用 第4章 VHDL语言基础注:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名。architecturearchitecture 结构体名称 ofof 实体名称 isis 说明语句 ; begin (功能描述)语句; end architecture 结构体名称;结构体的语法FPGA-CPLD原理及应用 第4章 VHDL语言基础例:结构体中错误的信号声明FPGA-CPLD原理及应用 第4章 VHDL语言基础设计实体结构体1结构体2结构体3结构体n。一个设计实体的多种实现方式配置:从某个实体的多种结构体描述方式中选择 特定的一个。三、配置FPGA-

10、CPLD原理及应用 第4章 VHDL语言基础configuration 配置名 of 实体名 is for 选配结构体名 end for ;end 配置名;简单配置的语法FPGA-CPLD原理及应用 第4章 VHDL语言基础 library ieee; use ieee.std_logic_1164.all; entity nand is port(a: in std_logic; b: in std_logic; c: out std_logic); end entity nand; architecture art1 of nand is begin c=not (a and b); en

11、d architecture art1;一个与非门不同实现方式的配置 FPGA-CPLD原理及应用 第4章 VHDL语言基础architecture art2 of nand is begin c=1 when (a=0) and (b=0) else 1 when (a=0) and (b=1) else 1 when (a=1) and (b=0) else 0 when (a=1) and (b=1) else 0; end architecture art2;一个与非门不同实现方式的配置 FPGA-CPLD原理及应用 第4章 VHDL语言基础configuration first of

12、 nand is for art1 end for; end first; configuration second of nand is for art2 end for; end second;一个与非门不同实现方式的配置 FPGA-CPLD原理及应用 第4章 VHDL语言基础四、 库FPGA-CPLD原理及应用 第4章 VHDL语言基础库的分类FPGA-CPLD原理及应用 第4章 VHDL语言基础IEEE库是最常用的资源库,包含IEEEIEEE标准的标准的程序包程序包和其他一些支持工业标准的程序包。还有一些程序包,如SYNOPSYS公司提供的 STD_LOGIC_ARITH STD_LO

13、GIC_UNSIGNED STD_LOGIC_SIGNED不属于IEEE标准,但仍汇集在IEEE库中。FPGA-CPLD原理及应用 第4章 VHDL语言基础该库中的程序包该库中的程序包并非符合并非符合VHDLVHDL语言标准语言标准,因此在使用时必,因此在使用时必须以须以显示表达显示表达出来。出来。格式:格式:LIBRARY IEEE LIBRARY IEEE ;库内程序包:库内程序包: std_logic_1164 std_logic_1164 (std_logic types & related functions) std_logic_arith std_logic_arith

14、(arithmetic functions) std_logic_signed std_logic_signed (signed arithmetic functions) std_logic_unsigned std_logic_unsigned (unsigned arithmetic functions) IEEE库FPGA-CPLD原理及应用 第4章 VHDL语言基础n Std_logic_1164Std_logic_1164:包含了一些标准逻辑电平标准逻辑电平所需数据类型和函数的定义。内含数据类型: STD_LOGICSTD_LOGIC和STD_LOGIC_VECTORSTD_LOG

15、IC_VECTOR。n Std_logic_Arith Std_logic_Arith :扩展了三个数据类型 UNSIGNEDUNSIGNED,SIGNEDSIGNED和和SMALL_INTSMALL_INT,并为其定义了相关的算术运算符和转换函数。n Std_logic_signed Std_logic_signed 和和 Std_logic_Unsigned Std_logic_Unsigned : 重载了可用于INTEGERINTEGER型和型和STD_LOGICSTD_LOGIC及及STD_LOGIC_VECTORSTD_LOGIC_VECTOR型混合运算的运算符,并定义了不同数据类型

16、间的转换函数。IEEE库程序包FPGA-CPLD原理及应用 第4章 VHDL语言基础 Type STD_LOGICSTD_LOGIC: (U, X, 0, 1, Z, W, L, H, -) W, L, H” 弱值(综合中不支持) X 强未知 Z 高阻态 - 忽略 U 未初始化 九值逻辑FPGA-CPLD原理及应用 第4章 VHDL语言基础STD库库中程序包为:standard, TEXTIO,STD库符合VHDL语言标准,是默认库,在应用中不必象IEEE库那样显示表达出来。 定义最基本的数据类型: Bit,bit_vector ,Boolean,Integer,Real,Time并支持这些数

17、据类型的所有运算符函数 注:Type BIT:2 logic value system (0, 1)FPGA-CPLD原理及应用 第4章 VHDL语言基础 WORK库是用户的VHDL设计的现行工作库n 用于存放用户设计和定义的一些设计单元和程序包n 满足VHDL语言标准,在实际调用中不必以显式不必以显式说明FPGA-CPLD原理及应用 第4章 VHDL语言基础 用户定义库用户为自身设计需要,所开发的程序包和实体等,也可以汇集在一起定义成一个库。 这就是用户定义库或称用户库,在使用时同时要首先说明库名。FPGA-CPLD原理及应用 第4章 VHDL语言基础 库的使用 库的说明语句总是放在实体单元

18、前面放在实体单元前面,而且库语言一般必须与USE语言同用。 一般,在使用库时先要用两条语句对库进行用两条语句对库进行说明,如:说明,如: LIBRARY LIBRARY 库名;库名; USE USE 库名库名. .程序包程序包. .项目名;项目名; 或或 USE USE 库名库名. .程序包名程序包名.ALL; .ALL; FPGA-CPLD原理及应用 第4章 VHDL语言基础 库调用举例FPGA-CPLD原理及应用 第4章 VHDL语言基础程序包(Package):将已定义的常数、数据类型、元件语句、子程序等收集起来组成一个集合,以便被更多的VHDL设计实体进行访问和共享。五、程序包(包集合

19、)Package程序包结构:程序包结构: 程序包说明(包首)程序包说明(包首) 程序包主体(包体)程序包主体(包体)FPGA-CPLD原理及应用 第4章 VHDL语言基础包声明项可由以下语句组成: use 语句(用来包括其它程序包); 类型说明;子类型说明;常量说明; 信号说明;子程序说明;元件说明。 package 程序包名 is 包说明项 end 程序包名;1、程序包说明(包首)语法:FPGA-CPLD原理及应用 第4章 VHDL语言基础包首说明FPGA-CPLD原理及应用 第4章 VHDL语言基础包体说明项可含: use 语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。 p

20、ackage body 程序包名 is 包体说明项 end 程序包名;2、程序包包体程序包的内容:子程序的实现算法。FPGA-CPLD原理及应用 第4章 VHDL语言基础 程序包体并非必须,只有在程序包中要说明子程序时,程序包体才是必须的。 程序包首可以独立定义和使用。 包首与包体关系FPGA-CPLD原理及应用 第4章 VHDL语言基础package seven is subtype segments is bit_vector(0 to 6); type bcd is range 0 to 9;end seven; library work;use work.seven.all;entit

21、y decoder is port(input: in bcd; drive: out segments);end decoder;architecture art of decoder isbegin程序包FPGA-CPLD原理及应用 第4章 VHDL语言基础 with input select drive=B“1111110” when 0, B“0110000” when 1, B“1101101” when 2, B“1111001” when 3, B“0110011” when 4, B“1011011” when 5, B“1011111” when 6, B“1110000”

22、when 7, B“1111111” when 8, B“1111011” when 9, B“0000000” when others;end architecture art;abcdefg程序包FPGA-CPLD原理及应用 第4章 VHDL语言基础包的基本格式PACKAGE PACKAGE IS IS常数声明类型声明信号声明子程序声明元件声明以及其它声明END END ; (1076-1987) ; (1076-1987)END PACKAGE END PACKAGE ; (1076- ; (1076-1993)1993)PACKAGE BODY PACKAGE BODY IS ISEN

23、D END ; (1076-1987) ; (1076-1987)END PACKAGE BODY END PACKAGE BODY ; (1076-1993) ; (1076-1993)FPGA-CPLD原理及应用 第4章 VHDL语言基础库和程序包的调用 LIBRARY IEEE; USE IEE.STD_LOGIC_1164.ALL; USE IEE.STD_LOGIC_ARITH.ALL; USE IEE.STD_LOGIC_UNSIGNED.ALL;FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL语言要素FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据

24、对象 常数(Constant)固定值,不能在程序中被改变增强程序的可读性,便于修改程序在综合后,连接到电源和地可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定Constant data_bus_width: integer := 8;FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据对象 信号(Signals)代表连线,Port也是一种信号没有方向性,可给它赋值,也可当作输入在Entity中和Architecture中定义设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。在MaxPlusII中被忽略。用 =

25、进行赋值signal count:bit_vector(3 downto 0):=“0011”;FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据对象 变量(Variable)临时数据,没有物理意义只能在Process和Function中定义,并只在其内部有效要使其全局有效,先转换为Signal。用 := 进行赋值 variable result : std_logic := 0;FPGA-CPLD原理及应用 第4章 VHDL语言基础信号与变量的区别architecture rtl of start is signal count : integer range 0 to 7;

26、 begin process(clk) 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;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;

27、 if(count=0) then carryout = 1; else carryout = 0; end if; end if; end process; end rtl;FPGA-CPLD原理及应用 第4章 VHDL语言基础信号与变量的区别architecture a of start is signal tmp : std_logic;begin process(a_bus)begin tmp = 1; for i in 3 downto 0 loop tmp = a_bus(i) and tmp; end loop; carryout = tmp; end process;end a

28、; architecture a of start is begin process(a_bus) variable tmp:std_logic; begin tmp := 1; for i in 3 downto 0 loop tmp := a_bus(i) and tmp; end loop; carryout = tmp; end process;end a; FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据类型 标量类型(Scalar)枚举(Enumeration)整数(Integer)浮点数(Float)物理(Physical) 复合类型(Composite)FPG

29、A-CPLD原理及应用 第4章 VHDL语言基础VHDL数据类型枚举 列举数据对象可能存在的值,一般用于定义状态机的状态Type states is (idle, start, running, pause, stop)Signal current_state : states; IEEE1076标准中预定义了两个枚举类型Type boolean is (False, True)Type bit is (0, 1) Signal a : bit;FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据类型枚举 IEEE1164标准中预定义了一个枚举类型Type std_logic i

30、s(U, X,0, 1, Z, W, L, H, -);该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bitSignal a : std_logic;注意:这里的大小写是敏感的FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据类型 整数、浮点数方便用于数值方面的运算:加减乘除整数范围:-231 231 1,经常用于计数器实数范围:-1.0E38+1.0E38,不被MaxPLusII支持Variable a : integer range 255 to +255; 物理类型主要用于调试FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL

31、数据类型复合类型 数组类型多个相同类型成员组成的队列,一般用于定义数据总线、地址总线等。Signal a: std_logic_vector(7 downto 0);a = B“00111010”; a = X “3A”; 可自定义复合类型Type word is array (15 downto 0) of bit;Signal b : word;Type table8x4 is array (0 to 7, 0 to 3) of bit;FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据类型复合类型 记录类型相同或不同类型的元素组成,类似C中的结构具有模型抽象能力,用于描述

32、一个功能模块Type iocell is record Enable :bit; DataBus :bit_vector(7 downto 0); end record; singal bus : iocell; bus.Enable = 1; bus.DataBus = “00110110”;FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL数据类型及子类型 VHDL是强类型语言,必须用类型转换函数才能进行不同类型之间的转换type byte_size is integer range 0 to 255;signal a : byte_size;signal b : intege

33、r range 0 to 255;if a=b then 采用以下方式 subtype byte_size is integer range 0 to 255;FPGA-CPLD原理及应用 第4章 VHDL语言基础属性(Attributes) 提供实体、结构体、数据类型和信号的信息。 有许多预定义的值、信号和范围的属性 一个最常用的属性是eventif clkevent and clk=1 then left,right, high, low,lengthtype count is integer range 0 to 127countleft = 0; countright = 127;co

34、unthigh = 127; countlow = 0;countlength = 128;FPGA-CPLD原理及应用 第4章 VHDL语言基础VHDL运算符 逻辑运算符AND、OR、NAND、NOR、XOR、NOT 关系运算符=、/=、= 算术运算符+、-、*、/ 并置(连接)运算符&FPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路并行语句 并行语句位于Process外面,同时执行,不分位置的先后顺序 并行语句包括:布尔等式: =With-select-whenWhen-else 布尔等式 A = s(0) and s(1); B = not(y);FPGA-CPLD

35、原理及应用 第4章 VHDL语言基础组合电路并行语句 With-select-when语句 With Sel_signal select Signal_name = a when Sel_signal_1, b when Sel_signal_2, c when Sel_signal_3, x when Sel_signal_x;Signal s : std_logic_vector(1 downto 0);Signal a,b,c,d,x : std_logic;With s select x = a when “00”, b when “01”, c when “10”, d when o

36、thers;FPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路并行语句 When-else语句 Signal_name = a when condition1 else b when condition2 else c when condition3 else x ;x = a when s=“00” else b when s=“01” else c when s=“10” else d;Signal a,b,c,d:std_logic;Signal w,x,y,z:std_logic;x = w when a=1 else x when b=1 else y when c=1

37、else z when d=1 else 0;FPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路并行语句 实现优先级编码器 encode = “111” when D(7) = 1 else “110” when D(6) = 1 else “101” when D(5) = 1 else “100” when D(4) = 1 else “011” when D(3) = 1 else “010” when D(2) = 1 else “001” when D(1) = 1 else “000” when D(0) = 1 else “000”;FPGA-CPLD原理及应用 第4

38、章 VHDL语言基础组合电路并行语句 When-else语句条件语句可以是一个简单的表达式 With-select-when则不能采用表达式作为条件 a = “0000” when state=idle and state=1 else “0001” when state=idle and state=0 else b when state=running and state=1 else a;FPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路顺序语句 Process,Function,Procedure中的语句都是顺序执行,以Process为例 Process与Process之间

39、,与其他并行语句之间都是并行的关系If-then-elseCase-whenFPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路顺序语句 If-then-elseIf(condition1) then do something; elsif(condition2) then else do something different; end if;FPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路顺序语句Process(addr)Begin step = 0; if(addr = X “F”) then step = 1; end if;End process;Proces

40、s(addr)Begin if(addr = X “F”) then step = 1; else step = 0; end if;End process;Process(addr)Begin if(addr = X “F”) then step = 1; end if;End process;Step = addr(3) * addr(2) * Addr(1) * addr(0) + stepFPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路顺序语句用于作地址译码InRam = 0; OutRam= 0; EEPRom = 1;Periph1 = 0; Periph2 = X“

41、0000” and addr X “4000” then InRam = X“4000” and addr X “4008” then Periph1 = X“4008” and addr X “4010” then Periph2 = X“8000” and addr X “C000” then OutRam= X“C000” then EEPRom (do sth) when value_2 = (do sth) when value_last = (do sth) end case;FPGA-CPLD原理及应用 第4章 VHDL语言基础组合电路顺序语句 实现数码管译码器 Process(address) begin case address is when “0000” = decode decode decode decode decode = X “00”; end case; end process; FPGA-CPLD原理及应用 第4章 VHDL语言基础几种语句的比较 语句With-select-whenWhen-elseIf-elseCase-when选择条件一个信号的不同值,互斥多个信号多种组合,不必互斥多个信号多种组合,不

温馨提示

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

最新文档

评论

0/150

提交评论