首页 数字系统课程设计—VHDLPPT课件

数字系统课程设计—VHDLPPT课件

举报
开通vip

数字系统课程设计—VHDLPPT课件数字系统课程设计东南大学信息科学与工程学院2012年8月VHDL语法与使用 VHDL简单介绍 VHDL学习提示 VHDL语法及实例 VHDL设计数字系统的方法 设计提示Slide:*VHDL简单介绍 VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年. 1987底,VHDL被IEEE和美国国防部确认为标准硬件描述语言.此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言.现在,VH...

数字系统课程设计—VHDLPPT课件
数字系统课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 东南大学信息科学与 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学院2012年8月VHDL语法与使用 VHDL简单介绍 VHDL学习提示 VHDL语法及实例 VHDL设计数字系统的方法 设计提示Slide:*VHDL简单介绍 VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年. 1987底,VHDL被IEEE和美国国防部确认为 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 硬件描述语言.此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言.现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言.在新的世纪中,VHDL和Verilog语言将承担起大部分的数字系统设计任务.Slide:*VHDL简单介绍 VHDL主要用于描述数字系统的结构,行为,功能和接口. VHDL具有强大的行为描述能力,是系统设计领域最佳的硬件描述语言.强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证.Slide:*VHDL简单介绍 VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟. VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计.Slide:*VHDL学习提示 了解HDL的可综合性问题:HDL有两种用途:系统仿真和硬件实现.如果程序只用于仿真,那么几乎所有的语法都可以使用.但如果程序是用于硬件实现(例如:用于FPGA设计),那么我们就必须保证程序“可综合”(程序的功能可以用硬件电路实现).不可综合的HDL语句在软件综合时将被忽略或者报错.应当牢记:“所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现.”Slide:*VHDL学习提示 用硬件电路设计思想来编写HDL:学好HDL的关键是充分理解HDL语句和硬件电路的关系.编写HDL,就是在描述一个电路,写完一段程序以后,应当对生成的电路有一些大体上的了解,而不能用纯软件的设计思路来编写硬件描述语言.要做到这一点,需要我们多实践,多思考,多总结.Slide:*VHDL学习提示 语法掌握贵在精,不在多:30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,在程序移植或者更换软件平台时,容易产生兼容性问题,也不利于其他人阅读和修改.建议多用心钻研常用语句,理解这些语句的硬件含义,这比多掌握几个新语法要有用的多.Slide:*用VHDL替代原理图设计 VHDL便于修改 VHDL语言描述能力更强 VHDL重用性强,便于移植---VHDL不依赖实际器件---VHDL格式统一,方便移植和共享Slide:*VHDLVSGraphic Graphicis“Whatyoudrawiswhatyouget”--“TellmewhathardwareyouwantandIwillgiveittoyou” VHDLis“Whatyouwriteiswhatfunctionyouget”--“TellmehowyourcircuitshouldbehaveandtheVHDLcompilerwillgiveyouthehardwarethatdoesthejob”--ThedesignercannotcontrolhowthecircuitimplementSlide:*VHDL语法及实例 VHDL基本结构 VHDL描述方法 常用电路描述 状态机设计Slide:*VHDL基本结构 库(LIBRARY)用来存储可编译的设计单元. 实体(ENTITY)描述设计模块的输入输出端口类型. 结构体(ARCHITECTURE)描述电路的具体功能.Slide:*库 库调用语句放在程序的最前面,最常用的库调用语句为:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;Slide:*实体 实体定义设计的全部输入输出信号.格式如下:ENTITY实体名ISPORT(输入输出信号列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf );END实体名;Slide:*实体 一个计数器的实体部分ENTITYcount_m16--实体名必须与设计文件同名PORT(reset:INstd_logic;clk:INstd_logic;co:OUTstd_logic;count:BUFFERstd_logic_vector(3DOWNTO0));ENDcount_m16;Slide:*实体 上述计数器实体对应的原理图符号:Slide:*实体 端口模式IN输入信号,不能给输入端口赋值OUT输出信号,不能在内部反馈使用INOUT双向信号(谨慎使用)BUFFER输出信号,可在内部反馈Slide:*实体 数据类型1.标准定义的数据类型不必使用USE语句说明而直接使用,这些标准定义数据类型在标准程序包STANDARD中定义。常用的有Integer(整数)、Real(实数)、Character(字符)等;2.IEEE预定义标准数据类型std_logic:四种取值:’0’(0),’1’(1),’Z’(高阻态),’X’(不定).std_logic_vector:std_logic的矢量形式,表示多位信号.3.用户自定义数据类型枚举类型、数组类型等TYPE数据类型名IS(枚举文字,枚举文字…);Slide:*标识符 描述VHDL语言中端口、信号、常数、变量以及函数等的名称的字符串。VHDL标识符书写规则如下: 使用的字符由26个英文字母、数字0-9以及下划线组成; 标识符必须以英文字母开始,不区分大小写; 不能以下划线结尾; 标识符中不能有空格; 标识符不能与VHDL的关键字重名;Slide:*结构体 结构体描述实体的结构或行为,格式为:ARCHITECTURE结构体名OF实体名IS定义语句{内部信号、常数、数据类型、函数}BEGIN并行处理语句;进程语句(PROCESS);END结构体名;Slide:*结构体 上述计数器的结构体部分ARCHITECTUREbehaveOFcount_m16ISBEGINPROCESS(clk);BEGINIF(clk’eventandclk=‘1’)THENIF(reset=‘1’)THENcount<=“0000”;co<=‘0’;ELSIF(count=“1111”)count<=“0000”;co<=‘1’;ELSEcount<=count+1;co<=‘0’;ENDIF;ENDIF;ENDPROCESS;ENDbehave;Slide:*结构体 另一个加法器结构体的例子ARCHITECTUREbehaveOFadder8ISBEGINSUM1<=ADD_A+ADD_B;SUM2<=ADD_C+ADD_D;SUM3<=ADD_E+ADD_F;ENDbehave;Slide:*数据对象 数据对象包括:常量、信号、变量1.常量在设计描述中保持特定值不变.CONSTANT常量名:数据类型:=表达式;如CONSTANTwidth:integer:=8;2.信号用于声明内部信号,在元件之间起互连作用.SIGNAL信号名:数据类型;如SIGNALcount:std_logic_vector(3downto0);3.变量用于声明进程或子程序中的局部值;VARIABLE变量名:数据类型;如VARIABLEa:std_logic;Slide:*数据对象 信号VS变量1.信号是全局量,常在结构体中声明:ARCHITECTUREbehaveOFEntity_NameISSIGNALsig_temp:std_logic;变量是局部量,常在进程中声明:ARCHITECTUREbehaveOFEntity_NameISBEGINPROCESS(…)VARIABLEvar_temp:std_logic;Slide:*数据对象 信号VS变量2.信号赋值的符号为“<=”SIG_temp<=‘1’;变量赋值的符号为“:=”VAR_temp:=‘1’;Slide:*数据对象 信号VS变量3.在进程中,信号赋值在进程结束时更新,如果一个进程中多次对同一个信号赋值,最后一个赋值有效.SIGNALd:std_logic;PROCESS(a,b,c)BEGINd<=a;--此赋值被忽略x<=candd;d<=b;--此赋值有效y<=candd;ENDPROCESS;Slide:*数据对象 信号VS变量执行结果x<=candb;y<=candb;以下是综合器的综合结果.Slide:*数据对象 信号VS变量在进程中,变量赋值是立即生效的,没有延时.PROCESS(a,b,c)VARIABLEd:std_logic;BEGINd:=a;x<=candd;d:=b;y<=candd;ENDPROCESS;Slide:*数据对象 信号VS变量执行结果x<=canda;y<=candb;以下是综合器的综合结果.Slide:*VHDL描述方法 VHDL中三种描述语句1.顺序语句(SequentialStatement)只存在于进程(PROCESS)和子程序内部,每一条语句的执行按书写顺序进行.2.并行语句(ConcurrentStatement)所有并行语句在结构体中同时执行,与书写顺序无关.3.进程语句(ProcessStatement)Slide:*顺序语句(Sequential) IF语句PROCESS(s,a0,a1,a2,a3)BEGINIFs=“00”THENy<=a0;ELSIFs=“01”THENy<=a1;ELSIFs=“10”THENy<=a2;ELSEy<=a3;ENDIF;ENDPROCESS;Slide:*顺序语句(Sequential) CASE语句PROCESS(s,a0,a1,a2,a3)BEGINCASEsISWHEN“00”=>y<=a0;WHEN“01”=>y<=a1;WHEN“10”=>y<=a2;WHENothers=>y<=a3;ENDCASE;ENDPROCESS;Slide:*并发语句(ConcurrentStatement) 所有的并发语句都是并行执行 并发语句不关心在程序中的位置 并发语句的输出依赖于输入Entitytest1IsPort(a,b:inbit;c,d:outbit);endtest1;architecturetest1_bodyoftest1isbegind<=aorb;c<=aandb;endtest1_body;Entitytest1IsPort(a,b:inbit;c,d:outbit);endtest1;architecturetest1_bodyoftest1isbeginc<=aandb;d<=aorb;endtest1_body;Slide:*并发语句c<=aandb;d<=aorb;d<=aorb;c<=aandb;C=AandBD=AORBSlide:*并行语句(Concurrent) 赋值语句1.简单信号赋值语句赋值目标<=表达式;如c<=a+b;c<=aandb;c<=a;Slide:*并行语句(Concurrent)2.条件赋值语句目标<=表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE……表达式;如:y<=a0WHENs=“00”ELSEa1WHENs=“01”ELSEa2WHENs=“10”ELSEa3;Slide:*并行语句(Concurrent)3.选择信号赋值语句WITH选择表达式SELECT赋值目标信号<=表达式WHEN选择值,……表达式WHEN选择值;如:WITHsSELECTy<=a0WHEN“00”,a1WHEN“01”,a2WHEN“10”,a3WHENOTHERS;Slide:*进程语句(Process) 进程语句进程语句由一段程序构成,各个进程是并行执行的.进程内部都是顺序执行的.一个结构体可以包含多个进程语句.PROCESS语句是VHDL中最常用、最基本的语句.PROCESS(敏感信号表)[声明区];--此处声明局部变量等.BEGIN--进程开始[顺序语句];ENDPROCESS;--进程结束Slide:*进程语句Usingthe“SENSITIVITYLIST”name:PROCESS(sensitivity_list)beginsequentialstatement#1sequentialstatement#2.......sequentialstatement#NENDPROCESSname;Slide:*进程语句(Example1)entitytestisport(a,b:instd_logic_vector(3downto0);sel1,sel2:instd_logic;result:outstd_logic_vector(3downto0));endtest;architecturebehaveoftestisbeginprocess(sel1,sel2,a,b)beginif(sel1='1')thenresult<=a;elsif(sel2='1')thenresult<=b;elseresult<="0000";endif;endprocess;endbehave;Slide:*进程语句(Example1)Slide:*进程语句(Example2) Entitytest1ISPORT(clk,d1,d2:instd_logic;q1,q2:outstd_logic);ENDtest1;ARCHITECTUREtest1_bodyOFtest1ISBEGINPROCESS(clk,d1)BEGINIF(clk’eventandclk=‘1’)THENq1<=d1;ENDIF;ENDPROCESS;PROCESS(clk,d2)BEGINIF(clk’eventandclk=‘1’)THENq2<=d2;ENDIF;ENDPROCESS;ENDtest1_body;Slide:*进程语句(Example2) Entitytest2ISPORT(clk,d1,d2:instd_logic;q1,q2:outstd_logic);ENDtest1;ARCHITECTUREtest1_bodyOFtest1ISBEGINPROCESS(clk,d2)BEGINIF(clk’eventandclk=‘1’)THENq2<=d2;ENDIF;ENDPROCESS;PROCESS(clk,d1)BEGINIF(clk’eventandclk=‘1’)THENq1<=d1;ENDIF;ENDPROCESS;ENDtest1_body;Slide:*进程语句(Example2) 上述两个程序的仿真波形是相同的,如下所示:Slide:*常用电路描述 加法器 编码器 译码器 比较器 数据选择器 同步化电路Slide:*加法器-10位全加器LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_unsigned.ALL;ENTITYadder10ISPORT(op1,op2:INstd_logic_vector(8downto0);ci:INbit;result:OUTstd_logic_vector(9downto0));ENDadder10;Slide:*加法器-10位全加器ARCHITECTUREbehaveOFadder10ISSIGNALtemp:std_logic_vector(9downto0);BEGINtemp<=op1+op2;result<=tempWHENci=‘0’ELSEtemp+1;ENDbehave;Slide:*编码器-优先编码器LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYencoderISPORT(a,b,c,d,e,f,g,h:INstd_logic;codeout:outstd_logic_vector(2downto0));ENDencoder;Slide:*编码器-优先编码器ARCHITECTUREbehaveOFencoderISBEGINcodeout<=“111”WHENh=‘1’ELSE“110”WHENg=‘1’ELSE“101”WHENf=‘1’ELSE“100”WHENe=‘1’ELSE“011”WHENd=‘1’ELSE“010”WHENc=‘1’ELSE“001”WHENb=‘1’ELSE“000”WHENa=‘1’ELSE“000”;ENDbehave;Slide:*译码器-3-8译码器LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYdecoderISPORT(adrin:INstd_logic_vector(2downto0);deout:OUTstd_logic_vector(7downto0));ENDdecoder;Slide:*译码器-3-8译码器ARCHITECTUREbehaveOFdecoderISBEGINPROCESS(adrin)BEGINCASEadrinISWHEN“000”=>deout<=“00000000”;WHEN“001”=>deout<=“00000010”;……WHEN“111”=>deout<=“10000000”;WHENOTHERS=>deout<=“00000000”;ENDCASE;ENDPROCESS;ENDbehave;Slide:*比较器LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYcompISPORT(a,b:INstd_logic_vector(3downto0);aequalb,agreb,alessb:OUTstd_logic);ENDcomp;Slide:*比较器ARCHITECTUREbehaveOFcompISBEGINaequalb<=‘1’WHENa=bELSE‘0’;agreb<=‘1’WHENa>bELSE‘0’;alessb<=‘1’WHENa<bELSE‘0’;ENDbehave;Slide:*数据选择器LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYv16mux4ISPORT(d0,d1,d2,d3:INstd_logic_vector(15downto0);sel:INstd_logic_vector(1downto0);dataout:INstd_logic_vector(15downto0));ENDv16mux4;Slide:*数据选择器ARCHITECTUREbehaveOFv16mux4ISBEGINWITHselSELECTdataout<=d0WHEN“00”;d1WHEN“01”;d2WHEN“10”;d3WHENOTHERS;ENDbehave;Slide:*同步化电路LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYsyncirISPORT(sin,clk:INstd_logic;sout:OUTstd_logic);ENDsyncir;Slide:*同步化电路ARCHITECTUREbehaveOFsyncirISSIGNALq1,q0:std_logic;BEGINsout<=q0AND(NOT(q1));PROCESS(clk)BEGINIF(clk’eventANDclk=‘1’)THENq0<=sin;q1<=q0;ENDIF;ENDPROCESS;ENDbehave;Slide:*同步化电路Slide:*状态机设计 状态机是大型电子设计的基础,通常用来状态机来实现数字系统的控制器.最基本的两种状态机方式:Moore型较简单的一种状态机,输出仅是当前状态的函数.Mealy型输出是当前状态和输入的状态.Slide:*MooreVSMealySlide:*Moore型状态机S1S2S3S400010010100001001010Slide:*Moore型状态机LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_unsigned.ALL;ENTITYmoore_exampleISPORT(clk,datain,reset:INstd_logic;dataout:OUTstd_logic_vector(3downto0));ENDmoore_example;Slide:*Moore型状态机ARCHITECTUREbehaveOFmoore_exampleISTYPEstate_typeIS(s1,s2,s3,s4);SIGNALstate:state_type;BEGINPROCESS(clk,reset)IFreset=‘1’THENstate<=s1;ELSIF(clk’eventandclk=‘1’)THENCASEstateISWHENs1=>IFdatain=‘1’THENstate<=s2;ENDIF;WHENs2=>IFdatain=‘0’THENstate<=s3;ENDIF;Slide:*Moore型状态机WHENs3=>IFdatain=‘1’THENstate<=s4;ENDIF;WHENs4=>IFdatain=‘0’THENstate<=s1;ENDIF;ENDCASE;ENDIF;ENDPROCESS;PROCESS(state)BEGINCASEstateISWHENs1=>dataout<=“0001”;Slide:*Moore型状态机WHENs2=>dataout<=“0010”;WHENs3=>dataout<=“0100”;WHENs4=>dataout<=“1000”;ENDCASE;ENDPROCESS;ENDbehave;Slide:*Mealy型状态机S1S2S3S41-00010-000010100-00101-00011-01000-00010-10001-0001Slide:*Mealy型状态机LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_unsigned.ALL;ENTITYmealy_exampleISPORT(clk,datain,reset:INstd_logic;dataout:OUTstd_logic_vector(3downto0));ENDmealy_example;Slide:*Mealy型状态机ARCHITECTUREbehaveOFmealy_exampleISTYPEstate_typeIS(s1,s2,s3,s4);SIGNALstate:state_type;BEGINPROCESS(clk,reset)IFreset=‘1’THENstate<=s1;ELSIF(clk’eventandclk=‘1’)THENCASEstateISWHENs1=>IFdatain=‘1’THENstate<=s2;ENDIF;WHENs2=>IFdatain=‘0’THENstate<=s3;ENDIF;Slide:*Mealy型状态机WHENs3=>IFdatain=‘1’THENstate<=s4;ENDIF;WHENs4=>IFdatain=‘0’THENstate<=s1;ENDIF;ENDCASE;ENDIF;ENDPROCESS;PROCESS(state)BEGINCASEstateISWHENs1=>IFdatain=‘1’THENdataout<=“0001”;ELSEdataout<=“0000”ENDIF;Slide:*Mealy型状态机WHENs2=>IFdatain=‘0’THENdataout<=“0010”;ELSEdataout<=“0001”;ENDIF;WHENs3=>IFdatain=‘1’THENdataout<=“0100”;ELSEdataout<=“0001”;ENDIF;WHENs4=>IFdatain=‘0’THENdataout<=“1000”;ELSEdataout<=“0001”;ENDIF;ENDCASE;ENDPROCESS;ENDbehave;Slide:*VHDL设计FPGA的基本方法 1.文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境.VHDL文件保存为.vhd文件. 2.逻辑综合与布局布线:使用综合器和布局布线工具对文件进行处理. 3.仿真:利用仿真软件验证电路的功能和时序. 4.编程下载:确认仿真无误后,将文件下载到芯片中.Slide:*一个实例 以一个十字路口交通管理信号灯为例。设该交通灯系统用于主干道与乡间公路之间的交叉路口, 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 是优先保证主干道的畅通,因此平时处于“主干道绿灯,乡间道红灯”状态,只有在乡间公路有车辆要穿行主干道时才将交通灯切向“主干道红灯,乡间道绿灯”,一旦乡间公路无车辆通过路口,交通灯又回到“主绿、乡红”的状态。此外,主干道每次通行的时间不得短于1分钟,乡间公路每次通行时间不得长于20秒。而在两个状态交换过程中出现的“主黄,乡红”和“主红,乡黄”状态,持续时间都为4秒。Slide:*
本文档为【数字系统课程设计—VHDLPPT课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
金水文库
鑫淼网络科技有限公司主要经营:PPT设计 、课件制作,软文策划、合同简历设计、计划书策划案、各类模板等。公司秉着用户至上的原则服务好每一位客户
格式:ppt
大小:486KB
软件:PowerPoint
页数:0
分类:小学语文
上传时间:2020-05-11
浏览量:9