Verilog HDL硬件描述语言.ppt

上传人:文库蛋蛋多 文档编号:2216581 上传时间:2023-02-01 格式:PPT 页数:53 大小:518KB
返回 下载 相关 举报
Verilog HDL硬件描述语言.ppt_第1页
第1页 / 共53页
Verilog HDL硬件描述语言.ppt_第2页
第2页 / 共53页
Verilog HDL硬件描述语言.ppt_第3页
第3页 / 共53页
Verilog HDL硬件描述语言.ppt_第4页
第4页 / 共53页
Verilog HDL硬件描述语言.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《Verilog HDL硬件描述语言.ppt》由会员分享,可在线阅读,更多相关《Verilog HDL硬件描述语言.ppt(53页珍藏版)》请在三一办公上搜索。

1、2023年2月1日,1,Verilog HDL硬件描述语言Hardware Description Language(HDL),西安理工大学电子工程系,2023年2月1日,2,HDL的来历,HDL是“硬件描述语言”Hardware Description Language的缩写(不是“硬件设计语言”Hardware Design Language的缩写)。VHDL(VHSIC HDL)1980年开始在美国国防部Department of Defense(DOD)VHSIC(Very High Speed Integration Circuit)计划的指导下开发,完成于1983年,1987 VH

2、DL成为标准,IEEE1076-1987。美国国防部要求所有的电子设计使用VHDL描述,并决定在YF-22战斗机项目中使用VHDL。,2023年2月1日,3,HDL的来历,Verilog HDL Verilog HDL是在1983年由Gateway Design Automation 公司的Phil Moorby首创的。在1984-1985年,Moorby设计出了第一个关于Verilog-XL的仿真器。1986年,他对Verilog HDL的发展又作出了另一个巨大贡献:即提出了用于快速门级仿真的XL算法。1989年,Cadence公司收购了GDA公司,Verilog HDL语言成为Cadenc

3、e公司的私有财产。1990年,Cadence公司决定公开Verilog HDL语言,于是成立了OVI(Open Verilog International)组织来负责Verilog HDL语言的发展。基于Verilog HDL的优越性,IEEE于1995年制定了Verilog HDL的IEEE标准,即Verilog HDL1364-1995。,2023年2月1日,4,HDL的来历,2023年2月1日,5,Verilog HDL和VHDL的比较,共同特点:能形式化地抽象表示电路的结构和行为;支持逻辑设计中层次描述;具有电路仿真与验证机制;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无关

4、;便于文档管理、易于理解和设计重用。,2023年2月1日,6,Verilog HDL和VHDL的比较,不同点:Verilog HDL拥有更广泛的设计群体,成熟的资源也远比VHDL丰富。Verilog HDL的最大优点是:它是一种非常容易掌握的硬件描述语言,只要有C语言的编程基础,通过二十学时的学习,再加上一段实际操作,一般可在二至三个月内掌握这种设计技术。Verilog HDL和VHDL在行为级抽象建模的覆盖范围方面也有所不同。一般认为Verilog HDL在系统级抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL强得多。,2023年2月1日,7,Verilog HDL和VHDL的

5、比较,一个有趣的现象:由于Verilog HDL在其门级描述的底层,也就是在晶体管开关的描述方面比VHDL有强得多得功能,所以即使是VHDL的设计环境,在底层往往上也是由Verilog HDL描述的器件库所支持的。Cadence开发了Verilog HDL和SDF,其领导开发的ASIC的库元素的Verilog HDL模型高效、仿真速度快;工具厂商在开发ASIC库元素的高效VHDL模型上速度较慢。VITAL:库元素的VHDL模型生成标准。IEEE成立VHDL Initiative Towards ASIC Libarary(VITAL)委员会,利用现存的模型开发方法,加速VHDL的ASIC单元仿

