Verilog HDL学习 | 您所在的位置:网站首页 › 文件名由哪两个部分组成 › Verilog HDL学习 |
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 实验室设备网 版权所有 |