基于FPGA的自主可控SOC设计 课件 第二讲 硬件描述语言VHDL设计_第1页
基于FPGA的自主可控SOC设计 课件 第二讲 硬件描述语言VHDL设计_第2页
基于FPGA的自主可控SOC设计 课件 第二讲 硬件描述语言VHDL设计_第3页
基于FPGA的自主可控SOC设计 课件 第二讲 硬件描述语言VHDL设计_第4页
基于FPGA的自主可控SOC设计 课件 第二讲 硬件描述语言VHDL设计_第5页
已阅读5页,还剩364页未读 继续免费阅读

下载本文档

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

文档简介

硬件描述语言VHDL设计内容纲要

VHDL语法结构组合逻辑电路设计时序电路设计有限状态机设计一、VHDL语法结构1.1VHDL概述1.2VHDL程序结构1.3VHDL语言元素1.4VHDL基本逻辑语句1.5VHDL描述方式41.1VHDL概述

常用硬件描述语言:1、ABEL-HDL2、AHDL3、VHDL4、VerilogHDL41.1VHDL概述

常用硬件描述语言:1、ABEL-HDL2、AHDL3、VHDL4、VerilogHDLIEEE标准VHDL:VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage

1.1什么是VHDL(HDL)?

VHDL发展

nIEEE工业标准硬件描述语言

n

用于仿真及综合的高级描述语言

VHDL发展

nIEEE工业标准硬件描述语言

n

用于仿真及综合的高级描述语言

80年代初由美国国防部在实施超高速集成

电路(VHSIC)项目时开发的。

1987年IEEE协会批准为IEEE工业标准

称为IEEE1076-1987。

1993年更新为93标准,IEEE1076.

93。

1996年IEEE1076.3成为综合标准VHDL和VerilogHDLVerilogHDL由Verilog公司开发,1995年成为IEEE标准。优点:与C语言风格类似,简单易学缺点:数据类型定义模糊化VHDL优点:功能强大、通用性强,语法严谨缺点:语法结构复杂参考文献

VHDL在线参考/vhdlref/index.htmlVerilog常见问答/verilogfaq/参考书籍1.成为IEEE标准的硬件描述语言是VHDLAHDLABEL-HDLVerilogABCD提交多选题1分此题未设置答案,请点击右侧设置按钮VHDL在电子系统设计中的应用电子系统的设计模块VHDL在电子系统设计中的应用电子系统设计的描述等级1、行为级2、RTL级(Registertransferlevel)3、逻辑门级4、版图级用VHDL可以描述以上四个等级VHDL在电子系统设计中的应用行为级VHDL在电子系统设计中的应用寄存器传输级VHDL在电子系统设计中的应用逻辑门级VHDL在电子系统设计中的应用版图级1.2VHDL程序结构

实体(Entity)

结构体(Architecture)

配置(Configuration)

库(Library)、程序包(Package)VHDL设计文件的两个基本组成部分实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)一个完整的VHDL程序VHDL程序基本结构VHDL设计文件的两个基本组成部分实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)一个完整的VHDL程序VHDL程序基本结构实体部分描述设计系统的外部接口信号(即输入/输出信号)VHDL设计文件的两个基本组成部分实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)一个完整的VHDL程序VHDL程序基本结构实体部分描述设计系统的外部接口信号(即输入/输出信号)结构体用于描述系统的内部电路VHDL设计文件的两个基本组成部分实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)一个完整的VHDL程序VHDL程序基本结构实体部分描述设计系统的外部接口信号(即输入/输出信号)结构体用于描述系统的内部电路配置用于从库中选取所需元件安装到设计单元的实体中VHDL设计文件的两个基本组成部分实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)一个完整的VHDL程序VHDL程序基本结构实体部分描述设计系统的外部接口信号(即输入/输出信号)结构体用于描述系统的内部电路配置用于从库中选取所需元件安装到设计单元的实体中包集合存放各设计模块能共享的数据类型、常数、子程序等VHDL设计文件的两个基本组成部分实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)一个完整的VHDL程序库用于存放已编译的实体、结构体、包集合和配置VHDL程序基本结构实体部分描述设计系统的外部接口信号(即输入/输出信号)结构体用于描述系统的内部电路配置用于从库中选取所需元件安装到设计单元的实体中包集合存放各设计模块能共享的数据类型、常数、子程序等VHDL程序结构例1一个2输入的与门的逻辑描述LIBRARYieee; --库说明语句USEieee.std_logic_1164.ALL;--程序包说明语句ENTITYand2IS PORT(a,b :INSTD_LOGIC; y:OUTSTD_LOGIC);ENDand2;ARCHITECTUREand2xOFand2ISBEGIN y<=aANDb;ENDand2x;实体部分结构体部分19

