六讲数字集成电路设计与硬件描述语言.ppt
《六讲数字集成电路设计与硬件描述语言.ppt》由会员分享,可在线阅读,更多相关《六讲数字集成电路设计与硬件描述语言.ppt(86页珍藏版)》请在三一办公上搜索。
1、第六讲数字集成电路设计与硬件描述语言,浙大微电子韩雁,2023/6/27,浙大微电子,2/86,大纲,数字IC设计方法两种HDL语言Verilog HDL简介VHDL简介,2023/6/27,浙大微电子,3/86,当前的数字IC设计分可分成以下几个层次:1.算法级设计:利用高级语言(如C语言)及其他一些系统分析工具(如MATLAB)对设计从系统的算法级进行描述。算法级不需要包含时序信息。2.RTL级设计:用信号在寄存器间传输的模式来对设计进行描述。3.门级设计:用逻辑门及门级之间的连线对设计进行描述。4.开关级设计:用晶体管及其连线来对设计进行描述。,2023/6/27,浙大微电子,4/86,
2、数字IC一般采用自顶向下(TOP-DOWN)的设计方法在系统级(顶层)进行功能的划分和架构设计在功能级进行仿真、纠错,并用硬件描述语言对功能进行描述用综合工具将设计转化为具体门级电路网表物理级可以是FPGA器件或专用集成电路(ASIC)TOP-DOWN 设计思想,门级,功能级,系统级,TOP-DOWN 设计方法,2023/6/27,浙大微电子,5/86,电子设计规模越来越大(百万/千万门的量级),复杂度越来越高,只能用高级语言来描述其功能,在设计初期隐藏其具体的细节实现。可读性强,易修改。提高逻辑设计的效率,降低设计成本,更重要的是缩短设计周期。HDL追求对硬件的描述,而将该描述在目标器件上实
3、现则由EDA工具的综合器完成。受限于目标器件,并不是所有HDL语句均可被综合。,2023/6/27,浙大微电子,6/86,VHDL和Verilog HDL是目前世界上流行最广的两种硬件描述语言,都是在20世纪80年代中期开发出来的。均为IEEE标准。VHDL语法严谨,易于学习;逻辑综合能力强。在欧洲使用较多。Verilog HDL语法灵活(类似C语言,较难掌握)底层综合出色。美国使用较多。,2023/6/27,浙大微电子,7/86,Verilog HDL是一种应用广泛的硬件描述语言,是IC硬件设计人员和EDA工具之间的桥梁。其功能为编写设计文本(脚本)建立电子系统行为级的仿真模型并进行仿真自动
4、综合生成数字逻辑网表(Netlist)及具体电路生成某工艺条件下具体电路的延时模型并进行时序仿真仿真验证无误后用于制造ASIC或写入FPGA器件中常用的Verilog HDL开发软件有Altera公司的MAX+PLUS II,Quartus IIXilinx公司的Foundation ISE,2023/6/27,浙大微电子,8/86,Verilog HDL语言的主要特征,1、语法结构上,与C语言有许多相似之处,并借鉴C语言的多种操作符2、既包含高级程序设计语言的结构形式,同时也兼顾描述硬件线路连接的具体构件3、通过使用结构级或行为级描述可以在不同的抽象层次上进行设计,2023/6/27,浙大微
5、电子,9/86,4、Verilog HDL语言是并发的,即具有在同一时刻执行多任务的能力,因为在实际硬件中许多操作都是在同一时刻发生的。而计算机编程语言往往是顺序执行的。,5、有时序概念,因为在硬件电路中从输入到输出总是有延迟存在的,2023/6/27,浙大微电子,10/86,数字电路可简单归纳为两种要素:连线和器件 Verilog HDL建模-使用硬件语言对数字电路的这两种基本要素进行描述。,2023/6/27,浙大微电子,11/86,Verilog HDL的基本结构,八位加法器的Verilog HDL源代码,module adder8(cout,sum,ina,inb,cin);outpu
6、t 7:0 sum;output cout;input 7:0 ina,inb;input cin;assign cout,sum=ina+inb+cin;endmodule,准备实现的逻辑功能,简单的Verilog HDL的例子,端口列表,逻辑功能描述-描述内部特性,模块名,2023/6/27,浙大微电子,12/86,一.模块的概念,Verilog HDL模块的结构,模块是Verilog HDL语言的基本单元,数字系统用 模块集合的形式来描述模块描述某个设计的功能、结构和与其它模块通信的外部端口Verilog HDL中各个模块是并行运行的模块可以调用其它模块的实体(实例),2023/6/27
7、,浙大微电子,13/86,二.模块的结构,module()端口说明(input,output,inout)参数定义/可选 数据类型定义/wire、reg、task、function 连续赋值语句(assign)/组合逻辑 过程块(always和initial)-行为描述语句 低层模块实例/调用其它模块 任务和函数 延时说明块endmodule,2023/6/27,浙大微电子,14/86,模块端口(module ports),注意模块的名称DFF,端口列表及说明模块通过端口与外部通信,端口在模块名字后的括号中列出,端口可以说明为input,output及inout,端口等价于硬件的引脚(pin)
8、,2023/6/27,浙大微电子,15/86,模块实例化(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 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的四个实例,2023
9、/6/27,浙大微电子,16/86,语言的主要特点,将模块的实例通过端口连接起来构成一个大的系统每个实例都有自己的名字(d0,d1,d2,d3)。实例名是每个对象唯一的标记,通过这个标记可以查看每个实例的内部。实例中端口的次序与模块定义的次序相同。模块实例化与程序调用不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。,模块实例化(module instances):,2023/6/27,浙大微电子,17/86,时延,信号在电路中传输会有传播延时,如线延时、器件延时等assign#2 B=A;表示 B信号在2个时间单位后得到A信号的值 所有时延都必须根据时间单位进行定义定义方式为在文件头添
10、加语句:timescale 1ns/100ps其中timescale 是Verilog HDL 提供的预编译处理命令,1ns 表示时间单位是1ns,100ps表示时间精度是100ps 根据该命令,编译工具可以认知#2 为2ns,2023/6/27,浙大微电子,18/86,2023/6/27,浙大微电子,19/86,空白符和注释,module MUX2_1(out,a,b,sel);/Port declarations output out;input sel,/control input b,/*data inputs*/a;/*The netlist logic selects input”
11、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忽略空白符,多行注释,在/*/内,单行注释到行末结束,2023/6/27,浙大微电子,20/86,Verilog采用的四值逻辑系统,0,Low,False,Logic Low,Ground
12、,1,High,True,Logic High,Power,VDD,X Unknown:Occurs at Logic Which Cannot be Resolved ConflictHiZ,High Impedance,Tri-Stated,2023/6/27,浙大微电子,21/86,具体实例,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 在位长和基数之间,以及基数和数值之间允许出现空格
13、3 b 001 非法:和基数b 之间不允许出现空格(2+3)b10 非法:位长不能为表达式,2023/6/27,浙大微电子,22/86,字符串(string),格式符,转义符,2023/6/27,浙大微电子,23/86,标识符(identifiers),标识符是用户在描述时给对象起的名字标识符必须以字母(a-z,A-Z)或(_)开头,后面可以是字母、数字、($)或(_)。最长可以是1023个字符标识符区分大小写,sel和SEL是不同的标识符模块、端口和实例的名字都是标识符module MUX2_1(out,a,b,sel);output out;input a,b,sel;not not1(s
14、el_,sel);and and1(a1,a,sel_);and and2(b1,b,sel);or or1(out,a1,b1);endmodule,Verilog标识符,2023/6/27,浙大微电子,24/86,标识符(identifiers),有效标识符举例:shift_reg_a busa_index _bus3无效标识符举例:34net/开头不是字母或“_”a*b_net/包含了非字母或数字,“$”“_”n238/包含了非字母或数字,“$”“_”Verilog区分大小写,所有Verilog关键词使用小写字母,2023/6/27,浙大微电子,25/86,书写规范建议,A、用有意义的名
15、字如 Sum、CPU_addr等。B、用下划线区分词。C、采用一些前缀或后缀,如时钟采用Clk 前缀:Clk_50,Clk_CPU;低电平采用_n 后缀:Enable_n;D、统一缩写,如全局复位信号 Rst。E、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。F、自定义的标识符不能与保留字同名。G、参数采用大写,如SIZE,2023/6/27,浙大微电子,26/86,主要变量类型,net(线网):表示器件之间的物理连接register(寄存器):表示存储元件parameters(参数):运行时的常数,Verilog主要有三类数据类型:,2023/6/27,浙大微电子,27/
16、86,net(线网),net需要被持续的驱动,驱动它的可以是门和模块。当net驱动器的值发生变化时,会自动将新值传送到net上。在例子中,线网out由or门驱动。当or门的输入信号变化时将传输到线网net上。,2023/6/27,浙大微电子,28/86,net类的类型(线网),wire类型是最常用的类型,只有连接功能。wire常用来表示用assign语句赋值的组合逻辑信号取值为:0,1,x(不定值),z(高阻)wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。例如,可以用tri类型表示一个net有多个驱动源,或者指示这个net可以是高阻态 Z(hign-
17、impedance)。,2023/6/27,浙大微电子,29/86,wire型变量的定义,语法:wire 数据1,数据2,数据n;例子:wire a,b,c/定义了三个wire型变量a,b,cwire7:0 databus/定义了八位宽wire型向量数据总线wire20:1 addrbus/定义了20位宽wire型向量地址总线,2023/6/27,浙大微电子,30/86,寄存器类(register),寄存器类型在赋新值以前保持原值用行为描述结构给寄存器类型赋值(在过程块中进行)寄存器类型大量应用于行为描述及激励描述reg_a、reg_b、reg_sel用于施加激励给2:1多路器,2023/6/
18、27,浙大微电子,31/86,寄存器类的类型,寄存器类有四种数据类型,2023/6/27,浙大微电子,32/86,Verilog中net和register声明语法,举例:reg a;/一个标量寄存器reg 3:0 v;/从MSB到LSB的4位寄存器向量reg 7:0 m,n;/两个8位寄存器tri 15:0 busa;/16位三态总线wire 0:31 w1,w2;/两个32位wire,MSB为bit0,2023/6/27,浙大微电子,33/86,选择正确的数据类型,输入端口可以由net/register驱动,但输入端口只能是net,输出端口可以是net/register类型,输出端口只能驱动
19、net,in1,in2,O,A,B,Y,双向端口只能是net类型,2023/6/27,浙大微电子,34/86,操作符类型,Verilog操作符。“与”操作符的优先级总是比相同类型的“或”操作符高,最高,最低,优先级,2023/6/27,浙大微电子,35/86,相等操作符,注意逻辑等与case等的差别,逻辑等,=,case等,=,2b1x=2b0 x 值为0,因为不相等2b1x=2b1x 值为x,因为可能不相等,也可能相等,2b1x=2b0 x 值为0,因为不相同2b1x=2b1x 值为1,因为相同,a=2b1x;b=2b1x;if(a=b)$display(a is equal to b);e
20、lse$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描述。综合工具不支持,2023/6/27,浙大微电子,36/86,级联操作符,级联,可以从不同的矢量中选择位并用它们组成一个新的矢量。用于位的重组和矢量构造,module concatenation;reg 7:0 rega,regb,regc,regd;reg 7:0 new;initial begin r
21、ega=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,2023/6/27,浙大微电子,37/86,1、Verilog HDL语言提供了十多条的编译指令,例如:defineincludetimescale,编译指令以(反引号)开头。编译指令结束不需要加分号。编译指令对同一个文件中的所有模块有效。在进行Verilog HDL语
22、言编译时,已定义的编译指令一直有效,直至有其它编译指令修改它或取消它,2、说明,编译预处理,2023/6/27,浙大微电子,38/86,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;input a,b,sel;not#1 not1(sel_,sel);and#2 and1(a1,a,
23、sel_);and#2 and2(b1,b,sel);or#1 or1(out,a1,b1);endmodule,2023/6/27,浙大微电子,39/86,Timescale,time_precision不能大于time_unitprecision的时间单位应尽量与设计的实际精度相同precision是仿真器的仿真时间步长若time_unit与precision_unit差别很大将严重影响仿真速度timescale 1s/1ps,则仿真器在1秒内要扫描其事件序列1012次;而timescale 1s/1ms则只需扫描103次。如果没有timescale说明将使用缺省值,一般是ns,2023/
24、6/27,浙大微电子,40/86,Verilog HDL语句模块的描述方法,2023/6/27,浙大微电子,41/86,结构型描述,术语及定义结构描述:用门来描述器件的功能,是通过实例进行描述的,将预定义的基本元件实例嵌入到语言中,监控实例的输入,一旦其中任何一个发生变化便运算并输出。primitives(基本单元):Verilog语言已定义的具有基本逻辑功能的模型(models),2023/6/27,浙大微电子,42/86,结构描述,结构描述表示一个逻辑图结构描述用已有的元件构造更为复杂的元件,module rs_latch(y,yb,r,s);output y,yb;input r,s;n
25、or n1(y,r,yb);nor n2(yb,s,y);endmodule,2023/6/27,浙大微电子,43/86,Verilog基本单元(primitives),Verilog基本单元提供基本的逻辑功能,这些逻辑功能是预先定义的,用户不需要再定义这些基本功能基本单元是Verilog 库的一部分,基本单元库是自下而上(Bottom Up)设计方法的一部分,2023/6/27,浙大微电子,44/86,调用基本单元的句法:,可以只有一个输出,语法:门类型关键字(端口列表)其中端口列表为:多输入门:(输出,输入1,输入2,)多输出门:(输出1,输出2,输入)三态门:(输出,输入,使能输入),2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 集成电路设计 硬件 描述 语言
链接地址:https://www.31ppt.com/p-5336327.html