您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 第三章 硬件描述语言VHDL基础
1第三章硬件描述语言VHDL基础3.1VHDL语言程序的基本结构3.2VHDL语言的数据类型及运算操作符3.3VHDL语言的主要描述语句3.4VHDL语言构造体的描述方式23.1VHDL语言程序的基本结构实体(Entity),构造体(Architecture),配置(Configuration),包集合(Package),和库(Library)--eqcomp4isafourbitequalitycomparatorLibraryIEEE;useIEEE.std_logic_1164.all;entityeqcomp4isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;architecturedataflowofeqcomp4isbeginequal=‘1’whena=belse‘0’;Enddataflow;eqcomp4.vhd包实体构造体文件名和实体名一致每行;结尾关键字begin关键字end后跟构造体名关键字end后跟实体名库VHDL大小写不敏感33.1.1VHDL语言设计的基本设计单元实体(Entity)描述此设计功能输入输出端口(Port);在层次化设计时,Port为模块之间的接口;在芯片级,则代表具体芯片的管脚。实体说明ENTITY实体名ISPORT(端口名(,端口名):方向数据类型名;:端口名(,端口名):方向数据类型名);END实体名;Entityeqcomp4isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;a[3..0]b[3..0]equal4基本数据类型:BIT和BIT_VECTORSTD_LOGIC和STD_LOGIC_VECTOR端口模式方向说明IN输入到实体OUT从实体输出INOUT双向(可作为CPU的数据总线)BUFFER输出(但可以反馈到实体内部)LINKAGE不指定方向5Out与Buffer的区别Entitytest1isport(a:instd_logic;b,c:outstd_logic);endtest1;architectureaoftest1isbeginb=not(a);c=b;--Errorenda;Entitytest2isport(a:instd_logic;b:bufferstd_logic;c:outstd_logic);endtest2;architectureaoftest2isbeginb=not(a);c=b;enda;结论:均表示输出,但BUFFER声明的信号可以反馈到实体内部,而OUT声明的信号却不可以。6构造体描述设计单元具有的具体功能结构体有三种描述方式行为描述(behavioral)数据流描述(dataflow)结构化描述(structural)格式:ARCHITECTURE构造体名OF实体名IS[定义语句]内部信号,常数,数据类型,函数等的定义BEGIN[并行处理语句]END构造体名;7构造体中的描述语句并行语句:同时执行,在进程语句(PROCESS)的外部。顺序语句:按书写顺序执行,在进程语句(PROCESS)的内部。例如:entitysampleisport(a,b:instd_logic;c:outstd_logic);endsample;architecturebehaofsampleissignald:std_logic;begind=aandb;C=not(d);endbeha;信号并行处理83.1.2构造体的子结构描述3种形式的子结构描述:BLOCK描述(块描述)PROCESS描述(进程描述)SUBPROGRAMS描述(子程序描述)BLOCK语句描述格式:块标号:BLOCKBEGIN:ENDBLOCK块标号;BLOCK内的语句执行顺序:并行执行9例如:二选一电路ENTITYmuxISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux;ARCHITECTUREconnectOFmuxISSIGNALtmp1,tmp2,tmp3:BIT;BEGINcale:BLOCKBEGINtmp1=d1ANDsel;tmp2=d0AND(NOTsel);tmp3=tmp1ORtmp2;q=tmp3;ENDBLOCKcale;ENDconnect;10进程(PROCESS)描述格式:[进程名]:PROCESS(信号1,信号2,…)BEGIN:ENDPROCESS[进程名];敏感量:是PROCESS的输入信号,写在“PROCESS”后面的括号中当PROCESS所带的敏感量任何一个发生变化时,PROCESS中的语句就会执行一遍。语句执行顺序:顺序执行。多进程的关系:并行执行。11例如:二选一电路ENTITYmux1ISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux1;ARCHITECTUREconnectOFmux1ISBEGINcale:PROCESS(d0,d1,sel)VARIABLEtmp1,tmp2,tmp3:BIT;--在进程中定义的变量BEGINtmp1:=d0ANDsel;--输入端口向变量赋值tmp2:=d1AND(NOTsel);tmp3:=tmp1ORtmp2;q=tmp3;ENDPROCESScale;ENDconnect;12子程序描述过程格式PROCEDURE过程名(参数1,参数2…)IS[定义变量语句]BEGIN[顺序处理语句]END过程名;参数:可以是输入也可以是输出语句执行方式:调用者在调用过程前先将初始值传递给过程的输入参数,然后过程语句启动,按顺序自上至下执行过程结构中的语句,执行结束后,将输出值拷贝到调用者的“OUT”和“INOUT”所定义的变量或信号中。13例如:求最大值电路libraryieee;useieee.std_logic_1164.all;entityconproisport(da,db:instd_logic_vector(7downto0);o1:outstd_logic_vector(7downto0));endconpro;da[7..0]db[7..0]o1[7..0]14architecturebehaofconproisproceduremax(a:instd_logic_vector;b:instd_logic_vector;q:outstd_logic_vector)isbeginif(ab)thenq:=a;elseq:=b;endif;endmax;beginprocess(da,db)variabletemp:std_logic_vector(7downto0);beginmax(da,db,temp);o1=temp;endprocess;endbeha;参数按变量对待abqda[7..0]db[7..0]o1[7..0]15函数格式FUNCTION函数名(参数1,参数2….)RETURN数据类型名IS[定义变量语句]BEGIN[顺序处理语句]RETURN[返回变量名];END函数名;参数:输入参数的个数不受限制,在函数名后的括号内声明,而输出参数只有一个,在return语句后声明;输入输出参数的属性均可省略。语句执行方式:顺序执行。16例如:求最大值电路architecturebehaofconpackisfunctionmax(a:std_logic_vector;b:std_logic_vector)returnstd_logic_vectorisvariabletemp:std_logic_vector(7downto0);beginif(ab)thentemp:=a;elsetemp:=b;endif;returntemp;endmax;begino1=max(da,db);endbeha;输入参数输出(返回)参数da[7..0]db[7..0]o1[7..0]173.1.3包集合、库和配置库:存放编译后的数据集合库的种类IEEE库:std_logicSTD库:standard、textioWORK库:ASIC库:用户自定义库:例如:vhdl87文件夹下的altera、std、vital、ieee库的使用LIBRARY库名;USELIBRARY_name.package_name.ITEM_name;18例如:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;例如:LIBRARYSTD;USESTD.TEXTIO.ALL;库的作用范围:从一个实体说明开始到它所属的结构体、配置为止。当一个源程序中出现两个以上实体的使用说明语句时,应在每个实体说明语句前重复书写。例如:19Libraryieee;Useieee.std_logic_1164.all;Entityand1is…Endand1;Architecturebeha1ofand1isBegin…Endbeha1;Libraryieee;Useieee.std_logic_1164.all;Entityand1is…Endand1;Architecturebeha2ofand1isBegin…Endbeha2;库的使用说明库的使用说明库的作用范围20包集合:通过编译成为库结构中的一个层次格式PACKAGE包集合名IS[说明语句]END包集合名;PACKAGEBODY包名IS[说明语句]END包集合名;使用USELIBRARY_name.package_name.ITEM_name例如:使用在包集合bpac中定义的max函数。包集合标题包集合体(可选)21libraryieee;useieee.std_logic_1164.all;packagebpacisfunctionmax(a:std_logic_vector;b:std_logic_vector)returnstd_logic_vector;endbpac;packagebodybpacisfunctionmax(a:std_logic_vector;b:std_logic_vector)returnstd_logic_vectorisvariabletemp:std_logic_vector(7downto0);beginif(ab)thentemp:=a;elsetemp:=b;endif;returntemp;endmax;endbpac;包集合标题包集合体库的使用说明22libraryieee;useieee.std_logic_1164.all;librarywork;usework.bpac.all;entityconpackisport(da,db:instd_logic_vector(7downto0);o1:outstd_logic_vector(7downto0));endconpack;architecturebehaofconpackisbegino1=max(da,db);endbeha;da[7..0]db[7..0]o1[7..0]库的使用说明现行作业库可以省略23配置作用:描述层与层之间的连接关系以及实体与结构之间的连接关系,便于调试和设计。格式:CONFIGURATION配置名OF实体名IS[说明语句]END配置名;例如:用两个不同构造体的配置实现rs触发器。ENTITYrsISPORT(set,reset:INBIT;q,qb:BUFFERBIT);ENDrs;setresetqqb24ARCHITECTURErsff1OFrsISCOMPONENTnand2PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENT;BEGINU1:nand2PORTMAP(a=set,b=
本文标题:第三章 硬件描述语言VHDL基础
链接地址:https://www.777doc.com/doc-3987593 .html