Verilog HDL硬件描述语言

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

《Verilog HDL硬件描述语言》由会员分享,可在线阅读,更多相关《Verilog HDL硬件描述语言(53页珍藏版)》请在金锄头文库上搜索。

1、Verilog HDL硬件描述语言Hardware Description Language(HDL)西安理工大学电子工程系西安理工大学电子工程系9/1/20241HDL的来历lHDL是是“硬件描述语言硬件描述语言”HardwareDescriptionLanguage的的缩写缩写(不是不是“硬件设计语言硬件设计语言”HardwareDesignLanguage的的缩写缩写)。lVHDL(VHSICHDL)1980年开始在美国国防部年开始在美国国防部DepartmentofDefense(DOD)VHSIC(VeryHighSpeedIntegrationCircuit)计划的指计划的指导下开

2、发,完成于导下开发,完成于1983年,年,1987VHDL成为标准,成为标准,IEEE1076-1987。美国国防部要求所有的电子设计使用美国国防部要求所有的电子设计使用VHDL描述,并决定描述,并决定在在YF-22战斗机项目中使用战斗机项目中使用VHDL。9/1/20242HDL的来历lVerilogHDLVerilogHDL是在是在1983年由年由GatewayDesignAutomation公公司的司的PhilMoorby首创的。首创的。在在1984-1985年,年,Moorby设计出了第一个关于设计出了第一个关于Verilog-XL的的仿真器。仿真器。1986年,他对年,他对Veril

3、ogHDL的发展又作出了另一个巨大贡献:的发展又作出了另一个巨大贡献:即提出了用于快速门级仿真的即提出了用于快速门级仿真的XL算法。算法。1989年,年,Cadence公司收购了公司收购了GDA公司,公司,VerilogHDL语言语言成为成为Cadence公司的私有财产。公司的私有财产。1990年,年,Cadence公司决定公开公司决定公开VerilogHDL语言,于是成语言,于是成立了立了OVI(OpenVerilogInternational)组织来负责组织来负责VerilogHDL语言的发展。语言的发展。基于基于VerilogHDL的优越性,的优越性,IEEE于于1995年制定了年制定了

4、VerilogHDL的的IEEE标准,即标准,即VerilogHDL1364-1995。9/1/20243HDL的来历9/1/20244Verilog HDL和VHDL的比较l共同特点:共同特点:能形式化地抽象表示电路的结构和行为;能形式化地抽象表示电路的结构和行为;支持逻辑设计中层次描述;支持逻辑设计中层次描述;具有电路仿真与验证机制;具有电路仿真与验证机制;支持电路描述由高层到低层的综合转换;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无关;硬件描述与实现工艺无关;便于文档管理、易于理解和设计重用。便于文档管理、易于理解和设计重用。9/1/20245Verilog HDL和VHD

5、L的比较l不同点:不同点:VerilogHDL拥有更广泛的设计群体,拥有更广泛的设计群体,成熟的资源也远比成熟的资源也远比VHDL丰富。丰富。VerilogHDL的最大优点是的最大优点是:它是一种:它是一种非常容易掌握的硬件描述语言,只要非常容易掌握的硬件描述语言,只要有有C语言的编程基础,通过二十学时的语言的编程基础,通过二十学时的学习,再加上一段实际操作,一般可学习,再加上一段实际操作,一般可在二至三个月内掌握这种设计技术。在二至三个月内掌握这种设计技术。VerilogHDL和和VHDL在行为级抽象建在行为级抽象建模的覆盖范围方面也有所不同。一般模的覆盖范围方面也有所不同。一般认为认为Ve

6、rilogHDL在系统级抽象方面比在系统级抽象方面比VHDL略差一些,而在门级开关电路描略差一些,而在门级开关电路描述方面比述方面比VHDL强得多。强得多。9/1/20246Verilog HDL和VHDL的比较l一个有趣的现象一个有趣的现象:由于由于VerilogHDL在其门级描述的底层,也就在其门级描述的底层,也就是在晶体管开关的描述方面比是在晶体管开关的描述方面比VHDL有强得多得功能,所以即使有强得多得功能,所以即使是是VHDL的设计环境,在底层往往上也是由的设计环境,在底层往往上也是由VerilogHDL描述的描述的器件库所支持的。器件库所支持的。Cadence开发了开发了Veril

