VHDL硬件描述语言基础.ppt

上传人:wj 文档编号:4881075 上传时间:2023-05-07 格式:PPT 页数:44 大小:158KB
下载 相关 举报
VHDL硬件描述语言基础.ppt_第1页
第1页 / 共44页
VHDL硬件描述语言基础.ppt_第2页
第2页 / 共44页
VHDL硬件描述语言基础.ppt_第3页
第3页 / 共44页
VHDL硬件描述语言基础.ppt_第4页
第4页 / 共44页
VHDL硬件描述语言基础.ppt_第5页
第5页 / 共44页
VHDL硬件描述语言基础.ppt_第6页
第6页 / 共44页
VHDL硬件描述语言基础.ppt_第7页
第7页 / 共44页
VHDL硬件描述语言基础.ppt_第8页
第8页 / 共44页
VHDL硬件描述语言基础.ppt_第9页
第9页 / 共44页
VHDL硬件描述语言基础.ppt_第10页
第10页 / 共44页
VHDL硬件描述语言基础.ppt_第11页
第11页 / 共44页
VHDL硬件描述语言基础.ppt_第12页
第12页 / 共44页
VHDL硬件描述语言基础.ppt_第13页
第13页 / 共44页
VHDL硬件描述语言基础.ppt_第14页
第14页 / 共44页
VHDL硬件描述语言基础.ppt_第15页
第15页 / 共44页
VHDL硬件描述语言基础.ppt_第16页
第16页 / 共44页
VHDL硬件描述语言基础.ppt_第17页
第17页 / 共44页
VHDL硬件描述语言基础.ppt_第18页
第18页 / 共44页
VHDL硬件描述语言基础.ppt_第19页
第19页 / 共44页
VHDL硬件描述语言基础.ppt_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VHDL硬件描述语言基础.ppt

《VHDL硬件描述语言基础.ppt》由会员分享,可在线阅读,更多相关《VHDL硬件描述语言基础.ppt(44页珍藏版)》请在冰点文库上搜索。

VHDL硬件描述语言基础.ppt

第一次上机安排,第六周周一晚(提高1、2,通信001012)周二上(通信014085)周四上(通信086154)周四下(通信250282,电信001043)周五晚(电信044125)第七周周一下(电信125216)周二上(电信217302)周二下(电信302385),VHDL硬件描述语言基础,简介基本结构基本数据类型设计组合电路设计时序电路设计状态机大规模电路的层次化设计FunctionandProcedure,简介背景,传统数字电路设计方法不适合设计大规模的系统。

工程师不容易理解原理图设计的功能。

众多软件公司开发研制了具有自己特色的电路硬件描述语言(HardwareDescriptionLanguage,HDL),存在着很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中。

因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。

简介背景,美国国防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。

1981年提出了一种新的HDL,称之为VHSICHardwareDescriptionLanguage,简称为VHDL,这种语言的成就有两个方面:

描述复杂的数字电路系统成为国际的硬件描述语言标准,VHDL的优点,用于设计复杂的、多层次的设计。

支持设计库和设计的重复使用与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。

有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本。

更方便地向ASIC过渡VHDL有良好的可读性,容易理解。

VHDL与计算机语言的区别,运行的基础计算机语言是在CPURAM构建的平台上运行VHDL设计的结果是由具体的逻辑、触发器组成的数字电路执行方式计算机语言基本上以串行的方式执行VHDL在总体上是以并行方式工作验证方式计算机语言主要关注于变量值的变化VHDL要实现严格的时序逻辑关系,-eqcomp4isafourbitequalitycomparatorLibraryIEEE;useIEEE.std_logic_1164.all;entityeqcomp4isport(a,b:

instd_logic_vector(3downto0);equal:

outstd_logic);endeqcomp4;architecturedataflowofeqcomp4isbeginequal=1whena=belse0;Enddataflow;,VHDL大小写不敏感,eqcomp4.vhd,包,实体,构造体,文件名和实体名一致,每行;结尾,关键字begin,关键字end后跟实体名,关键字end后跟构造体名,库,实体(Entity),描述此设计功能输入输出端口(Port)在层次化设计时,Port为模块之间的接口在芯片级,则代表具体芯片的管脚,A3.0,B3.0,equal,Entityeqcomp4isport(a,b:

instd_logic_vector(3downto0);equal:

outstd_logic);endeqcomp4;,实体端口的模式,输入(Input)输出(Output)双向(Inout):

可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口缓冲(Buffer):

