数字逻辑基础 VerilogHDL语言基础

发布时间:2024-10-30

第四章Verilog HDL语言基础

4.1 什么是Verilog HDL?Verilog HDL 是 目 前 应 用 最 为 广 泛 的 硬 件 描 述 语 言 。

Verilog HDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。 Verilog HDL适合算法级,寄存器级,逻辑级,开关级、系 统级和版图级等各个层次的设计和描述。 Verilog HDL进行设计最大的优点是其工艺无关性。这使得

工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束 条件,即可设计出实际电路。2

Verilog HDL模块化设计理念Verilog HDL 支持以模块集合的形式构造数字系统。利用层 次化、结构化的设计方法,一个完整的硬件设计任务可以划分成 若干个模块,每一个模块又可以划分成若干个子模块,子模块还 可以进一步划分。 各个模块可以是自主开发的模块,也可以是从商业渠道购买 的具有知识产权的IP核。

4.2 VerilogHDL基础知识Verilog HDL的运算符与C语言的运算符几乎完全相同,但数 据类型是Verilog HDL特有的。

在实际应用中,要认真体会、深入理解硬件描述语言与软件编程语言的本质区别。

4.2.1 VerilogHDL模块结构模块是 Verilog HDL 的基本单元,用于描述某个设计的功能 或结构以及与其他模块通信的外部端口。 模块的实际意义是代表硬件电路上的逻辑实体,每个模块都 实现特定的功能。4

模块的基本结构5

模块结构举例VerilogHDL 模块结构完全嵌在 module 和 endmodule 关键字 之间,包括四部分,即模块声明、端口定义、信号类型说明和 逻辑功能定义。

Verilog HDL语言描述F=AB+CD6

1.模块声明模块声明包括模块名和模块的端口列表。其格式如下: Module … 模块名(端口名1/端口名2,…,端口名n); //模块的其他部分

endmodule

//模块结束关键字

模块端口列表中端口名的排列顺序是任意的。

2.端口(Port)定义端口是模块与外界或其他模块进行连接、通信的信号线。 因此,对端口列表中哪些端口是输入端口、哪些端口是输出端 口要进行明确说明。 在 Verilog HDL 中有 3 种端口类型;输入端口、输出端口、

双向端口(既可用作输入也可用作输出)。

1)用input定义输入端口,格式如下: input [位宽] 端口名1,端口名2,…,端口名n;

2)用output定义输出端口,格式如下:

output

[位宽]

端口名1,端口名2,…,端口名n;

3)用inout定义双向端口,格式如下: inout [位宽] 端口名1,端口名2,…,端口名n;

使用上述3种定义格式时应注意: .位宽的说明应遵循[n:1]或[n-1:0]的规则;

.不同位宽的端

口应分别定义;.位宽说明省略时,默认值为1。9

3.数据(信号)类型说明在模块中用到的所有信号(包括端口信号、节点信号、中间 变量等 ) 都必须进行数据类型的定义。 VerilogHDL 中提供了各 种信号类型,最常用的是连线型 (wire) 、寄存器型 (reg) 和参 数型(parameter)。 数据类型定义的实例: reg [4:1) cout; //定义信号cout的数据类型为4位寄存器(reg)型 wire a,b,c; //定义信号a,b,c为1位连线(wire)型 注意: 输入端口和双向端口不能说明为寄存器型;端口信号的数 据类型说明缺省时,EDA的综合器将其默认为wire型。10

4.逻辑功能定义模块中的核心部分是逻辑功能的定义。

Verilog HDL 提供了多种逻辑功能的定义方式,其中调用逻 辑 门 元 件 ( 元 件 例 化 ) 、 持 续 赋 值 语 句 (assign) 、 过 程 块

(always)3种定义方式比较常用。相对应在模块设计中的3种描述方法:门级描述方式、数据 流描述方式、行为描述方式,以及以上混合描述方式。

1)通过调用逻辑门元件(元件例化)定义通过调用Verilog HDL提供的内置逻辑门元件,按照元件模 型,进行它们之间的信号连接,完成逻辑电路的结构描述。 采用这种方法可以将传统的电路原理图转换成Verilog HDL 文本形式。

例1:and myand3(out,a,b) 例2: and u3(f,a,b,c);

2)用持续赋值语句(assign)定义assign 语句一般用在数据流描述方式中,常用来描述组合 逻辑电路的功能,称为持续赋值方式。 这种描述方式比较简单,只需将传统逻辑表达式转换成符 合VerilogHDL规范的表达式放在关键字assign后面即可。 例如: assign F=~(A&B)|(C&D);

3)用过程块(always)定义行为描述方式中采用 always 定义逻辑功能时,可不关心电 路结构,只描述电路的行为,即在某种输入情况下产生相应的 输出。 硬件描述语言支持与逻辑电路结构无关的行为描述。行为

描述转化为具体电路结构的工作由EDA工具完成。13

例、用always过程块描述一个4位计数器。 module output counter(out,reset,clk); [4:1] out;

inputreg

reset,clk;[4:1] out; @(posedge clk)

always begin

if(reset)

out<=0;

elseend

out<=out+1;

endmodule14

4.2.2 词法表示

    精彩图片

    热门精选

    大家正在看