7、ogHDL和和SDF,其领导开发的,其领导开发的ASIC的的库元素的库元素的VerilogHDL模型高效、仿真速度快;工具厂商在模型高效、仿真速度快;工具厂商在开发开发ASIC库元素的高效库元素的高效VHDL模型上速度较慢。模型上速度较慢。VITAL:库元素的库元素的VHDL模型生成标准模型生成标准。IEEE成立成立VHDLInitiativeTowardsASICLibarary(VITAL)委员会,利用)委员会,利用现存的模型开发方法,加速现存的模型开发方法,加速VHDL的的ASIC单元仿真库的开发。单元仿真库的开发。形成了一套标准化的形成了一套标准化的VHDLASIC单元模型产生技术,由

8、两个单元模型产生技术,由两个IEEE包支持:包支持:VITAL_timing和和VITAL_primitive。IEEE1076.41995。(。(2000年做了修订:年做了修订:IEEE1076.42000)9/1/20247Verilog HDL的应用lVerilogHDL是专门为复杂数字逻辑电路和系统的设计仿是专门为复杂数字逻辑电路和系统的设计仿真而开发的,本身就非常适合复杂数字逻辑电路和系统真而开发的,本身就非常适合复杂数字逻辑电路和系统的仿真和综合。的仿真和综合。lVerilogHDL较为适合系统级较为适合系统级(System)、算法级、算法级(Alogrithem)、寄存器传输级、

9、寄存器传输级(RTL)、逻辑级、逻辑级(Logic)、门级门级(Gate)、电路开关级、电路开关级(Switch)设计。设计。l而对于特大型(几百万门级以上)的系统级而对于特大型(几百万门级以上)的系统级(System)设设计计,则则VHDL更为适合。更为适合。l2001年年3月,月,VerilogHDLIEEE13642001标准公布,标准公布,VerilogHDL语言在综合和仿真性能方面都有大幅度的提语言在综合和仿真性能方面都有大幅度的提升。升。9/1/20248Verilog HDL的应用l在美国,高层逻辑电路设计领域在美国,高层逻辑电路设计领域VerilogHDL和和VHDL的应用比率

10、是的应用比率是80和和20;l日本和台湾省与美国相同。日本和台湾省与美国相同。l欧洲欧洲VHDL发展比较好。发展比较好。l国内大多数集成电路设计公司都采用国内大多数集成电路设计公司都采用VerilogHDL。9/1/20249Verilog HDL的应用lVerilogVerilog HDL HDL作为一种高级的硬件描述编程语言,作为一种高级的硬件描述编程语言,有着有着类似类似C C语言的风格语言的风格。其中有许多语句如:。其中有许多语句如:ifif语句、语句、casecase语句等和语句等和C C语言中的对应语句十分相似。语言中的对应语句十分相似。l如果已经掌握如果已经掌握C C语言编程的基

11、础,那么学习语言编程的基础,那么学习 VerilogVerilog HDLHDL并不困难并不困难,只要对,只要对VerilogVerilog HDL HDL某些语句的特殊方某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它。面着重理解,并加强上机练习就能很好地掌握它。VerilogVerilog HDL HDL与与 C C 语言根本的区别:语言根本的区别:- - 并行性并行性- - 块的含义:块的含义:initialinitial块块 和和 alwaysalways块块 两种赋值语句:阻塞赋值两种赋值语句:阻塞赋值 “ “ = ” = ” 非阻塞赋值非阻塞赋值 “ “ = ”= ”9/

12、1/202410Verilog HDL设计复杂数字电路的优点l传统的设计方法传统的设计方法:-查用器件手册;查用器件手册;-选用合适的微处理器和电路芯片;选用合适的微处理器和电路芯片;-设计面包板和线路板;设计面包板和线路板;-调试;调试;-定型;定型;-设计复杂的系统(几十万门以上)极其困难。设计复杂的系统(几十万门以上)极其困难。9/1/202411Verilog HDL设计复杂数字电路的优点传统的设计方法9/1/202412Verilog HDL设计复杂数字电路的优点lVerilogHDL设计法设计法采用采用VerilogHDL设计电路的逻辑功能容易理解;设计电路的逻辑功能容易理解;便于

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

14、错误。可以进行仿真。而且,仿真可以在电路系统不同的可以进行仿真。而且,仿真可以在电路系统不同的层次进层次进行。行。可以直接作为逻辑综合的输入数据。可以直接作为逻辑综合的输入数据。设计的文档化。设计的文档化。可以大大提高硬件的生产效率可以大大提高硬件的生产效率9/1/202414Verilog HDL设计复杂数字电路的优点l软核、固核和硬核软核、固核和硬核IP(IntellectualProperty)就是常说的知识产权。美国)就是常说的知识产权。美国Dataquest咨询公司将半导体产业的咨询公司将半导体产业的IP定义为定义为:用于用于ASIC、ASSP和和PLD等当中,并且是预先设计好的电路

