您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > VHDL硬件描述语言基础
第一次上机安排第六周–周一晚(提高1、2,通信001~012)–周二上(通信014~085)–周四上(通信086~154)–周四下(通信250~282,电信001~043)–周五晚(电信044~125)第七周–周一下(电信125~216)–周二上(电信217~302)–周二下(电信302~385)VHDL硬件描述语言基础简介基本结构基本数据类型设计组合电路设计时序电路设计状态机大规模电路的层次化设计FunctionandProcedure简介--背景传统数字电路设计方法不适合设计大规模的系统。工程师不容易理解原理图设计的功能。众多软件公司开发研制了具有自己特色的电路硬件描述语言(HardwareDescriptionLanguage,HDL),存在着很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中。因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。简介--背景美国国防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSICHardwareDescriptionLanguage,简称为VHDL,这种语言的成就有两个方面:描述复杂的数字电路系统成为国际的硬件描述语言标准VHDL的优点用于设计复杂的、多层次的设计。支持设计库和设计的重复使用与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本。更方便地向ASIC过渡VHDL有良好的可读性,容易理解。VHDL与计算机语言的区别运行的基础–计算机语言是在CPU+RAM构建的平台上运行–VHDL设计的结果是由具体的逻辑、触发器组成的数字电路执行方式–计算机语言基本上以串行的方式执行–VHDL在总体上是以并行方式工作验证方式–计算机语言主要关注于变量值的变化–VHDL要实现严格的时序逻辑关系--eqcomp4isafourbitequalitycomparatorLibraryIEEE;useIEEE.std_logic_1164.all;entityeqcomp4isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;architecturedataflowofeqcomp4isbeginequal=‘1’whena=belse‘0’;Enddataflow;VHDL大小写不敏感eqcomp4.vhd包实体构造体文件名和实体名一致每行;结尾关键字begin关键字end后跟实体名关键字end后跟构造体名库实体(Entity)描述此设计功能输入输出端口(Port)在层次化设计时,Port为模块之间的接口在芯片级,则代表具体芯片的管脚A[3..0]B[3..0]equalEntityeqcomp4isport(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=‘1’whena=belse‘0’;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中定义–设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。在Max+PlusII中被忽略。–用=进行赋值signalcount:bit_vector(3downto0):=“0011”;VHDL数据对象(DataObjects)变量(Variable)–临时数据,没有物理意义–只能在Process和Function中定义,并只在其内部有效–要使其全局有效,先转换为Signal。–用:=进行赋值variableresult:std_logic:=‘0’;信号与变量的区别architecturertlofstartissignalcount:integerrange0to7;beginprocess(clk)beginif(clk'eventandclk='1')thencount=count+1;if(count=0)thencarryout='1';elsecarryout='0';endif;endif;endprocess;endrtl;architecturertlofstartisbeginprocess(clk)variablecount:integerrange0to7;beginif(clk'eventandclk='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’,‘-’);–该类型能比较全面地包括数字电路中信号会出现的几种状态,因此一般情况把这种类型代替bit–Signala:std_logic;–注意:这里的大小写是敏感的VHDL数据类型整数、浮点数–方便用于数值方面的运算:加减乘除–整数范围:-231~231–1,经常用于计数器–实数范围:-1.0E38~+1.0E38,不被Max+PLusII支持Variablea:integerrange–255to+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数据类型及子类
本文标题:VHDL硬件描述语言基础
链接地址:https://www.777doc.com/doc-3132410 .html