与Output类似,但允许该管脚名作为一些逻辑的输入信号,Out与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;,结构体(Architecture),描述实体的行为结构体有三种描述方式行为描述(behavioral)数据流描述(dataflow)结构化描述(structural),结构体行为描述,Architecturebehavioralofeqcomp4isbegincomp:

process(a,b)beginifa=bthenequal=1;elseequal=0;endif;endprocesscomp;endbehavioral;,高层次的功能描述,不必考虑在电路中到底是怎样实现的。

结构体数据流描述描述输入信号经过怎样的变换得到输出信号,Architecturedataflow1ofeqcomp4isbeginequal=1whena=belse0;enddataflow1;,Architecturedataflow2ofeqcomp4isbeginequal=not(a(0)xorb(0)andnot(a

(1)xorb

(1)andnot(a

(2)xorb

(2)andnot(a(3)xorb(3);enddataflow2;,当a和b的宽度发生变化时,需要修改设计,当宽度过大时,设计非常繁琐,结构体结构化描述,architecturestructofeqcomp4isbeginU0:

xnor2portmap(a(0),b(0),x(0);U1:

xnor2portmap(a

(1),b

(1),x

(1);U2:

xnor2portmap(a

(2),b

(2),x

(2);U3:

xnor2portmap(a(3),b(3),x(3);U4:

and4portmap(x(0),x

(1),x

(2),x(3),equal);endstruct;,类似于电路的网络表,将各个器件通过语言的形式进行连接,与电路有一一对应的关系。

一般用于大规模电路的层次化设计时。

三种描述方式的比较,VHDL标识符(Identifiers),基本标识符由字母、数字和下划线组成第一个字符必须是字母最后一个字符不能是下划线不允许连续2个下划线保留字(关键字)不能用于标识符大小写是等效的,VHDL数据对象(DataObjects),常数(Constant)固定值,不能在程序中被改变增强程序的可读性,便于修改程序在综合后,连接到电源和地可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定Constantdata_bus_width:

integer:

=8;,VHDL数据对象(DataObjects),信号(Signals)代表连线,Port也是一种信号没有方向性,可给它赋值,也可当作输入在Entity中和Architecture中定义设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。

在MaxPlusII中被忽略。

用=进行赋值signalcount:

bit_vector(3downto0):

=“0011”;,VHDL数据对象(DataObjects),变量(Variable)临时数据,没有物理意义只能在Process和Function中定义,并只在其内部有效要使其全局有效,先转换为Signal。

用:

=进行赋值variableresult:

std_logic:

=0;,信号与变量的区别,architecturertlofstartissignalcount:

integerrange0to7;beginprocess(clk)beginif(clkeventandclk=1)thencount=count+1;if(count=0)thencarryout=1;elsecarryout=0;endif;endif;endprocess;endrtl;,architecturertlofstartisbeginprocess(clk)variablecount:

integerrange0to7;beginif(clkeventandclk=1)thencount:

=count+1;if(count=0)thencarryout=1;elsecarryout=0;endif;endif;endprocess;endrtl;,信号与变量的区别,architectureaofstartissignaltmp:

std_logic;beginprocess(a_bus)begintmp=1;foriin3downto0looptmp=a_bus(i)andtmp;endloop;carryout=tmp;endprocess;enda;,architectureaofstartisbeginprocess(a_bus)variabletmp:

std_logic;begintmp:

=1;foriin3downto0looptmp:

=a_bus(i)andtmp;endloop;carryout=tmp;endprocess;enda;,VHDL数据类型,标量类型(Scalar)枚举(Enumeration)整数(Integer)浮点数(Float)物理(Physical)复合类型(Composite),VHDL数据类型枚举,列举数据对象可能存在的值,一般用于定义状态机的状态Typestatesis(idle,start,running,pause,stop)Signalcurrent_state:

states;IEEE1076标准中预定义了两个枚举类型Typebooleanis(False,True)Typebitis(0,1)Signala:

bit;,VHDL数据类型枚举,IEEE1164标准中预定义了一个枚举类型Typestd_logicis(U,X,0,1,Z,W,L,H,-);该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bitSignala:

std_logic;注意:

这里的大小写是敏感的,VHDL数据类型,整数、浮点数方便用于数值方面的运算:

加减乘除整数范围:

-2312311,经常用于计数器实数范围:

-1.0E38+1.0E38,不被MaxPLusII支持Variablea:

integerrange255to+255;物理类型主要用于调试,VHDL数据类型复合类型,ArrayTypes多个相同类型成员组成的队列,一般用于定义数据总线、地址总线等。

Signala:

std_logic_vector(7downto0);a=B“00111010”;a=X“3A”;可自定义复合类型Typewordisarray(15downto0)ofbit;Signalb:

word;Typetable8x4isarray(0to7,0to3)ofbit;,VHDL数据类型复合类型,RecordTypes相同或不同类型的元素组成,类似C中的结构具有模型抽象能力,用于描述一个功能模块TypeiocellisrecordEnable:

bit;DataBus:

bit_vector(7downto0);endrecord;singalbus:

iocell;bus.Enable=1;bus.DataBus=“00110110”;,VHDL数据类型及子类型TypesAndSubtypes,VHDL是强类型语言,必须用类型转换函数才能进行不同类型之间的转换typebyte_sizeisintegerrange0to255;signala:

byte_size;signalb:

integerrange0to255;ifa=bthen采用以下方式subtypebyte_sizeisintegerrange0to255;,属性(Attributes),提供Entity、Architecture、Type和Signals的信息。

有许多预定义的值、信号和范围的属性一个最常用的属性是eventifclkeventandclk=1thenleft,right,high,low,lengthtypecountisintegerrange0to127countleft=0;countright=127;counthigh=127;countlow=0;countlength=128;,VHDL运算符,逻辑运算符AND、OR、NAND、NOR、XOR、NOT关系运算符=、/=、=算术运算符+、-、*、/并置(连接)运算符&,组合电路并行语句(Concurrent),并行语句位于Process外面,同时执行,不分位置的先后顺序并行语句包括:

布尔等式:

=With-select-whenWhen-else布尔等式A=s(0)ands

(1);B=not(y);,组合电路并行语句,With-select-when语句WithSel_signalselectSignal_name=awhenSel_signal_1,bwhenSel_signal_2,cwhenSel_signal_3,xwhenSel_signal_x;,Signals:

std_logic_vector(1downto0);Signala,b,c,d,x:

std_logic;Withsselectx=awhen“00”,bwhen“01”,cwhen“10”,dwhenothers;,组合电路并行语句,When-else语句Signal_name=awhencondition1elsebwhencondition2elsecwhencondition3elsex;,x=awhens=“00”elsebwhens=“01”elsecwhens=“10”elsed;,Signala,b,c,d:

std_logic;Signalw,x,y,z:

std_logic;x=wwhena=1elsexwhenb=1elseywhenc=1elsezwhend=1else0;,组合电路并行语句,实现优先级编码器encode=“111”whenD(7)=1else“110”whenD(6)=1else“101”whenD(5)=1else“100”whenD(4)=1else“011”whenD(3)=1else“010”whenD

(2)=1else“001”whenD

(1)=1else“000”whenD(0)=1else“000”;,组合电路并行语句,When-else语句条件语句可以是一个简单的表达式With-select-when则不能采用表达式作为条件a=“0000”whenstate=idleandstate=1else“0001”whenstate=idleandstate=0elsebwhenstate=runningandstate=1elsea;,组合电路顺序语句(Sequential),Process,Function,Procedure中的语句都是顺序执行,以Process为例Process与Process之间,与其他并行语句之间都是并行的关系If-then-elseCase-when,组合电路顺序语句,If-then-elseIf(condition1)thendosomething;elsif(condition2)thenelsedosomethingdifferent;endif;,组合电路顺序语句,Process(addr)Beginstep=0;if(addr=X“F”)thenstep=1;endif;Endprocess;,Process(addr)Beginif(addr=X“F”)thenstep=1;elsestep=0;endif;Endprocess;,Process(addr)Beginif(addr=X“F”)thenstep=1;endif;Endprocess;,Step=addr(3)*addr

(2)*Addr

(1)*addr(0)+step,组合电路顺序语句,用于作地址译码InRam=X“0000”andaddr=X“4000”andaddr=X“4008”andaddr=X“8000”andaddr=X“C000”thenEEPRom=1;endif;,组合电路顺序语句,Case-whencasesel_signaliswhenvalue_1=(dosth)whenvalue_2=(dosth)whenvalue_last=(dosth)endcase;,组合电路顺序语句,实现数码管译码器Process(address)begincaseaddressiswhen“0000”=decodedecodedecodedecodedecode=X“00”;endcase;endprocess;,几种语句的比较,同步时序逻辑电路,Process(clk)beginif(clkeventandclk=1)thenq=d;endif;endprocess;,Process(clk)beginif(clk=1)thenq=d;endif;endprocess;,D触发器,缓冲器,实现T触发器,Process(clk)beginif(clkeventandclk=1)thenif(t=1)thenq=not(q);elseq=q;endif;endif;endprocess;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2