15、模块。等当中,并且是预先设计好的电路模块。IP核模块有核模块有行为(行为(Behavior)、结构()、结构(Structure)和物理)和物理(Physical)三级不同程度的设计,对应描述功能行为的不同三级不同程度的设计,对应描述功能行为的不同分为三类,即分为三类,即软核软核(SoftIPCore)、完成结构描述的)、完成结构描述的固核固核(FirmIPCore)和基于物理描述并经过工艺验证的)和基于物理描述并经过工艺验证的硬核硬核(HardIPCore)。)。9/1/202415Verilog HDL设计复杂数字电路的优点l软核、固核和硬核软核、固核和硬核软核软核:IP软核通常是用软核通

16、常是用HDL文本文本形式提交给用户,它经过形式提交给用户,它经过RTL级设计优化和功能验证,但其中不含有任何具体的物理信息。级设计优化和功能验证,但其中不含有任何具体的物理信息。据此,用户可以综合出正确的门电路级设计网表,并可以进据此,用户可以综合出正确的门电路级设计网表,并可以进行行后续的结构设计,具有很大的灵活性,借助于后续的结构设计,具有很大的灵活性,借助于EDA综合工具可综合工具可以很容易地与其他外部逻辑电路合成一体,根据各种不同半导以很容易地与其他外部逻辑电路合成一体,根据各种不同半导体工艺,设计成具有不同性能的器件。体工艺,设计成具有不同性能的器件。软软IP内核也称为虚拟组件(内核

17、也称为虚拟组件(VC-VirtualComponent)。国际上)。国际上有一个叫作有一个叫作虚拟接口联盟虚拟接口联盟的组织(的组织(VirtualSocketInterfaceAlliance)来协调这方面的工作。)来协调这方面的工作。9/1/202416Verilog HDL设计复杂数字电路的优点l软核、固核和硬核软核、固核和硬核硬核硬核:IP硬核是基于半导体工艺的物理设计,已有固定硬核是基于半导体工艺的物理设计,已有固定的拓扑布局和具体工艺,并已经过工艺验证,具有可保的拓扑布局和具体工艺,并已经过工艺验证,具有可保证的性能。其提供给用户的形式是电路物理结构掩模版证的性能。其提供给用户的形

18、式是电路物理结构掩模版图和全套工艺文件,是可以拿来就用的全套技术。图和全套工艺文件,是可以拿来就用的全套技术。固核固核:IP固核的设计程度则是介于软核和硬核之间,除固核的设计程度则是介于软核和硬核之间,除了完成软核所有的设计外,还完成了门级电路综合和时了完成软核所有的设计外,还完成了门级电路综合和时序仿真等设计环节。一般以序仿真等设计环节。一般以门级电路网表门级电路网表的形式提供给的形式提供给用户。用户。在逻辑设计阶段,软核具有最大的灵活性,它可以很容易地在逻辑设计阶段,软核具有最大的灵活性,它可以很容易地借助借助EDA综合工具与其它外部逻辑结合为一体。相比之下固综合工具与其它外部逻辑结合为一

19、体。相比之下固核和硬核与其它外部逻辑结合为一体的灵活性要差得多,特核和硬核与其它外部逻辑结合为一体的灵活性要差得多,特别是电路别是电路实现工艺技术改变时实现工艺技术改变时更是如此。更是如此。9/1/202417Verilog HDL设计流程l自顶向下自顶向下(Top-Down)设计设计9/1/202418Verilog HDL设计流程l设计流程9/1/202419Verilog HDL模块的基本概念/*一个名为一个名为adder的三位加法器的例子。的三位加法器的例子。copyrightXAUT9/1/2024*/moduleadder(count,sum,a,b,cin);/ /模块定义开始模

20、块定义开始模块定义开始模块定义开始input2:0a,b;/输入信号定义输入信号定义inputcin;/输出信号定义输出信号定义outputcount;/输出信号定义输出信号定义output2:0sum;/输出信号定义输出信号定义assigncount,sum=a+b+cin;/模块功能描述模块功能描述endmodule/模块定义结束模块定义结束模块定义结束模块定义结束9/1/202420Verilog HDL模块的基本概念/*一个名为一个名为compare的比较器的比较器例子。例子。copyrightXAUT9/1/2024*/modulecompare(equal,a,b);outpute

