您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 窦衡_VHDL视频相关
1VHDL语言1、VHDL设计简述VHDL主要用于描述数字系统的结构、行为、功能和接口。VHDL将一个设计(元件、电路、系统)分为:外部(可视部分、端口)内部(不可视部分、内部功能、算法)例:2选1选择器的VHDL语言描述:Libraryieee;Useieee.std_logic_1164.all;Entitymux21isPort(a,b:instd_logic;S:outstd_logic;Y:outstd_logic);Endmux21;Architecturemux_archofmun21isBeginY=awhens=’0’elseBwhens=’1’;Endmux_arch;2VHDL语言的一基本些特点:VHDL语言由保留关键字组成;一般,VHDL语言对字母的大小写不敏感;但是在单引号、双引号所括的字符、字符串要例外。每条VHDL语句由一个分号(;)结束;VHDL语言对空格不敏感,可留出一些空格来增加程序的可读性;在“--”之后是的VHDL的注释语句;VHDL有以下描述风格:1.行为描述;2.数据流(寄存器传输RTL)描述;3.结构化描述;2、VHDL程序基本结构基本结构包括:实体(entity)结构体(architecture)配置(configuration)库(library)、程序包(package)库、程序包实体(entity)结构体(architecture)进程或其它并行结构配置(configuration)3、实体(说明)实体(说明):定义系统的输入输出端口语法:Entityentity_nameisGenericdeclarationsPortdeclarationsEndentity_name;(1076-1987version)Endentityentity_name;(1076-1993version)(1)类属说明确定实体或组件中定义的局部常数。模块化设计时多用于不同层次模块之间信息的传递。可从外部改变内部电路结构和规模。必须放在端口说明之前。3Generic(常数名称:类型[:=缺省值]{常数名称:类型[:=缺省值]});其中,{}表示为可选项。类属常用于定义:实体端口的大小、设计实体的物理特性、总线宽度、元件例化的数量等。例:EntitymckisGeneric(width:integer:=16);Port(add_bus:outstd_logic_vector(width-1downto0));…Entitymck;例:2输入与门是实体描述Entityand2isGeneric(risewidth:time:=1nsFallwidth:time:=1ns);Port(a1:instd_logic;a0:instd_logic;z0:outstd_logic);endentityand2;注意:数据类型time用于仿真模块的设计。综合器仅支持数据类型为整数的类属值。(2)端口声明端口声明:确定输入输出端口的数目和类型。port(端口名称{,端口名称}:端口模式数据类型;端口名称{,端口名称}:端口模式数据类型);其中,端口模式:in输入型,此端口为只读型。out输出型,此端口只能对其赋值。inout输入输出型,既可读也可赋值。Buffer缓冲型,与out相似,但可读。数据类型:指端口上流动的数据的表达格式。为预先定义好的数据类型。如:bit、bit_vector、integer、std_logic、std_logic_vector等例:Entitynand2isPort(A,b:inbit;Z:outbit);Endnand2;4(2)结构体作用:定义系统(或模块)的行为、元件几内部的连接关系,即描述其逻辑功能。两个组成部分:对数据类型、常数、信号、子程序、元件等元素的说明部分。以各种不同的描述风格描述的系统的逻辑功能部分。常用的描述风格有:行为描述、数据流。实体与结构体的关系:一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同(并行关系)。但一个结构体只能对应一个实体。结构体的语法:Architecture结构体名称of实体名称is[说明语句]内部信号、常数、数据类型、子程序(函数、过程)、元件等的说明;Begin[并行处理(功能描述)语句;]End[architecture]结构体名称;注意:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名。例:结构体中错误的信号声明EntityxisPort(sig,const:inbit;Out1,out2:outbit);Endx;5ArchitectureaofxisSignalsig:bit;Constantconst:bit:=’1’;Begin…Enda;其中,sig与const有重名。例:一个完整描述(3bit计数器)Entitycounter3isPort(clk,reset:inbit;Count:outintegerrange0to7);Endcounter3;Architectureaofcounter3isSignalcount_tmp:integerrange0to7;BeginProcessBeginWaituntil(clk’eventandclk=’1’);Ifreset=’1’orcount_tmp=7thenCount_tmp=0;ElseCount_tmp=count_tmp+1;Endif;Endprocess;Count=count_tmp;Enda;3bit计数器的等效描述(out与buffer的区别)Entitycounter3isPort(clk,reset:inbit;Count:bufferintegerrange0to7);Endcounter3;Architectureaofcounter3is--Signalcount_tmp:integerrange0to7;BeginProcessBeginWaituntil(clk’eventandclk=’1’);Ifreset=’1’orcount=7thenCount=0;ElseCount=count+1;Endif;Endprocess;Enda;63、配置配置:从某个实体的多种结构体描述方式中选择特定的一个的过程。简单配置的语法:Configuration配置名of实体名isFor选配结构体名Endfor;End配置名;注意:选配结构体名后面没有分号。例:一个与非门不同实现方式的配置如下:Libraryieee;Useieee.std_logic_1164.all;EntitynandisPort(a,b:instd_logic;c:outstd_logic);Endentitynand;Architecturea1ofnandisBeginc=not(aandb)Endarchitecturea1;Architecturea2ofnandisBeginc=’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’;Endarchitecturea2;ConfigurationfirstofnandisFora1;Endfor;Endfirst;ConfigurationsecondofnandisFora2;Endfor;Endsecond;例:一个对计数器实现多种形式的配置如下:EntitycounterisPort(clr,clk:inbit;Data_out:outinteger);endentitycounter;architecturecount_255ofcounterisbeginprocess(clk)variablecount:integer:=0;7beginifclr=’1’thencount:=0;elsifclk’eventandclk=’1’thenifcount=255thencount:=0;elsecount:=count+1;endif;endif;data_out=count;endprocess;endcount_255;architecturecount_46kofcounterisbeginprocess(clk)variablecount:integer:=0;beginifclr=’1’thencount:=0;elsifclk’eventandclk=’1’thenifcount=65535thencount:=0;elsecount:=count+1;endif;endif;data_out=count;endprocess;endcount_64k;configurationsmall_countofcounterisforcount_255endfor;endsmall_count;configurationbig_countofcounterisforcount_64kendfor;endbig_count;4、程序包、库程序包:已定义的常数、数据类型、元件调用说明、子程序的一个集合。目的:方便公共信息、资源的访问和共享。库:多个程序包构成库。8程序包说明的内容:常数说明;VHDL数据类型说明;元件说明;子程序说明;程序包的结构包括:程序包说明(包首)程序包主体(包体)A、程序包说明(包首)语法:Package程序包名is{包说明项}End程序包名;包声明项可由以下语句组成:Use语句(用来包括其它程序包);类型说明;子类型说明;常量说明;信号说明;子程序说明;元件说明。例:程序包说明PackageexampleisTypebyteisrange0to255;Subtypenibbleisbyterange0to15;Constantbyte_ff:byte:=255;Signaladdend:nibble;Componentbyte_adderPort(a,b:inbyte;C:outbyte;Overflow:outboolean);Endcomponent;Functionmy_function(a:inbyte)returnbyte;--函数声明Endexample;B、程序包包体程序包的内容:子程序的实现算法。包体语法:Packagebody程序包名is{包体说明项}End程序包名;包体说明项可含:Use语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。9程序包首与程序包体的关系程序包体并非必须,只有在程序包中要说明子程序时,程序包体程序是必须的。程序包首可以独立定义和使用。如下:PackagesevenisSubtypesegmentsisbit_vector(0to6);Typebcdisrange0to9;Endseven;注意:我们定义的这个程序包会被自动放入到work库中。调用:Librarywork;Usework.seven.all;EntitydecoderisPort(input:inbcd;Drive:outsegments);Enddecoder;ArchitectureartofdecoderisBeginWithinputselectDrive=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;10C、库的种类VHDL库可分为5种:(1)IEEE库定义了四个常用的程序包:Std_logic_1164(
本文标题:窦衡_VHDL视频相关
链接地址:https://www.777doc.com/doc-4876129 .html