VHDL硬件描述语言基础优质PPT.ppt

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

VHDL硬件描述语言基础优质PPT.ppt

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

VHDL硬件描述语言基础优质PPT.ppt

endeqcomp4;

architecturedataflowofeqcomp4isbeginequal=1whena=belse0;

Enddataflow;

VHDL大小写不敏感,eqcomp4.vhd,包,实体,构造体,文件名和实体名一致,每行;

结尾,关键字begin,关键字end后跟实体名,关键字end后跟构造体名,库,实体(Entity),描述此设计功能输入输出端口(Port)在层次化设计时,Port为模块之间的接口在芯片级,则代表具体芯片的管脚,A3.0,B3.0,equal,Entityeqcomp4isport(a,b:

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

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

与Output类似,但允许该管脚名作为一些逻辑的输入信号,Out与Buffer的区别,Entitytest1isport(a:

instd_logic;

b,c:

endtest1;

architectureaoftest1isbeginb=not(a);

c=b;

-Errorenda;

Entitytest2isport(a:

b:

bufferstd_logic;

c:

endtest2;

architectureaoftest2isbeginb=not(a);

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;

endprocess;

endrtl;

architecturertlofstartisbeginprocess(clk)variablecount:

beginif(clkeventandclk=1)thencount:

=count+1;

信号与变量的区别,architectureaofstartissignaltmp:

std_logic;

beginprocess(a_bus)begintmp=1;

foriin3downto0looptmp=a_bus(i)andtmp;

endloop;

carryout=tmp;

architectureaofstartisbeginprocess(a_bus)variabletmp:

begintmp:

=1;

foriin3downto0looptmp:

=a_bus(i)andtmp;

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:

注意:

这里的大小写是敏感的,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:

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:

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:

Signalw,x,y,z:

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;

组合电路顺序语句,Process(addr)Beginstep=0;

if(addr=X“F”)thenstep=1;

Endprocess;

Process(addr)Beginif(addr=X“F”)thenstep=1;

elsestep=0;

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;

组合电路顺序语句,Case-whencasesel_signaliswhenvalue_1=(dosth)whenvalue_2=(dosth)whenvalue_last=(dosth)endcase;

组合电路顺序语句,实现数码管译码器Process(address)begincaseaddressiswhen“0000”=decodedecodedecodedecodedecode=X“00”;

endcase;

几种语句的比较,同步时序逻辑电路,Process(clk)beginif(clkeventandclk=1)thenq=d;

Process(clk)beginif(clk=1)thenq=d;

D触发器,缓冲器,实现T触发器,Process(clk)beginif(clkeventandclk=1)thenif(t=1)thenq=not(q);

elseq=q;

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

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

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

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