21、qual;/声明输出信号声明输出信号equalinput1:0a,b;/声明输入信号声明输入信号a,b/*如果如果a、b两个输入信号相等两个输入信号相等,输出为输出为1,否则为,否则为0*/assignequal=(a=b)?)?1:0;endmodule9/1/202421Verilog HDL模块的基本概念/*/*VerilogVerilogHDLExample1HDLExample1copyrightXAUTcopyrightXAUT9/1/20249/1/2024*/*/modulemodulesample(q,a,b,sample(q,a,b,selsel, ,clkclk, ,re

22、setnresetn););/模块定义模块定义模块定义模块定义inputinputa,b,a,b,selsel, ,clkclk, ,resetnresetn; ; /输入信号定义输入信号定义输入信号定义输入信号定义outputoutput q;q; /输出信号定义输出信号定义输出信号定义输出信号定义wirewire c;c; /模块内信号线的定义模块内信号线的定义模块内信号线的定义模块内信号线的定义regreg q;q; /输出端子数型定义输出端子数型定义输出端子数型定义输出端子数型定义alwaysalways(posedgeposedge clkclkorornegedgenegedge

23、resetnresetn) )beginbegin/非同步复位的非同步复位的非同步复位的非同步复位的F/FF/Fif if( (resetnresetn=1b0)=1b0)q=1b0;q=1b0;elseelse q=c;q=c;endendassignassignc=(c=(selsel)?a:b;)?a:b;/选择逻辑组合选择逻辑组合选择逻辑组合选择逻辑组合endmoduleendmodule9/1/202422Verilog HDL模块的基本概念/*一个模块调用(例化)一个模块调用(例化)的的例子。例子。copyrightXAUT9/1/2024*/moduletrist1(out,in

24、,enable);outputout;inputin,enable;mytritri_inst(out,in,enable);/调用由调用由mytri模块定义的实例元件模块定义的实例元件tri_instendmodulemodulemytri(out,in,enable);outputout;inputin,enable;assignout=enable?in:bz;endmodule9/1/202423Verilog HDL模块的基本概念lVerilogHDL程序是由程序是由模块模块构成的。每个模块的内容都是嵌在构成的。每个模块的内容都是嵌在module和和endmodule两个语句之间。每

25、个模块实现特定的功能。两个语句之间。每个模块实现特定的功能。l模块是可以进行层次嵌套的。可以将大型的计分割成不同的小模块模块是可以进行层次嵌套的。可以将大型的计分割成不同的小模块来实现特定的功能来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。最后通过顶层模块调用子模块来实现整体功能。l每个模块要进行端口定义每个模块要进行端口定义,并说明输入输出口并说明输入输出口,然后对模块的功能进然后对模块的功能进行行为逻辑描述。行行为逻辑描述。lVerilogHDL区分大小写区分大小写。也就是说大小写不同的标识符是不同的。也就是说大小写不同的标识符是不同的。此外,此外,VerilogHDL是自由

26、格式的,即结构可以跨越多行编写,也是自由格式的,即结构可以跨越多行编写,也可以在一行内编写。白空(新行、制表符和空格)没有特殊意义。可以在一行内编写。白空(新行、制表符和空格)没有特殊意义。l除了除了endmodule语句外语句外,每个语句和数据定义的最后必须有分号每个语句和数据定义的最后必须有分号。l可以用可以用/*.*/和和/.对对VerilogHDL程序的任何部分作注程序的任何部分作注释。释。9/1/202424模块的结构l“模块模块”(block)是是Verilog的基本设计单元的基本设计单元。l一个模块是由一个模块是由两部分两部分组成的,组成的,一部分描述接口一部分描述接口,另一部分

27、描述逻辑功能,另一部分描述逻辑功能,即定义输入是如何影响输出的。即定义输入是如何影响输出的。moduleblock(a,b,c,d);inputa,b;outputc,d;assignc=a|b;assignd=a&b;endmodulel程序模块和电路图符号是一致的,电路图符号的引脚也就是程序模块的程序模块和电路图符号是一致的,电路图符号的引脚也就是程序模块的接口。而程序模块描述了电路图符号所实现的逻辑功能。接口。而程序模块描述了电路图符号所实现的逻辑功能。9/1/202425模块的结构l从上面的例子可以看出:从上面的例子可以看出:l-Verilog模块结构完全嵌在模块结构完全嵌在modul

28、e和和endmodule声明语句之间;声明语句之间;l-每个每个Verilog程序包括四个主要部分:端口定义、程序包括四个主要部分:端口定义、I/O说明、内说明、内部信号声明、功能定义。部信号声明、功能定义。模块的端口定义:模块的端口定义:模块的端口声明了模块的输入输出口。其格式如下:模块的端口声明了模块的输入输出口。其格式如下:module模块名模块名(端口端口1,端口,端口2,端口,端口3,);如:如:modulesample(q,a,b,sel,clk,resetn);9/1/202426模块的结构lI/O说明:对输入输出端口的属性进行定义,包括端口的方向、说明:对输入输出端口的属性进行

