版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、FPGA-CPLD原理及应用 第四章 VHDL语言基础硬件特性工程(实体)外部(可视部分,也称端口)内部(不可视,也称内部功能和算法) 库实体(Entity) 结构体 (Architecture)进程或其它并行结构配置(Configuration)VHDL结构 程序包Library(程序库)Package(程序包)Entity(实体)Architecture(结构体)Configuration(配置)VHDL程序由5个部分组成一个实体可以拥有多个不同的结构体,而每个结构体在实体中的地位是相同的。可以利用配置语句为实体指定一个结构体。VHDL程序由5个部分组成库存放已编译过的实体、结构体、程序包
2、和配置。程序包由一组对外可见的信号、常量、数据类型、子程序、属性等组成的程序集合。实体描述系统的外部信号接口。结构体描述系统的行为,系统数据流程,系统组织结构形式。配置-eqcomp4 is 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 isbegi
3、n equal = 1 when a=b else 0;End dataflow;VHDL组成eqcomp4.vhd包实体结构体文件名和实体名一致每行;结尾关键字begin关键字end后跟实体名关键字end后跟结构体名库一、实体(Entity)描述此设计功能输入输出端口(Port)在层次化设计时,Port为模块之间的接口在芯片级,则代表具体芯片的管脚A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equal: out std_logic );end eqcomp4;Port (端口名称,端口名称
4、:端口模式 数据类型; 端口名称,端口名称:端口模式 数据类型 );端口声明确定输入、输出端口的数目和类型。输入(Input)输出(Output)双向(Inout):可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口缓冲(Buffer):与Output类似,但允许该管脚名作为一些逻辑的输入信号端口模式符号图out 和 buffer 的区别OUT、INOUT与BUFFER模式的区别例:一个完整描述(3 比特 计数器)计数器等效描述(out与buffer的区别)指端口上流动的数据表达格式,为预先定好的数据类型,如:bit、bit_vector、integer、std_logi
5、c、std_logic_vector 等。 例: entity m81 is port (a: in std_logic_vector(7 downto 0); sel: in std_logic_vector(2 downto 0); b:out bit ); end entity m81;3、数据类型作用:用于描述设计实体的内部结构以及实体端口之间的逻辑关系两个组成部分: 说明部分:对数据类型、常数、信号、子程序、 元件等元素的说明。 功能描述部分:以各种不同的描述风格对系统的 逻辑功能进行描述。常用的描述风格有: 行为描述、数据流描述、结构化描述。二、 结构体结构体结构体说明结构体功能描
6、述 常数说明 数据类型说明 信号说明 例化元件说明 子程序说明 块语句 进程语句 信号赋值语句 子程序调用语句 元件例化语句 二、 结构体实体与结构体的关系设计实体结构体1结构体2结构体3结构体n。 一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。注:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名。architecture 结构体名称 of 实体名称 is 说明语句 ; begin (功能描述)语句; end architecture 结构体名称;结构体的语法例:结构体中错误的信号声明设计实体结构体1结构体2结构体3结构体n。一个设计实体的多种
7、实现方式配置:从某个实体的多种结构体描述方式中选择 特定的一个。三、配置configuration 配置名 of 实体名 is for 选配结构体名 end for ;end 配置名;简单配置的语法 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); end architectur
8、e art1;一个与非门不同实现方式的配置 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;一个与非门不同实现方式的配置 configuration first of nand is for art1 end for; end first; configuration second of nand
9、is for art2 end for; end second;一个与非门不同实现方式的配置 四、 库库是一种用来存储预先完成的程序包和数据集合体的仓库。VHDL语言中存在多个不同的库,库与库之间独立,不可嵌套;库的好处:达到资源共享。1、格式:LIBRARY 库名; 2、库的种类 IEEE库 STD库(默认库) ASIC库 WORK库(默认库) 用户定义库库的分类IEEE库 IEEE库是最常用的资源库,包含IEEE标准的程序包和其他一些支持工业标准的程序包。 还有一些程序包,如SYNOPSYS公司提供的 STD_LOGIC_ARITH STD_LOGIC_UNSIGNED STD_LOGIC
10、_SIGNED不属于IEEE标准,但仍汇集在IEEE库中。该库中的程序包并非符合VHDL语言标准,因此在使用时必须以显示表达出来。格式:LIBRARY IEEE ;库内程序包: std_logic_1164 (std_logic types & related functions) std_logic_arith (arithmetic functions) std_logic_signed (signed arithmetic functions) std_logic_unsigned (unsigned arithmetic functions) IEEE库Std_logic_1164:包
11、含了一些标准逻辑电平所需数据类型和函数的定义。内含数据类型: STD_LOGIC和STD_LOGIC_VECTOR。Std_logic_Arith :扩展了三个数据类型 UNSIGNED,SIGNED和SMALL_INT,并为其定义了相关的算术运算符和转换函数。Std_logic_signed 和 Std_logic_Unsigned : 重载了可用于INTEGER型和STD_LOGIC及STD_LOGIC_VECTOR型混合运算的运算符,并定义了不同数据类型间的转换函数。IEEE库程序包 Type STD_LOGIC: (U, X, 0, 1, Z, W, L, H, -) W, L, H”
12、 弱值(综合中不支持) X 强未知 Z 高阻态 - 忽略 U 未初始化 九值逻辑STD库STD 库(默认库)库中程序包为:standard, TEXTIO,STD库符合VHDL语言标准,是默认库,在应用中不必象IEEE库那样显示表达出来。 定义最基本的数据类型: Bit,bit_vector ,Boolean,Integer,Real,Time并支持这些数据类型的所有运算符函数 注:Type BIT:2 logic value system (0, 1) WORK库 WORK库:是用户的VHDL设计的现行工作库; 用于存放用户设计和定义的一些设计单元和程序包; 满足VHDL语言标准,在实际调用
13、中不必以显式说明。 用户定义库 用户为自身设计需要,所开发的程序包和实体等,也可以汇集在一起定义成一个库。 这就是用户定义库或称用户库,在使用时同时要首先说明库名。 库的使用 库的说明语句总是放在实体单元前面,而且库语言一般必须与USE语言同用。 一般,在使用库时先要用两条语句对库进行说明,如: LIBRARY 库名; USE 库名.程序包.项目名; 或 USE 库名.程序包名.ALL; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ UNSIGNED.CONV_INTEGER; 上例表明,要使用IEEE库中STD_
14、LOGIC_1164包集合中的所有过程和函数,这里项目名为ALL,表示包集合中的所有项目都要用。 库调用举例 程序包(Package):将已定义的常数、数据类型、元件语句、子程序等收集起来组成一个集合,以便被更多的VHDL设计实体进行访问和共享。五、程序包(包集合)Package程序包结构: 程序包说明(包首) 程序包主体(包体)包声明项可由以下语句组成: use 语句(用来包括其它程序包); 类型说明;子类型说明;常量说明; 信号说明;子程序说明;元件说明。 package 程序包名 is 包说明项 end 程序包名;1、程序包说明(包首)语法:包首说明包体说明项可含: use 语句;子程序
15、说明;子程序主体;类型说明;子类型说明;常量说明。 package body 程序包名 is 包体说明项 end 程序包名;2、程序包包体程序包的内容:子程序的实现算法。 程序包体并非必须,只有在程序包中要说明子程序时,程序包体才是必须的。 程序包首可以独立定义和使用。 包首与包体关系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;entity decoder is port(input: in
16、 bcd; drive: out segments);end decoder;architecture art of decoder isbegin程序包 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” when 7, B“1111111” when 8, B“1111011” when 9, B“000000
17、0” when others;end architecture art;abcdefg程序包包的基本格式PACKAGE IS常数声明类型声明信号声明子程序声明元件声明以及其它声明END ; (1076-1987)END PACKAGE ; (1076-1993)PACKAGE BODY IS use 语句;子程序声明;子程序体;类型声明; 子类型声明;常量声明。 END ; (1076-1987)END PACKAGE BODY ; (1076-1993)库和程序包的调用 LIBRARY IEEE; USE IEE.STD_LOGIC_1164.ALL; USE IEE.STD_LOGIC_A
18、RITH.ALL; USE IEE.STD_LOGIC_UNSIGNED.ALL;VHDL语言要素VHDL数据对象常数(Constant)固定值,不能在程序中被改变增强程序的可读性,便于修改程序在综合后,连接到电源和地可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定Constant data_bus_width: integer := 8;VHDL数据对象信号(Signals)代表连线,Port也是一种信号没有方向性,可给它赋值,也可当作输入在Entity中和Architecture中定义设定的初始值在综合时没有用,只是在仿真时在开始设
19、定一个起始值。在MaxPlusII中被忽略。用 = 进行赋值signal count:bit_vector(3 downto 0):=“0011”;VHDL数据对象变量(Variable)临时数据,没有物理意义只能在Process和Function中定义,并只在其内部有效要使其全局有效,先转换为Signal。用 := 进行赋值 variable result : std_logic := 0;信号与变量的区别architecture rtl of start is signal count : integer range 0 to 7; begin process(clk) begin if
20、(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; if(count=0) then carryout =
21、1; else carryout = 0; end if; end if; end process; end rtl;信号与变量的区别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; architecture a of start is begin process(a_bus) variab
22、le 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; VHDL数据类型标量类型(Scalar)枚举(Enumeration)整数(Integer)浮点数(Float)物理(Physical)复合类型(Composite)VHDL数据类型枚举列举数据对象可能存在的值,一般用于定义状态机的状态Type states is (idle, start, running, pause, stop)Sig
23、nal current_state : states;IEEE1076标准中预定义了两个枚举类型Type boolean is (False, True)Type bit is (0, 1) Signal a : bit;VHDL数据类型枚举IEEE1164标准中预定义了一个枚举类型Type std_logic is(U, X,0, 1, Z, W, L, H, -);该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bitSignal a : std_logic;注意:这里的大小写是敏感的VHDL数据类型整数、浮点数方便用于数值方面的运算:加减乘除整数范围:-2
24、31 231 1,经常用于计数器实数范围:-1.0E38+1.0E38,不被MaxPLusII支持Variable a : integer range 255 to +255;物理类型主要用于调试VHDL数据类型复合类型数组类型多个相同类型成员组成的队列,一般用于定义数据总线、地址总线等。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
25、(0 to 7, 0 to 3) of bit;VHDL数据类型复合类型记录类型相同或不同类型的元素组成,类似C中的结构具有模型抽象能力,用于描述一个功能模块Type iocell is record Enable :bit; DataBus :bit_vector(7 downto 0); end record; singal bus : iocell; bus.Enable = 1; bus.DataBus = “00110110”;VHDL数据类型及子类型VHDL是强类型语言,必须用类型转换函数才能进行不同类型之间的转换type byte_size is integer range 0
26、to 255;signal a : byte_size;signal b : integer range 0 to 255;if a=b then 采用以下方式 subtype byte_size is integer range 0 to 255;属性(Attributes)提供实体、结构体、数据类型和信号的信息。有许多预定义的值、信号和范围的属性一个最常用的属性是eventif clkevent and clk=1 thenleft,right, high, low,lengthtype count is integer range 0 to 127countleft = 0; count
27、right = 127;counthigh = 127; countlow = 0;countlength = 128;VHDL运算符逻辑运算符AND、OR、NAND、NOR、XOR、NOT关系运算符=、/=、=算术运算符+、-、*、/并置(连接)运算符&组合电路并行语句并行语句位于Process外面,同时执行,不分位置的先后顺序并行语句包括:布尔等式: =With-select-whenWhen-else布尔等式 A = s(0) and s(1); B = not(y);组合电路并行语句With-select-when语句 With Sel_signal select Signal_nam
28、e = 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 others;组合电路并行语句When-else语句 Signal_name = a when condition1 else b when condition
29、2 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 else z when d=1 else 0;组合电路并行语句实现优先级编码器 encode = “111” when D(7) = 1 else “110” when D(6) = 1 else “101” wh
30、en 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”;组合电路并行语句When-else语句条件语句可以是一个简单的表达式With-select-when则不能采用表达式作为条件 a = “0000” when state=idle and state=1 else “0001” when state=idle and state=0 else b whe
31、n state=running and state=1 else a;组合电路顺序语句Process,Function,Procedure中的语句都是顺序执行,以Process为例Process与Process之间,与其他并行语句之间都是并行的关系If-then-elseCase-when组合电路顺序语句If-then-elseIf(condition1) then do something; elsif(condition2) then else do something different; end if;组合电路顺序语句Process(addr)Begin step = 0; if(ad
32、dr = X “F”) then step = 1; end if;End process;Process(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) + step组合电路顺序语句用于作地址译码InRam = 0; OutRam= 0; EEPRom = 1;
33、Periph1 = 0; Periph2 = X“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;组合电路顺序语句实现数码管译码器Process(address) begin case address is when “0000” = decode decode decode decode decode = X “00”; end case; end process; 几种语句的比较 语句With-select-whenWhen-elseIf-elseCase-when选择条件一个信号的不同值,互斥多个信号多种组合,不必互斥多个信号多种组合,不必互斥一个信号的不同值,互斥语句属性并行并行顺序顺序用途编码、译码、多路选择器优先编码器,地址译码器优先编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级语文上册 6散步教学实录 新人教版
- 销售人员个人年度工作计划
- 关于师范生的实习报告集合五篇
- 个人的辞职报告15篇
- 领导校园艺术节讲话稿
- 2024年标准铁矿产品购买与销售协议模板版B版
- 关于小学语文教学工作总结范文集锦6篇
- 单位资产清查报告范文(12篇)
- 读书体会作文
- 工程维修单表格(模板)
- 2021电力建设项目工程总承包管理规范
- 智慧航天物联网
- RM60实用操作课件
- 肝内胆管癌的护理查房课件
- 自媒体培训课件
- 学会倾听(心理健康课件)
- 开展中小学人工智能教育成功案例与经验分享
- 教练式沟通培训课件
- 养老院品牌建设与推广策略
- 族概述与族操作-创建参数化三维族(Revit建模课件)
- 《机电一体化系统设计》
评论
0/150
提交评论