库、程序包

实体(Entity)

结构体(Architecture)

进程或其它并行结构

配置(Configuration)结构关系20器件或子系统

ARCHITECTUREProcessProcessENTITYSequentialProcessCombinationalProcessportsportscomponentportsports实体结构VHDL结构要点1、ENTITY(实体)格式:

ENTITY实体名IS[类属参数说明][端口说明]EndENTITY实体名;其中端口说明格式为:

PORT(端口名1,端口名N:方向:类型)其中方向有:IN,OUT,INOUT,BUFFER,LINKAGE

22

1、ENTITY(实体)----类属说明

类属说明:确定实体或组件中定义的局部常数。模块化设计时多用于不同层次模块之间信息的传递。可从外部改变内部电路结构和规模。类属说明必须放在端口说明之前。Generic(

常数名称:类型[:=缺省值]{常数名称:类型[:=缺省值]});23类属常用于定义:实体端口的大小、设计实体的物理特性、总线宽度、元件例化的数量等。

entitymckisgeneric(width:integer:=16);port(add_bus:outstd_logic_vector(width-1downto0));

1、ENTITY(实体)----类属说明24例:2输入与门的实体描述

entityand2isgeneric(risewidth:time:=1ns;fallwidth:time:=1ns);port(a1:instd_logic;a0:instd_logic;z0:outstd_loigc);endentityand2;

注:数据类型time用于仿真模块的设计。综合器仅支持数据类型为整数的类属值。

1、ENTITY(实体)----类属说明25端口模式:

in:输入型,此端口为只读型。

out:

输出型,只能在实体内部对其赋值。

inout:输入输出型,既可读也可赋值。

buffer:缓冲型,与out相似,但可读。Port(端口名称{,端口名称}:端口模式数据类型;

端口名称{,端口名称}:端口模式数据类型);端口声明:确定输入、输出端口的数目和类型。

1、ENTITY(实体)----端口声明26out和

buffer的区别:27

指端口上流动的数据的表达格式。为预先定义好的数据类型。

如:bit、bit_vector、integer、

std_logic、std_logic_vector等。

1、ENTITY(实体)----数据类型27

指端口上流动的数据的表达格式。为预先定义好的数据类型。

如:bit、bit_vector、integer、

std_logic、std_logic_vector等。例:entitynand2isentitym81isport(port(a,b:inbit;a:inbit_vector(7downto0);z:outbitsel:inbit_vector(2downto0););b:outbit);endentitynand2;endentitym81;

1、ENTITY(实体)----数据类型例子(HalfAdd)

其内部结构将由Architecture来描述

1、ENTITY(实体)----例程2.通过外部可以改变电路内部结构和规模的是PORTBUFFERGenericSignalABCD提交多选题1分此题未设置答案,请点击右侧设置按钮格式:

Arcthitecture

构造体名of

实体名is

[定义语句]内部信号、常数、元件、数据类型、函数等的定义

begin[并行处理语句:block/process/function

/

procedure]

end构造体名;注:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名。

2、ARCTHITECTURE(构造体)30结构体结构体说明结构体功能描述

常数说明

数据类型说明

信号说明

例化元件说明

子程序说明

块语句

进程语句

信号赋值语句子程序调用语句