29、定义,包括端口的方向、信号位宽等。信号位宽等。定义端子方向有如下语句:定义端子方向有如下语句:input(输入(输入端口端口)output(输出输出端口端口)inout(双向(双向端口端口)定义信号位宽:定义信号位宽:信号类型信号类型MSB:LSB信号名信号名如:如:input11:0address;inout7:0data;lI/O说明也可写在端口声明语句里,说明也可写在端口声明语句里,Verilog2001支持下面的描述支持下面的描述方式。方式。moduleadder_16(outputreg15:0sum,outputregcout,inputwirecin,inputwire15:0a

30、,b);9/1/202427模块的结构l内部信号说明:在模块内用到的和与端口有关的内部信号说明:在模块内用到的和与端口有关的wire和和reg变变量的声明。量的声明。l如:如:regwidth-1:0R变量变量1,R变量变量2。;。;lwirewidth-1:0W变量变量1,W变量变量2。;。;modulemodulesample(q,a,b,sample(q,a,b,selsel, ,clkclk, ,resetnresetn););inputinputa,b,a,b,selsel, ,clkclk, ,resetnresetn; ; outputoutput q;q; wirewire c

31、;c; /模块内信号线的定义模块内信号线的定义模块内信号线的定义模块内信号线的定义regreg q;q; /输出端口类型定义输出端口类型定义输出端口类型定义输出端口类型定义.endmoduleendmodule9/1/202428模块的结构l时延时延:VerilogHDL模型中的所有时延都根据时间单位定义。模型中的所有时延都根据时间单位定义。Assign#2Sum=AB;/#2指指2个时间单位。个时间单位。使用编译指令将时间单位与物理时间相关联。编译器指令需使用编译指令将时间单位与物理时间相关联。编译器指令需在模块描述前定义在模块描述前定义timescale1ns/100ps此语句说明时延时间

32、单位为此语句说明时延时间单位为1ns并且时间精度为并且时间精度为100ps(时间时间精度是指所有的时延必须被限定在精度是指所有的时延必须被限定在0.1ns内内)。如果此编译器指令所在的模块包含上面的连续赋值语句如果此编译器指令所在的模块包含上面的连续赋值语句,#2代表代表2ns。9/1/202429模块的结构l模块的功能定义可以用采用下面的模块的功能定义可以用采用下面的4种方式描述:种方式描述:l1)数据流方式数据流方式;l2)行为方式行为方式;l3)结构方式结构方式;l4)混合描述方式。混合描述方式。9/1/202430模块的结构数据流描述方式:数据流描述方式:用连续赋值语句用连续赋值语句“

33、assign”,只能描述组合逻辑。,只能描述组合逻辑。l连续赋值语句的语法为连续赋值语句的语法为:lassigndelayLHS_net=RHS_expression无论右边的操作数何时发生变化无论右边的操作数何时发生变化,右边表达式都重新计算右边表达式都重新计算,并且并且在指定的时延后赋给左边线网变量。在指定的时延后赋给左边线网变量。如果没有定义时延值如果没有定义时延值,缺省时延为缺省时延为0。9/1/202431模块的结构timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output0:3Z;wireAbar,Bbar;assig

34、n#1Abar=A;assign#1Bbar=B;。assign#2Z0=(Abar&Bbar&EN);assign#2Z1=(Abar&B&EN);assign#2Z2=(A&Bbar&EN);assign#2Z3=(A&B&EN);endmodulel连续赋值语句是隐式而非显式的建模方式。连续赋值语句是隐式而非显式的建模方式。l连续赋值语句是连续赋值语句是并发执行并发执行的,也就是说各语句的执行顺序与其在的,也就是说各语句的执行顺序与其在描述中出现的顺序无关。描述中出现的顺序无关。2-4解码器电路9/1/202432模块的结构行为描述方式行为描述方式:用类似软件程序中的各种算符,直接表示输

35、入输出信号之间的关系用类似软件程序中的各种算符,直接表示输入输出信号之间的关系的描述方法称为的描述方法称为行为描述行为描述。设计的行为功能使用下述过程语句结构描述:设计的行为功能使用下述过程语句结构描述:1)initial语句:此语句只执行一次。语句:此语句只执行一次。2)always语句:此语句总是循环执行语句:此语句总是循环执行,或者说重复执行。或者说重复执行。只有寄存器类型数据能够在这两种语句中被赋值。只有寄存器类型数据能够在这两种语句中被赋值。所有的所有的initial语句和语句和always语句在语句在0时刻并发执行。时刻并发执行。9/1/202433模块的结构用用always语句对

