华为verilog教程资料下载.pdf
- 文档编号:5980069
- 上传时间:2023-05-05
- 格式:PDF
- 页数:41
- 大小:370.24KB
华为verilog教程资料下载.pdf
《华为verilog教程资料下载.pdf》由会员分享,可在线阅读,更多相关《华为verilog教程资料下载.pdf(41页珍藏版)》请在冰点文库上搜索。
算法级不需要包含时序信息。
2.RTL级设计:
用数据流在寄存器间传输的模式来对设计进行描述。
3.门级:
用逻辑级的与、或、非门等门级之间的连接对设计进行描述。
4.开关级:
用晶体管和寄存器及他们之间的连线关系来对设计进行描述。
算法级是高级的建模,一般对特大型设计或有较复杂的算法时使用,特别是通讯方面的一些系统,通过算法级的建模来保证设计的系统性能。
在算法级通过后,再把算法级用RTL级进行描述。
门级一般对小型设计可适合。
开关级一般是在版图级进行。
2.2硬件描述语言硬件描述语言在传统的设计方法中,当设计工程师设计一个新的硬件、一个新的数字电路或一个数字逻辑系统时,他或许在CAE工作站上做设计,为了能在CAE工作站做设计,设计者必须为设计画一张线路图,通常地,线路图是由表示信号的线和表示基本设计单元的符号连在一起组成线路图,符号取自设计者用于构造线路图的零件库。
若设计者是用标准逻辑器件(如74系列等)做板极设计线路图,那么在线路图中,符号取自标准逻辑零件符号库;
若设计是进行ASIC设计,则这些符号取自ASIC库的可用的专用宏单元。
这就是传统的原理图设计方法。
对线路图的逻辑优化,设计者或许利用一些EDA工具或者人工地进行逻辑的布尔函数逻辑优化。
为了能够对设计进行验证,设计者必须通过搭个硬件平台(如电路板),对设计进行验证。
随着电子设计技术的飞速发展,设计的集成度、复杂度越来越高,传统的设计方法已满足不了设计的要求,因此要求能够借助当今先进的EDA工具,使用一种描述语言,对数字电路和数字逻辑系统能够进行形式化的描述,这就是硬件描述语言。
硬件描述语言HDL(HardwareDescriptionLanguage)是一种用形式化方法来描述数字电路和数字逻辑系统的语言。
数字逻辑电路设计者可利用这种语言来描述自己的设计思想,然后利用EDA工具进行仿真,再自动综合到门级电路,最后用ASIC或FPGA实现其功能。
举个例子,在传统的设计方法中,对2输入的与门,我们可能需到标准器件库中调个74系列的器件出来,但在硬件描述语言中,“&
”就是一个与门的形式描述,“C=A&
B”就是一个2输入与门的描述。
而“and”就是一个与门器件。
硬件描述语言发展至今已有二十多年历史,当今业界的标准中(IEEE标准)主要有VHDL和VerilogHDL这两种硬件描述语言。
2.3设计方法学设计方法学当前的ASIC设计有多种设计方法,但一般地采用自顶向下的设计方法。
随着技术的发展,一个芯片上往往集成了几十万到几百万个器件,传统的自底向上的设计方法已不太现实。
因此,一个设计往往从系统级设计开始,把系统划分成几个大的基本的功能模块,每个功能模块再按一定的规则分成下一个层次的基本单元,如此一直划分下去。
自顶向下的设计方法可用下面的树状结构表示:
绝密请输入文档编号VerilogHDL入门教程2004-08-16第6页,共41页版权所有,侵权必究系统级的顶层模块模块A模块B模块C模块B1模块B2模块C1图1TOP-DOWN设计思想通过自顶向下的设计方法,可实现设计的结构化,使一个复杂的系统设计可由多个设计者分工合作;
还可以实现层次化的管理。
2.4VerilogHDL简介简介VerilogHDL是一种硬件描述语言,用于从算法级、RTL级、门级到开关级的多种抽象设计层次的数字系统建模。
被建模的数字系统对象的复杂性可介于简单的门级和完整的电子数字系统之间。
数字系统可按层次描述。
2.4.1历史VerilogHDL语言最初是于1983年由GatewayDesignAutomation公司为其模拟器产品开发的硬件建模语言。
那时它只是一种专用语言。
由于他们的模拟、仿真器产品的广泛使用,VerilogHDL作为一种便于使用且实用的语言逐渐为众多设计者所接受。
在一次努力增加语言普及性的活动中,VerilogHDL语言于1990年被推向公众领域。
OpenVerilogInternational(OVI)是促进Verilog发展的国际性组织。
1992年,OVI决定致力于推广VerilogOVI标准成为IEEE标准。
这一努力最后获得成功,Verilog语言于1995年成为IEEE标准,称为IEEEStd13641995。
完整的标准在Verilog硬件描述语言参考手册中有详细描述。
2.4.2能力对初学者,可先大致了解一下VerilogHDL所提供的能力,掌握VerilogHDL语言的核心子集就可以了。
1.概述VerilogHDL语言具有下述描述能力:
设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言。
此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。
语言从C编程语言中继承了多种操作符和结构。
VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。
但是,Verilog绝密请输入文档编号VerilogHDL入门教程2004-08-16第7页,共41页版权所有,侵权必究HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。
当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。
2.主要功能list?
基本逻辑门,例如and、or和nand等都内置在语言中。
?
开关级基本结构模型,例如pmos和nmos等也被内置在语言中。
可采用三种不同方式或混合方式对设计建模。
这些方式包括:
行为描述方式使用过程化结构建模;
数据流方式使用连续赋值语句方式建模;
结构化方式使用门和模块实例语句描述建模。
VerilogHDL中有两类数据类型:
线网数据类型和寄存器数据类型。
线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。
能够描述层次设计,可使用模块实例结构描述任何层次。
设计的规模可以是任意的;
语言不对设计的规模(大小)施加任何限制。
VerilogHDL不再是某些公司的专有语言而是IEEE标准。
人和机器都可阅读Verilog语言,因此它可作为EDA的工具和设计者之间的交互语言。
设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级。
能够使用内置开关级原语在开关级对设计完整建模。
同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。
VerilogHDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。
这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。
在行为级描述中,VerilogHDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。
能够使用门和模块实例化语句在结构级进行结构描述。
对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。
下图显示了VerilogHDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。
开关算法RTL门门开关图2混合设计层次建模示意图绝密请输入文档编号VerilogHDL入门教程2004-08-16第8页,共41页版权所有,侵权必究3VerilogHDL建模概述建模概述在数字电路设计中,数字电路可简单归纳为两种要素:
线和器件。
线是器件管脚之间的物理连线;
器件也可简单归纳为组合逻辑器件(如与或非门等)和时序逻辑器件(如寄存器、锁存器、RAM等)。
一个数字系统(硬件)就是多个器件通过一定的连线关系组合在一块的。
因此,VerilogHDL的建模实际上就是如何使用HDL语言对数字电路的两种基本要素的特性及相互之间的关系进行描述的过程。
下面通过一些实例,以便对VerilogHDL的设计建模有个大概的印象。
3.1模块模块模块(module)是Verilog的基本描述单位,用于描述某个设计的功能或结构及与其他模块通信的外部端口。
模块在概念上可等同一个器件就如我们调用通用器件(与门、三态门等)或通用宏单元(计数器、ALU、CPU)等,因此,一个模块可在另一个模块中调用。
一个电路设计可由多个模块组合而成,因此一个模块的设计只是一个系统设计中的某个层次设计,模块设计可采用多种建模方式。
3.1.1简单事例下面先介绍几个简单的VerilogHDL程序。
例1加法器moduleaddr(a,b,cin,count,sum);
input2:
0a;
0b;
inputcin;
outputcount;
output2:
0sum;
assigncount,sum=a+b+cin;
endmodule该例描述一个3位加法器,从例子可看出整个模块是以module开始,endmodule结束。
例2比较器modulecompare(equal,a,b);
input1:
0a,b;
/declaretheinputsignal;
outputequare;
/declaretheoutputsignal;
assignequare=(a=b)?
1:
0;
/*ifa=b,output1,otherwise0;
*/endmodule绝密请输入文档编号VerilogHDL入门教程2004-08-16第9页,共41页版权所有,侵权必究该例描述一个比较器,从上可看到,/*.*/和/.表示注释部分。
注释只是为了方便设计者读懂代码,对编译并不起作用。
例3三态驱动器modulemytri(din,d_en,d_out);
inputdin;
inputd_en;
outputd_out;
/-Enteryourstatementshere-/assignd_out=d_en?
din:
bz;
endmodulemoduletrist(din,d_en,d_out);
/-statementshere-/mytriu_mytri(din,d_en,d_out);
endmodule该例描述了一个三态驱动器。
其中三态驱动门在模块mytri中描述,而在模块trist中调用了模块mytri。
模块mytri对trist而言相当于一个已存在的器件,在trist模块中对该器件进行实例化,实例化名u_mytri。
3.1.2模块的结构通过上面的实例可看出,一个设计是由一个个模块(module)构成的。
一个模块的设计如下:
1、模块内容是嵌在module和endmodule两个语句之间。
每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最后通过由顶层模块调用子模块来实现整体功能,这就是Top-Down的设计思想,如3.3.1的例3。
2、模块包括接口描述部分和逻辑功能描述部分。
这可以把模块与器件相类比。
模块的端口定义部分:
如上例:
moduleaddr(a,b,cin,count,sum);
其中module是模块的保留字,addr是模块的名字,相当于器件名。
()内是该模块的端口声明,定义了该模块的管脚名,是该模块与其他模块通讯的外部接口,相当于器件的pin。
模块的内容,包括I/O说明,内部信号、调用模块等的声明语句和功能定义语句。
I/O说明语句如:
其中的input、output、inout是保留字,定义了管脚信号的流向,n:
0表示该信号的位宽(总线或单根信号线)。
绝密请输入文档编号VerilogHDL入门教程2004-08-16第10页,共41页版权所有,侵权必究逻辑功能描述部分如:
assignd_out=d_en?
mytriu_mytri(din,d_en,d_out);
功能描述用来产生各种逻辑(主要是组合逻辑和时序逻辑,可用多种方法进行描述,具体的用法下面章节有介绍),还可用来实例化一个器件,该器件可以是厂家的器件库也可以是我们自己用HDL设计的模块(相当于在原理图输入时调用一个库元件)。
在逻辑功能描述中,主要用到assign和always两个语句。
3、对每个模块都要进行端口定义,并说明输入、输出口,然后对模块的功能进行逻辑描述,当然,对测试模块,可以没有输入输出口。
4、VerilogHDL的书写格式自由,一行可以写几个语句,也可以一个语句分几行写。
具体由代码书写规范约束。
5、除endmodule语句外,每个语句后面需有分号表示该语句结束。
3.1.3模块语法1.一个模块的基本语法如下:
一个模块的基本语法如下:
modulemodule_name(port1,port2,.);
/Declarations:
input,output,inout,reg,wire,parameter,function,task,./Statements:
InitialstatementAlwaysstatementModuleinstantiationGateinstantiationContinuousassignmentendmodule模块的结构需按上面的顺序进行,声明区用来对信号方向、信号数据类型、函数、任务、参数等进行描述。
语句区用来对功能进行描述如:
器件调用(Moduleinstantiation)等。
2.书写语法建议一个模块用一个文件;
模块名与文件名要同名;
一行一句语句。
信号方向按输入、输出、双向顺序描述。
设计模块时可尽量考虑采用参数化,提高设计的重用。
以上是初学者的建议,具体的或深入的方面可看相关的文档。
下面的有关语法建议类似。
3.2时延时延绝密请输入文档编号VerilogHDL入门教程2004-08-16第11页,共41页版权所有,侵权必究信号在电路中传输会有传播延时等,如线延时、器件延时。
时延就是对延时特性的HDL描述。
举例如下:
assign#2B=A;
表示B信号在2个时间单位后得到A信号的值。
如下图:
A:
2B:
图3在VerilogHDL中,所有时延都必须根据时间单位进行定义,定义方式为在文件头添加如下语句:
timescale1ns/100ps其中timescale是VerilogHDL提供的预编译处理命令,1ns表示时间单位是1ns,100ps表示时间精度是100ps。
根据该命令,编译工具才可以认知#2为2ns。
在VerilogHDL的IEEE标准中没有规定时间单位的缺省值,由各模拟工具确定。
因此,在写代码时必须确定。
3.3三种建模方式三种建模方式在HDL的建模中,主要有结构化描述方式、数据流描述方式和行为描述方式,下面分别举例说明三者之间的区别。
3.3.1结构化描述方式结构化的建模方式就是通过对电路结构的描述来建模,即通过对器件的调用(HDL概念称为例化),并使用线网来连接各器件的描述方式。
这里的器件包括VerilogHDL的内置门如与门and,异或门xor等,也可以是用户的一个设计。
结构化的描述方式反映了一个设计的层次结构。
例1:
一位全加器图4一位全加器的结构图代码:
moduleFA_struct(A,B,Cin,Sum,Count);
inputA;
inputB;
inputCin;
绝密请输入文档编号VerilogHDL入门教程2004-08-16第12页,共41页版权所有,侵权必究outputSum;
outputCount;
wireS1,T1,T2,T3;
/-statements-/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该实例显示了一个全加器由两个异或门、三个与门、一个或门构成。
S1、T1、T2、T3则是门与门之间的连线。
代码显示了用纯结构的建模方式,其中xor、and、or是VerilogHDL内置的门器件。
以xorx1(S1,A,B)该例化语句为例:
xor表明调用一个内置的异或门,器件名称xor,代码实例化名x1(类似原理图输入方式)。
括号内的S1,A,B表明该器件管脚的实际连接线(信号)的名称,其中A、B是输入,S1是输出。
其他同。
例2:
两位的全加器两位的全加器可通过调用两个一位的全加器来实现。
该设计的设计层次示意图和结构图如下:
Four_bit_FAFA_structFA_structABCinSumCountFAABCinSumCountFAFour_bit_FAFA_struct_structFCinFBFSumFCount图5两位全加器的结构示意图代码:
moduleFour_bit_FA(FA,FB,FCin,FSum,FCout);
parameterSIZE=2;
inputSIZE:
1FA;
绝密请输入文档编号VerilogHDL入门教程2004-08-16第13页,共41页版权所有,侵权必究inputSIZE:
1FB;
inputFCin;
outputSIZE:
1FSum;
outputFCout;
wireFTemp;
FA_structFA1(.A(FA1),.B(FB1),.Cin(FCin),.Sum(FSum1),.Cout(Ftemp);
FA_structFA2(.A(FA2),.B(FB2),.Cin(FTemp),.Sum(FSum2),.Cout(FCount);
endmodule该实例用结构化建模方式进行一个两位的全加器的设计,顶层模块Four_bit_FA调用了两个一位的全加器FA_struct。
在这里,以前的设计模块FA_struct对顶层而言是一个现成的器件,顶层模块只要进行例化就可以了。
注意这里的例化中,端口映射(管脚的连线)采用名字关联,如.A(FA2),其中.A表示调用器件的管脚A,括号中的信号表示接到该管脚A的电路中的具体信号。
wire保留字表明信号Ftemp是属线网类型(下面有具体描述)。
另外,在设计中,尽量考虑参数化的问题。
器件的端口映射必须采用名字关联。
3.3.2数据流描述方式数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。
最基本的机制就是用连续赋值语句。
在连续赋值语句中,某个值被赋给某个线网变量(信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 verilog 教程