元件例化语句例子(HalfAdd)

2、ARCTHITECTURE(构造体)例子(FullAdd)(学习如何调用现有模块)

2、ARCTHITECTURE(构造体)实例(FullAdd)-entity

2、ARCTHITECTURE(构造体)实例(FullAdd)-architecture

2、ARCTHITECTURE(构造体)36实体与结构体的关系设计实体结构体1结构体2结构体3结构体n。。。VHDL中的设计单元VHDL中的设计单元(可以独立编译)3、Library库STD库--VHDL的标准库IEEE库--VHDL的标准库的扩展面向ASIC的库--不同的工艺不同公司自定义的库普通用户自己的库库:数据的集合。内含各类包定义、实体、构造体等用户自己的库当您的VHDL文件被编译后,编译的结果储存在特定的目录下,这个目录的逻辑名称即Library,此目录下的内容亦即是这个Library的内容。3、Library库40VHDL库可分为5种:

1)IEEE库定义了四个常用的程序包:

std_logic_1164(std_logictypes&relatedfunctions)

std_logic_arith(arithmeticfunctions)

3、Library库—库的种类40VHDL库可分为5种:

1)IEEE库定义了四个常用的程序包:

std_logic_1164(std_logictypes&relatedfunctions)

std_logic_arith(arithmeticfunctions)

std_logic_signed(signedarithmetic

3、Library库—库的种类40VHDL库可分为5种:

1)IEEE库定义了四个常用的程序包:

std_logic_1164(std_logictypes&relatedfunctions)

std_logic_arith(arithmeticfunctions)

std_logic_signed(signedarithmeticfunctions)

3、Library库—库的种类40VHDL库可分为5种:

1)IEEE库定义了四个常用的程序包:

std_logic_1164(std_logictypes&relatedfunctions)

std_logic_arith(arithmeticfunctions)

std_logic_signed(signedarithmeticfunctions)

std_logic_unsigned(unsigned

3、Library库—库的种类40VHDL库可分为5种:

1)IEEE库定义了四个常用的程序包:

std_logic_1164(std_logictypes&relatedfunctions)

std_logic_arith(arithmeticfunctions)

std_logic_signed(signedarithmeticfunctions)

std_logic_unsigned(unsignedarithmeticfunctions)3、Library库—库的种类41TypeSTD_LOGIC:

9logicvaluesystem(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)•‘W’,‘L’,‘H”weakvalues(NotsupportedbySynthesis)•‘X’-(not‘x’)usedforunknown•‘Z’-(not‘z’)usedfortri-state•‘-’Don’tCare

3、Library库—库的种类42

2)STD库(默认库)库中程序包为:standard,定义最基本的数据类型:

Bit,bit_vector,Boolean,

Integer,Real,andTime

注:TypeBit

2logicvaluesystem(‘0’,‘1’)

3、Library库—库的种类42

2)STD库(默认库)库中程序包为:standard,定义最基本的数据类型:

Bit,bit_vector,Boolean,

Integer,Real,andTime

注:TypeBit

2logicvaluesystem(‘0’,‘1’)

3)面向ASIC的库

4)WORK库(默认库)

5)用户定义库3、Library库—库的种类43程序包的使用有两种常用格式:

例:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.conv_integer;

library库名;

use库名.程序包名.项目名

use库名.程序包名.All;3、Library库—库的使用442选1选择器4、Package包46程序包:已定义的常数、数据类型、元件调用说明、子程序的一个集合。目的:方便公共信息、资源的访问和共享。库:多个程序包构成库。

程序包与库关系47程序包说明的内容常量说明;

VHDL数据类型说明;元件说明;子程序说明;程序包的结构包括程序包说明(包首)程序包主体(包体)4、Package包--结构48包声明项可由以下语句组成:

use语句(用来包括其它程序包);类型说明;子类型说明;常量说明;信号说明;子程序说明;元件说明。

package程序包名is{包说明项}