6、真库的开发。形成了一套标准化的VHDL ASIC单元模型产生技术,由两个IEEE包支持:VITAL_timing和VITAL_primitive。IEEE 1076.41995。(2000 年做了修订:IEEE 1076.4 2000),2023年2月1日,8,Verilog HDL的应用,Verilog HDL是专门为复杂数字逻辑电路和系统的设计仿真而开发的,本身就非常适合复杂数字逻辑电路和系统的仿真和综合。Verilog HDL较为适合系统级(System)、算法级(Alogrithem)、寄存器传输级(RTL)、逻辑级(Logic)、门级(Gate)、电路开关级(Switch)设计。而对

7、于特大型(几百万门级以上)的系统级(System)设计,则VHDL更为适合。2001年3月,Verilog HDL IEEE13642001标准公布,Verilog HDL语言在综合和仿真性能方面都有大幅度的提升。,2023年2月1日,9,Verilog HDL的应用,在美国,高层逻辑电路设计领域Verilog HDL和VHDL的应用比率是80和20;日本和台湾省与美国相同。欧洲VHDL发展比较好。国内大多数集成电路设计公司都采用Verilog HDL。,2023年2月1日,10,Verilog HDL的应用,Verilog HDL作为一种高级的硬件描述编程语言,有着类似C语言的风格。其中有许

8、多语句如:if语句、case语句等和C语言中的对应语句十分相似。如果已经掌握C语言编程的基础,那么学习 Verilog HDL并不困难,只要对Verilog HDL某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它。Verilog HDL与 C 语言根本的区别:-并行性-块的含义:initial块 和 always块 两种赋值语句:阻塞赋值“=”非阻塞赋值“=”,2023年2月1日,11,Verilog HDL设计复杂数字电路的优点,传统的设计方法:-查用器件手册;-选用合适的微处理器和电路芯片;-设计面包板和线路板;-调试;-定型;-设计复杂的系统(几十万门以上)极其困难。,2023

9、年2月1日,12,Verilog HDL设计复杂数字电路的优点,传统的设计方法,2023年2月1日,13,Verilog HDL设计复杂数字电路的优点,Verilog HDL设计法采用Verilog HDL设计电路的逻辑功能容易理解;便于利用EDA工具对逻辑进行分析处理;把逻辑设计与具体电路的实现分成两个独立的阶段来操作;逻辑设计与实现的工艺无关;逻辑设计的资源积累可以重复利用;可以由多人共同更好更快地设计非常复杂的逻辑电路(几十万门以上的逻辑系统)。,2023年2月1日,14,Verilog HDL设计复杂数字电路的优点,硬件描述语自身就是设计规格书。可以在设计初期发现错误。可以进行仿真。而

10、且,仿真可以在电路系统不同的层次进 行。可以直接作为逻辑综合的输入数据。设计的文档化。,可以大大提高硬件的生产效率,2023年2月1日,15,Verilog HDL设计复杂数字电路的优点,软核、固核和硬核IP(IntellectualProperty)就是常说的知识产权。美国Dataquest咨询公司将半导体产业的IP定义为:用于 ASIC、ASSP和PLD等当中,并且是预先设计好的电路模块。IP核模块有行为(Behavior)、结构(Structure)和物理(Physical)三级不同程度的设计,对应描述功能行为的不同分为三类,即软核(SoftIPCore)、完成结构描述的固核(FirmI

11、PCore)和基于物理描述并经过工艺验证的硬核(HardIPCore)。,2023年2月1日,16,Verilog HDL设计复杂数字电路的优点,软核、固核和硬核软核:IP软核通常是用 HDL文本形式提交给用户,它经过RTL级设计优化和功能验证,但其中不含有任何具体的物理信息。据此,用户可以综合出正确的门电路级设计网表,并可以进 行后续的结构设计,具有很大的灵活性,借助于EDA综合工具可以很容易地与其他外部逻辑电路合成一体,根据各种不同半导体工艺,设计成具有不同性能的器件。软IP内核也称为虚拟组件(VC-VirtualComponent)。国际上有一个叫作虚拟接口联盟的组织(Virtual S

12、ocket Interface Alliance)来协调这方面的工作。,2023年2月1日,17,Verilog HDL设计复杂数字电路的优点,软核、固核和硬核硬核:IP硬核是基于半导体工艺的物理设计,已有固定的拓扑布局和具体工艺,并已经过工艺验证,具有可保证的性能。其提供给用户的形式是电路物理结构掩模版图和全套工艺文件,是可以拿来就用的全套技术。固核:IP固核的设计程度则是介于软核和硬核之间,除了完成软核所有的设计外,还完成了门级电路综合和时序仿真等设计环节。一般以门级电路网表的形式提供给用户。在逻辑设计阶段,软核具有最大的灵活性,它可以很容易地借助EDA综合工具与其它外部逻辑结合为一体。相

