Verilog HDL学习 您所在的位置:网站首页 文件名由哪两个部分组成 Verilog HDL学习

Verilog HDL学习

2024-06-02 19:43| 来源: 网络整理| 查看: 265

1.1 模块的结构

Verilog的基本设计单元是模块(block)。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。

例:

module block(a,b,c,d);

input a,b;

output c,d;

assign c = a | b;

assign d = a & b;

endmodule

从这个例子可以看出,Verilog结构位于module和endmodule声明语句之间,每个程序有4个主要部分:端口定义、I/O说明、内部信号声明和功能定义。

1.1.1 模块的端口定义

模块的端口声明了模块的输入输出口。其格式如下:

module 模块名(口1,口2,口3,口4,.......);

模块的端口表示的是模块的输入和输出口名,也就是说它与别的模块联系端口的标识。在模块被引用时,在引用的模块中,有些信号要输入到被引用的模块中,有的信号需要从被引用的模块中取出来。在引用模块时其端口可以用两种方法连接。

(1)在引用时,严格按照模块定义的端口顺序来连接,不用标明原模块定义时规定的端口名,例如:

模块名(连接端口1信号名,连接端口2信号名,连接端口3信号名,.......)

(2)在引用时用“.”符号,标明原模块是定义时规定的端口名,例如:

模块名(.端口1名(连接信号1名),.端口2名(连接信号2名),.端口3名(连接信号3名).......)

这样表示的好处是在于可以用端口名与被引用的模块的端口相对应,而不必严格按照端口顺序对应,提高了程序的可读性和可移植性。

3.1.2 模块内容

1、I/O说明的格式

输入口:input [信号位宽-1:0]端口名1;

               input [信号位宽-1:0]端口名2;

输出口:outputp[信号位宽-1:0]端口名1

              outputp[信号位宽-1:0]端口名2

输入/输出口:inout[信号位宽-1:0]端口1

                       inout[信号位宽-1:0]端口2

IO说明也可以写在端口声明语句里,如module modulename (input a,output b,inout c)

2、内部信号说明

在模块内用到的和端口有关的wire和reg类型变量的声明

如:reg[width-1:0]R变量1,变量2....

3、功能定义

模块中最重要的部分是逻辑功能定义部分,有三种方法可在模块中产生逻辑。

(1)用assign声明语句,如assign a = b &c

(2)用实例元件 如and #2 u1(a,q,b)

(3)用always 块,如always @(posedge clk or posedge clr)....

4、要点总结

Verilog初学者一定要深入理解并记住

(1)在模块中所有过程块(如initial块;always块)、连续赋值语句、实例引用都是并行的

(2)它们表示的是一种通过变量名互相连接的关系

(3)在同一模块中这三者出现的先后顺序没有关系

(4)只有连续赋值语句assign和实例引用语句可以独立于过程快而存在于模块的功能定义部分,

以上四点和C语言有很大的不同,许多与C语言类似的语句只能出现在过程块中,而不能随意的出现在模块功能定义的范围内。

1.2 数据类型及其常量和变量

Verilog HDL总共有19种数据类型,数据类型是用来表示数字电路硬件中的数据存储和传送元素的。

先介绍4种最基本的数据类型,它们是:reg型、wire型、integer型、parameter型

其余类型是:large型、medium型、scalared型、time型、small型、tri型、tril型、triand型、trior型、trireg型、vectored型、wand型、wor型

2.1 常量

在程序中,其值不能被改变的量称为常量。

1、数字

(1)整数 在verilog种,整型常量即整常数有以下四种进制表示形式:

1)二进制数(b或B)

2)十进制数(d或D)

3)十六至进制数(h或H)

4)八进制数(o或O)

数字表达方式有以下3种:

1),这是一种全面描述的方式

2)在这种描述方式中,数字的位宽采用默认位宽(这由具体的机器系统决定,至少32位)

3)在这种描述方式中,采用默认进制(十进制)

(2)x和z值,在数字电路中,x表示不定值,z代表高阻值。

(3)负数 一个数字可以被定义为负数,只需在位宽表达式前加一个负号,负号必须写在数字定义表达式的最前面。

注意,负号不能放在位宽和机制之间,也不可放在进制和具体的数之间。

(4)下划线 下划线可以用来分隔开数的表达以提高程序的可读性。

2、参数(parameter)型

用parameter来定义一个标识符代表一个常量,称为符号常量。即标识符形式的常量

parameter 参数名1 = 表达式,参数名2 = 表达式,......,参数名n =  表达式;

2.2 变量

变量是一种在程序运行过程中可以改变其值的量,在Verilog中变量的数据类型有很多种,这里指对常用的几种进行介绍。

网络数据类型表示结构实体(如门)之间的物理连接。网络类型的变量不能存储值,而它必须受到驱动器(例如门或连续赋值语句assign)的驱动。如果么有驱动器连接到网络类型的变量上,则该变量就是高阻值的。其值为z。常用的网络连接型包括wire型和tri型。

1、wire型

wire型数据常用来表示用以assign关键字指定的组合逻辑信号。Verilog程序中,输入输出信号默认类型是自动定义为wire型。wire型信号可以用作任何方程式的输入,有可以用做assign语句或实例元件的输出。

2、reg型

寄存器是数据存储单元的抽象。寄存器数据类型的关键字是reg。通过赋值语句可以改变寄存器存储的值,其作用与改变触发器存储的值相当。

注意:reg型信号只表示被定义的信号将用在always中,理解这一点很重要。并不是说,reg信号一定是寄存器或者触发器的输出,虽然reg常常是这么做的,但并不一定总是这样。

3、memory型

Verilog HDL通过对reg型变量建立数组来对存储器建模,可以描述RAM存储器、ROM存储器和reg文件。数组中的每一个单元通过一个数组索引进行寻址。在Verilog中没有多维数组,memory型数据是通过扩展reg型数据的地址范围来生成的。其格式如下:

reg [n-1:0] 存储器名[m-1:0]

在这里定义的是一个有m个寄存器的存储器,并且寄存器是n位的

3、运算符及表达式

1)算术运算符(+、-、*、/、%)

2)赋值运算符(=、=、



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有