end程序包名;1)程序包说明(包首)语法:4、Package包--结构49例:程序包说明50包体说明项可含:

use语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。

packagebody程序包名is{包体说明项}

end程序包名;2)程序包包体程序包的内容:子程序的实现算法。包体语法:4、Package包--结构51packagesevenissubtypesegmentsisbit_vector(0to6);typebcdisrange0to9;endseven;librarywork;usework.seven.all;entitydecoderisport(input:inbcd;drive:outsegments);enddecoder;architectureartofdecoderisbegin52withinputselectdrive<=B“1111110”when0,B“0110000”when1,B“1101101”when2,B“1111001”when3,B“0110011”when4,B“1011011”when5,B“1011111”when6,B“1110000”when7,B“1111111”when8,B“1111011”when9,B“0000000”whenothers;endarchitectureart;abcdefg10mA38124567910edcdpbafg数码管1234567891010mAedcdpbafg共阳极共阴极abcdefgdp156102347893.若7段数码管的编码顺序为gfedcba,共阳极数码管要显示数字“3”的编码是0101010011011001100001010101ABCD提交多选题1分此题未设置答案,请点击右侧设置按钮535、Configuration配置设计实体结构体1结构体2结构体3结构体n。。。一个设计实体的多种实现方式配置:从某个实体的多种结构体描述方式中选择特定的一个。54configuration配置名of实体名isfor选配结构体名

endfor;end配置名;5、Configuration配置55libraryieee;useieee.std_logic_1164.all;entitynandisport(a:instd_logic;b:instd_logic;c:outstd_logic);endentitynand;architectureart1ofnandisbeginc<=not(aandb);endarchitectureart1;例:一个与非门不同实现方式的配置如下:

56architectureart2ofnandisbeginc<=‘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’;endarchitectureart2;57configurationfirstofnandisforart1;endfor;endfirst;configurationsecondofnandisforart2endfor;endsecond;5、Configuration配置VHDL中的结构关系1.3VHDL语言元素1、VHDL数据对象2、VHDL数据类型3、VHDL操作符1.3.1VHDL数据对象1、Constant(常量)在程序中不可以被赋值

2、Variable(变量)在程序中可以被赋值(用“:=”),赋值后立即变化为新值。3、Signal(信号)在程序中可以被赋值(用“<=”),但不立即更新,当进程挂起后,才开始更新。4、File(文件)在程序中实现对文件的写入和读出操作。

VHDL中的对象使用

variable

x,y:integer;--定义了整数型的变量对象x,y

constantVcc:real;--定义了实数型的常量对象Vcc

signalclk,reset:bit;--定义了位类型的信号对象clk,reset1.3.1VHDL数据对象变量与信号区别注意1、variable只能定义在process和subprogram(包括function和procedure)中,不可定以在其外部。

变量与信号区别注意1、variable只能定义在process和subprogram(包括function和procedure)中,不可定以在其外部。2、signal不能定义在process和subprogram(包括function和procedure)中,只可定以在其外部,即结构体Architecture开始部分。①信号是全局量,可以进行进程之间的通信;而变量是局部量,只能用于进程或子程序(即函数和过程)中;变量与信号区别①信号是全局量,可以进行进程之间的通信;而变量是局部量,只能用于进程或子程序(即函数和过程)中;②对变量的赋值是立即发生的,对信号的赋值须经一段时间延迟才会发生;变量与信号区别①信号是全局量,可以进行进程之间的通信;而变量是局部量,只能用于进程或子程序(即函数和过程)中;②对变量的赋值是立即发生的,对信号的赋值须经一段时间延迟才会发生;③对变量的赋值用“:=”,对信号的赋值用“<=”;④信号可以比拟为硬件端口之间的连接,而变量则与硬件之间没有对应关系;变量与信号区别Signal对象的常用属性delayed[(时延值)]:使信号产生固定时间的延时并返回stable[(时延值)]:返回boolean,信号在规定时间内没有变化返回truetransaction:返回bit类型,信号每发生一次变化,返回值翻转一次1.3.1VHDL数据对象Signal对象的常用属性delayed[(时延值)]:使信号产生固定时间的延时并返回stable[(时延值)]:返回boolean,信号在规定时间内没有变化返回truetransaction:返回bit类型,信号每发生一次变化,返回值翻转一次例子:A<=B’delayed(10ns);--B延时10ns后赋给A;

if(B’Stable(10ns));--判断B在10ns中是否发生变化1.3.1VHDL数据对象信号的event和last_value属性经常用来确定信号的边沿

属性应用1.3.1VHDL数据对象信号的event和last_value属性经常用来确定信号的边沿

属性应用判断clk的上升沿if((clk’event)and(clk=‘1’)and(clk’last_value=‘0’))then判断clk的下降沿if((clk’event)and(clk=‘0’)and(clk’last_value=‘1’))then1.3.1VHDL数据对象初始化赋值SIGNALcontrol:BIT:=’0’;SIGNALcount:INTEGERRANGE0TO100;VARIABLEcontrol:BIT:=’0’;对信号、变量赋初值的操作是不可综合的,仅能用在仿真中。1.3.1VHDL数据对象例子1

1.3.1VHDL数据对象例子21.3.1VHDL数据对象文件(File)通过规定的过程和函数可以实现对文件对象的读出和写入操作。文件声明的格式如下:TYPE文件类型名ISFILEOF数据类型;TYPEfiletypeISFILEOFSTD_LOGIC_VECTOR;FILEexample:filetypeISIN“C:/T1.dat”;1.3.1VHDL数据对象文件(File)

定义文件输入/输出对象1.3.1VHDL数据对象文件(File)

文件操作按行进行处理,需要定义行变量1.3.1VHDL数据对象文件(File)

VHDL不能直接处理行变量,需要定义位变量1.3.1VHDL数据对象文件(File)

读写操作需要将行变量转为位变量1.3.1VHDL数据对象4.VHDL的数据对象包括信号常量变量文件ABCD提交多选题1分此题未设置答案,请点击右侧设置按钮标准数据类型用户自定义数据类型数据类型的转换1.3.2VHDL数据类型1)标准数据类型STD_LOGIC类型的数据可以具有九种取值

‘U’:初始值

X’:不定态

‘0’:强制0

‘1’:

强制1

‘Z’:

高阻态

‘W’:弱信号不定态

‘L’:弱信号0

’H’:弱信号1

’_’:不可能情况(可忽略值)

其中,‘

X’方便了系统仿真,‘Z’方便了双向总线的描述。

IEEE库STD_LOGIC_1164STD_LOGIC_VECTOR类型定义如下:

TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;

IEEE库STD_LOGIC_1164STD_LOGIC_VECTOR类型定义如下:

TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;libraryieee;useieee.std_logic_1164.all;entitymux4isport(d:instd_logic_vector(1downto0);a0:instd_logic;y:outstd_logic);endmux4;

IEEE库STD_LOGIC_1164例子3基本类型应用基本类型应用例子4要点:赋值语句中的方向应和声明中的方向一样2)用户自定义数据类型通用格式

TYPE

类型名IS数据类型定义用户可以定义的数据类型枚举类型enumberated、整数型integer、实数型real、数组类型array、纪录类型record、时间类型time、文件类型file、存取类型access(1)整数类型(integer)、实数类型(real)

type<数据类型名>is<数据类型><约束范围>;

typedigitisintegerrange0to9;

typemyrealisrealrange–1e3to1e3;

2)用户自定义数据类型(2)枚举类型(enumeration)

type<数据类型名>is(<元素1>,<元素2>,…);

typearith_opis(add,sub,mul,div);typecoloris(red,green,blue);2)用户自定义数据类型(2)枚举类型(enumeration)

type<数据类型名>is(<元素1>,<元素2>,…);

typearith_opis(add,sub,mul,div);typecoloris(red,green,blue);typebitis(‘0’,‘1’);typebooleanis(false,true);typestd_ulogicis(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);2)用户自定义数据类型(3)数组类型(array)、记录类型(record)