13、比之下固核和硬核与其它外部逻辑结合为一体的灵活性要差得多,特别是电路实现工艺技术改变时更是如此。,2023年2月1日,18,Verilog HDL设计流程,自顶向下(Top-Down)设计,2023年2月1日,19,Verilog HDL设计流程,设计流程,2023年2月1日,20,Verilog HDL模块的基本概念,/*一个名为adder的三位加法器的例子。copyright XAUT 2023/2/1*/module adder(count,sum,a,b,cin);/模块定义开始 input 2:0 a,b;/输入信号定义 input cin;/输出信号定义 output count;

14、/输出信号定义 output 2:0 sum;/输出信号定义 assign count,sum=a+b+cin;/模块功能描述endmodule/模块定义结束,2023年2月1日,21,Verilog HDL模块的基本概念,/*一个名为compare的比较器例子。copyright XAUT 2023/2/1*/module compare(equal,a,b);output equal;/声明输出信号equal input 1:0 a,b;/声明输入信号a,b/*如果a、b 两个输入信号相等,输出为1,否则为0*/assign equal=(a=b)?1:0;endmodule,2023年2

15、月1日,22,Verilog HDL模块的基本概念,/*Verilog HDL Example1 copyright XAUT 2023/2/1*/module sample(q,a,b,sel,clk,resetn);/模块定义inputa,b,sel,clk,resetn;/输入信号定义output q;/输出信号定义wire c;/模块内信号线的定义reg q;/输出端子数型定义always(posedge clk or negedge resetn)begin/非同步复位的F/F if(resetn=1b0)q=1b0;else q=c;endassignc=(sel)?a:b;/选择

16、逻辑组合endmodule,2023年2月1日,23,Verilog HDL模块的基本概念,/*一个模块调用(例化)的例子。copyright XAUT 2023/2/1*/module trist1(out,in,enable);output out;input in,enable;mytri tri_inst(out,in,enable);/调用由mytri模块定义的实例元件tri_instendmodulemodule mytri(out,in,enable);output out;input in,enable;assign out=enable?in:bz;endmodule,202

17、3年2月1日,24,Verilog HDL模块的基本概念,Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个语句之间。每个模块实现特定的功能。模块是可以进行层次嵌套的。可以将大型的计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。Verilog HDL区分大小写。也就是说大小写不同的标识符是不同的。此外,Verilog HDL是自由格式的,即结构可以跨越多行编写,也可以在一行内编写。白空(新行、制表符和空格)没有特殊意义。除了endmodu

18、le语句外,每个语句和数据定义的最后必须有分号。可以用/*.*/和/.对Verilog HDL程序的任何部分作注释。,2023年2月1日,25,模块的结构,“模块”(block)是Verilog的基本设计单元。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。module block(a,b,c,d);input a,b;output c,d;assign c=a|b;assign d=a endmodule程序模块和电路图符号是一致的,电路图符号的引脚也就是程序模块的接口。而程序模块描述了电路图符号所实现的逻辑功能。,2023年2月1日,26,模块的

