1、第一部分第一部分 VHDL语言编程基础语言编程基础通过电脑下载(编程文件)到器件(通过电脑下载(编程文件)到器件(PLD)程序代码与电路程序代码与电路 代码对应于逻辑 逻辑与器件结合产生功能电路 代码的重复代表电路的重复 电路是并行的,所以代码一定是并行的 逻辑的繁简对应代码的繁简概概 述述 1.常用硬件描述语言简介常用硬件描述语言简介 常用硬件描述语言有VHDL、Verilog和ABEL语言。三者的比较:(1)逻辑描述层次:一般的硬件描述语言可以在三个层次上进行电路描述,其层次由高到低依次可分为行为级、RTL级和门电路级。VHDL语言是一种高级描述语言,适用于行为级和RTL级的描述,最适于描
2、述电路的行为;Verilog语言和ABEL语言是一种较低级的描述语言,适用于RTL级和门电路级的描述,最适于描述门级电路。(2)设计要求:VHDL进行电子系统设计时可以不了解电路的结构细节,设计者所做的工作较少;Verilog和ABEL语言进行电子系统设计时需了解电路的结构细节,设计者需做大量的工作。(3)综合过程:任何一种语言源程序,最终都要转换成门电路级才能被布线器或适配器所接受。因此,VHDL语言源程序的综合通常要经过行为级RTL级门电路级的转化,VHDL几乎不能直接控制门电路的生成。而Verilog语言和ABEL语言源程序的综合过程要稍简单,即经过RTL级门电路级的转化,易于控制电路资
3、源。(4)对综合器的要求:VHDL描述语言层次较高,不易控制底层电路,因而对综合器的性能要求较高,Verilog和ABEL对综合器的性能要求较低。(5)支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但支持ABEL的综合器仅仅Dataio一家。(6)国际化程度:VHDL和Verilog已成为IEEE标准,而ABEL正朝国际化标准努力。2.VHDL的简介的简介 VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE(The Instit
4、ute of Electrical and Electronics Engineers)和美国国防部确认为标准硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起几乎全部的数字系统设计任务。3.VHDL程序设计约定程序设计约定 为了便于程序的阅读和调试,本书对VHDL程序设计特作如
5、下约定:(1)语句结构描述中方括号“”内的内容为可选内容。(2)对于VHDL的编译器和综合器来说,程序文字的大小写是不加区分的。本书一般使用大写。(3)程序中的注释使用双横线“-”。在VHDL程序的任何一行中,双横线“-”后的文字都不参加编译和综合。(4)为了便于程序的阅读与调试,书写和输入程序时,使用层次缩进格式,同一层次的对齐,低层次的较高层次的缩进两个字符。(5)源程序文件的名字与实体名必须一致。第一章第一章 VHDL的程序结构和软件操作的程序结构和软件操作1-1 VHDL程序的基本结构程序的基本结构 1-2 软件操作软件操作Max+plus的操作的操作 1-1 VHDL程序的基本结构程
6、序的基本结构 实体描述实体描述(ENTITY)结构体结构体(ARCHITECTURE)设计实体设计实体实体描述实体描述(ENTITY)构构造造体体1设计实体设计实体构构造造体体2构构造造体体n设计实体、实体说明、构造体之间关系设计实体、实体说明、构造体之间关系库、包集合库、包集合(LIBRARY)库、包集合库、包集合(LIBRARY)结构体配置结构体配置LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or ISPORT(a,b:IN STD_LOGIC;y:OUT STD_LOGIC);END ENTITY or;ARCHITECTURE beh
7、a OF or ISBEGINy=a or b;END beha;例例1:库说明库说明实体实体描述描述结构体结构体aby例例2:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY half_adder IS PORT(a,b:IN STD_LOGIC;s,co:OUT STD_LOGIC);END half_adder;ARCHITECTURE half1 OF half_adder ISSIGNAL c,d:STD_LOGIC;BEGIN c=a OR b;d=a NAND b;co=NOT d;s=c AND d;END half1;一、库、程序
8、包使用(一、库、程序包使用(LIBRARY):):LIBRARY和和PACKAGE的声明部分的声明部分 作用:库(作用:库(Library)是用于存放预先编译好的程序包)是用于存放预先编译好的程序包 (Package),程序包中定义了数据集合体、逻),程序包中定义了数据集合体、逻 辑操作和元件等。主要是声明在设计或实体中辑操作和元件等。主要是声明在设计或实体中 将用到的常数,数据类型,元件及子程序等。将用到的常数,数据类型,元件及子程序等。通常用到通常用到IEEEIEEE的库中的库中STD_LOGIC_1164,STD_LOGIC_ARITH,STD_LOGIC_1164,STD_LOGIC_
9、ARITH,STD_LOGIC_UNSIGNED,STD_LOGIC_SIGNEDSTD_LOGIC_UNSIGNED,STD_LOGIC_SIGNED等程序包。等程序包。使用格式:使用格式:LIBRARY 库名;库名;USE 库名库名.程序包名程序包名.All;在在Quartus系统中有系统中有4个库能支持个库能支持VHDL语言,它们语言,它们分别是分别是Std库、库、IEEE库、库、WORK库和库和VITALVITAL库。库。Std库和库和IEEE库提供基本的逻辑运算函数及数据类型转换函数等。库提供基本的逻辑运算函数及数据类型转换函数等。IEEE库中的程序包库中的程序包std_logic_
10、1164定义了定义了std_logic和和std_logic_vector等数据类型。等数据类型。二、实体描述(二、实体描述(ENTITYENTITY)作用:定义本设计的输入作用:定义本设计的输入/出端口,即定义电路的外观,出端口,即定义电路的外观,即即I/O接口的类型和数量使用格式:接口的类型和数量使用格式:端口名端口名:端口模式:端口模式 数据类型;数据类型;);ENTITY 实体名实体名 ISEND ENTITY 实体名;实体名;PORT (端口名端口名:端口模式:端口模式 数据类型;数据类型;GENERIC(类属表类属表);类属说明语句类属说明语句:类属(GENERIC)参量是一种端口
11、界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。一般书写格式如下:GENERIC(常数名:数据类型:设定值;常数名:数据类型:=设定值);端口名:端口名:即每个外部管脚名称,有多个即每个外部管脚名称,有多个 时可用逗号隔开。时可用逗号隔开。端口模式 端口模式说明(以设计实体为主体)IN 输入,只读模式,将变量或信号信息通过该端口读入 OUT 输出,单向赋值模式,将信号通过该端口输出 BUFFER 具有读功能的输出模式,可以读或写,只能有一个驱动源 INOUT 双向,可以通过该端口读入或写出信息 INOUTBUFFERINOUTPORT(端口名:端口模式 数据类型;端口名:端口模式
12、数据类型);Blk1Blk3Blk4Blk5Blk2InInoutOutBufferEntity ARCHITECTURE定义定义 作用:定义实体的实现。即电路的具体描述,说明电路执作用:定义实体的实现。即电路的具体描述,说明电路执 行什么动作或实现功能。行什么动作或实现功能。ARCHITECTURE 结构体名结构体名 OF 实体名实体名 ISBEGINBEGIN 功能描述语句功能描述语句;END END ARCHITECTURE 结构体名结构体名;三、结构体(三、结构体(ARCHITECTURE):):说明语句说明语句结构体说明语句:结构体说明语句:结构体中的说明语句是对结构体的功能描述语句
13、中将要用到的信号结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型()、数据类型(TYPE)、常数()、常数(CONSTANT)、元件)、元件(COMPONANT)、函数()、函数(FUNCTION)和过程()和过程(PROCEDURE)等加以)等加以说明;说明;功能描述语句:功能描述语句:功能描述语句主要由功能描述语句主要由5种不同类型的以并行方式种不同类型的以并行方式工作的语句结构:工作的语句结构:1、块语句结构:由一系列并行语句构成;、块语句结构:由一系列并行语句构成;2、进程语句结构:由顺序语句构成;、进程语句结构:由顺序语句构成;3、信号赋值语句:将
14、设计实体内处理结果向定义的信号或界面端口进、信号赋值语句:将设计实体内处理结果向定义的信号或界面端口进 行赋值;行赋值;4、子程序调用语句:用于调用过程或函数;、子程序调用语句:用于调用过程或函数;5、元件例化语句:对其它的设计实体作元件调用;、元件例化语句:对其它的设计实体作元件调用;A AB BY Y111001010000YBALibrary IEEE;Use IEEE.STD_LOGIC_1164.all;Entity and2 isPort(A:in std_logic;B:in std_logic;Y:out std_logic);End and2;-首先定义输入输出端口名字,首先
15、定义输入输出端口名字,模式(模式(Mode),信号类型),信号类型-注意最后语句的分号在括号外注意最后语句的分号在括号外 实体定义实体定义:Architecture Na of and2 is Begin Y=A and B;End Na;结构体定义结构体定义:端口模式有以下几种类型:端口模式有以下几种类型:IN;OUT;INOUT;BUFFER。Architecture Nb of and2 is BeginY=1 when A=1 and B=1 else 0;End Nb;以上结构体表达何种电路?以上结构体表达何种电路?一个实体可以有几个结构体,即结构体的定义可以有不同的形式一个实体可以
16、有几个结构体,即结构体的定义可以有不同的形式结论:结论:小结小结:VHDL程序设计基本结构1-21-2软件操作软件操作Max+plusMax+plus的操作的操作 1、建立和编写一个建立和编写一个VHDL语言的工程文件语言的工程文件2、VHDL程序的编译程序的编译 3、VHDL语言程序的仿真语言程序的仿真 4、芯片的时序分析芯片的时序分析5、安排芯片脚位安排芯片脚位 一、一、软件操作软件操作Max+plus的操的操作作 1.Max+plus开发工具是美国开发工具是美国Altera公司自行设计的一种软公司自行设计的一种软件工具,其全称为件工具,其全称为Multiple Array Matrix
17、and Programmable Logic User System。它具有原理图输入和文本输入(采用。它具有原理图输入和文本输入(采用硬件描述语言)两种输入手段,利用该工具所配备的编硬件描述语言)两种输入手段,利用该工具所配备的编辑、编译、仿真、综合、芯片编程等功能,将设计电路辑、编译、仿真、综合、芯片编程等功能,将设计电路图或电路描述程序变成基本的逻辑单元写入到可编程的图或电路描述程序变成基本的逻辑单元写入到可编程的芯片中(如芯片中(如PLDPLD、FPGA芯片),作成芯片),作成ASIC芯片。它是芯片。它是EDA设计中不可缺少的一种工具。设计中不可缺少的一种工具。2.软件安装软件安装我们
18、通过范例介绍:利用我们通过范例介绍:利用Max+plus系统系统(1)如何编写)如何编写VHDL程序(使用程序(使用Text Editor););(2)如何编译)如何编译VHDL程序(使用程序(使用Compiler););(3)如何仿真验证)如何仿真验证VHDL程序(使用程序(使用Waveform Editor,Simulator););(4)如何进行芯片的时序分析(使用)如何进行芯片的时序分析(使用Timing Analyzer););(5)如何安排芯片脚位(使用)如何安排芯片脚位(使用Floorplan Editor););(6)如何下载程序至芯片(使用)如何下载程序至芯片(使用Progr
19、ammer)。)。二、二、建立和编写一个建立和编写一个VHDL语言的工程文件语言的工程文件 首先启动首先启动Max+plus系统,启动后系统进入主菜单画面,在主菜单系统,启动后系统进入主菜单画面,在主菜单 上有上有5个选项,分别是:个选项,分别是:Max+plus、File、Assign、Options和和Help。(1)打开文本编辑器;用鼠标点击)打开文本编辑器;用鼠标点击File选项,点击子菜单中的选项,点击子菜单中的 New选项,接着屏幕会出现选项,接着屏幕会出现New的对话框。在对话框内有的对话框。在对话框内有4 种编辑方式:图形编辑、符号编辑、文本编辑和波形编辑。种编辑方式:图形编辑
20、、符号编辑、文本编辑和波形编辑。VHDL文件属于文本,那么应该选择文本编辑方式,点击文件属于文本,那么应该选择文本编辑方式,点击 OK按钮,屏幕上将出现一个无名的编辑窗口,则系统进入按钮,屏幕上将出现一个无名的编辑窗口,则系统进入 文本编辑状态。文本编辑状态。(2)在编辑窗口中进行编辑输入,输入相应的描述语句。)在编辑窗口中进行编辑输入,输入相应的描述语句。(3)存盘。)存盘。(a 我们编辑的我们编辑的VHDL文件扩展名为文件扩展名为vhd;b 保存的文保存的文 件名必须和所定义的实体名相同。件名必须和所定义的实体名相同。c 文件存盘的目录不应是文件存盘的目录不应是 根目录或桌面,建议存放在根
21、目录或桌面,建议存放在Max2work或或Maxplus2目录,或目录,或 其子目录。其子目录。)以与门的设计为例讲述具体过程以与门的设计为例讲述具体过程 三、三、VHDL程序的编译程序的编译(1)若文件没有打开,需首先打开要编译的VHDL文件;(2)将目前的文件设置成工程文件;点击File选项,光标移到子菜单的 Project项停留几秒钟,屏幕上会出现下一级菜单,点击Set Project to Current File(3)打开编译器;点击主菜单MAX+plus/Compiler选项,屏幕上就出现编译 对话框。(4)开始编译;完成了上述编译前的准备及必要的设置工作,点击编译对话框 中的St
22、art按钮,编译即开始。以与门的设计为例讲述具体过程 四、四、VHDL语言程序的仿真语言程序的仿真 仿真是为了验证我们所编写的仿真是为了验证我们所编写的VHDL程序的功能是否正确。程序的功能是否正确。(1)首先生成仿真波形文件(a)打开波形编辑器;点击主菜单的MAX+plus/Waveform Editor选项,就 可在屏幕上显示波形编辑器窗口。在未输入信号名以前,整个窗口是空 白的。(b)确定仿真持续时间(File/End Time)。(c)选则输入输出端口名;(d)编辑输入信号波形;(e)信号波形编辑完成后,需存盘为仿真使用,信号波形编辑完成后,需存盘为仿真使用,文件名采取默认方式即可。(
23、2)打开仿真器;点击主菜单MAX+plusSimulator项,此时弹出Simulator 对话框。点击对话框的Start按钮,仿真即开始。在仿真结束后打开仿真波 形文件(点击右下角的Open SCF按钮)即可以显示仿真结果。(以与门的设计为例讲述具体过程)五、五、芯片的时序分析芯片的时序分析仿真结果从波形上来看,很难给出定量的信号延迟关系,这一点时序分析却能直观地用表来进行显示。(1)选择要下载的器件型号;(2)需要再编译一次。)需要再编译一次。(点击主菜单的Assign/Device项得到Device对话框)(3)打开时序仿真器;(点击Timing Analyzer选项)(4)最后点击St
24、art按钮后,时序分析器开始启动。(以与门的设计为例讲述具体过程)六、六、安排芯片脚位安排芯片脚位 为了将程序下载到芯片,需安排芯片脚位。为了将程序下载到芯片,需安排芯片脚位。(1)打开芯片脚位设置器;)打开芯片脚位设置器;(MAX+plus/Floorplan Editor)(2)将实体定义的端口名字和下载芯片的管脚进行具体对应;)将实体定义的端口名字和下载芯片的管脚进行具体对应;(3)最后再进行一次编译。)最后再进行一次编译。EDA实验箱实验箱第二章第二章 VHDL语言要素语言要素 V VH HD DL L语语言言要要素素包包括括数据对象数据对象变量变量信号信号常数常数数据类型数据类型操作
25、数操作数运算操作符运算操作符一、一、VHDL语言标识符的有关命名规则:语言标识符的有关命名规则:1、标识符主要用于命名或标识、标识符主要用于命名或标识VHDL设计中的一个项目(如实体、构造设计中的一个项目(如实体、构造体、程序包、过程、函数、常量、变量、文件等。体、程序包、过程、函数、常量、变量、文件等。2、标识符不区分大小写。、标识符不区分大小写。3、长度不超过、长度不超过32个有效字符序列。个有效字符序列。4、只能由英文字母、数字及下划线构成。、只能由英文字母、数字及下划线构成。5、首字母必须是字母,且、首字母必须是字母,且不连续使用下划线不连续使用下划线“_”,不以下划线,不以下划线“_
26、”结结尾;尾;6、任何、任何VHDL语言的保留字不能用作标识符。语言的保留字不能用作标识符。VHDL语言程序书写规定语言程序书写规定二、二、VHDL语言书写规定:语言书写规定:1、VHDL语句间用分号隔开。语句间用分号隔开。2、VHDL注释语句用注释语句用“-”开头。开头。2.1 VHDL文字规则文字规则 VHDL文字(Literal)主要包括数值和标识符。数值型文字主要有数字型、字符串型、位串型。1数字型文字数字型文字 (1)整数文字:整数文字都是十进制的数,如:5,678,0,156E2(=15600),45_234_287(=45234287)数字间的下划线仅仅是为了提高文字的可读性,相
27、当于一个空的间隔符,而没有其他的意义,因而不影响文字本身的数值。(2)实数文字:实数文字也都是十进制的数,但必须带有小数点,如:188.993,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),1.335,0.0 (3)以数制基数表示的文字:用这种方式表示的数由五个部分组成。第一部分,用十进制数标明数制进位的基数;第二部分,数制隔离符号“#”;第三部分,表达的文字;第四部分,指数隔离符号“#”;第五部分,用十进制表示的指数部分,这一部分的数如果是0可以省去不写。现举例如下:10#170#-(十进制数表示,等于170)2#111
28、1_1110#-(二进制数表示,等于254)16#E#E1 -(十六进制数表示,等于2#11100000#,等于224)(4)物理量文字(VHDL综合器不接受此类文字)。如:60s(60秒),100m(100米),k(千欧姆),177A(177安培)2.字符串型文字字符串型文字 (1)字符是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母,如:R,A,*,Z。(2)字符串则是一维的字符数组,须放在双引号中。如:“ERROR”,“BOTH S AND Q EQUAL TO L”(3)数位字符串:数位字符串称位矢量,代表的是二进制、八进制或十六进制的数组。B:二进制基数符号(0,1)
29、;O:八进制基数符号(07);X:十六进制基数符号(09,AF)例:B“10110110”,X“A0”,X“456”3下标名及下标段名下标名及下标段名 下标名用于指示数组型变量或信号的某一元素,而下标段名则用于指示数组型变量或信号的某一段元素,其语句格式如下:数组类型信号名或变量名(表达式1 TO/DOWNTO 表达式2);【例】SIGNAL A,B,C:BIT_VECTOR(0 TO 7);SIGNAL Y,Z:BIT;Z=B(3);-3是可计算型下标表示C(0 TO 3)=A(4 TO 7);-以段的方式进行赋值 2-2 数据类型数据类型 数据类型分类:主要有逻辑信号类型和数值信号类型数据
30、类型分类:主要有逻辑信号类型和数值信号类型。2-2-1逻辑数据类型逻辑数据类型(1)布尔代数()布尔代数(Boolean)型)型 定义位置:在定义位置:在STD库的库的standard程序包中进行定义。程序包中进行定义。信号形式:信号形式:FALSE,TRUE(2)位()位(Bit)定义位置:在定义位置:在STD库的库的standard程序包中进行定义。程序包中进行定义。信号形式:信号形式:0,1(低电位,高电位(低电位,高电位)编码器编码器:A A7 7A A6 6A A5 5A A4 4A A3 3A A2 2A A1 1A A0 0E EN NY Y2 2Y Y1 1Y Y0 08 X
31、38 X 3编码器输入输入信号信号输出输出信号信号000100000001000100000001000100000110000100000010000100010100000100011000000101110000000101201234567YYYAAAAAAAA000100000001000100000001000100000110000100000010000100010100000100011000000101110000000101201234567YYYAAAAAAAA0001000000010001000000010001000001100001000000100001000
32、10100000100011000000101110000000101201234567YYYAAAAAAAA000100000001000100000001000100000110000100000010000100010100000100011000000101110000000101201234567YYYAAAAAAAA000100000001000100000001000100000110000100000010000100010100000100011000000101110000000101201234567YYYAAAAAAAA0001000000010001000000010
33、00100000110000100000010000100010100000100011000000101110000000101201234567YYYAAAAAAAA(3)位数组类型()位数组类型(Bit_Vector)定义位置:在定义位置:在STD库的库的standard程序包中进行定义。程序包中进行定义。Signal A:bit_vector(0 to 7);Signal Y:bit_vector(2 downto 0);A A7 7A A6 6A A5 5A A4 4A A3 3A A2 2A A1 1A A0 0E EN NY Y2 2Y Y1 1Y Y0 08 8 X X 3 3
34、编码器输入输入信号信号输出输出信号信号A A7 7A A6 6A A5 5A A4 4A A3 3A A2 2A A1 1A A0 0E EN NY Y2 2Y Y1 1Y Y0 08 8 X X 3 3编码器(4)标准逻辑型标准逻辑型(Std_Logic)定义位置:定义位置:在在IEEE库的库的std_logic_1164程序包中进行定义程序包中进行定义 其中只有“0”、“1”、“Z”、“”四种值可以综合 可以看出,这个可以看出,这个“标准逻辑标准逻辑”信号定义,比信号定义,比“位即位即bit”bit”信号对于数字信号对于数字逻辑电路的逻辑特性描述更完整、更真实。所以在逻辑电路的逻辑特性描述
35、更完整、更真实。所以在VHDL的程序里,对于逻的程序里,对于逻辑信号的定义,通常都是采用这个辑信号的定义,通常都是采用这个“标准逻辑标准逻辑”信号形式。信号形式。使用这类数据信号,必须包含下面两条声明语句:使用这类数据信号,必须包含下面两条声明语句:Library IEEE;Use IEEE.std_logic_1164.all;(5)标准逻辑数组类型标准逻辑数组类型(Std_Logic_vector)定义位置:在ieee库的std_logic_1164程序包中进行定义。Bit_Vector与与Std_Logic_vector的区别在于数组的的区别在于数组的每一位前者为每一位前者为BIT型(型
36、(0,1)后者为)后者为Std_Logic型型 2-2-2 数值数据类型数值数据类型(1)整数(Integer)定义位置:在std库的standard程序包中进行定义。即数值范 围为-231+1231-1。与数学中的整数的定义相同,不能含有小数点的数。书写方式有:2 -2 -十进制数十进制数 10E4 -10E4 -十进制数十进制数 16#D2#-16#D2#-十六进制数十六进制数 2#101101#-2#101101#-二进制数二进制数(2)无符号(Unsigned)和有符号(Signed)类型 定义位置:有符号(Signed)和无符号(Unsigned)逻辑信号定义在 库IEEE的程序包s
37、td_logic_arith中。有符号类型数据代表有符号数值,即可以是正数,有符号类型数据代表有符号数值,即可以是正数,0,负数;编,负数;编 译器将有符号数类型作为一个补码的二进制数,最左边的位为译器将有符号数类型作为一个补码的二进制数,最左边的位为 符号位。符号位。无符号类型数据代表无符号数值,即代表无符号类型数据代表无符号数值,即代表0或正数;最左边的位或正数;最左边的位为最高位。如:为最高位。如:Unsigned(“0110”)代表代表 +6 +6 ;Unsigned(“1010”)代表代表 +10+10;如:如:signed(“0110”)代表代表 +6;signed(“1011”)
38、代表代表 -5;-5;例如:例如:VARIABLE A:UNSIGNED(0 TO 5););SIGNAL B:SIGNED(3 DOWNTO 0);最左位);最左位B(3)是符号位;)是符号位;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity data isport(a,b:in unsigned(3 downto 0);-相应改为a,b:in signed(3 downto 0);c:out std_logic);end data;architecture m1 of data isbe
39、gin c=1 when ab else 0;end m1;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;列举a、b具体值当定义成无符号数据类型时,若当定义成无符号数据类型时,若a=”1000”,b=0001a=”1000”,b=0001,即,即a=8a=8,b=1b=1则则结果结果c=1c=1。c=0c=0;当定义成有符号数据类型时,若当定义成有符号数据类型时,若a=”1001”,b=0001a=”1001”,b=0001,则结果,则结果(3)实数(实数(realreal):含有小数点的数,其范围为):含有小数点的数,其范围
40、为-1.0E+38-1.0E+38 +1.0E+38,+1.0E+38,实数有正负数,书写时一定要有小数点。如:实数有正负数,书写时一定要有小数点。如:-1.2,+2.5,-1.0E20-1.2,+2.5,-1.0E20(4)自然数(自然数(natural):包含包含0和和0以上的正整数。以上的正整数。(5)正整数()正整数(positive):大于大于0的正整数。的正整数。(6)其它:)其它:字符(字符(character):所定义的字符量通常有单引号括起来,如所定义的字符量通常有单引号括起来,如A,a,1等。等。字符串(字符串(string):是由双引号括起来的一个字符序列,也称为字符矢量
41、或字符串数组。是由双引号括起来的一个字符序列,也称为字符矢量或字符串数组。如:如:“integer range”时间(时间(time):是一个物理量单位,完整时间量数据应包含整数和单位两部分。是一个物理量单位,完整时间量数据应包含整数和单位两部分。错误等级(错误等级(severity level):表征系统的状态,有表征系统的状态,有note(注意)(注意)warning(警告)(警告)error(出错)(出错)failure(失败)四种。(失败)四种。2-2-3 用户定义的数据类型用户定义的数据类型格式:格式:TYPE数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型;
42、基本数据类型;或者为:或者为:TYPE数据类型名数据类型名 IS 数据类型定义数据类型定义;(1)枚举类型:一组以列表形式给出的适用于特定操作所需要的值。)枚举类型:一组以列表形式给出的适用于特定操作所需要的值。如:如:TYPE year IS(Jan,Feb,Mar,Apr,May,Jun,Aug,Sep,Oct,Nov,Dec);(2)整数类型和实数类型:如:整数类型和实数类型:如:TYPE digit IS INTEGER RANGE 0 TO 100;(3)数组类型:数组类型:格式为:格式为:TYPE 数组名数组名IS ARRAY 约束范围约束范围 OF 数据类型;数据类型;如:如:T
43、YPE word IS ARRAY(0 to 7)OF STD_LOGIC;TYPE data_bus IS ARRAY(15 downto 0)OF STD_LOGIC_VECTOR(7 DOWNTO 0);(4)其它:还可以定义物理类型、记录类型等。其它:还可以定义物理类型、记录类型等。2-2-4 数据类型的转换数据类型的转换VHDL语言中,不同数据类型不能进行运算和直接代入,必须语言中,不同数据类型不能进行运算和直接代入,必须将要代入的数据进行类型转换;将要代入的数据进行类型转换;函数名函数名功能功能.STD_LOGIC_1164STD_LOGIC_1164包集合包集合TO_STDLOG
44、ICVECTOR(A)TO_BITVECTOR(A)TO_STDLOGIC(A)TO_BIT(A)由由BIT_VECTOR转换为转换为STD_LOGIC_VECTOR由由STD_LOGIC_VECTOR转换为转换为BIT_VECTOR由由BIT转换为转换为STD_LOGIC由由STD_LOGIC转换为转换为BIT.STD_LOGIC_ARITHSTD_LOGIC_ARITH包集合包集合CONV_STD_LOGIC_VECTOR(A,位长位长)CONV_INTEGER(A)由由INTEGER,UNSIGNED,SIGNED转换为转换为STD_LOGIC_VECTOR由由UNSIGNED,SIGN
45、ED转换为转换为INTEGER.STD_LOGIC_UNSIGNEDSTD_LOGIC_UNSIGNED包集合包集合CON_INTEGER(A)由由STD_LOGIC_VECTOR转换为转换为INTEGER例例1:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY exa_2 IS PORT(inp:IN STD_LOGIC;);END exa_2;ARCHITECTURE exam OF exa_2 IS SIGNAL inb:BIT;BEGIN inb=TO_BIT(inp);END exam;例例2:SIGNAL a:BIT_VECTOR(0
46、TO 11);SIGNAL b:STD_LOGIC_VECTOR(0 TO 11);a=X”A6”;(十六进制数值赋予位矢量十六进制数值赋予位矢量BIT_VECTOR)b=TO_STDLOGICVECTOR(X”A6”);(注:十六进制数值不能赋予注:十六进制数值不能赋予STD_LOGIC_VECTOR)例例3:VARIABLE a:INTEGER;VARIABLE b:REAL;a:=INTEGER(b);b:=REAL(a);注:类型标记转换法,即直接转换。注:类型标记转换法,即直接转换。2.3 VHDL数据对象数据对象数据对象(Data Objects):凡是可以被赋予一个值的对象称为数
47、据对象凡是可以被赋予一个值的对象称为数据对象,数据对象用于传递信号。数据对象用于传递信号。数据对象名数据对象名 数据对象类型数据对象类型 数据对象值的类型数据对象值的类型 2-3-1 信号信号 信号数据对象,代表电路内部传输线路线路,其在元件之间起互连信号数据对象,代表电路内部传输线路线路,其在元件之间起互连作用,作用,信号通常在包集合、结构体和实体说明中使用。信号通常在包集合、结构体和实体说明中使用。信号数据对象的定义格式为:Signal 信号名:数据类型信号名:数据类型:=设定值设定值;如:如:Signal A:Std_logic_vector(3 Down to 0):=“0000”;注
48、意:由于注意:由于Quartus II系统往往会忽略信号对象定义时所赋初始值,建议在结系统往往会忽略信号对象定义时所赋初始值,建议在结 构体中用赋值语句完成对信号的赋值。构体中用赋值语句完成对信号的赋值。信号赋值语句的语法格式为:目标信号名目标信号名=表达式(设定值);表达式(设定值);A =“1010”2-3-2 变量变量 变量用于进程语句、函数语句、过程语句的结构中做局部的数据存储,它是一个局部量,而且变量的赋值是立即生效的,不产生赋值延时。它用于对中间数据的临时存储,并不一定代表电路的某一组件。变量数据对象的定义格式为:变量数据对象的定义格式为:Variable 变量名:数据类型变量名:
49、数据类型:=设定值设定值;如:Variable a:integer:=0;变量赋值语句的语法格式为:目标变量名:=表达式(设定值);表达式(设定值);注意:由于注意:由于QuartusIIQuartusII系统往往会忽略变量对象定义时所赋初始值,建议在结系统往往会忽略变量对象定义时所赋初始值,建议在结 构体中用赋值语句完成对变量的赋值。构体中用赋值语句完成对变量的赋值。如:a:=b+c;常数的定义格式为:Constant 常数名:数据类型:=表达式;如:Constant D1:Integer:=3;Variable D2:Std_Logic_Vector(D1 Down to 0):=”000
50、0”;Constant Pi:real:=3.14159;注意:常数数据对象定义的同时进行赋值。赋值符号为注意:常数数据对象定义的同时进行赋值。赋值符号为“:=”2-3-3 常数常数 常量是设计者为实体中某一常量名赋予的固定值。一般在程常量是设计者为实体中某一常量名赋予的固定值。一般在程序开始前进行说明序开始前进行说明2-3-4 信号、变量、信号、变量、常数对比常数对比一、定义Signal A:std_logic;Variable B:std_logic_vector(7 downto 0);Constant C:integer:=6;二、赋值及赋值时刻A=“1010”;(延时);(延时)B: