首页 VHDL教程

VHDL教程

举报
开通vip

VHDL教程VHDL培训教程欢迎参加VHDL培训浙江大学电子信息技术研究所电子设计自动化(EDA)培训中心编写:王勇TEL:7951949或7951712EMAIL:wangy@isee.zju.edu.cnVHDL培训教程第一讲、VHDL简介及其结构第二讲、VHDL中的对象、操作符、数据类型第三讲、VHDL中的控制语句及模块第四讲、状态机的设计*第一讲、VHDL简介及其结构 通过本课的学习您可以了解以下几点1、VHDL的基本概念2、VHDL的基本结构3、VHDL的设计初步 VHDL-VHSICHardwareDecripti...

VHDL教程
VHDL 培训 焊锡培训资料ppt免费下载焊接培训教程 ppt 下载特设培训下载班长管理培训下载培训时间表下载 教程欢迎参加VHDL培训浙江大学电子信息技术研究所电子设计自动化(EDA)培训中心编写:王勇TEL:7951949或7951712EMAIL:wangy@isee.zju.edu.cnVHDL培训教程第一讲、VHDL简介及其结构第二讲、VHDL中的对象、操作符、数据类型第三讲、VHDL中的控制语句及模块第四讲、状态机的设计*第一讲、VHDL简介及其结构 通过本课的学习您可以了解以下几点1、VHDL的基本概念2、VHDL的基本结构3、VHDL的设计初步 VHDL-VHSICHardwareDecriptionLanguage其中VHSIC-VeryHighSpeedIntegratedCircuit电子设计自动化的关键技术之一是要求用形式化方法来描述硬件系统。VHDL适应了这种要求。什么是VHDLVHDL和VerilogHDL VerilogHDL:另一种硬件描述语言,由Verilog公司开发,1995年成为IEEE 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 。优点:简单、易学易用缺点:功能不如VHDL强大,仿真工具少 VHDL:1987年成为IEEE标准优点:功能强大、通用性强。缺点:难学VHDL的发展历史 起源于八十年代,由美国国防部开发 两个标准:1、1987年的IEEE1076(VHDL87)2、1993年进行了修正(VHDL93)VHDL在电子系统设计中的应用 电子系统的设计模块VHDL在电子系统设计中的应用 电子系统设计的描述等级1、行为级2、RTL级(Registertransferlevel)3、逻辑门级4、版图级 用VHDL可以描述以上四个等级VHDL在电子系统设计中的应用 系统设计的描述等级-制版级VHDL在电子系统设计中的应用 系统设计的描述等级-逻辑门级VHDL在电子系统设计中的应用 系统设计的描述等级-RTL级VHDL在电子系统设计中的应用 系统设计的描述等级-行为级如何使用VHDL描述硬件实体libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitycountisport(clock,reset:inSTD_LOGIC;dataout:outSTD_LOGIC_VECTOR(3downto0));endcount;architecturebehaviorlofcountissignaldatabuffer:STD_LOGIC_VECTOR(3downto0);begindataout<=databuffer;process(clock,reset)beginif(reset='1')thendatabuffer<="0000";elsif(clock'eventandclock='1')thenifdatabuffer="1000"thendatabuffer<="0000";elsedatabuffer<=databuffer+'1';endif;endif;endprocess;endbehavioral;VHDL结构要点1、ENTITY(实体)格式:Entity实体名IS[类属参数说明][端口说明]EndEntity;其中端口说明格式为:PORT(端口名1,端口名N:方向:类型)其中方向有:IN,OUT,INOUT,BUFFER,LINKAGEVHDL结构要点 注意 简单地说In不可以出现在<=或:=的左边out不可以出现在<=或:=的右边buffer可以出现在<=或:=的两边In信号只能被引用,不能被赋值out信号只能被赋值,不能被引用buffer信号可以被引用,也可以被赋值VHDL结构要点 例子(HalfAdd)其内部结构将由Architecture来描述VHDL结构要点2、Arcthitecture(构造体)格式:Arcthitecture构造体名of实体名is[定义语句]内部信号、常数、元件、数据类型、函数等的定义begin[并行处理语句和block、process、function、procedure]end构造体名;VHDL结构要点 例子(HalfAdd)VHDL结构要点 例子(FullAdd)(学习如何调用现有模块)VHDL结构要点 实例(FullAdd)-entityVHDL结构要点 实例(FullAdd)-architectureVHDL中的设计单元除了entity(实体)和architecture(构造体)外还有另外三个可以独立进行编译的设计单元 Package(包集合)属于库结构的一个层次,存放信号定义、常数定义、数据类型、元件语句、函数定义和过程定义。 PackageBody具有独立对端口(port)的package configuration(配置)描述层与层之间的连接关系以及实体与构造体之间关系。VHDL中的设计单元 VHDL中的设计单元(可以独立编译)Library库的概念 STD库--VHDL的标准库 IEEE库--VHDL的标准库的扩展 面向ASIC的库--不同的工艺 不同公司自定义的库 普通用户自己的库库:数据的集合。内含各类包定义、实体、构造体等Library库的概念 用户自己的库当您的VHDL文件被编译后,编译的结果储存在特定的目录下,这个目录的逻辑名称即Library,此目录下的内容亦即是这个Library的内容。Package包的概念 Package(包)VHDL中的结构关系 结构关系VHDL简介及其结构 本讲结束 下一讲:VHDL中的对象、操作符、数据类型第二讲、VHDL对象、操作符、数据类型 通过本课的学习您可以了解以下几点1、VHDL的基本类型2、如何在VHDL中定义类型3、VHDL的信号定义4、如何在VHDL中对信号赋值5、VHDL中的操作符VHDL对象、操作符、数据类型 对象object对客观实体的抽象和概括 VHDL中的对象有:1、Constant(常量)在程序中不可以被赋值2、Variable(变量)在程序中可以被赋值(用“:=”),赋值后立即变化为新值。3、Signal(信号)在程序中可以被赋值(用“<=”),但不立即更新,当进程挂起后,才开始更新。VHDL对象、操作符、数据类型 VHDL中的对象使用:variablex,y:integer;--定义了整数型的变量对象x,yconstantVcc:real;--定义了实数型的常量对象Vccsignalclk,reset:bit;--定义了位类型的信号对象clk,resetVHDL中的对象使用 注意1、variable只能定义在process和subprogram(包括function和procedure)中,不可定以在其外部。2、signal不能定义在process和subprogram(包括function和procedure)中,只可定以在其外部。VHDL对象、操作符、数据类型 对象的属性类似于其它面向对象的编程语言如VB、VC、DELPHI用法格式:对象’属性例子:clk’event--表明信号clk的event属性常用的属性:Signal对象的常用属性有:event:返回boolean值,信号发生变化时返回truelast_value:返回信号发生此次变化前的值last_event:返回上一次信号发生变化到现在变化的间隔时间VHDL对象、操作符、数据类型 Signal对象的常用属性有:接上页 delayed[(时延值)]:使信号产生固定时间的延时并返回 stable[(时延值)]:返回boolean,信号在 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 时间内没有变化返回true transaction:返回bit类型,信号每发生一次变化,返回值翻转一次例子:A<=B’delayed(10ns);--B延时10ns后赋给A;if(B’Stable(10ns));--判断B在10ns中是否发生变化VHDL对象、操作符、数据类型信号的event和last_value属性经常用来确定信号的边沿 属性应用例如:判断clk的上升沿if((clk’event)and(clk=‘1’)and(clk’last_value=‘0’))then判断clk的下降沿if((clk’event)and(clk=‘0’)and(clk’last_value=‘1’))thenVHDL的基本类型1、bit(位):`0`和`1`2、bit-Vector(位矢量):例如:``00110``3、Boolean“ture”和“false”4、time例如:1us、100ms,3s5、character例如:‘a’、’n’、’1’、’0’6、string例如:“sdfsd”、”mydesign”7、integer32位例如:1、234、-21342348、real范围-1.0E38~+1.0E38例如:1.0、2.834、3.14、0.0VHDL的基本类型9、natural自然数和positive正整数10、senveritylevel(常和assert语句配合使用)包含有:note、warning、error、failure 以上十种类型是VHDL中的标准类型,在编程中可以直接使用。使用这十种以外的类型,需要自行定义或指明所引用的Library(库)和Package(包)集合VHDL的基本类型 例子一VHDL的基本类型和赋值 例子二VHDL的基本类型和赋值 例子三例子中信号Z有两个驱动A和B;Z必须定义为一种新的数据类型,否则Z将无法决定取值,语句视为非法。VHDL的基本类型和赋值 例子四VHDL的基本类型和赋值 例子五 要点:赋值语句中的方向应和声明中的方向一样VHDL的基本类型和赋值 连接操作符---使用&VHDL的基本类型和赋值 集合操作---使用()VHDL的基本类型和赋值 集合操作---采用序号VHDL的基本类型和赋值 集合操作--采用others在VHDL中定义自己的类型 通用格式TYPE类型名IS数据类型定义 用户可以定义的数据类型枚举类型enumberated、整数型integer、实数型real、数组类型array、纪录类型record、时间类型time、文件类型file、存取类型access在VHDL中定义自己的类型 枚举类型enumberated 格式type数据类型名is(元素,元素…...); 例子typeweekis(sun,mon,tue,thu,fri,sat);typestd_logicis(‘1’,’0’,’x’,’z’);在VHDL中定义自己的类型 整数类integer和实数类real 格式type数据类型名is数据类型定义约束范围; 例子typeweekisintegerrange1to7;typecurrentisrealrange-1E4to1E4在VHDL中定义自己的类型 数组类型array 格式type数据类型名isarray范围of元数据类型名 例子typeweekisarray(1to7)ofinteger;typedeweekisarray(1to7)ofweek;在VHDL中定义自己的类型 时间类型time 格式type数据类型名is范围units基本单位;单位;endunits在VHDL中定义自己的类型 时间类型例子typetimeisrange-1E18to1E18unitsus;ms=1000us;sec=1000ms;min=60sec;endunits注意:引用时间时,有的编译器要求量与单位之间应有一个空格如:1ns;不能写为1ns;在VHDL中定义自己的类型 纪录类型record 格式type数据类型名isrecoerd元素名:数据类型名;元素名:数据类型名;….endrecord;在VHDL中定义自己的类型 纪录类型的例子typeorderisrecordid:integer;date:string;security:boolean;endrecord; 引用:signalflag:boolean;signalorder1:order;order1<=(3423,”1999/07/07”,true);flag<=order1.security;IEEE1164中定义的类型 std_ulogic是对位(bit)类型的扩展,只允许一个驱动源IEEE1164中定义的类型 Std_logic同std_ulogic一样有九个状态,允许一个或多个驱动源IEEE1164中定义的类型 Std_unlogic_vector和std_logic_vectorIEEE1164中定义的类型Std_unlogic、std_ulogic_vectorstd_logic_vector和std_unlogic_vector类型均定义在package(包)standard_logic_1164中在使用这四种类形时应加以说明,例如:libraryieee;useieee.std_logic_1164.all;注:standard_logic_1164位于IEEE库中类型使用例子 例子一(声明使用的库和包)类型使用例子 例子二std_ulogic和std_logic的区别类型使用例子 练习一:下面那一个是正确的3VHDL中的操作符 分类1、逻辑操作符2、关系操作符3、数学运算符VHDL中的操作符1、逻辑操作符有:VHDL中的操作符 逻辑操作符的应用类型VHDL中的操作符 逻辑操作符的应用例子VHDL中的操作符2、关系运算符有VHDL中的操作符 关系运算符的应用 ARRAY(数组)没有数字概念,数组“111”不等于7VHDL中的操作符3、数学运算符注意:上述运算符应用于integer,real,time类型,不能用于vector(如果希望用于vector,可以使用库IEEE的std_logic_unsigned包,它对算术运算符进行了扩展)VHDL中的操作符 VHDL中的操作符应用要点1、VHDL属于强类型,不同类型之间不能进行运算和赋值,可以进行数据类型转换2、vector不表示number3、array不表示numberVHDL中的操作符 本讲结束 下一讲:VHDL中的控制语句及模块第三讲VHDL中的控制语句及模块 通过本讲您将会学到1、Block的编写2、Process的编写3、function和procedure的编写4、VHDL中的流程控制语句的书写VHDL中的控制语句及模块 回顾第一讲的内容VHDL中的控制语句及模块 基本概念1、并行处理(concurrent)语句的执行与书写顺序无关,并行块内的语句时同时执行的2、顺序处理(sequential)语句的执行按书写的先后次序,从前到后顺序执行。这种方式和其他普通编程语言(如c,pascal)是一样的。VHDL中的控制语句及模块 Architecture中的语句及子模块之间是并行处理的 子模块block中的语句是并行处理的 子模块process中的语句是顺序处理的 子模块subprogram中的function和procedure是顺序处理的VHDL中的architectureArcthitecture(构造体)的格式为:(第一讲)Arcthitecture构造体名of实体名is[定义语句]内部信号、常数、元件、数据类型、函数等的定义begin[并行处理语句和block、process、function、procedure]end构造体名;Architecture中的Block Block 格式块名:BLOCK[定义语句]begin[并行处理语句concurrentstatement]endblock块名Architecture中的Block 条件Block 格式块名:BLOCK[(布尔表达式)][定义语句]begin[并行处理语句concurrentstatement[信号]<=guarded[信号,延时];endblock块名Architecture中的Block Block例子myblock1:block(clk=‘1’)signal:qin:bit:=‘0’;beginqout<=guardedqin;endblockmyblock1myblock2:blockbeginqout<=qin;endblockmyblock2Architecture中的process Process 格式[进程名:]process[(触发信号列表)][定义语句;]begin[串行处理语句sequentialstatement;]endprocessArchitecture中的process process例子exp1:process(clk,qin)variable:qin:bit:=‘0’;beginqout<=qin;endprocessexp2:processbeginwaitonclk,qin;qout<=qin;endprocess process例子-值的更新 分析:当A、B、C、D中任一信号发生变化时,进程将开始执行,当执行Z<=AandB后,Z的值不会立即变化;同理执行Z<=CandD后Z的值也不会立即变化。当执行endprocess后,Z的值才开始更新,同时系统挂起开始等待敏感信号。Architecture中的process Process中敏感信号列表的普遍原则是:在process中,其值被引用的信号应当出现在敏感信号列表中例子;二选一的选择器:A、B为输入信号;SEL为选路信号;Z为输出信号; 不符和设计要求Architecture中的subprogram Function(函数) 格式:function函数名(参数1,参数2…...)[定义语句]return数据类型名is[定义语句]begin[顺序执行语句]return[返回变量名]end函数名Architecture中的subprogram Function例子functionmax(a,b:bit)returnbooleanisvariable:flag:boolean;beginif(a=b)thenflag<=true;endifreturnflag;endmaxFunction中的参数不用说明方向(因为只有一种方向in)Architecture中的subprogram procedure(过程) 格式:procedure过程名(参数1,参数2…...)is[定义语句]begin[顺序执行语句]end过程名Architecture中的subprogram Procedure例子proceduremax(a,b:inbit;flag:outboolean)isbeginif(a=b)thenflag<=true;endifendmax;顺序执行语句sequentialstatement Wait语句 assert语句 If语句 case语句 forloop语句 while语句顺序执行语句sequentialstatement Wait语句 书写格式wait;--无限等待waiton[信号列表]--等待信号变化waituntil[条件];--等待条件满足waitfor[时间值];--等待时间到 功能wait语句使系统暂时挂起(等同于endprocess),此时,信号值开始更新。条件满足后,系统将继续运行。顺序执行语句sequentialstatement Wait语句例子process(a,b)beginy<=aandb;endprocessprocessbeginwaitona,b;y<=aandb;endprocess等同于process(a,b)begin错误如果process中已有敏感信号waitona,b;进程中不能使用wait语句y<=aandb;endprocess顺序执行语句sequentialstatement Wait语句例子如果process中没有敏感信号列表,其进程中也没有wait语句,则process中的程序代码循环执行processbeginclk<=notclkafter50ns;endprocess功能:产生频率为100ns的clk信号顺序执行语句sequentialstatement Assert语句格式assert条件[report输出信息][severity]说明:条件为true时执行下一条语句,为false时输出错误信息和错误的严重级别 例子….assert(sum=100)report“sum/=100”severityerror;nextstatement…...顺序执行语句sequentialstatement If语句格式if条件then[顺序执行语句][else][顺序执行语句]endifif条件then[顺序执行语句][elsif][顺序执行语句][elsif][顺序执行语句]…..[else]endif顺序执行语句sequentialstatement If语句例子顺序执行语句sequentialstatement Case语句格式Case表达式iswhen条件表达式=>顺序处理语句when条件表达式=>顺序处理语句…….whenothers=>顺序处理语句endcase原则:1、完全性:表达式所有可能的值都必须说明,可以用others2、唯一性:相同表达式的值只能说明一次顺序执行语句sequentialstatement Case语句例子,条件表达式可以有多种形式顺序执行语句sequentialstatement Case语句例子顺序执行语句sequentialstatement Forloop语句格式For循环变量in范围loop[顺序处理语句]endloop注意:循环变量不需要定义(声明);例子中i不需要定义 Forloop语句例子Foriin1to10loopsum=sum+1;endloop顺序执行语句sequentialstatement 在loop语句中可以用next来跳出本次循环,也可以用exit来结束整个循环状态next格式:next[标号][when条件];exit格式:exit[标号][when条件];Foriin1to10loopsum=sum+1;nextwhensum=100;endloopForiin1to10loopsum=sum+1;exitwhensum=100;endloop顺序执行语句sequentialstatement While语句格式while条件loop[顺序处理语句]endloopWhilei<10loopsum=sum+1;i=i+1;endloop While语句例子并行处理语句concurrentstatement1、信号赋值操作2、带条件的信号赋值语句3、带选择的信号赋值语句并行处理语句concurrentstatement 信号赋值操作 符号“<=”进行信号赋值操作的, 它可以用在顺序执行语句中, 也可以用在并行处理语句中 注意1、用在并行处理语句中时,符号<=右边的值是此条语句的敏感信号,即符号<=右边的值发生变化就会重新激发此条赋值语句,也即符号<=右边的值不变化时,此条赋值语句就不会执行。如果符号<=右边是常数则赋值语句一直执行。2、用在顺序执行语句中时,没有以上说法。并行处理语句concurrentstatement 赋值语句例子Myblock:Blockbeginclr<=‘1’after10ns; clr<=‘0’after20ns;endblockmyblockprocessbeginclr<=‘1’after10ns;clr<=‘0’after20ns;endblockmyblock程序执行10ns后clr为1,又过10ns后0赋给了clr,此时clr以前的值1并没有清掉,clr将出现不稳定状态程序执行10ns后clr为1,又过20ns后clr的值变为0,并行处理语句concurrentstatement 条件信号带入语句格式目的信号量<=表达式1when条件1else表达式2when条件2else表达式3when条件3…..else表达式4注意:最后的Else项是必须的;满足完全性和唯一性并行处理语句concurrentstatement 条件信号带入语句例子Blockbeginsel<=b&a;q<=ainwhensel=“00”elsebinwhensel=“01”elsecinwhensel=“10”elsedinwhensel=‘11”elsexx;endblock并行处理语句concurrentstatement 选择信号带入语句格式with表达式select目的信号量<=表达式1when条件1,表达式2when条件2,…..表达式nwhen条件n;并行处理语句concurrentstatement 选择信号带入语句例子Blockbeginwithselselectq<=ainwhensel=“00”,binwhensel=“01”,cinwhensel=“10”,dinwhensel=‘11”xx;whenothers;endblock顺序执行语句和并行处理语句 顺序执行语句和并行处理语句总结1、顺序执行语句wait、assert、if-else、case、for-loop、while语句只能用在process、function和procedure中;2、并行处理语句(条件信号带入和选择信号带入)只能用在architecture、block中;其它语句 Generic语句enttityand2isgeneric(rise:time:=10ns);port(a,b:innit;c:outbit);endand2;architecturebehavofand2isbeginc<=(axorb)after(rise);endbehaventtitytestand2isport(ain,bin:innit;cout:outbit);endtestand2;architecturebehavoftestand2iscomponentand2generic(rise:time);port(a,b:innit;c:outbit);endcomponent;beginc<=(axorb)after(rise);u0:and2genericmap(20ns)portmap(ain,bin,cout);endbehav一些例子SignalA,B,C,Y,Z,M,N:integer;SignalM,N:integer;beginprocess(A,B,C)beginM<=A;N<=B;Z<=M+N;M<=C;Y<=M+N;endprocess问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 :Z和Y的最终取值是什么? 信号值的更新在进程挂起时,(M+N)一些例子 变量值的更新立即发生一些例子 Z和Y最终取什么值;(C+B);M的变化将重新激发进程运行;结束语 祝贺您完成了VHDL基本内容的学习,希望您在实践过程中能学到更多! 下一讲:状态机的设计第四讲、状态机的设计概念 一类十分重要的时序电路 许多数字电路的核心部件状态机概述 状态机的结构:A、组合逻辑部分(状态译码器和输出译码器)B、寄存器部分 各部分的功能1、状态译码器确定状态机的下一个状态2、输出译码器确定状态机输出3、状态寄存器存储状态机的内部状态状态机的结构状态译码器状态寄存器(当前状态)输出译码器输入信号输出状态输出状态机的基本操作1、状态的转换下一个状态由译码器根据当前状态和输入条件决定。2、输出信号的产生输出信号由译码器根据当前状态和输入条件决定状态机的时序 同步时序状态机由时钟信号触发状态的转换和信号的输出 异步时序状态机状态的转移和输出不与时钟信号同步注意:可综合的状态机设计要求使用同步状态机状态机的设计 在产生输出的过程中,由是否使用输入信号可以决定状态机的类型 两种类型1、米里(mealy)状态机---使用输入信号2、莫尔(moore)状态机---不使用输入信号状态机的类型状态一状态二状态一状态二ain=‘1’莫尔moore状态机米里mealy状态机用状态图表示如下:状态机的表达方式1、状态图2、状态表3、流程图三种表达方法是等价的,可以相互转换状态机的设计 3进制计数器状态机的设计 序列 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 器(1110010)S1S2S8S3S4S7S6S51110010/100110101VHDL上机指导 编译和仿真工具OR-CAD或ACTIVE-VHDL 本次培训采用ACTIVE-VHDL ACTIVE-VHDL自带教程目录:..\ActiveVHDL\book\Avhdl.htm*
本文档为【VHDL教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_305602
暂无简介~
格式:ppt
大小:761KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2011-04-06
浏览量:60