19、结构,从上面的例子可以看出:-Verilog模块结构完全嵌在module和endmodule声明语句之间;-每个Verilog程序包括四个主要部分:端口定义、I/O说明、内部信号声明、功能定义。模块的端口定义:模块的端口声明了模块的输入输出口。其格式如下:module 模块名(端口1,端口2,端口3,);如:module sample(q,a,b,sel,clk,resetn);,2023年2月1日,27,模块的结构,I/O说明:对输入输出端口的属性进行定义,包括端口的方向、信号位宽等。定义端子方向有如下语句:input(输入端口)output(输出端口)inout(双向端口)定义信号位宽:信

20、号类型 MSB:LSB 信号名 如:input 11:0 address;inout 7:0 data;I/O说明也可写在端口声明语句里,Verilog 2001支持下面的描述方式。module adder_16(output reg 15:0 sum,output reg cout,input wire cin,input wire 15:0 a,b);,2023年2月1日,28,模块的结构,内部信号说明:在模块内用到的和与端口有关的wire 和 reg 变量的声明。如:reg width-1:0 R变量1,R变量2。;wire width-1:0 W变量1,W变量2。;module sam

21、ple(q,a,b,sel,clk,resetn);inputa,b,sel,clk,resetn;output q;wire c;/模块内信号线的定义reg q;/输出端口类型定义.endmodule,2023年2月1日,29,模块的结构,时延:Verilog HDL模型中的所有时延都根据时间单位定义。Assign#2 Sum=A B;/#2指2个时间单位。使用编译指令将时间单位与物理时间相关联。编译器指令需在模块描述前定义 timescale 1ns/100ps此语句说明时延时间单位为1ns并且时间精度为100ps(时间精度是指所有的时延必须被限定在0.1ns内)。如果此编译器指令所在的模

22、块包含上面的连续赋值语句,#2 代表2ns。,2023年2月1日,30,模块的结构,模块的功能定义可以用采用下面的4种方式描述:1)数据流方式;2)行为方式;3)结构方式;4)混合描述方式。,2023年2月1日,31,模块的结构,数据流描述方式:用连续赋值语句“assign”,只能描述组合逻辑。连续赋值语句的语法为:assign delay LHS_net=RHS_ expression无论右边的操作数何时发生变化,右边表达式都重新计算,并且在指定的时延后赋给左边线网变量。如果没有定义时延值,缺省时延为0。,2023年2月1日,32,模块的结构,timescale 1ns/1nsmodule

23、Decoder2x4(A,B,EN,Z);input A,B,EN;output 0:3 Z;wire Abar,Bbar;assign#1 Abar=A;assign#1 Bbar=B;。assign#2 Z0=(Abar endmodule连续赋值语句是隐式而非显式的建模方式。连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。,2-4解码器电路,2023年2月1日,33,模块的结构,行为描述方式:用类似软件程序中的各种算符,直接表示输入输出信号之间的关系的描述方法称为行为描述。设计的行为功能使用下述过程语句结构描述:1)initial语句:此语句只执行一次。2)

24、always语句:此语句总是循环执行,或者说重复执行。只有寄存器类型数据能够在这两种语句中被赋值。所有的initial语句和always语句在0时刻并发执行。,2023年2月1日,34,模块的结构,用always语句对1位全加器电路建模module FA_Seq(A,B,Cin,Sum,Cout);input A,B,Cin;output Sum,Cout;reg Sum,Cout;reg T1,T2,T3;always(A or B or Cin)beginSum=(A B)Cin;T1=A endendmodule,1位全加器电路,2023年2月1日,35,模块的结构,always 语句中

25、有一个与事件控制(紧跟在字符 后面的表达式)。相关联的顺序过程(begin-end对)。这意味着只要A、B或Cin 上发生事件,即A、B或Cin之一的值发生变化,顺序过程就执行。在顺序过程中(begin-end对)的语句顺序执行,并且在顺序过程执行结束后被挂起。顺序过程执行完成后,always 语句再次等待A、B或Cin上发生的事件。,2023年2月1日,36,模块的结构,initial语句示例:timescale 1ns/1nsmodule Test;reg Pop,Pid;initial beginPop=0;Pid=0;#5 Pop=1;#3 Pid=1;#6 Pop=0;#2 Pid=

