《【大学课件】数字集成电路设计与硬件描述语言.ppt》由会员分享,可在线阅读,更多相关《【大学课件】数字集成电路设计与硬件描述语言.ppt(86页珍藏版)》请在三一办公上搜索。
1、第六讲数字集成电路设计与硬件描述语言,http:/,http:/,大纲,数字IC设计方法两种HDL语言Verilog HDL简介VHDL简介,http:/,当前的数字IC设计分可分成以下几个层次:1.算法级设计:利用高级语言(如C语言)及其他一些系统分析工具(如MATLAB)对设计从系统的算法级进行描述。算法级不需要包含时序信息。2.RTL级设计:用信号在寄存器间传输的模式来对设计进行描述。3.门级设计:用逻辑门及门级之间的连线对设计进行描述。4.开关级设计:用晶体管及其连线来对设计进行描述。,http:/,数字IC一般采用自顶向下(TOP-DOWN)的设计方法在系统级(顶层)进行功能的划分和
2、架构设计在功能级进行仿真、纠错,并用硬件描述语言对功能进行描述用综合工具将设计转化为具体门级电路网表物理级可以是FPGA器件或专用集成电路(ASIC)TOP-DOWN 设计思想,门级,功能级,系统级,TOP-DOWN 设计方法,http:/,电子设计规模越来越大(百万/千万门的量级),复杂度越来越高,只能用高级语言来描述其功能,在设计初期隐藏其具体的细节实现。可读性强,易修改。提高逻辑设计的效率,降低设计成本,更重要的是缩短设计周期。HDL追求对硬件的描述,而将该描述在目标器件上实现则由EDA工具的综合器完成。受限于目标器件,并不是所有HDL语句均可被综合。,http:/,VHDL和Veril
3、og HDL是目前世界上流行最广的两种硬件描述语言,都是在20世纪80年代中期开发出来的。均为IEEE标准。VHDL语法严谨,易于学习;逻辑综合能力强。在欧洲使用较多。Verilog HDL语法灵活(类似C语言,较难掌握)底层综合出色。美国使用较多。,http:/,Verilog HDL是一种应用广泛的硬件描述语言,是IC硬件设计人员和EDA工具之间的桥梁。其功能为编写设计文本(脚本)建立电子系统行为级的仿真模型并进行仿真自动综合生成数字逻辑网表(Netlist)及具体电路生成某工艺条件下具体电路的延时模型并进行时序仿真仿真验证无误后用于制造ASIC或写入FPGA器件中常用的Verilog H
4、DL开发软件有Altera公司的MAX+PLUS II,Quartus IIXilinx公司的Foundation ISE,http:/,Verilog HDL语言的主要特征,1、语法结构上,与C语言有许多相似之处,并借鉴C语言的多种操作符2、既包含高级程序设计语言的结构形式,同时也兼顾描述硬件线路连接的具体构件3、通过使用结构级或行为级描述可以在不同的抽象层次上进行设计,http:/,4、Verilog HDL语言是并发的,即具有在同一时刻执行多任务的能力,因为在实际硬件中许多操作都是在同一时刻发生的。而计算机编程语言往往是顺序执行的。,5、有时序概念,因为在硬件电路中从输入到输出总是有延迟
5、存在的,http:/,数字电路可简单归纳为两种要素:连线和器件 Verilog HDL建模-使用硬件语言对数字电路的这两种基本要素进行描述。,http:/,Verilog HDL的基本结构,八位加法器的Verilog HDL源代码,module adder8(cout,sum,ina,inb,cin);output 7:0 sum;output cout;input 7:0 ina,inb;input cin;assign cout,sum=ina+inb+cin;endmodule,准备实现的逻辑功能,简单的Verilog HDL的例子,端口列表,逻辑功能描述-描述内部特性,模块名,http
6、:/,一.模块的概念,Verilog HDL模块的结构,模块是Verilog HDL语言的基本单元,数字系统用 模块集合的形式来描述模块描述某个设计的功能、结构和与其它模块通信的外部端口Verilog HDL中各个模块是并行运行的模块可以调用其它模块的实体(实例),http:/,二.模块的结构,module()端口说明(input,output,inout)参数定义/可选 数据类型定义/wire、reg、task、function 连续赋值语句(assign)/组合逻辑 过程块(always和initial)-行为描述语句 低层模块实例/调用其它模块 任务和函数 延时说明块endmodule,
7、http:/,模块端口(module ports),注意模块的名称DFF,端口列表及说明模块通过端口与外部通信,端口在模块名字后的括号中列出,端口可以说明为input,output及inout,端口等价于硬件的引脚(pin),http:/,模块实例化(module instances),module DFF(d,clk,clr,q,qb);.endmodulemodule REG4(d,clk,clr,q,qb);output 3:0 q,qb;input 3:0 d;input clk,clr;DFF d0(d 0,clk,clr,q 0,qb 0);DFF d1(d 1,clk,clr,q
8、 1,qb 1);DFF d2(d 2,clk,clr,q 2,qb 2);DFF d3(d 3,clk,clr,q 3,qb 3);endmodule,REG4有模块DFF的四个实例,http:/,语言的主要特点,将模块的实例通过端口连接起来构成一个大的系统每个实例都有自己的名字(d0,d1,d2,d3)。实例名是每个对象唯一的标记,通过这个标记可以查看每个实例的内部。实例中端口的次序与模块定义的次序相同。模块实例化与程序调用不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。,模块实例化(module instances):,http:/,时延,信号在电路中传输会有传播延时,如线延时、
9、器件延时等assign#2 B=A;表示 B信号在2个时间单位后得到A信号的值 所有时延都必须根据时间单位进行定义定义方式为在文件头添加语句:timescale 1ns/100ps其中timescale 是Verilog HDL 提供的预编译处理命令,1ns 表示时间单位是1ns,100ps表示时间精度是100ps 根据该命令,编译工具可以认知#2 为2ns,http:/,http:/,空白符和注释,module MUX2_1(out,a,b,sel);/Port declarations output out;input sel,/control input b,/*data inputs*
10、/a;/*The netlist logic selects input”a”when sel=0 and it selects”b”when sel=1.*/not(sel_,sel);and(a1,a,sel_),(b1,b,sel);or(out,a1,b1);endmodule,格式自由一条语句可多行书写;一行可写多个语句。空白(新行、制表符、空格)没有特殊意义。如input A;input B;与input A;input B;是一样的。使用空白符提高可读性Verilog忽略空白符,多行注释,在/*/内,单行注释到行末结束,http:/,Verilog采用的四值逻辑系统,0,Low,
11、False,Logic Low,Ground,1,High,True,Logic High,Power,VDD,X Unknown:Occurs at Logic Which Cannot be Resolved ConflictHiZ,High Impedance,Tri-Stated,http:/,具体实例,5 O37 5位八进制数(二进制 11111)4 D2 4位十进制数(二进制0010)4 B1x_01 4位二进制数 7 Hx 7位x(扩展的x),即xxxxxxx4 hZ 4 位z(扩展的z),即zzzz 4 d-4 非法:数值不能为负8 h 2A 在位长和基数之间,以及基数和数值之
12、间允许出现空格3 b 001 非法:和基数b 之间不允许出现空格(2+3)b10 非法:位长不能为表达式,http:/,字符串(string),格式符,转义符,http:/,标识符(identifiers),标识符是用户在描述时给对象起的名字标识符必须以字母(a-z,A-Z)或(_)开头,后面可以是字母、数字、($)或(_)。最长可以是1023个字符标识符区分大小写,sel和SEL是不同的标识符模块、端口和实例的名字都是标识符module MUX2_1(out,a,b,sel);output out;input a,b,sel;not not1(sel_,sel);and and1(a1,a,
13、sel_);and and2(b1,b,sel);or or1(out,a1,b1);endmodule,Verilog标识符,http:/,标识符(identifiers),有效标识符举例:shift_reg_a busa_index _bus3无效标识符举例:34net/开头不是字母或“_”a*b_net/包含了非字母或数字,“$”“_”n238/包含了非字母或数字,“$”“_”Verilog区分大小写,所有Verilog关键词使用小写字母,http:/,书写规范建议,A、用有意义的名字如 Sum、CPU_addr等。B、用下划线区分词。C、采用一些前缀或后缀,如时钟采用Clk 前缀:Cl
14、k_50,Clk_CPU;低电平采用_n 后缀:Enable_n;D、统一缩写,如全局复位信号 Rst。E、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。F、自定义的标识符不能与保留字同名。G、参数采用大写,如SIZE,http:/,主要变量类型,net(线网):表示器件之间的物理连接register(寄存器):表示存储元件parameters(参数):运行时的常数,Verilog主要有三类数据类型:,http:/,net(线网),net需要被持续的驱动,驱动它的可以是门和模块。当net驱动器的值发生变化时,会自动将新值传送到net上。在例子中,线网out由or门驱动。当o
15、r门的输入信号变化时将传输到线网net上。,http:/,net类的类型(线网),wire类型是最常用的类型,只有连接功能。wire常用来表示用assign语句赋值的组合逻辑信号取值为:0,1,x(不定值),z(高阻)wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。例如,可以用tri类型表示一个net有多个驱动源,或者指示这个net可以是高阻态 Z(hign-impedance)。,http:/,wire型变量的定义,语法:wire 数据1,数据2,数据n;例子:wire a,b,c/定义了三个wire型变量a,b,cwire7:0 databus/定
16、义了八位宽wire型向量数据总线wire20:1 addrbus/定义了20位宽wire型向量地址总线,http:/,寄存器类(register),寄存器类型在赋新值以前保持原值用行为描述结构给寄存器类型赋值(在过程块中进行)寄存器类型大量应用于行为描述及激励描述reg_a、reg_b、reg_sel用于施加激励给2:1多路器,http:/,寄存器类的类型,寄存器类有四种数据类型,http:/,Verilog中net和register声明语法,举例:reg a;/一个标量寄存器reg 3:0 v;/从MSB到LSB的4位寄存器向量reg 7:0 m,n;/两个8位寄存器tri 15:0 bus
17、a;/16位三态总线wire 0:31 w1,w2;/两个32位wire,MSB为bit0,http:/,选择正确的数据类型,输入端口可以由net/register驱动,但输入端口只能是net,输出端口可以是net/register类型,输出端口只能驱动net,in1,in2,O,A,B,Y,双向端口只能是net类型,http:/,操作符类型,Verilog操作符。“与”操作符的优先级总是比相同类型的“或”操作符高,最高,最低,优先级,http:/,相等操作符,注意逻辑等与case等的差别,逻辑等,=,case等,=,2b1x=2b0 x 值为0,因为不相等2b1x=2b1x 值为x,因为可能
18、不相等,也可能相等,2b1x=2b0 x 值为0,因为不相同2b1x=2b1x 值为1,因为相同,a=2b1x;b=2b1x;if(a=b)$display(a is equal to b);else$display(a is not equal to b);,a=2b1x;b=2b1x;if(a=b)$display(a is identical to b);else$display(a is not identical to b);,Case等只能用于行为描述,不能用于RTL描述。综合工具不支持,http:/,级联操作符,级联,可以从不同的矢量中选择位并用它们组成一个新的矢量。用于位的重组
19、和矢量构造,module concatenation;reg 7:0 rega,regb,regc,regd;reg 7:0 new;initial begin rega=8b0000_0011;regb=8b0000_0100;regc=8b0001_1000;regd=8b1110_0000;end initial fork#10 new=regc 4:3,regd 7:5,regb 2,rega 1:0;/new=8b11111111#20$finish;joinendmodule,http:/,1、Verilog HDL语言提供了十多条的编译指令,例如:defineincludetim
20、escale,编译指令以(反引号)开头。编译指令结束不需要加分号。编译指令对同一个文件中的所有模块有效。在进行Verilog HDL语言编译时,已定义的编译指令一直有效,直至有其它编译指令修改它或取消它,2、说明,编译预处理,http:/,timescale 说明时间单位及精度格式:timescale/如:timescale 1 ns/100 ps timescale必须在模块之前出现 timescale 1 ns/10 ps/All time units are in multiples of 1 nanosecondmodule MUX2_1(out,a,b,sel);output out
21、;input a,b,sel;not#1 not1(sel_,sel);and#2 and1(a1,a,sel_);and#2 and2(b1,b,sel);or#1 or1(out,a1,b1);endmodule,http:/,Timescale,time_precision不能大于time_unitprecision的时间单位应尽量与设计的实际精度相同precision是仿真器的仿真时间步长若time_unit与precision_unit差别很大将严重影响仿真速度timescale 1s/1ps,则仿真器在1秒内要扫描其事件序列1012次;而timescale 1s/1ms则只需扫描1
22、03次。如果没有timescale说明将使用缺省值,一般是ns,http:/,Verilog HDL语句模块的描述方法,http:/,结构型描述,术语及定义结构描述:用门来描述器件的功能,是通过实例进行描述的,将预定义的基本元件实例嵌入到语言中,监控实例的输入,一旦其中任何一个发生变化便运算并输出。primitives(基本单元):Verilog语言已定义的具有基本逻辑功能的模型(models),http:/,结构描述,结构描述表示一个逻辑图结构描述用已有的元件构造更为复杂的元件,module rs_latch(y,yb,r,s);output y,yb;input r,s;nor n1(y,
23、r,yb);nor n2(yb,s,y);endmodule,http:/,Verilog基本单元(primitives),Verilog基本单元提供基本的逻辑功能,这些逻辑功能是预先定义的,用户不需要再定义这些基本功能基本单元是Verilog 库的一部分,基本单元库是自下而上(Bottom Up)设计方法的一部分,http:/,调用基本单元的句法:,可以只有一个输出,语法:门类型关键字(端口列表)其中端口列表为:多输入门:(输出,输入1,输入2,)多输出门:(输出1,输出2,输入)三态门:(输出,输入,使能输入),http:/,带条件的基本单元,Verilog有四种不同类型的条件基本单元这四
24、种基本单元只能有三种引脚:output,input,enable这些单元由enable引脚使能。当使能信号无效时,输出高阻态。,http:/,基本单元实例化,在端口列表中,先说明输出端口,然后是输入端口实例化时实例的名字是可选项 and(out,in1,in2,in3,in4);/unnamed instance buf b1(out1,out2,in);/named instance延时说明是可选项。所说明的延时是固有延时。输出信号经过该延时才变化。没有说明时延时为0。notif0#3.1 n1(out,in,cntrl);/delay specified,http:/,模块实例化(modu
25、le instantiation),模块实例化时实例必须有一个名字。使用位置映射时,端口次序与模块的说明相同。使用名称映射时,端口次序与位置无关没有连接的输入端口初始化值为x。,module comp(o1,o2,i1,i2);output o1,o2;input i1,i2;.endmodulemodule test;comp c1(Q,R,J,K);/Positional mapping comp c2(.i2(K),.o1(Q),.o2(R),.i1(J);/Named mapping comp c3(Q,J,K);/One port left unconnectedendmodule,
26、名称映射的语法:.内部信号(外部信号),没有连接时通常会产生警告,http:/,行为描述,行为级描述是对系统的高抽象级描述。在这个抽象级,注重的是整个系统的功能而不是实现。Verilog将高级编程语言结构用于行为描述,包括:wait,while,if then,case和forever,http:/,过程(procedural)块,过程块是行为描述的基础过程块有两种:initial块,只能执行一次always块,循环执行,http:/,initial过程块,(1)initial 块语句模板:,initialbegin 语句1;语句2;end,(2)例,initialbegin#2 Stream
27、=1;#5 Stream=0;#3 Stream=1;#4 Stream=0;#2 Stream=1;#5 Stream=0;end,(3)说明:,0时刻开始执行,只执行一次,同一模块内的多个initial过程块,0时刻开始并行执行,主要面向功能模拟,通常不具有可综合性。,initial过程块不能嵌套使用。,initial语句中的积累延时,http:/,always过程块,always块语句模板always()begin/过程赋值/if语句/case语句/while,repeat,for 语句/task,function调用end,当表达式的值改变时 就执行一遍块内语句,always过程块不能
28、嵌套使用。,http:/,posedge与negedge关键字,上升沿,下降沿,例:同步时序电路的时钟信号为clk,clear为异步清0信号。敏感信号可写为:/上升沿触发,或高电平清0时 always(posedge clk or posedge clear)Begin。end/上升沿触发,或低电平清0时always(posedge clk or negedge clear)Begin。end,http:/,块语句,块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。块语句分为两类:顺序块:置于关键字begin和end之间,块中的语句以顺序方式执行并行块:置于关键字fork和join
29、之间,块中语句并行执行。,Fork和join语句常用于test bench描述。这是因为可以一起给出矢量及其绝对时间,而不必描述所有先前事件的时间。,http:/,块语句(续),在顺序块中,语句一条接一条地计算执行。在并行块中,所有语句在各自的延迟之后立即计算执行。,begin#5 a=3;#5 a=5;#5 a=4;end,fork#5 a=3;#15 a=4;#10 a=5;join,上面的两个例子在功能上是等价的。Fork-join例子里的赋值故意打乱顺序是为了强调顺序是没有关系的。注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。,http:/,循环(loopi
30、ng)语句,有四种循环语句:repeat:将一块语句循环执行确定次数。repeat(次数表达式)while:在条件表达式为真时一直循环执行 while(条件表达式)forever:重复执行直到仿真结束 forever for:在执行过程中对变量进行计算和判断,在条件满足时执行 for(赋初值;条件表达式;计算),http:/,循环(looping)语句,语法:for(;)循环体语句或语句块;执行过程:(1)执行“变量赋初值语句”(2)判断“条件表达式”,真:执行“循环体语句或语句块”,继续执行第(3)步 假:循环结束,退出。(3)执行“变量增值语句”,转到(2)继续执行。,http:/,例 数
31、据选择器的数据流型描述。,module mux2x1_df(A,B,select,OUT);input A,B,select;output OUT;assign OUT=select?B:A;endmodule,数据流型描述,条件运算符,是一种描述组合逻辑功能的方法,用assign连续赋值语句来实现,连续赋值语句完成如下的组合功能:等式右边的所有变量受持续监控,每当这些变量中有任何一个发生变化,整个表达式被重新赋值并送给等式左端,数据流型建模,http:/,语句的顺序执行与并行执行,assign语句之间:并行执行(同时执行)过程块之间(always,initial):并行执行 assign语句
32、与过程块之间:并行执行模块中的门的实例、模块实例语句:并行执行过程块(always,initial)内部,http:/,混合描述的1位全加器,module full_add5(a,b,cin,sum,cout);input a,b,cin;output sum,cout;reg cout,m1,m2,m3;/在always块中被赋值的变量应定义为reg型wire s1;xor x1(s1,a,b);/调用门元件always(a or b or cin)/always块语句begin m1=a/assign持续赋值语句endmodule,http:/,可综合设计,可综合指的是所设计的指令和代码能
33、转化为具体的电路网表结构。综合过程就是将Verilog HDL语言描述的行为级或数据流电路模型转化为RTL级功能块或门级电路网表的过程。而不可综合的设计主要用于设计的仿真验证。,行为级或数据流电路建模,RTL级功能块,逻辑优化,优化后的门级网表,RTL级综合,门级综合,RTL级综合得到由功能模块构成的电路结构逻辑优化器以用户设定的面积和时间约束为目标优化电路网表针对目标工艺产生优化后的电路门级网表结构,http:/,设计准则,1、将硬件的行为以合理的方式映射为一些进程。2、对于每个进程完成的操作,尽量选择最有效的算法。3、了解综合器的性能,特别是了解综合工具支持的Verilog HDL可综合子
34、集。以合理的代码风格引导综合工具生成硬件4、对于固定值的信号要用常量代替。5、尽量共享复杂运算,可以共享的数据处理用函数和过程定义6、明确指出过程的无关态,引导综合器进行优化。7、使用能够满足需要的最小数据宽度。8、用组合逻辑实现的电路和用时序逻辑实现的电路要分配到不同的进程中。,http:/,9、不要使用枚举类型的属性。10、Integer应加范围限制。11、通常的可综合代码应该是同步设计。12、除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。13、不使用初始化语句;不使用带有延时的描述;不使用循环次数不确定的循环语句,如forever,while等
35、。14、用always过程描述组合逻辑,应在敏感信号列表中列出块中出现的所有输入信号。15、所有的内部寄存器都应该能够被复位。在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位,因为该引脚的驱动功能最强,到所有逻辑单元的延时也基本相同,同样的道理,应尽量使用器件的全局时钟端作为系统外部时钟输入端。,设计准则(续),http:/,4、VHDL介绍,VHDL程序的基本单元与构成例1.多路选择器entity mux is generic(m:TIME:=1ns);port(A,B,T:in BIT;Z:out BIT);end mux;当条件T成立时,输出A路信号;当条件T不成立时
36、,输出B路信号,MUX,http:/,architecture connect of mux is begin Cale:process(A,B,T)variable tmpl,tmp2,tmp3:BIT;begin tmp1:=A and T;tmp2:=B and(not T);tmp3:=tmp1 or tmp2;Z=tmp3 after m;end process;end connect:,http:/,例2.半加器,-The entity declarationentity Half_adder is port(X Half_ SumX:in Bit;Y adder CarryY:i
37、n Bit;Sum:out Bit;Carry:out Bit);end Half_adder;,http:/,-The architecture body:architecture Behavioral_description of Half_adder isbeginprocess begin Sum=X xor Y after 5 Ns;Carry=X and Y after 5 Ns;wait on X,Y;end process;end Behavioral_description,Sum=X Y Carry=XY,http:/,例3,用半加器构造全加器,entity Full_ad
38、der isport(A:in Bit;B:in Bit;Carry_in:in Bit;S:out Bit;Carry_out:out Bit);end Full_adder;,http:/,architecture Structure of Full_adder is-signal declarationssignal Temp_sum:Bit;signal Temp_carry_1:Bit;signal Temp_carry_2:Bit;-local component declarationscomponent Half_adderport(X:in Bit;Y:in Bit;Sum:
39、out Bit;Carry:out Bit);end component;,http:/,component Or_gate port(In1:Bit:In2:Bit;Out1:out Bit);end component;-component instantiation statementsU0:Half_adderport map(X=A,Y=B,Sum=Temp_sum,Carry=Temp_carry_1);U1:Half_adderport map(X=Temp_sum,Y=Carry_in Sum=S,Carry=Temp _Carry_2);U2:Or_gateport map(
40、In1=Temp_carry_1,In2=Temp_carry_2,Out1=Carry_out);end structure;,http:/,VHDL 结构(实体+结构体),entity 实体名 is 说明语句;begin 实体语句部分;end 实体名;Architecture 结构体名 of 实体名 is 说明语句;begin 并行处理语句;end 结构体名;,说明模块的外观,说明模块的内部功能或结构 功能:多路选择器 结构:全加器,http:/,一个实体可以有多个不同的结构体(比如有的速度快,有的硬件少)所以:对应于同一实体的结构体不允许同名,而对应于不同实体的结构体可以同名。entit
41、y Full_adder isarchitecture Structure of Full_adder isarchitecture Structure1 of Full_adder isentity mux isarchitecture Structure of mux is,http:/,包(Package)、库(Library)、配置(Configuration),在实体说明和结构体中说明的数据类型、常量和子程序等只对相应的结构体可见,而不能被其他设计实体使用。为了提供一组可被多个设计实体共享的类型、常量和子程序说明,VHDL提供了包(Package)包用来单纯的罗列要用到的信号定义、常
42、数定义、数据类型,元件语句、函数定义和过程定义等,它是一个可编译的设计单元,也是库结构中的一个层次,http:/,包(Package),包分为包说明和包体两部分包说明的一般形式是,Package包名 is 说明语句;end 包名;包体的一般形式是:Package body包名 is 说明语句;end 包名;,包说明和相应包体的名称必须一致包说明定义数据类型,给出函数的调用说明 包体具体描述实现该函数功能的语句(即函数定义)和数据的赋值 这种分开描述的好处是,当函数的功能需要作某些调整时,只要改变包体的相关语句就行了,使重新编译的单元数目尽可能少,http:/,可见性,包体中的内容不能被其它VH
43、DL元件引用,只对相应的包说明可见,而包说明中的内容才是通用的和可见的(当然还必须用use子句才能提供这种可见性)。下面即为一个包说明及其相应包体的例子:Package Logic is type Three_level_logic is(0,1,z);function lnvert(input:Three_1evel_logic)return Three_1evel_logic;end logic;,函数说明(对外可见),http:/,package body Logic is function invert(input:Three_level_1ogic)return Three_leve
44、l_logic is begin case lnput is when0 return1;when1 return0;whenz returnz;end case;end invert;end Logic;,函数定义(对外不可见),http:/,在一个设计实体说明之前加上use子句,可以使包说明中的内容可见。如:use IEEE.STD_LOGlC_1164a11;表示将IEEE库中的 STD_LOGIC_1164包中的所有说明项可见。又如:use Logic.Three_level_logic;表示将用户自定义的包Logic中的类型 Three_level_logic对相应的设计实体可见。,
45、http:/,配置(Configuration),利用配置语句(又叫组装说明),可以为待设计的实体从资源文件(库或包)中选择不同行为和结构的结构体(做性能比较)。配置语句的一般形式为:configuration 配置名 of 实体名 is 配置说明:use子句;语句说明;end 配置名;,http:/,architecture Structure_View of Processor is*end Structure_View;library TTL.Work;configuration V4_27_87 of processor is use WorkAll;for Structure_Vie
46、w*end V4_27_87;,http:/,库(Library),库是编译后的数据的集合,它存放已经编译的实体、结构体、包和配置。库由库元组成,库元是可以独立编译的VHDL结构。VHDL中有两类库元-基本元和辅助元基本元包括实体说明、包说明和配置,辅助元为包体和结构体。基本元对同一库中其它基本元都是不可见的,必须用 use子句才能提供可见性。,http:/,库的种类,VHDL语言中存在的库大致可以归纳为5种:IEEE库-IEEE认可的标准包集合STD库-VHDL认可的标准包集合ASIC库-与逻辑门一一对应的实体用户定义的库-用户自定义的包和实体WORK库-现行工作库,缺省库,http:/,库
47、的使用,除了 WORK库外,其他4类库在使用前都必须作说明,用库子句(Library)对不同库中的库元提出可见性。Library的说明放在设计单元的最前面,其一般形式为:Library库名;接着用 use子句使库中的包和包中的项可见。例如:Library IEEE;Use IEEESTD_LOGIC_1164all;对于同一库中的不同库元,用use子句提供所需的可见性;对于不同库中的库元,用库子句加上use子句提供可见性。,http:/,库的作用范围,库语句的作用范围从一个实体说明开始到它所属的结构体和配置为止。当一个源程序中出现两个以上的实体时,库语句应在每个实体说明语句前书写。,http:
48、/,VHDL语言的对象和分类,VHDL中的对象主要有以下三种:信号(signal)全局量,对应硬件中的连线,赋值(=)可有延时 变量(variable)局部量,暂存某些值的载体,赋值(:=)被立即执行常数(constant)电路中的电源和地,http:/,VHDL结构体的描述方式,行为描述对系统书写模型的描述 基本语句是进程语句 用于系统数学模型或系统工作原理的仿真 结构描述对系统子元件和子元件之间相互关系的描述基本语句是元件实例化语句用于进行结构设计,与电原理图一一对应可以进行逻辑综合,http:/,顺序描述语句与并发描述语句,顺序描述语句-阻塞赋值语句 并发描述语句 非阻塞赋值语句,http:/,THE END,