跟我学VHDL.ppt
《跟我学VHDL.ppt》由会员分享,可在线阅读,更多相关《跟我学VHDL.ppt(155页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、跟我学跟我学VHDL目录nVHDL概述n常见HDL介绍nVHDL编程技术VHDL概述概述目录目录nHDL概述n选择VHDL还是Verilog HDL?n学习HDL的几点提示nHDL与原理图输入法的关系nHDL开发流程HDL概述概述-1n随着EDA技术的发展,使用硬件语言设计PLD/FPGA成为一种趋势。n目前最主要的硬件描述语言是VHDL和Verilog HDL。HDL概述概述-2nVHDL发展的较早,语法严格,而Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由。nVHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog烦琐一些,但Verilo
2、g自由的语法也容易让少数初学者出错。选择选择VHDL还是还是Verilog HDL?-1n这是一个初学者最常见的问题。其实两种语言的差别并不大,他们的描述能力也是类似的。掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。n选择何种语言主要还是看周围人群的使用习惯,这样可以方便日后的学习交流。选择选择VHDL还是还是Verilog HDL?-2n当然,如果您是集成电路(ASIC)设计人员,则必须首先掌握Verilog,因为在IC设计领域,90以上的公司都是采用Verilog进行IC设计。n对于PLD/FPGA设计者而言,两种语言可以自由选择。学习学习HDL的几点提示的几点提示n了解
3、HDL的可综合性问题n用硬件设计思想来编写HDLn语法掌握贵在精,不在多1.了解了解HDL的可综合性问题的可综合性问题nHDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。n 但如果我们的程序是用于硬件实现(例如:用于FPGA设计),那么我们就必须保证程序“可综合”(程序的功能可以用硬件电路实现)。1.了解了解HDL的可综合性问题的可综合性问题n不可综合的HDL语句在软件综合时将被忽略或者报错。n我们应当牢记一点:“所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现”。2.用硬件设计思想来编写用硬件设计思想来编写HDLn学好HDL
4、的关键是充分理解HDL语句和硬件电路的关系。n 编写HDL,就是在描述一个电路,我们写完一段程序以后,应当对生成的电路有一些大体上的了解,而不能用纯软件的设计思路来编写硬件描述语言。要做到这一点,需要我们多实践,多思考,多总结。3.语法掌握贵在精,不在多语法掌握贵在精,不在多n30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,在程序移植或者更换软件平台时,容易产生兼容性问题,也不利于其他人阅读和修改。n建议多用心钻研常用语句,理解这些语句的硬件含义,这比多掌握几个新语法要有用的多。HDL与原理图输入法的关系与原理图输入法的关系nHDL和传统的原理
5、图输入方法的关系就好比是高级语言和汇编语言的关系。nHDL的可移植性好,使用方便,但效率不如原理图;原理图输入的可控性好,效率高,比较直观,但设计大规模CPLD/FPGA时显得很烦琐,移植性差。HDL与原理图输入法的关系与原理图输入法的关系n在真正的PLD/FPGA设计中,通常建议采用原理图和HDL结合的方法来设计,适合用原理图的地方就用原理图,适合用HDL的地方就用HDL,并没有强制的规定。n在最短的时间内,用自己最熟悉的工具设计出高效,稳定,符合设计要求的电路才是我们的最终目的。HDL开发流程开发流程n文本编辑n功能仿真(前仿真)n布局布线n时序仿真(后仿真)n编程下载常见常见HDL介绍介
6、绍目录目录nVHDLnVerilog HDLnAHDLnC/C+VHDLnVery-High-Speed Integrated Circuit Hardware Description Languagen诞生于1982年n1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言n有87版和93版Verilog HDLnVerilog HDL是在C语言的基础上发展起来的n由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创n1989年CADENCE公司收购了GDA公司n1990年CADENCE公司公开发表了Verilog HDL,并
7、成立LVI组织以促进Verilog HDL成为IEEE标准AHDLnAltera HDL是ALTERA公司发明的n特点是非常易学易用n缺点是移植性不好,通常只用于ALTERA自己的开发系统C/C+n目前有两种相对成熟的硬件C语言:systemC和Handle-Cn目前各种硬件C语言的编译软件都还不够成熟,很少能直接投入到实际产品的开发中VHDL编程技术编程技术资料来源资料来源nCPLD系统设计技术入门与应用n黄正瑾 等编著目录目录nVHDL基本结构与语法nVHDL设计进阶n有限状态机(FSM)VHDL基本结构与基本结构与语法语法版本:版本:20030220修订:修订:20040303目录目录n
8、VHDL程序基本结构nVHDL语言要素nVHDL基本描述方法VHDL基本结构基本结构n实体n结构体VHDL程序基本结构程序基本结构 一个相对完整的一个相对完整的VHDL设计由以下几个部分组成:设计由以下几个部分组成:(1)库、程序包库、程序包(LIBRARY&PACKAGE);(2)实体实体(ENTITY);(3)结构体结构体(ARCHITECTURE);(4)配置配置(CONFIGURATION)。以上以上4个部分并不是每一个个部分并不是每一个VHDL程序都必程序都必须具备的,其中只有一个实体和一个与之须具备的,其中只有一个实体和一个与之对应的结构体是必须的。对应的结构体是必须的。LIBRA
9、RY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;一个异步清零、进位输入输出功一个异步清零、进位输入输出功能的能的4位计数器实例位计数器实例ENTITY cntm16 ISGENERIC(cntwidth:integer:=4);port(ci:IN std_logic;nreset :IN std_logic;clk:INstd_logic;co:OUT std_logic;qcnt:BUFFER std_logic_vector(cntwidth-1 DOWNTO 0);END cntm16;ARCHIT
10、ECTURE behave OF cntm16 ISBEGINco=1 when(qcnt=1111 AND ci=1)ELSE 0;PROCESS(clk,nreset)BEGINif(nreset=0)THENqcnt0);ELSIF(clkevent and clk=1)THENIF(ci=1)THENqcnt=qcnt+1;END IF;END IF;END PROCESS;END behave;实体实体实体实体(ENTITY)是是VHDL设计中最基本的组成部分之一,设计中最基本的组成部分之一,VHDL表达的所有设计均与实体有关。表达的所有设计均与实体有关。实体类似于原理图中的一个部件
11、符号,它并不描述设计的具实体类似于原理图中的一个部件符号,它并不描述设计的具体功能,只定义了该设计所需的全部输入输出信号。体功能,只定义了该设计所需的全部输入输出信号。实体格式如下所示:实体格式如下所示:ENTITY 实体名实体名 IS GENERIC (常数名常数名:数据类型数据类型 :设定值设定值 )-本篇均用本篇均用 表示可选项表示可选项;PORT(列出设计的所有输入列出设计的所有输入/输出信号输出信号);END 实体名实体名;ENTITY cntm16 IS-cntm16为实体名为实体名GENERIC(cntwidth:integer:=4);-类属表,可选类属表,可选port(ci:
12、IN std_logic;-每一句结尾均为每一句结尾均为;nreset :IN std_logic;clk:INstd_logic;co:OUT std_logic;qcnt:BUFFER-但最后一句没有但最后一句没有;std_logic_vector(cntwidth-1 DOWNTO 0);END cntm16;端口信号名端口信号名端口模式端口模式端口类型端口类型实体对应的原理图符号实体对应的原理图符号 实体名:实体名:Max+PlusII 要求实体名必须与要求实体名必须与VHDL的文件名相同。此例中的文件名相同。此例中计数器的计数器的VHDL设计文件必须以设计文件必须以cntm16.vh
13、d命名且项目名称命名且项目名称要与文件名一一对应,否则编译会出错。要与文件名一一对应,否则编译会出错。类属参量:类属参量:类属参量类属参量GENERIC是一种端口界面常数,常用来规定端口是一种端口界面常数,常用来规定端口的大小、实体中子元件的数目及实体的定时特性等。它和常的大小、实体中子元件的数目及实体的定时特性等。它和常数不同,常数只能从设计实体的内部得到赋值且不能改变,数不同,常数只能从设计实体的内部得到赋值且不能改变,而类属参量的值可由设计实体的外部提供。因此,设计者可而类属参量的值可由设计实体的外部提供。因此,设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实以从外面通过类属
14、参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。体或一个元件的内部电路结构和规模。此例中此例中cntwidth宽度为宽度为4,也可容易地改变,也可容易地改变GENERIC(cntwidth:integer:8)端口信号名:端口信号名:端口信号名在实体中必须是唯一的,信号名应是合法的标识端口信号名在实体中必须是唯一的,信号名应是合法的标识符。符。端口模式端口模式IN 信号进入实体信号进入实体(不能给输入端口赋值不能给输入端口赋值)OUT 信号离开实体,不能在内部反馈使信号离开实体,不能在内部反馈使用用(不能读入输出端口的数据不能读入输出端口的数据)INOUT 信号是双向的信
15、号是双向的(既可以进入实体,既可以进入实体,也可以离开实体也可以离开实体)BUFFER 信号输出到实体外部,但同时也可信号输出到实体外部,但同时也可在实体内部反馈。在实体内部反馈。BUFFER(缓冲缓冲)是是INOUT(双向双向)的子集,但不是由外部驱动的子集,但不是由外部驱动 结构体结构体所有能被仿真的实体都由结构体所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即结构体描述实体的结描述,即结构体描述实体的结构或行为。一个实体可以有多个结构体,每个结构或行为。一个实体可以有多个结构体,每个结构体分别代表该实体功能的不同实现方案。构体分别代表该实体功能的不同实现方案。结构体可以采
16、用行为描述、结构描述或数据流描结构体可以采用行为描述、结构描述或数据流描述,是述,是VHDL设计中最主要的部分。设计中最主要的部分。ARCHITECTURE 结构体名结构体名 OF 实体名实体名 说明语句说明语句 BEGIN功能描述语句;功能描述语句;-并行处理语句并行处理语句END 结构体名结构体名;-结构体名可以任意,但当一个实体具有多个结构体时,取结构体名可以任意,但当一个实体具有多个结构体时,取名不可重复名不可重复 VHDL语言要素语言要素内容内容n标识符n数据对象n数据类型n运算符nVHDL的属性VHDL语言要素语言要素1标识符标识符n标识符标识符(Identifiers)由英文字母
17、由英文字母“a”到到“z”、下划线下划线“_”组成组成。例外,例外,VHDL语言的保留语言的保留字和系统的子程序也不能字和系统的子程序也不能作为标识符出现。作为标识符出现。nVHDL不区分大小写不区分大小写n标识符一定要以字母标识符一定要以字母开头开头n下划线不能放在结尾下划线不能放在结尾n下划线不能连用下划线不能连用 VHDL语言要素语言要素2数据对象数据对象n信号信号(SIGNAL)n变量变量(VARIABLE)n常量常量(CONSTANT)信号信号(SIGNAL)n信号定义格式如下:信号定义格式如下:SIGNAL 信号名信号名:数据类型数据类型:=初始值初始值;如:如:SIGNAL co
18、unt:std_logic_vector(3 DOWNTO 0):=”0000”;n信号赋值语句语法格式:信号赋值语句语法格式:目标信号名目标信号名=表达式;表达式;如:如:q=count;变量变量(VARIBLE)n变量只在给定的进程中用于声明局部值或变量只在给定的进程中用于声明局部值或用于子程序中,变量的赋值符号为用于子程序中,变量的赋值符号为“:=”。n和信号不同,信号是实际的,是外输入,和信号不同,信号是实际的,是外输入,或者是内部的一个存储元件;而变量是虚或者是内部的一个存储元件;而变量是虚的,仅仅是为书写方便而引入的一个名称,的,仅仅是为书写方便而引入的一个名称,它常用在实现某种算
19、法的赋值语句中。它常用在实现某种算法的赋值语句中。变量变量(VARIBLE)n变量定义格式如下:变量定义格式如下:VARIABLE 变量名变量名:数据类型数据类型 :=初始值初始值;如:如:VARIABLE a:integer:=0;n变量赋值语句的语法格式:变量赋值语句的语法格式:目标信号名目标信号名:=表达式;表达式;如:如:a:=b+c:常量常量(CONSTANT)n常量是全局量,在结构体描述、程序包说常量是全局量,在结构体描述、程序包说明、实体说明、过程说明、函数调用说明明、实体说明、过程说明、函数调用说明和进程说明中使用。和进程说明中使用。n常量在设计描述中保持某一规定类型的特常量在
20、设计描述中保持某一规定类型的特定值不变。如利用它可设计不同模值的计定值不变。如利用它可设计不同模值的计数器,模值存于一常量中,对不同的设计,数器,模值存于一常量中,对不同的设计,改变模值仅需改变此常量值即可。改变模值仅需改变此常量值即可。常量常量(CONSTANT)n常量定义格式如下:常量定义格式如下:CONSTANT 常数名常数名:数据类型数据类型:=表达式;表达式;如:如:CONSTANT mod:integer:=6;如何定义数据对象如何定义数据对象LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.A
21、LL;ENTITY bcdadder ISPORT(op1,op2 :IN integer RANGE 0 to 9;result :OUT integer RANGE 0 to 31);END bcdadder;一位一位BCD码的加法器码的加法器ARCHITECTURE behave OF bcdadder ISCONSTANT adjustnum:integer:=6;-定义一个产量;整数型,值为定义一个产量;整数型,值为6SIGNAL binadd:integer RANGE 0 TO 18;-定义一个信号,以保存两个二进制数的和定义一个信号,以保存两个二进制数的和BEGINbinadd
22、 9 THENtmp:=adjustnum;-变量赋值,立即起作用变量赋值,立即起作用ELSEtmp:=0;END IF;result=binadd+tmp;END PROCESS;END behave;信号和变量的比较信号和变量的比较n信号与变量声明的形式与位置不同:信号声明为信号与变量声明的形式与位置不同:信号声明为SIGNAL,变量声明为,变量声明为VARIABLE;信号声;信号声明在子程序、进程等外部,而变量声明在于程序、明在子程序、进程等外部,而变量声明在于程序、进程等内部。进程等内部。n信号与变量的赋值不同:在进程中,信号赋值在信号与变量的赋值不同:在进程中,信号赋值在进程结束时起
23、作用,而变量赋值是立即起作用的。进程结束时起作用,而变量赋值是立即起作用的。n信号和变量赋值符不同:信号赋值为信号和变量赋值符不同:信号赋值为“=”,变量,变量赋值为赋值为“:=”。实例:信号和变量的比较实例:信号和变量的比较使用信号的情况使用信号的情况LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY xor_sig ISPORT(a,b,c:INstd_logic;x,y:OUT std_logic);END xor_sig;ARCHITECTURE sig_arch OF xor_sig ISSIGNAL d:std_logic;BEGINsi
24、g:PROCESS(a,b,c)BEGINd=a;-ignored it!x=c XOR d;d=b;-overrides it!y=c XOR d;END PROCESS;END sig_arch;结果:结果:x=c xor b,y=c xor b实例:信号和变量的比较实例:信号和变量的比较使用变量的情况使用变量的情况 LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY xor_var ISPORT(a,b,c:INstd_logic;x,y:OUT std_logic);END xo
25、r_var;ARCHITECTURE var_arch OF xor_var ISBEGINvar:PROCESS(a,b,c)VARIABLE d:std_logic;BEGINd:=a;x=c XOR d;d:=b;y=c XOR d;END PROCESS;END var_arch;结果:结果:x=c xor a,y=c xor bVHDL语言要素语言要素3数据类型数据类型 nVHDL对每一个常数、变量、信号、函数及设定的各种参量的数据类型(Data Types)都有严格要求n相同数据类型的量才能互相传递和作用 n标准定义的数据类型都在VHDL标准程序表standard中定义,在实际使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL
限制150内