VHDL硬件描述语言基础优质PPT.ppt
《VHDL硬件描述语言基础优质PPT.ppt》由会员分享,可在线阅读,更多相关《VHDL硬件描述语言基础优质PPT.ppt(44页珍藏版)》请在冰豆网上搜索。
![VHDL硬件描述语言基础优质PPT.ppt](https://file1.bdocx.com/fileroot1/2022-10/7/a7b7eb32-2103-4b71-a8ed-ea4069a12f3e/a7b7eb32-2103-4b71-a8ed-ea4069a12f3e1.gif)
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:
实体端口的模式,输入(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数据类型及子类型TypesAndSu