typebig_wordisarray(0to63)ofbit;--一维数组typematrix_1isarray(0to15,0to31)ofbit;--二维数组typeinstructionisrecordoperator:arith_op;op1:integer;op2:integer;endrecord;2)用户自定义数据类型(4)子类型(subtype)

subtype<标识符>is<基类型><范围限制>;

subtypemy_intisintegerrange0to65535;subtypeiobusisstd_logic_vector(7downto0);2)用户自定义数据类型格式

type

数据类型名is

范围

units基本单位;

单位;

endunits2)用户自定义数据类型(5)时间类型(time)

格式

type

数据类型名is

范围

units基本单位;

单位;

endunits2)用户自定义数据类型(5)时间类型(time)

typetimeisrange-1E18to1E18unitsus;

ms=1000us;sec=1000ms;min=60sec;endunits格式

type

数据类型名is

范围

units基本单位;

单位;

endunits2)用户自定义数据类型(5)时间类型(time)

typetimeisrange-1E18to1E18unitsus;

ms=1000us;sec=1000ms;min=60sec;endunits注意:引用时间时,有的编译器要求量与单位之间应有一个空格如:1ns;不能写为1ns;(1)类型标记法。用类型名称来实现关系密切的标量类型之间的转换。例如: VARIABLEx:INTEGER;

VARIABLEy:REAL;

3)数据类型转换(1)类型标记法。用类型名称来实现关系密切的标量类型之间的转换。例如: VARIABLEx:INTEGER;

VARIABLEy:REAL;使用类型标记(即类型名)实现类型转换时,可采用赋值语句:

x:=INTEGER(y);y:=REAL(x)。3)数据类型转换★CONV_INTEGER():将STD_LOGIC_VECTOR类型转换成

INTEGER类型。★CONV_STD_LOGIC_VECTOR():将INTEGER类型、UNSIGNED

类型或SIGNED类型转换成STD_LOGIC_VECTOR类型。

3)数据类型转换★CONV_INTEGER():将STD_LOGIC_VECTOR类型转换成

INTEGER类型。★CONV_STD_LOGIC_VECTOR():将INTEGER类型、UNSIGNED

类型或SIGNED类型转换成STD_LOGIC_VECTOR类型。★TO_BIT():将STD_LOGIC类型转换成BIT类型。★TO_BIT_VECTOR():将STD_LOGIC_VECTOR类型转换

BIT_VECTOR类型。

3)数据类型转换★CONV_INTEGER():将STD_LOGIC_VECTOR类型转换成

INTEGER类型。★CONV_STD_LOGIC_VECTOR():将INTEGER类型、UNSIGNED

类型或SIGNED类型转换成STD_LOGIC_VECTOR类型。★TO_BIT():将STD_LOGIC类型转换成BIT类型。★TO_BIT_VECTOR():将STD_LOGIC_VECTOR类型转换

BIT_VECTOR类型。★TO_STD_LOGIC():将BIT类型转换成STD_LOGIC类型。★TO_STD_LOGIC_VECTOR():

将BIT_VECTOR类型转换成

STD_LOGIC_VECTOR类型。3)数据类型转换★CONV_INTEGER():将STD_LOGIC_VECTOR类型转换成

INTEGER类型。★CONV_STD_LOGIC_VECTOR():将INTEGER类型、UNSIGNED

类型或SIGNED类型转换成STD_LOGIC_VECTOR类型。★TO_BIT():将STD_LOGIC类型转换成BIT类型。★TO_BIT_VECTOR():将STD_LOGIC_VECTOR类型转换

BIT_VECTOR类型。★TO_STD_LOGIC():将BIT类型转换成STD_LOGIC类型。★TO_STD_LOGIC_VECTOR():

将BIT_VECTOR类型转换成

STD_LOGIC_VECTOR类型。3)数据类型转换该函数由STD_LOGIC_UNSIGNED程序包定义★CONV_INTEGER():将STD_LOGIC_VECTOR类型转换成