26、0;endendmodule,initial语句包含一个顺序过程。这一顺序过程在0 ns时开始执行,并 且在顺序过程中所有语句全部执行完毕后,initial语句永远挂起。此语句只执行一次。,2023年2月1日,37,模块的结构,结构化描述方式:在Verilog HDL中可使用如下方式描述结构:1)内置门原语(在门级);2)开关级原语(在晶体管级);3)用户定义的原语(在门级);4)模块实例(创建层次结构)。通过使用线网来相互连接。,2023年2月1日,38,模块的结构,module FA_Str(A,B,Cin,Sum,Cout);input A,B,Cin;output Sum,Cout;w

27、ire S1,T1,T2,T3;xor X1(S1,A,B);xor X2(Sum,S1,Cin);and A1(T3,A,B);and A2(T2,B,Cin);and A3(T1,A,Cin);or O1(Cout,T1,T2,T3);Endmodule门实例语句可以以任何顺序出现,1位全加器电路,2023年2月1日,39,模块的结构,4位全加器可以使用4个1位全加器模块描述module FourBitFA(FA,FB,FCin,FSum,FCout);input 3:0 FA,FB;output 3:0 FSuminput FCin;input FCout;wire 1:3 FTemp;

28、FA_Str FA1(.A(FA1),.B(FB1),.Cin(FCin),.Sum(FSum1),.Cout(FTemp1);FA_Str FA2(.A(FA2),.B(FB2),.Cin(FTemp1),.Sum(FSum2),.Cout(FTemp2);FA_Str FA3(FA3,FB3,FTemp2,FSum3,FTemp3);FA_Str FA4(FA4,FB4,FTemp3,FSum4,FCout);endmodule,2023年2月1日,40,模块的结构,模块实例用于建模4位全加器。在模块实例语句中,端口可以与名称或位置关联。前两个实例FA1和FA2使用命名关联方式,也就是说,

29、端口的名称和它连接的线网被显式描述(每一个的形式都为“.port_name(net_name))。最后两个实例语句,实例FA3和FA4使用位置关联方式将端口与线网关联。这里关联的顺序很重要,例如,在实例FA4中,第一个FA4与FA_Str 的端口A连接,第二个FB4与FA_Str 的端口B连接,余下的由此类推。,2023年2月1日,41,模块的结构,混合描述方式:结构的和行为的描述自由混合。模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句。module FA_Mix(A,B,Cin,Sum,Cout);input A,B,Cin;output Sum,Cout;r

30、eg Cout;reg T1,T2,T3;wire S1;xor X1(S1,A,B);/门实例语句。always(A or B or Cin)/always语句begin T1=A/连续赋值语句endmodule,只要A或B上有事件发生,门实例语句即被执行。只要A、B或Cin上有事件发生,就执行always 语句。只要S1或Cin上有事件发生,就执行连续赋值语句。,2023年2月1日,42,模块的结构,理解要点:如果用Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。“assign”语句、实例元件和“always”块描述的逻辑功能是同时执行的,也就是并发的,如

31、果把这三项写到一个 VeriIog 模块文件中去,它们的次序不会影响逻辑实现的功能。在“always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句”。两个或更多的“always”模块也是同时执行的,但是模块内部的语句是顺序执行的。,2023年2月1日,43,测试平台Test Bench,测试平台是验证对象电路的工作状态是否正确的测试用模块。测试平台的作用是对对象电路的输入信号加上测试图形,并通过观察输出信号来验证电路是否正常工作。Verilog HDL不仅提供描述设计的能力,而且提供对激励、控制、存储响应和设计验证的建模能力。,2023年2月1日,44,测试平台

32、Test Bench,电路仿真所需要的数据 被测电路的HDL描述。测试平台的HDL描述 HDL仿真器将测试平台中描述的激励信号按照所定时间提供给被测电路。对被测电路进行仿真。将仿真后被测电路产生的输出信号以部波形、数据或文字的方式表示出来。,2023年2月1日,45,测试平台Test Bench,激励和控制可用初始化语句产生。设计验证可以通过在初始化语句中写入相应的语句自动与期望的响应值比较完成。timescale 1ns/1nsmodule Top;/一个模块可以有一个空的端口列表。reg PA,PB,PCi;wire PCo,PSum;FA_Seq F1(PA,PB,PCi,PSum,PC

33、o);/正在测试的实例化模块:initial begin:ONLY_ONCEreg 2:0 Pal;for(Pal=0;Pal 8;Pal=Pal+1)Begin PA,PB,PCi=Pal;#5$display(“PA,PB,PCi=%b%b%b”,PA,PB,PCi,“:PCo,PSum=%b%b”,PCo,PSum);end endendmodule,2023年2月1日,46,测试平台Test Bench,系统任务$display调用中的时延控制规定$display任务在5个时间单位后执行。这5个时间单位基本上代表了逻辑处理时间。Pal在初始化语句内被局部定义,初始化语句中的顺序过程(b

34、egin-end)必须标记,ONLY_ONCE是顺序过程标记。如果在顺序过程内没有局部声明的变量,就不需要该标记。测试模块产生的输出:PA,PB,PCi=000:PCo,PSum=00PA,PB,PCi=001:PCo,PSum=01PA,PB,PCi=010:PCo,PSum=01PA,PB,PCi=011:PCo,PSum=10PA,PB,PCi=100:PCo,PSum=01PA,PB,PCi=101:PCo,PSum=10PA,PB,PCi=110:PCo,PSum=10PA,PB,PCi=111:PCo,PSum=11,2023年2月1日,47,Verilog 语言中,字符串常常用于

35、表示命令内需要显示的信息。用“”括起来的一行字符串,换新一行用“n”字符,与 C 语言一致。在字符串中可以用 C 语言中的各种格式控制符,如:n 换行符 t 制表符 字符本身 字符在字符串中可以用 C 语言中的各种数值型式控制符,如:%b(二进制),%o(八进制),%d(十进制),%h(十六进制),%t(时间类型),%s(字符串类型),字符串,2023年2月1日,48,标识符,所谓标识别符就是用户为程序描述中的Verilog 对象所起的名字。标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。标识符最长可以达到1023个字符。模块名、端口名

36、和实例名都是标识符。Verilog语言是大小写敏感的,因此sel 和 SEL 是两个不同的标识符。,2023年2月1日,49,合法和非法标识符,合法的:shift_reg_a busa_index bus263,非法的:34net/不能用数字开头a*b_net/不能含有非字母符号*n263/不能含有非字母符号,2023年2月1日,50,特殊符号“#”,特殊符号“#”常用来表示延迟:在过程赋值语句时表示延迟。例:initial begin#10 rst=1;#50 rst=0;end在门级实例引用时表示延迟。例:not#1 not1(nsel,sel);and#2 and2(a1,a,nsel)

37、;在模块实例引用时表示参数传递。,2023年2月1日,51,$:系统任务和函数,$符号表示 Verilog 的系统任务和函数常用的系统任务和函数有下面几种:$time/找到当前的仿真时间$display,$monitor/显示和监视信号值的变化$stop/暂停仿真$finish/结束仿真-例:initial$monitor($time,”a=%b,b=%b”,a,b);/每当a 或b值变化时该系统任务都显示当前的仿真时刻并分别用二进制和十六进制显示信号a和 b的值,2023年2月1日,52,Verilog 的四种逻辑值,0、低、伪、逻辑低、地,1、高、真、逻辑高、电源,X、不确定:逻辑冲突无法确定其逻辑值,HiZ、高阻抗、三态、无驱动源,2023年2月1日,53,Verilog 的四种逻辑值,0、1、x、z这四种值的解释都内置于语言中。在门的输入或一个表达式中的为“z”的值通常解释成“x”。此外,x值和z值都是不分大小写的,也就是说,值0 x1z与值0X1Z相同。Verilog HDL中的常量是由以上这四类基本值组成的。,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号