36、语句对1位全加器电路建模位全加器电路建模moduleFA_Seq(A,B,Cin,Sum,Cout);inputA,B,Cin;outputSum,Cout;regSum,Cout;regT1,T2,T3;always(AorBorCin)beginSum=(AB)Cin;T1=A&Cin;T2=B&Cin;T3=A&B;Cout=(T1|T2)|T3;endendmodule1位全加器电路9/1/202434模块的结构lalways语句中有一个与语句中有一个与事件控制事件控制(紧跟在字符紧跟在字符后面的表达式后面的表达式)。相关联的顺序过程相关联的顺序过程(begin-end对对)。l这意味

37、着只要这意味着只要A、B或或Cin上发生事件,即上发生事件,即A、B或或Cin之一的值发之一的值发生变化,顺序过程就执行。生变化,顺序过程就执行。l在在顺序过程中顺序过程中(begin-end对对)的语句顺序执行,并且在顺序过程执的语句顺序执行,并且在顺序过程执行结束后被挂起。行结束后被挂起。l顺序过程执行完成后,顺序过程执行完成后,always语句再次等待语句再次等待A、B或或Cin上发生的上发生的事件。事件。9/1/202435模块的结构linitial语句示例语句示例:ltimescale1ns/1nsmoduleTest;regPop,Pid;initialbeginPop=0;Pid

38、=0;#5Pop=1;#3Pid=1;#6Pop=0;#2Pid=0;endendmodulelinitial语句包含一个顺序过程。语句包含一个顺序过程。l这一顺序过程在这一顺序过程在0ns时开始执行,并时开始执行,并且在顺序过程中所有语句全部执行完且在顺序过程中所有语句全部执行完毕后毕后,initial语句永远挂起。语句永远挂起。l此语句只执行一次。此语句只执行一次。9/1/202436模块的结构l结构化描述方式: 在Verilog HDL中可使用如下方式描述结构:1) 内置门原语内置门原语(在门级在门级);2) 开关级原语(在晶体管级);3) 用户定义的原语(在门级);4) 模块实例模块实

39、例(创建层次结构创建层次结构)。通过使用线网来相互连接。9/1/202437模块的结构moduleFA_Str(A,B,Cin,Sum,Cout);inputA,B,Cin;outputSum,Cout;wireS1,T1,T2,T3;xorX1(S1,A,B);xorX2(Sum,S1,Cin);andA1(T3,A,B);andA2(T2,B,Cin);andA3(T1,A,Cin);orO1(Cout,T1,T2,T3);Endmodule门实例语句可以以任何顺序出现门实例语句可以以任何顺序出现1位全加器电路9/1/202438模块的结构l4位全加器可以使用位全加器可以使用4个个1位全加