INTEGER类型。★CONV_STD_LOGIC_VECTOR():将INTEGER类型、UNSIGNED

类型或SIGNED类型转换成STD_LOGIC_VECTOR类型。★TO_BIT():将STD_LOGIC类型转换成BIT类型。★TO_BIT_VECTOR():将STD_LOGIC_VECTOR类型转换

BIT_VECTOR类型。★TO_STD_LOGIC():将BIT类型转换成STD_LOGIC类型。★TO_STD_LOGIC_VECTOR():

将BIT_VECTOR类型转换成

STD_LOGIC_VECTOR类型。3)数据类型转换该函数由STD_LOGIC_UNSIGNED程序包定义该函数由STD_LOGIC_ARITH程序包定义★CONV_INTEGER():将STD_LOGIC_VECTOR类型转换成

INTEGER类型。★CONV_STD_LOGIC_VECTOR():将INTEGER类型、UNSIGNED

类型或SIGNED类型转换成STD_LOGIC_VECTOR类型。★TO_BIT():将STD_LOGIC类型转换成BIT类型。★TO_BIT_VECTOR():将STD_LOGIC_VECTOR类型转换

BIT_VECTOR类型。★TO_STD_LOGIC():将BIT类型转换成STD_LOGIC类型。★TO_STD_LOGIC_VECTOR():

将BIT_VECTOR类型转换成

STD_LOGIC_VECTOR类型。注意:引用时必须首先打开库和相应的程序包。3)数据类型转换该函数由STD_LOGIC_UNSIGNED程序包定义该函数由STD_LOGIC_ARITH程序包定义以下函数由STD_LOGIC_1164程序包定义分类运算符功能二元算术运算符+加-减*乘/除mod求模rem求余**乘方一元算术运算符+正号-负号abs绝对值关系运算符=相等/=不相等<小于>大于<=小于等于>=大于等于1.3.3VHDL操作符分类运算符功能二元算术运算符+加-减*乘/除mod求模rem求余**乘方一元算术运算符+正号-负号abs绝对值关系运算符=相等/=不相等<小于>大于<=小于等于>=大于等于分类运算符功能二元逻辑运算符and与Or或Nand与非Nor或非xor异或一元逻辑运算符not求反并置运算符&连接赋值运算符<=信号赋值:=变量赋值=>结合1.3.3VHDL操作符运算符优先级NOT、ABS、**;REM、MOD、/、*;—(负)、+(正);&、—(减)、+(加);>=、<=、>、<、/=、=;XOR、NOR、NAND、OR、AND。注意:在编写VHDL程序时,必须保证操作数的数据类型与运算符所要求的数据类型一致。1.3.3VHDL操作符5.信号的赋值的符号是<=>=:=::ABCD提交多选题1分此题未设置答案,请点击右侧设置按钮“<=”赋值符:用于将数据传给信号。“:=”赋值符:用于将数据传给变量。

该赋值符也用于为信号、变量、常量等指定初值。

“=>”符号:在WHEN语句中出现,其含义是“THEN(则)”。1.3.3VHDL操作符连接操作符---使用&1.3.3VHDL操作符集合操作---使用()1.3.3VHDL操作符集合操作---采用序号1.3.3VHDL操作符集合操作--采用others1.3.3VHDL操作符逻辑操作符1.3.3VHDL操作符数学运算符注意:上述运算符应用于integer,real,time类型,不能用于vector(如果希望用于vector,可以使用库IEEE的std_logic_unsigned包,它对算术运算符进行了扩展)1.3.3VHDL操作符6.连接操作符是|and&&&ABCD提交多选题1分此题未设置答案,请点击右侧设置按钮1.4VHDL基本逻辑语句1、并行处理(concurrent)语句的执行与书写顺序无关,并行块内的语句时同时执行。2、顺序处理(sequential)语句的执行按书写的先后次序,从前到后顺序执行。Architecture中的语句及子模块之间是并行处理的子模块block中的语句是并行处理的子模块process中的语句是顺序处理的子模块subprogram中的function和procedure是顺序处理的1.4VHDL基本逻辑语句Arcthitecture(构造体)格式:(前面已讲)

