VerilogHDL简明教程Word格式.docx

上传人:b****6 文档编号:15954366 上传时间:2022-11-17 格式:DOCX 页数:97 大小:154.94KB
下载 相关 举报
VerilogHDL简明教程Word格式.docx_第1页
第1页 / 共97页
VerilogHDL简明教程Word格式.docx_第2页
第2页 / 共97页
VerilogHDL简明教程Word格式.docx_第3页
第3页 / 共97页
VerilogHDL简明教程Word格式.docx_第4页
第4页 / 共97页
VerilogHDL简明教程Word格式.docx_第5页
第5页 / 共97页
点击查看更多>>
下载资源
资源描述

VerilogHDL简明教程Word格式.docx

《VerilogHDL简明教程Word格式.docx》由会员分享,可在线阅读,更多相关《VerilogHDL简明教程Word格式.docx(97页珍藏版)》请在冰豆网上搜索。

VerilogHDL简明教程Word格式.docx

因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。

语言从C编程语言中继承了多种操作符和结构。

VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。

但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。

当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

历史:

VerilogHDL语言最初是于1983年由GatewayDesignAutomation公司为其模拟器产品开发的硬件建模语言。

那时它只是一种专用语言。

由于他们的模拟、仿真器产品的广泛使用,VerilogHDL作为一种便于使用且实用的语言逐渐为众多设计者所接受。

在一次努力增加语言普及性的活动中,VerilogHDL语言于1990年被推向公众领域。

OpenVerilogInternational(OVI)是促进Verilog发展的国际性组织。

1992年,OVI决定致力于推广VerilogOVI标准成为IEEE标准。

这一努力最后获得成功,Verilog语言于1995年成为IEEE标准,称为IEEEStd1364-1995。

完整的标准在Verilog硬件描述语言参考手册中有详细描述。

主要能力:

下面列出的是Verilog硬件描述语言的主要能力:

*基本逻辑门,例如and、or和nand等都内置在语言中。

*用户定义原语(UDP)创建的灵活性。

用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。

*开关级基本结构模型,例如pmos和nmos等也被内置在语言中。

*提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。

*可采用三种不同方式或混合方式对设计建模。

这些方式包括:

行为描述方式—使用过程化结构建模;

数据流方式—使用连续赋值语句方式建模;

结构化方式—使用门和模块实例语句描述建模。

*VerilogHDL中有两类数据类型:

线网数据类型和寄存器数据类型。

线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。

*能够描述层次设计,可使用模块实例结构描述任何层次。

*设计的规模可以是任意的;

语言不对设计的规模(大小)施加任何限制。

*VerilogHDL不再是某些公司的专有语言而是IEEE标准。

*人和机器都可阅读Verilog语言,因此它可作为EDA的工具和设计者之间的交互语言。

*VerilogHDL语言的描述能力能够通过使用编程语言接口(PLI)机制进一步扩展。

PLI是允许外部函数访问Verilog模块内信息、允许设计者与模拟器交互的例程集合。

*设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,包括进程和队列级。

*能够使用内置开关级原语在开关级对设计完整建模。

*同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。

*VerilogHDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。

这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。

*在行为级描述中,VerilogHDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。

*能够使用门和模块实例化语句在结构级进行结构描述。

*VerilogHDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。

*VerilogHDL还具有内置逻辑函数,例如&

(按位与)和(按位或)。

*高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。

*可以显式地对并发和定时进行建模。

*提供强有力的文件读写能力。

*语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;

例如,事件队列上的事件顺序在标准中没有定义。

习题

1.VerilogHDL是在哪一年首次被IEEE标准化的?

2.VerilogHDL支持哪三种基本描述方式?

3.可以使用VerilogHDL描述一个设计的时序吗?

4.语言中的什么特性能够用于描述参数化设计?

5.能够使用VerilogHDL编写测试验证程序吗?

6.VerilogHDL是由哪个公司最先开发的?

7.VerilogHDL中的两类主要数据类型什么?

8.UDP代表什么?

9.写出两个开关级基本门的名称。

10.写出两个基本逻辑门的名称。

第二节VerilogHDL入门指南

本章提供VerilogHDL语言的速成指南。

2.1模块

  模块是Verilog的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。

一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述;

设计的数据流行为使用连续赋值语句进行描述;