40、器模块描述位全加器模块描述moduleFourBitFA(FA,FB,FCin,FSum,FCout);input3:0FA,FB;output3:0FSuminputFCin;inputFCout;wire1:3FTemp;FA_StrFA1(.A(FA1),.B(FB1),.Cin(FCin),.Sum(FSum1),.Cout(FTemp1);FA_StrFA2(.A(FA2),.B(FB2),.Cin(FTemp1),.Sum(FSum2),.Cout(FTemp2);FA_StrFA3(FA3,FB3,FTemp2,FSum3,FTemp3);FA_StrFA4(FA4,FB4,FT

41、emp3,FSum4,FCout);endmodule9/1/202439模块的结构l模块实例模块实例用于建模用于建模4位全加器。位全加器。l在模块实例语句中,在模块实例语句中,端口可以与名称或位置关联端口可以与名称或位置关联。l前两个实例前两个实例FA1和和FA2使用使用命名关联方式命名关联方式,也就是说,端口的名,也就是说,端口的名称和它连接的线网被显式描述(每一个的形式都为称和它连接的线网被显式描述(每一个的形式都为“.port_name(net_name))。)。l最后两个实例语句,实例最后两个实例语句,实例FA3和和FA4使用使用位置关联方式位置关联方式将端口与将端口与线网关联。这里

42、线网关联。这里关联的顺序很重要关联的顺序很重要,例如,在实例,例如,在实例FA4中,第一中,第一个个FA4与与FA_Str的端口的端口A连接,第二个连接,第二个FB4与与FA_Str的端口的端口B连接,余下的由此类推。连接,余下的由此类推。9/1/202440模块的结构混合描述方式:混合描述方式:结构的和行为的描述自由混合。模块描述中可以包含实结构的和行为的描述自由混合。模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及例化的门、模块实例化语句、连续赋值语句以及always语句。语句。moduleFA_Mix(A,B,Cin,Sum,Cout);inputA,B,Cin;outpu

43、tSum,Cout;regCout;regT1,T2,T3;wireS1;xorX1(S1,A,B);/门实例语句。门实例语句。always(AorBorCin)/always语句语句beginT1=A&Cin;T2=B&Cin;T3=A&B;Cout=(T1|T2)|T3;endassignSum=S1Cin;/连续赋值语句连续赋值语句endmodulel只要只要A或或B上有事件发生,门上有事件发生,门实例语句即被执行。实例语句即被执行。l只要只要A、B或或Cin上有事件发上有事件发生,就执行生,就执行always语句。语句。l只要只要S1或或Cin上有事件发生,上有事件发生,就执行连续赋值

44、语句。就执行连续赋值语句。9/1/202441模块的结构l理解要点:理解要点:如果用如果用Verilog模块实现一定的功能,首先应该清楚模块实现一定的功能,首先应该清楚哪些是同哪些是同时发生的时发生的,哪些是顺序发生的哪些是顺序发生的。“assign”语句语句、实例元件实例元件和和“always”块块描述的逻辑功能描述的逻辑功能是同时执行的,也就是是同时执行的,也就是并发并发的,如果把这三项写到一个的,如果把这三项写到一个VeriIog模块文件中去,它们的次序不会影响逻辑实现的功能。模块文件中去,它们的次序不会影响逻辑实现的功能。在在“always”模块内,逻辑是按照指定的模块内,逻辑是按照指

45、定的顺序执行顺序执行的。的。“always”块中的语句称为块中的语句称为“顺序语句顺序语句”。两个或更多的两个或更多的“always”模块也是同时执行的,但是模块内模块也是同时执行的,但是模块内部的语句是顺序执行的。部的语句是顺序执行的。9/1/202442测试平台Test Benchl测试平台测试平台是验证对象电路的工作状态是否正确的测试用模块。是验证对象电路的工作状态是否正确的测试用模块。l测试平台的作用是对对象电路的输入信号加上测试平台的作用是对对象电路的输入信号加上测试图形测试图形,并通过,并通过观察输出信号观察输出信号来验证电路是否正常工作。来验证电路是否正常工作。lVerilogH

46、DL不仅提供描述设计的能力,而且提供对激励、控制、不仅提供描述设计的能力,而且提供对激励、控制、存储响应和设计验证的建模能力。存储响应和设计验证的建模能力。被测模块被测模块激激励励和和控控制制信号信号输输 出出 响响 应应和验证和验证9/1/202443测试平台Test Bench电路仿真所需要的数据电路仿真所需要的数据l被测电路的被测电路的HDL描述描述。l测试平台的测试平台的HDL描述描述HDL仿真器仿真器将测试平台中描述的激励信号按照所定时间提供给将测试平台中描述的激励信号按照所定时间提供给被测电路。被测电路。对被测电路进行仿真。对被测电路进行仿真。将仿真后被测电路产生的输出信号以部波形

47、、数据将仿真后被测电路产生的输出信号以部波形、数据或文字的方式表示出来。或文字的方式表示出来。9/1/202444测试平台Test Benchl激励和控制可用初始化语句产生激励和控制可用初始化语句产生。l设计验证设计验证可以通过在初始化语句中写入相应的语句可以通过在初始化语句中写入相应的语句自动与期望的响应值比较自动与期望的响应值比较完成。完成。timescale1ns/1nsmoduleTop;/一个模块可以有一个空的端口列表。一个模块可以有一个空的端口列表。regPA,PB,PCi;wirePCo,PSum;FA_SeqF1(PA,PB,PCi,PSum,PCo);/正在测试的实例化模块:

48、正在测试的实例化模块:initialbegin:ONLY_ONCEreg2:0Pal;for(Pal=0;Pal8;Pal=Pal+1)BeginPA,PB,PCi=Pal;#5$display(“PA,PB,PCi=%b%b%b”,PA,PB,PCi,“:PCo,PSum=%b%b”,PCo,PSum);endendendmodule9/1/202445测试平台Test Benchl系统任务系统任务$display调用中的时延控制规定调用中的时延控制规定$display任务在任务在5个时间单位后执行。个时间单位后执行。这这5个时间单位基本上代表了逻辑处理时间。个时间单位基本上代表了逻辑处理时

49、间。lPal在初始化语句内被局部定义,初始化语句中的顺序过程(在初始化语句内被局部定义,初始化语句中的顺序过程(begin-end)必须)必须标记,标记,ONLY_ONCE是顺序过程标记。如果在顺序过程内没有局部声明的变量,是顺序过程标记。如果在顺序过程内没有局部声明的变量,就不需要该标记。就不需要该标记。l测试模块产生的输出:测试模块产生的输出: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=01

50、PA,PB,PCi=101:PCo,PSum=10PA,PB,PCi=110:PCo,PSum=10PA,PB,PCi=111:PCo,PSum=119/1/202446VerilogVerilog 语言中,字符串常常用于表示命令内需要显示的信息。语言中,字符串常常用于表示命令内需要显示的信息。用用“ “ ”括括起起来来的的一一行行字字符符串串,换换新新一一行行用用 “n” n” 字字符符, ,与与 C C 语语言一致。言一致。在字符串中可以用在字符串中可以用 C C 语言中的各种格式控制符,语言中的各种格式控制符, 如如: n : n 换行符换行符 t t 制表符制表符 字符字符 本身本身

51、字符字符 在字符串中可以用在字符串中可以用 C C 语言中的各种语言中的各种数值型式控制符数值型式控制符, ,如:如: %b(%b(二二进进制制), ), %o(%o(八八进进制制) ), %d(%d(十十进进制制), ), %h(%h(十十六六进进制制), ), %t%t( (时间类型时间类型) ),%s (%s (字符串类型字符串类型)字符串9/1/202447标识符l所谓所谓标识别符标识别符就是用户为程序描述中的就是用户为程序描述中的Verilog对象所起的名字。对象所起的名字。l标识符可以是任意一组字母、数字、标识符可以是任意一组字母、数字、$符号和符号和_(下划线下划线)符号的组合,

52、符号的组合,但但标识符的第一个字符必须是字母或者下划线标识符的第一个字符必须是字母或者下划线。l标识符最长可以达到标识符最长可以达到1023个字符。个字符。l模块名、端口名和实例名都是标识符。模块名、端口名和实例名都是标识符。lVerilog语言是大小写敏感的,因此语言是大小写敏感的,因此sel和和SEL是两个不同的标识符。是两个不同的标识符。9/1/202448合法和非法标识符 l合法的:合法的:lshift_reg_albusa_indexlbus263非法的:非法的:34net 34net /不能用数字开头a*a*b_netb_net /不能含有非字母符号*n263 n263 /不能含有

53、非字母符号9/1/202449特殊符号 “#”l特殊符号特殊符号“#”常用来表示延迟常用来表示延迟:l在过程赋值语句时表示延迟。在过程赋值语句时表示延迟。例:例:initialbegin#10rst=1;#50rst=0;endl在门级实例引用时表示延迟。在门级实例引用时表示延迟。例:例:not#1not1(nsel,sel);and#2and2(a1,a,nsel);l在模块实例引用时表示在模块实例引用时表示参数传递参数传递。9/1/202450$: 系统任务和函数l$符号表示符号表示Verilog的系统任务和函数的系统任务和函数常用的系统任务和函数有下面几种:常用的系统任务和函数有下面几种

54、:$time/找到当前的仿真时间找到当前的仿真时间$display,$monitor/显示和监视信号值的变化显示和监视信号值的变化$stop/暂停仿真暂停仿真$finish/结束仿真结束仿真-例:例:initial$monitor($time,”a=%b,b=%b”,a,b);/每当每当a或或b值变化时该系统任务都显示当前的仿真时刻并分别用值变化时该系统任务都显示当前的仿真时刻并分别用二进制和十六进制显示信号二进制和十六进制显示信号a和和b的值的值9/1/202451Verilog 的的四种四种逻辑值逻辑值0 0、低、伪、逻辑低、地、低、伪、逻辑低、地01XZ0bufbufbufbufif11

55、 1、高、真、逻辑高、电源、高、真、逻辑高、电源X X、不确定:逻辑冲突无法确定其逻辑值、不确定:逻辑冲突无法确定其逻辑值HiZHiZ、高阻抗、三态、无驱动源、高阻抗、三态、无驱动源 9/1/202452Verilog 的四种逻辑值l0、1、x、z这四种值的解释都这四种值的解释都内置于语言中内置于语言中。l在门的输入或一个表达式中的为在门的输入或一个表达式中的为“z”的值通常解释成的值通常解释成“x”。此外,。此外,x值和值和z值都是不分大小写的值都是不分大小写的,也就是,也就是说,值说,值0x1z与值与值0X1Z相同。相同。lVerilogHDL中的常量是由以上这四类基本值组成的。中的常量是由以上这四类基本值组成的。9/1/202453

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号