




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章VHDL硬件描述语言3.1VHDL设计初步(VHDL基本知识;简单组合时序电路描述实现——程序结构、电路描述方法、层次化设计实现及相关语法知识介绍)3.2VHDL设计进阶3.3VHDL语言程序基本结构3.4VHDL语言的对象和数据类型及运算操作符3.5VHDL的基本描述语句3.6程序包及库和配置3.7状态机设计(常用较复杂电路模块的设计及语法知识介绍)(重要的实用工程化设计方法)(3,4,5,6-VHDL语言语法知识系统讲解)什么是VHDL?VeryhighspeedintegratedHardwareDescriptionLanguage(VHDL)是IEEE、工业标准硬件描述语言用语言的方式而非图形等方式描述硬件电路容易修改容易保存特别适合于设计的电路有:复杂组合逻辑电路,如:译码器、编码器、加减法器、多路选择器、地址译码器…...状态机等等……..3.1VHDL设计初步Graphiciswhatyoudrawiswhatyouget“tellmewhathardwareyouwantandIwillgiveittoyou”VHDLiswhatyouwriteiswhatfunctionalyouget“tellmehowyourcircuitshouldbehaveandtheVHDLcompilerwillgiveyouthehardwarethatdoesthejob”
butthedesignercannotcontrolhowthecircuitimplement原理图输入与
VHDL文本输入设计的区别WhyusingVHDLinsteadofGraphicEasytoModifyItismorepowerfulthanGraphicVHDLisaportablelanguagebecauseisdeviceindependentthesamecodecanbeappliedtoDevicemanufacturedbyCompanyAorCompanyBVHDL文本输入设计的优势VHDLSynthesisvs.otherHDLsSynthesisVHDL: “tellmehowyourcircuitshouldbehave andIwillgiveyouhardwarethatdoesthejob”ABEL,PALASM,AHDL: “tellmewhathardwareyouwantandI willgiveittoyou”VHDL与其他HDL的区别VHDL的功能和标准
VHDL描述输入端口输出端口电路的行为和功能VHDL的标准:IEEEStd1076-1987(calledVHDL1987)IEEEStd1076-1993(calledVHDL1993)IEEEStd1076-2002(calledVHDL2002)(人们对电路或电子系统的认识过程:先外部端口信息,后内部电路功能)——简单组合电路的VHDL描述举例3.1.1多路选择器VHDL描述图mux21a功能示意波形(s为0时y<=a;s为1时y<=b)图mux21a逻辑符合图【例3-1】ENTITY
mux21a
IS
PORT(a,b:INBIT;s:IN
BIT;y:
OUTBIT);ENDENTITY
mux21a;ARCHITECTURE
oneOF
mux21a
IS
BEGIN
y<=a
WHENs='0'
ELSE
b;ENDARCHITECTURE
one;实体说明结构体3.1.1多路选择器VHDL描述图3-1mux21a实体(逻辑符号图)图3-2mux21a结构体(1)2选1多路选择器的VHDL描述VHDL程序一般由五部分组成,其中必不可少的是其中的实体说明部分(端口描述)和结构体部分(功能描述)组合逻辑电路描述举例(行为描述方式)(1)
2选1多路选择器的VHDL描述【例3-2】
ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd<=aAND(NOTS);e<=bANDs;y<=dORe;ENDARCHITECTUREone;【例3-3】...
ARCHITECTUREoneOFmux21aISBEGINy<=(aAND(NOTs))OR(bANDs);ENDARCHITECTUREone;结构体内区域是并行区域,其内只能是表现电路并发特性的并行语句信号定义的语法格式及信号定义的位置(数据流描述或称RTL描述方式)(1)
2选1多路选择器的VHDL描述【例3-4】
ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy<=a;ELSEy<=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;表示程序转向控制的if语句均是顺序语句Process语句是最常用的并行语句,其内是顺序区域,只能书写顺序语句;注意process语句的启动信号及语法格式(1)
2选1多路选择器的VHDL描述图5-3mux21a功能时序波形输入、输出信号在仿真的表示符号;仿真时先设置输入信号,通过观察仿真输出信号检验设计结果是否正确。(2)VHDL相关语句说明1.实体表达【例3-5】93标准较为规范ENTITYe_nameISPORT(p_name:port_mdata_type;...p_namei:port_midata_type);ENDENTITYe_name;或:【例3-6】87标准较为灵活ENTITYe_nameISPORT(p_name:port_mdata_type;...p_namei:port_midata_type);ENDe_name;实体名端口模式数据类型Port语句—端口信号说明语句(2)
VHDL相关语句说明2.实体名3.PORT语句和端口信号名4.端口模式INOUTINOUTBUFFER5.数据类型BIT标识符只能由字母、数字、下划线组成,只能由字母开头,不能由下划线结尾,下划线不能连续使用。对应信号的数据流向及读写性能Bit及std_logic数据类型的取值类型及取值范围及逻辑位的赋值方法(‘单个字符’,”字符串“)Port语句格式及端口信号定义的格式设计实体与实体说明(端口信息描述)数据类型:说明数据的取值类型和取值范围用户自己定义的对象名称称为标识符buffer:输出但对内部有反馈(2)
VHDL相关语句说明6.结构体表达【例5-7】93标准较为规范ARCHITECTUREarch_nameOFe_nameIS(说明语句)BEGIN(功能描述语句)ENDARCHITECTUREarch_name;或:【例5-8】87标准较为灵活ARCHITECTUREarch_nameOFe_nameIS(说明语句)BEGIN(功能描述语句)ENDarch_name;7.信号传输(赋值)符号和数据比较符号赋值目标<=表达式>,<,=,>=,<=,/=结构体名实体名(2)
VHDL相关语句说明8.逻辑操作符AND、OR、NOT9.IF_THEN条件语句10.WHEN_ELSE条件信号赋值语句赋值目标<=表达式WHEN赋值条件ELSE
表达式WHEN赋值条件ELSE...
表达式;11.PROCESS进程语句和顺序语句12.文件取名和存盘不完全条件语句生成时序逻辑(未指定情况保持原状态),完全条件语句生成组合逻辑条件信号赋值语句是并行语句;条件信号赋值语句的语法格式顺序语句仿真时顺序执行,用于算法的描写。文件名应按层次化设计顶层设计实体功能取,max+plus文本方式输入的设计要求文件名与实体名必须相同;文件不可直接存于根目录下(3)VHDL设计的基本概念和语句小节数据类型信号赋值符条件比较符延时实体结构体端口定义端口模式逻辑操作符IF条件语句并行条件语句进程语句顺序语句并行语句文件取名文件存盘(并行语句:位于并行区域体现电路并发特性的语句;顺序语句:位于顺序区域仿真时顺序执行用于算法描述的语句)3.1.2寄存器描述及其VHDL语言现象(1)D触发器的VHDL描述【例5-9】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1IS
SIGNALQ1:STD_LOGIC;--类似于在芯片内部定义一个数据的暂存节点
BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;Q<=Q1;--将内部的暂存数据向端口输出
ENDPROCESS;ENDbhv;D触发器时序逻辑电路描述举例(时钟边沿检测)Out模式的只写特性一般的非端口信号既可读也可写标准逻辑位进程体边沿检测库与程序包声明3.1.2寄存器描述及其VHDL语言现象(1)D触发器的VHDL描述【例5-9】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1IS--SIGNALQ1:STD_LOGIC;--类似于在芯片内部定义一个数据的暂存节点
BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ<=D;--THENQ1<=D;ENDIF;--Q<=Q1;--将内部的暂存数据向端口输出
ENDPROCESS;ENDbhv;D触发器时序逻辑电路描述举例(时钟边沿检测)Out模式的只写特性一般的非端口信号既可读也可写Out模式的只写特性,而此程序中对Q只有写操作,所以可不用定义中间信号Q1作过渡(JK_FF应如何实现)比较用4种不同语句的D触发器VHDL程序Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginif
clk='1'ANDclk’last_value='0'
thenq1<=d;endif;q<=q1;endprocess;endtest1_body;LIBRARYIEEE;USEIEEE.std_logic_1164.all;Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1isbeginprocess(clk,d)begin
ifrising_edge(clk)then
q<=d;endif;endprocess;endtest1_body;TheyareallthesameDFF?Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk,d)begin
if(clk=‘1’)then
q1<=d;endif;q<=q1;endprocess;endbody;Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)begin
if(clk=‘1’)then
q1<=d;endif;q<=q1;endprocess;endbody;前三种为边沿型(边沿信号检测方式),最后一种为电平型触发(CLK=1则输出跟随输入变化)HowManyRegisters?ENTITYreg1ISPORT(d:inBIT;clk:inBIT;q :outBIT);ENDreg1;ARCHITECTUREreg1OFreg1ISSIGNALa,b:BIT;BEGINPROCESS(clk)BEGINIFclk='1'ANDclk’eventTHENa<=d;b<=a;q<=b;ENDIF;ENDPROCESS;ENDreg1;信号是全局量在实体、结构体和块语句中定义和使用进程中的信号赋值是在进程结束时同时完成赋值的--信号定义的位置及语法功能相当于串行输入的寄存器信号物理概念上相当于内部连线,作输出时为寄存器输出HowManyRegisters?ENTITYreg1ISPORT(d :inBIT;clk :inBIT;q :outBIT);ENDreg1;ARCHITECTUREreg1OFreg1ISBEGINPROCESS(clk)VARIABLEa,b:BIT;BEGINIFclk='1'ANDclk’eventTHENa:=d;b:=a;q<=b;ENDIF;ENDPROCESS;ENDreg1;变量是局部量只能在进程和子程序中定义和使用变量的赋值是执行到该语句立即完成的--变量定义的位置及语法用VHDL设计4位计数器AB01010101取整数数据类型,为什么?整数数据类型必须指定数据取值范围端口信号模式取BUFFER,为什么?注意整数和位的不同表达方式!Maxplus+II开发系统默认支持的是bit和integer数据类型及其运算。Out类型信号只能写入不能读。如需对输出数据读则需改变其数据类型或利用中间信号进行过度。Buffer模式输出但对内有反馈可读(说明:计数器端口及功能要求,程序设计涉及的主要问题)修改后的程序运算符加载注意,信号端口模式和数据类型的改变!注意,引进内部信号矢量!标准逻辑矢量数据类型必须指定矢量中元素个数4位锁存器组合电路加1器锁存信号输出反馈综合后的计数器电路RTL图用VHDL设计7段16进制译码器用CASE语句完成真值表的功能向7段数码管输出信号,最高位控制小数点相当于thenCase语句是串行语句;case语句语法CASE语句实现真值表画出电路符号及真值表注意,此语句说明未列出条件的处理情况,为满足语法要求必须加入4位加法计数器7段译码器8位总线输出信号输出组合逻辑实现的一般化方法:真值表方法;时序逻辑实现的一般化方法:状态机Signalsvs.VariablesRepresentCircuit RepresentlocalstorageInterconnect GlobalScope(anywhere) LocalScope (insideprocessorsubprogram)UpdatedatendofPROCESS UpdatedImmediately(newvaluenotavailable) (newvalueavailable)
SIGNALS
VARIABLES
UTILITY:
SCOPE:BEHAVIOR:数据对象:信号Signal和变量Variable例:4选1多路选择器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISsignalmuxval:integer;BEGINprocess(i0,i1,i2,i3,a,b)beginmuxval<=0;if(a='1')thenmuxval<=muxval+1;endif;if(b='1')thenmuxval<=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;Why????Muxval被定义为信号,由进程中信号赋值为进程结束时同步完成,可知进程中若多个源对同一信号赋值,只有接近endprocess的会被执行进程中Signal和variable在赋值行为上的不同算法与实现方法需要结合才能达到目的LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISBEGINprocess(i0,i1,i2,i3,a,b)variablemuxval:integerrange0to3;beginmuxval:=0;if(a='1')thenmuxval:=muxval+1;endif;if(b='1')thenmuxval:=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;程序改进:只用case语句如何写?—层次结构的VHDL描述以下通过一个全加器的设计流程,介绍含有层次结构的VHDL程序设计。其中包含一个在层次化设计或结构化设计中非常重要的语句——元件例化语句:其可以分为元件调用声明语句和端口映射语句两个部分。语言方式层次化设计举例(层次化设计的两种常用方法:(1)将各种方式设计的底层元件生成对应符号块,在顶层用原理图方式将他们连接进而实现顶层设计(2)用纯文本方式描述出底层元件,利用元件例化语句将底层元件连接关系描述出来,实现顶层设计)(层次化设计:将设计分层描述,先描述实现底层元件,然后用底层元件构造出顶层,从而实现设计)LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderIS PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderIBEGIN so<=(aORb)AND(aNANDb); co<=NOT(aNANDb);ENDARCHITECTUREfh1;用二进制半加器设计一位全加器1位二进制半加器(语言方式层次化设计举例)(数据流即输入数据处理过程描述)1位二进制全加器内部端口外部端口端口连线(语言方式层次化设计举例)用VHDL语言描述各底层设计模块后,用元件例化语句描述底层元件间的连接关系,最终实现顶层电路的描述所有描述可置于同一文件中,仅需将顶层实体名作为文件名即可。(结构化描述)(原理图要素)--或门描述元件说明语句元件例化语句底层元件端口名顶层元件端口名或中间连接信号名元件实例(元件例化名)U2例化元件h_adder实体说明部分端口映射语句(2)D触发器VHDL描述的语言现象说明1.标准逻辑位数据类型STD_LOGICBIT数据类型定义:
TYPEBITIS('0','1');STD_LOGIC数据类型定义:TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','-');STD_LOGIC所定义的9种数据的含义是:‘U’表示未初始化的;‘X’表示强未知的;
‘0’表示强逻辑0;
‘1’表示强逻辑1;‘Z’表示高阻态;
‘W’表示弱未知的;
‘L’表示弱逻辑0;‘H’表示弱逻辑1;‘-’表示忽略。语言现象说明STD_LOGIC的综合器支持对于STD_LOGIC类型,综合器只支持‘X’(或‘-’),‘0’,‘1’,‘Z’(2)
D触发器VHDL描述的语言现象说明2.设计库和标准程序包使用库的一般定义表式是:
LIBRARY<设计库名>;
IEEE标准库:LIBRARYIEEE默认加载的设计库STD 标准库WORK 工作库(当前设计)数据类型:BIT、BIT_VECTOR一样,INTEGER、NATURAL(自然数)和POSITIVE(正整数)都定义在VHDL标准程序包STANDARD中。由于是默认打开的,所以在前面例子中,没有以显式打开STD库和程序包STANDARD。格式:LIBRARY<设计库名>;USE<设计库名>.<程序包名>.ALL;IEEE标准库中的STD_LOGIC_1164:含STD_LOGIC及STD_LOGIC_VECTOR的定义IEEE1164使用程序包的一般定义表式是:
USE<设计库名>.<程序包名>.ALL;(2)
D触发器VHDL描述的语言现象说明3.SIGNAL信号定义和数据对象信号定义的语法格式;信号的使用范围三类数据对象:常数、变量、信号(物理意义)(变量定义的语法格式;变量的使用范围)注意:变量VARIABLE与信号SIGNAL都属于数据对象。但变量的赋值符号与信号的赋值符号是不同的,信号的赋值符号是“<=”,而变量的赋值符号是“:=”。(2)
D触发器VHDL描述的语言现象说明4.上升沿检测表式和信号属性函数EVENT关键词EVENT是信号属性,VHDL通过以下表式来测定某信号的上升沿:
CLK’EVENTANDCLK=‘1’信号属性EVENT<信号名>‘EVENT测定信号是否有变化函数RISING_EDGE(CLK)(上升沿检测常用方式)5.不完整条件语句与时序电路【例3-11】ENTITYCOMP_BADISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_BADISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSIFa1<b1THENq1<='0';--未提及当a1=b1时,q1作何操作ENDIF;
ENDPROCESS;END;(2)
D触发器VHDL描述的语言现象说明注意此处多分支选择语句与一般嵌套式IF语句语法上的不同5.不完整条件语句与时序电路图例3-11的电路图5.不完整条件语句与时序电路【例3-12】ENTITYCOMP_GOODISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_GOODISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSEq1<='0';ENDIF;ENDPROCESS;END图例3-12的电路图(1位输出仅能表示两种结果状态)(3)
实现时序电路边沿信号检测的VHDL不同表达方式【例5-13】...PROCESS(CLK)BEGINIFCLK'EVENTAND(CLK='1')AND(CLK'LAST_VALUE='0')
THENQ<=D;--确保CLK的变化是一次上升沿的跳变
ENDIF;ENDPROCESS;【例5-14】...PROCESS(CLK)BEGINIFCLK='1'ANDCLK'LAST_VALUE='0'
THENQ<=D;ENDIF;ENDPROCESS;【例5-15】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALQ1:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFrising_edge(CLK)--CLK的数据类型必须是STD_LOGIC
THENQ1<=D;ENDIF;Q<=Q1;ENDPROCESS;END;(3)
实现时序电路边沿信号检测的VHDL不同表达方式【例5-16】...
PROCESSBEGIN
waituntilCLK=‘1’;--利用wait语句
Q<=D;(对敏感信号检测启动进程的另一种方式)ENDPROCESS;【例5-17】...
PROCESS(CLK)BEGINIFCLK='1'
THENQ<=D;--利用进程的启动特性产生对CLK的边沿检测
ENDIF;ENDPROCESS;【例5-18】...
PROCESS(CLK,D)BEGINIFCLK='1'--电平触发型寄存器
THENQ<=D;
ENDIF;ENDPROCESS;(3)
实现时序电路边沿信号检测的VHDL不同表达方式图3-7边沿型触发器时序波形图3-8电平触发型寄存器的时序波形(3)实现时序电路的VHDL不同表达方式(3)
实现时序电路边沿信号检测的VHDL不同表达方式(不同触发方式下输出跟随输入变化的特点)(4)异步时序电路设计【例3-19】...
ARCHITECTUREbhvOFMULTI_DFFISSIGNALQ1,Q2:STD_LOGIC;BEGINPRO1:PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=NOT(Q2ORA);ENDIF;ENDPROCESS;PRO2:PROCESS(Q1)BEGINIFQ1'EVENTANDQ1='1'THENQ2<=D;ENDIF;QQ<=Q2;ENDPROCESS;图例3-19综合的电路一个时钟进程只能构成对应单一时钟信号的时序电路,即同步时序电路。异步时序逻辑最好用多个时钟进程语句来构成。仿真时一个进程中可有多个时钟,但综合器只能对只有一个时钟的进程进行综合(5)VHDL设计基本概念和语言现象小节数据类型数据对象信号属性时钟检测VHDL库程序包时序电路异步时序3.1.31位二进制全加器的VHDL设计图5-10半加器h_adder电路图图5-11全加器f_adder电路图——通过对真值表的描述实现设计(1)半加器描述和CASE语句a b so co 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1表5-1半加器h_adder逻辑功能真值表1.CASE语句CASE语句的一般表式是:CASE<表达式>ISWhen<选择值或标识符>=><顺序语句>;...;<顺序语句>;When<选择值或标识符>=><顺序语句>;...;<顺序语句>;...ENDCASE;Case语句的语法格式;case语句属于顺序语句;case后表达式必须是一个值可变的对象:信号或变量1位二进制全加器的VHDL设计—相关语法知识2.标准逻辑矢量数据类型STD_LOGIC_VECTOR以下是一些并置操作示例:SIGNALa:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd:STD_LOGIC_VECTOR(1DOWNTO0);...a<='1''0'd(1)'1';--元素与元素并置,并置后的数组长度为4...IFa
d="101011"THEN...–-在IF条件句中可以使用并置符(1)半加器描述和CASE语句在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如:
B:OUTSTD_LOGIC_VECTOR(7DOWNTO0);或
SIGNALA:STD_LOGIC_VECTOR(1TO4)端口信号定义中间信号定义3.并置操作符将单个操作数或数组合并为一个新的数组(1)半加器描述和CASE语句【例3-20】
LIBRARYIEEE;--或门逻辑描述
USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYor2a;ARCHITECTUREoneOFor2aISBEGINc<=aORb;ENDARCHITECTUREfu1;【例3-21】LIBRARYIEEE;--半加器描述(1)USEIEEE.STD_LOGIC_1164.ALL;ENTITYadderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYadder;ARCHITECTUREfh1OFadderisBEGINso<=NOT(aXOR(NOTb));co<=aANDb;ENDARCHITECTUREfh1;数据流方式描述【例3-22】LIBRARYIEEE;--半加器描述(2)USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisSIGNALabc:STD_LOGIC_VECTOR(1DOWNTO0);BEGINabc<=a&b;PROCESS(abc)BEGINCASEabcISWHEN"00"=>so<='0';co<='0';WHEN"01"=>so<='1';co<='0';WHEN"10"=>so<='1';co<='0';WHEN"11"=>so<='0';co<='1';WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREfh1;真值表方式描述【例3-23】
LIBRARYIEEE;--1位二进制全加器顶层设计描述
USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDENTITYf_adder;ARCHITECTUREfd1OFf_adderISCOMPONENTh_adderPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTor2aPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;BEGINu1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);u2:h_adderPORTMAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2aPORTMAP(a=>d,b=>f,c=>cout);ENDARCHITECTUREfd1;(结构化描述)(2)
全加器描述和例化语句
元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示:COMPONENT元件名ISPORT(端口名表);ENDCOMPONENT元件名;
元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。语句的表达式如下:例化名:元件名PORTMAP([端口名=>]连接端口名,...);元件声明语句是对元件端口信息的说明,其语法格式与实体说明语句相同,仅将entity换为component元件实例名:例化元件名portmap([底层元件端口名=>]中间信号或顶层元件端口名)既:端口映射语句名字关联与位置关联VHDL设计流程:
V-S-F-PVHDLEntryUseanyTextEditortoinputyourdesignSynthesisUseanyVHDLCompilertoconvertyourlanguagedesigntoGatelevelwithoptimizationintermofSpeed/AreaFittingArchitectureSynthesisTomapthelogictoAlteraDeviceArchitecturee.g.LUT,Carry/CascadeChain,EAB......(furtherlogicoptimization)Perogr.DownLoadConfigure/ProgrammingtheAlteraDeviceanddoonboarddebugging,prototypingorproductionSTEP1:建立工作库文件夹STEP2:输入设计项目原理图/VHDL文本代码STEP3:存盘,注意原理图/文本取名STEP4:将设计项目设置成ProjectSTEP5:选择目标器件
STEP11:
硬件测试STEP9:引脚锁定并编译STEP8:仿真测试和波形分析STEP7:建立仿真波形文件STEP6:启动编译STEP10:编程下载/配置VHDL文本输入设计流程(具体操作过程)注意:Max+plusII以工程项目方式管理设计文件,所进行的软件操作都是只针对当前的工程的。所以设计的顶层文件应作为当前的工程,即将顶层文件设置为当前工程。另要注意每当将设计作了修改或加入了新的设计信息都应重新进行编译如已知目标器件为了方便后面的工作及时序仿真原理图输入时文件名可任意起名;文本输入时文件名必须与设计实体名相同3.1.4VHDL文本输入设计方法初步为设计全加器新建一个文件夹作工作库文件夹名取为My_prjct注意,不可用中文!注意:设计文件不能直接放到根目录下,而必须放到文件夹下。(1)编辑输入并保存VHDL源文件新建一个设计文件使用文本输入方法设计,必须选择打开文本编辑器图3-12建立文本编辑器对话框图5-13在文本编辑窗中输入VHDL文件并存盘文本编辑窗用键盘输入设计文件:多路选择器存盘文件名必须取为:mux21a.vhd注意,要存在自己建立的文件夹中Max+plusII要求文本输入时文件名必须与实体名相同输入文本及符号时必须为英文输入状态VHDL程序保存时文件后缀为“.VHD”文件存盘后,关键词将改变颜色!否则文件名一定有错!(2)将当前设计设定为工程(以确保下面的编译仿真等操作均是针对当前工程进行的)图3-14设定当前文件为工程首先点击这里子菜单中然后选择此项,将当前打开的设计文件设置成工程最后注意此路径指向的改变(标题栏前面部分显示当前打开的工程存放位置及其名称,标题栏后面显示当前窗口的文件信息)首先选择这里器件系列选择窗,选择ACEX1K系列根据实验板上的目标器件型号选择,如选EP1K30注意,首先消去这里的勾,以便使所有速度级别的器件都能显示出来(3)为当前设计选定目标器件注意,此路径指向当前的工程!选择编译器编译窗Max+plusII主菜单编译时可选择进行功能仿真编译(功能特征网表文件抽取)或时序仿真编译(时序特征网表文件抽取)(4)编译当前设计及编译相关选项设置选择VHDL文本编译版本号和排错图3-15设定VHDL编译版本号选择此项选择VHDL1993项编译器默认为93标准,且其向下兼容87标准,一般不用设置选择此项消去这里的勾这一默认优化算法设置对中文Windows用户编译时能出现问题,建议取消这一设置编译出错!可双击错误提示或单击提示后用locate定位错误选择VHDL文本编译版本号和排错图5-16确定设计文件中的错误打开错误提示窗,双极该错误提示即可实现在源程序中的错误定位错误必须修改;警告一般不用理会错误提示及定位是相对的,错误一般发生在定位位置附近;且修改错误一般应自上而下修改错误所在错误所在改正错误完成编译!首先选择此项,为仿真测试新建一个文件(5)时序仿真选择波形编辑器文件(a)新建仿真文件从SNF文件中输入设计文件的信号节点点击“LIST”(b)导入仿真信号节点导入当前工程中单个信号导入当前工程中所有信号SNF文件中的信号节点用此键选择左窗中需要的信号进入右窗最后点击“OK”消去这里的勾,以便方便设置输入电平在Options菜单中消去网格对齐SnaptoGrid的选择(消去对勾)
(c)进行是否网格捕捉设置选择ENDTIME调整仿真时间区域。选择65微秒比较合适(d)仿真时间设置仿真时间设置同时使用放大到合适观察范围按钮观察全时间范围仿真结果;或还进行观察时间设置只观察某一段时间的仿真结果(见下页)用此键改变仿真区域坐标到合适位置。点击‘1’,使拖黑的电平为高电平先点击‘b’,将其点为黑色然后先点击此处将弹出时钟周期设置窗设置输入信号‘b’的周期为800ns(e)仿真输入信号设置设置输入信号‘a’的周期为2us放大缩小赋值0、1不定态高阻态信号取反时钟周期赋值总线信号(组信号)顺序赋值总线信号(组信号)一般赋值有限状态机状态赋值仿真波形文件存盘!(f)仿真文件保存——按照默认文件名及位置保存即可选择仿真器运行仿真器(g)时序仿真结果分析图3-17mux21a仿真波形仿真波形分析时,可利用移动标尺与鼠标配合测量信号时间宽度除仿真波形分析外,还可进行传输延迟分析、建立保持时间分析及对时序电路的最高工作频率分析即定时分析。仅对时序逻辑电路可进行建立保持时间分析及最高工作频率分析(6)引脚锁定可选择键8作为多路选择器的输入“s”实验电路结构图可选择输出“y”的信号从扬声器输出信号a和b输入两个不同频率的时钟信号根据硬件连接关系确定输入输出信号所接引脚的编号键8的引脚名作为“s”信号键8的引脚名对应的引脚号选择实验板上插有的目标器件扬声器引脚号为:99信号b由“clock0”输入时钟信号,引脚号为:126信号a由“clock5”输入时钟信号,引脚号为:56注意,对于GWAK30+板,时钟引脚必须查阅以下“时钟了解表1”
引脚对应情况实验板位置多路选择器信号通用目标器件引脚名目标器件EP1K30TC144引脚号1、键8:
sPIO13272、扬声器y
SPEAKER993、时钟输入信号bCLOCK01264、时钟输入信号aCLOCK556根据硬件连接关系确定输入输出信号所接引脚的编号,将信号锁定到对应引脚上。(根据实体输入输出信号在器件上连接的情况,将所设计电路的信号锁定到对应的器件引脚上)选择引脚锁定选项引脚窗引脚锁定方式一:通过菜单方式锁定此处输入信号名此处输入引脚名按键“ADD”即可注意引脚属性错误引脚名将无正确属性!引脚锁定方式二:通过主菜单中底板编辑器锁定再编译一次,将引脚信息进去引脚锁定完成后必须进行编译才能将引脚信息编辑进去引脚锁定且编译后,如需撤销锁定只能用菜单方式进行首次下载前需安装硬件下载驱动——方法见课本P1041、打开控制面板(开始->设置->控制面板->添加硬件)驱动安装步骤如下:2、双击“添加硬件”图标,启动添加硬件向导,然后按下一步继续。3、选择“是,硬件已连接好”,然后按下一步继续。4、选择添加新设备,选择手动安装,然后按下一步继续。5、选择“声音、视频、游戏控制器”然后按下一步继续。6、选择从磁盘安装,然后按下一步继续。7、选安装maxplus2目录下路径X:\maxplus2\Drivers\win2000\Win2000.inf,运行“下一步”8、弹出数字签名对话框时,点击继续安装9、选择为硬件AlteraByteBlaster按装驱动10、点击“下一步”,安装完成后重新启动计算机选择编程器,准备将设计好的半加器文件下载到目器件中去编程窗首次下载前需安装硬件下载驱动——方法见课本P104在编程窗打开的情况下选择下载方式设置选择此项下载方式下载方式设置(首次使用时必须进行此项设置)下载(配置)成功!FPGA选配置(configure)CPLD选编程(program)(5)硬件测试选择电路模式为“6”模式选择键“s”为高’电平注意时钟频率选择CLOCK5:a频率选择1024HzCLOCK0:b频率选择256Hz可以三人表决器及四位二进制计数器为例进行文本方式设计输入演示ENTITYCNT4ISPORT(CLK:INBIT;Q:BUFFERINTEGERRANGE15DOWNTO0);END;ARCHITECTUREbhvOFCNT4ISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ<=Q+1;ENDIF;ENDPROCESS;ENDbhv;四位二进制计数器libraryieee;useieee.std_logic_1164.all;entitydecide3isport(vote3,vote2,vote1:instd_logic;red,green:outstd_logic);endentitydecide3;architectureoneofdecide3issignalvote_result:std_logic_vector(3downto1);beginvote_result<=vote3&vote2&vote1;process(vote_result)begincase(vote_result)iswhen"000"=>red<='1';green<='0';when"001"=>red<='1';green<='0';when"010"=>red<='1';green<='0';when"011"=>red<='0';green<='1';when"100"=>red<='1';green<='0';when"101"=>red<='0';green<='1';when"110"=>red<='0';green<='1';when"111"=>red<='0';green<='1';whenothers=>null;endcase;endprocess;endarchitectureone;三人表决器3.2.14位加法计数器的VHDL描述(1)4位加法计数器【例3.2-1】ENTITYCNT4ISPORT(CLK:INBIT;Q:BUFFER
INTEGER
RANGE15DOWNTO0);END;ARCHITECTUREbhvOFCNT4ISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ<=Q+
1;ENDIF;ENDPROCESS;ENDbhv;3.2VHDL设计进阶简单功能的自然二进制码计数器的设计(已讲过-主要内容回顾)(端口信号的工作模式及读写特性)(2)4位加法计数器的另一种表达方式(已讲过)【例3.2-2】
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT4ISPORT(CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREbhvOFCNT4ISSIGNALQ1:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=Q1+1;ENDIF;Q<=Q1;ENDPROCESS;ENDbhv;(中间信号作过渡;重载函数概念)(3)
4位加法计数器的另一种表达方式图6-24位加法计数器工作时序归纳数据类型BUFFER模式重载函数计数器结构数据类型:说明端口上流动的数据的表达格式(或取值类型)及取值范围重载函数概念:同名但具有不同参数列表和函数体的函数函数重载技术(即同名函数根据参数不同执行不同函数体)为编程带来了很大的便利。3.2.2不同工作方式的时序电路设计(1)将要涉及的相关语法说明1.变量
为了简化表达才使用短语“(OTHERS=>X)”,这是一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句:
SIGNALd1:STD_LOGIC_VECTOR(4DOWNTO0);VARIABLEa1:STD_LOGIC_VECTOR(15DOWNTO0);...d1<=(OTHERS=>'0');a1:=(OTHERS=>'0');d1<=(1=>’1’,OTHERS=>‘0’);位矢量d1第1位赋值为1,其余位赋值为0——带清零、置数、使能等控制功能的任意进制计数器的设计及移位寄存器设计2.省略赋值操作符(OTHERS=>X)用于为位矢量中多位同时赋以相同的值X,优点是该赋值与位矢量长度无关(2)带有复位和时钟使能的10进制计数器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);--进位信号
ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)
VARIABLE
CQI:STD_LOGIC_VECTOR(3DOWNTO0);
BEGINIFRST='1'THENCQI:=(OTHERS=>'0');--计数器复位
ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿
IFEN='1'THEN--检测是否允许计数
IFCQI<"1001"THENCQI:=CQI+1;--允许计数
ELSECQI:=(OTHERS=>‘0’);--中间变量等于9,计数值清零
ENDIF;ENDIF;ENDIF;IFCQI=“1001”THENCOUT<=‘1’;--中间变量计数等于9,输出进位信号
ELSECOUT<='0';ENDIF;CQ<=CQI;--将计数值向端口输出
ENDPROCESS;ENDbehav;【例3.2-3】实现复位及计数功能部分实现进位逻辑部分同步(异步)置数、清零区别是否需时钟信号配合LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);--进位信号ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS=>'0');--计数器复位
ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿
IFEN='1'THEN--检测是否允许计数
IFCQI<"1001"THENCQI:=CQI+1;--允许计数
ELSECQI:=(OTHERS=>'0');--大于9,计数值清零
ENDIF;ENDIF;ENDIF;IFCQI="1001"THENCOUT<='1';--计数等于9,输出进位信号
ELSECOUT<='0';ENDIF;CQ<=CQI;--将计数值向端口输出
ENDPROCESS;ENDbehav;去掉非法字符后调通的程序图3.2-3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 综合办公解决方案实践案例
- 社交平台在休闲食品行业中的品牌传播作用
- 绿野仙踪的奇幻之旅读后感
- 房地产行业智能化物业管理解决方案
- 社区健康服务中的慢性疼痛管理与心理健康辅导
- 2025年夜光涂料项目建议书
- 知识产权在各领域的应用与保护策略
- 社区医疗资源配置的科技驱动与创新
- 科技公司如何提升班组的执行效率
- 2025年非电力家用器具合作协议书
- 2024年河南郑州二七区侯寨中心卫生院招聘笔试真题
- 中国糖尿病防治指南+2024+解读
- 数学-山东省天一大联考齐鲁名校教研共同体2024-2025学年(下)高三开学质量检测联考试题和答案
- 2025年上海宝冶集团限公司招聘历年高频重点提升(共500题)附带答案详解
- GB/T 6822-2024船体防污防锈漆体系
- CorelDRAW实例教程(CorelDRAW 2020)全套教学课件
- 新湘科版小学六年级下册科学同步全册教案
- 债权法总论课件
- 医院先进科室、先进个人评选办法
- 新部编版四年级下册道德与法治全册优秀教学课件(1-12课)
- 门诊医师出诊申请表(2022版)
评论
0/150
提交评论