Arcthitecture

构造体名of

实体名is

[定义语句]内部信号、常数、元件、数据类型、函数等的定义

begin[并行处理语句和block、process、function、procedure]

end构造体名;

1.4VHDL基本逻辑语句1)Block普通Block格式

块名:

BLOCK[定义语句]

begin[并行处理语句concurrentstatement]

endblock

块名Architecture中的Block条件Block格式

块名:

BLOCK

[(布尔表达式)]

[定义语句]

begin[并行处理语句concurrentstatement[信号]<=

guarded[信号,延时];

endblock

块名1)BlockBlock例子

myblock1:

block(clk=‘1’)

signal:qin:bit:=‘0’;

beginqout<=guardedqin;

endblockmyblock1

1)BlockBlock例子

myblock1:

block(clk=‘1’)

signal:qin:bit:=‘0’;

beginqout<=guardedqin;

endblockmyblock1

myblock2:

block

beginqout<=qin;

endblock

myblock2用BLOCK语句描述2选1电路的程序。

ENTITYmux2_1IS

PORT(d0,d1,sel :IN STD_LOGIC; q :OUT STD_LOGIC);ENDmux2_1;ARCHITECTUREamuxOFmux2_1IS

SIGNALtmp1,tmp2,tmp3:STD_LOGIC;BEGINcale:BLOCK

BEGIN tmp1<=d0ANDsel; tmp2<=d1AND(notsel); tmp3<=tmp1ORtmp2; q<=tmp3;

ENDBLOCKcale;ENDamux;

上述结构体中只有一个BLOCK块,若电路复杂时可由几个BLOCK块组成。用BLOCK语句描述2选1电路的程序。

ENTITYmux2_1IS

PORT(d0,d1,sel :IN STD_LOGIC; q :OUT STD_LOGIC);ENDmux2_1;ARCHITECTUREamuxOFmux2_1IS

SIGNALtmp1,tmp2,tmp3:STD_LOGIC;BEGINcale:BLOCK

BEGIN tmp1<=d0ANDsel; tmp2<=d1AND(notsel); tmp3<=tmp1ORtmp2; q<=tmp3;

ENDBLOCKcale;ENDamux;

上述结构体中只有一个BLOCK块,若电路复杂时可由几个BLOCK块组成。2选1数据选择器d1d0qselu2u1u3tmp1tmp2tmp3用带保护条件的BLOCK语句描述一个锁存器的结构。

ENTITYlatch

IS

PORT(d,clk :IN STD_LOGIC; q,qn :OUT STD_LOGIC);

ENDlatch;

ARCHITECTURElatch_aOFlatchIS

BEGIN g1:BLOCK(clk='1')

BEGIN q<=guardeddafter5ns; qn<=guardednot(d)after7ns;

ENDBLOCKg1;

ENDlatch_a;用带保护条件的BLOCK语句描述一个锁存器的结构。

ENTITYlatch

IS

PORT(d,clk :IN STD_LOGIC; q,qn :OUT STD_LOGIC);

ENDlatch;

ARCHITECTURElatch_aOFlatchIS

BEGIN g1:BLOCK(clk='1')

BEGIN q<=guardeddafter5ns; qn<=guardednot(d)after7ns;

ENDBLOCKg1;

ENDlatch_a;qnqQDCdclk

在BLOCK块中的两个信号传送语句都写有前卫关键词guarded,表明只有clk=’1’为真时,这两个语句才能执行。

(注意:这里的综合工具不支持guardedblock

语句和after短语。)2)process格式[进程名:]

process[(触发信号列表)][定义语句;]

begin[串行处理语句sequentialstatement;]

endprocess2)process格式[进程名:]

process[(触发信号列表)][定义语句;]

begin[串行

温馨提示

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

评论

0/150

提交评论