时序行为使用过程结构描述。

一个模块可以在另一个模块中调用。

  一个模块的基本语法如下:

modulemodule_name(port_list);

Declarations:

reg,wire,parameter, 

input,output,inout, 

function,task,... 

Statements:

Initialstatement

Alwaysstatement

Moduleinstantiation

Gateinstantiation

UDPinstantiation

Continuousassignment

endmodule

  模块的定义从关键字module开始,到关键字endmodule结束,每条VerilogHDL语句以“;

”做为结束(块语句、编译向导、endmodule等少数除外)。

一个完整的Verilog模块由以下五个部分组成:

1.模块定义行:

2.说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。

语句定义设计的功能和结构。

说明部分和语句可以散布在模块中的任何地方;

但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。

为了使模块描述清晰和具有良好的可读性,最好将所有的说明部分放在语句前。

说明部分包括:

寄存器,线网,参数:

reg,wire,parameter

端口类型说明行:

input,output,inout

函数、任务:

function,task,等

3.描述体部分:

这是一个模块最重要的部分,在这里描述模块的行为和功能,子模块的调用和连接,逻辑门的调用,用户自定义部件的调用,初始态赋值,always块,连续赋值语句等等。

4.结束行,以endmodule结束,注意后面没有分号了。

  以下为建模一个半加器电路的模块的简单实例。

moduleHalfAdder(A,B,Sum,Carry);

inputA,B;

outputSum,Carry;

assign#2Sum=A^B;

assign#3Carry=A&

B;

  模块的名字是HalfAdder。

模块有4个端口:

两个输入端口A和B,两个输出端口Sum和Carry。

由于没有定义端口的位数,所有端口大小都为1位;

同时,由于没有各端口的数据类型说明,这四个端口都是线网数据类型。

模块包含两条描述半加器数据流行为的连续赋值语句。

从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。

每条语句的执行顺序依赖于发生在变量A和B上的事件。

  在模块中,可用下述方式描述一个设计:

  1)数据流方式;

  2)行为方式;

  3)结构方式;

  4)上述描述方式的混合。

  下面几节通过实例讲述这些设计描述方式。

不过有必要首先对VerilogHDL的时延作简要介绍。

2.2时延

  VerilogHDL模型中的所有时延都根据时间单位定义。

下面是带时延的连续赋值语句实例。

时间单位是由timescale定义的,timescale将在后面讲述。

  assign#2Sum=A^B;

#2指2个时间单位。

  使用编译指令将时间单位与物理时间相关联。

这样的编译器指令需在模块描述前定义,如下所示:

  `timescale1ns/100ps

此语句说明时延时间单位为1ns并且时间精度为100ps(时间精度是指所有的时延必须被限定在0.1ns内)。

如果此编译器指令所在的模块包含上面的连续赋值语句,#2代表2ns。

  如果没有这样的编译器指令,VerilogHDL模拟器会指定一个缺省时间单位。

IEEEVerilogHDL标准中没有规定缺省时间单位。

2.3数据流描述方式

  用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋值语句。

在连续赋值语句中,某个值被指派给线网变量。

连续赋值语句的语法为:

assign[delay]LHS_net=RHS_expression;

右边表达式使用的操作数无论何时发生变化,右边表达式都重新计算,并且在指定的时延后变化值被赋予左边表达式的线网变量。

时延定义了右边表达式操作数变化与赋值给左边表达式之间的持续时间。

如果没有定义时延值,缺省时延为0。

下面的例子显示了使用数据流描述方式对2-4解码器电路的建模的实例模型。

`timescale1ns/1ns

moduleDecoder2x4(A,B,EN,Z);

inputA,B,EN;

output[0:

3]Z;

wireAbar,Bbar;

assign#1Abar=~A;

//语句1。

 

assign#1Bbar=~B;

//语句2。

assign#2Z[0]=~(Abar&

Bbar&

EN);

//语句3。

assign#2Z[1]=~(Abar&

B&

//语句4。

assign#2Z[2]=~(A&

//语句5。

assign#2Z[3]=~(A&

//语句6。

  以反引号“`”开始的第一条语句是编译器指令,编译器指令`timescale将模块中所有时延的单位设置为1ns,时间精度为1ns。

例如,在连续赋值语句中时延值#1和#2

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

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1