数字逻辑 初识Verilog
数字逻辑 初识Verilog
一、Verilog HDL 模块及端口
1. Verilog HDL 模块声明
模块声明从关键字 module 开始,到关键字 endmodule 结束。
模块的端口列表描述这个模块的输入和输出端口。
模块内部的5个组成部分:变量声明、数据流语句、低层模块实例、行为语句块以及任务和函数。
module <模块名> (<模块端口列表>)
···
<模块的内容>
···
···
endmodule
以一个与门的Verilog模块为例,代码如下:
module andDemo(a, b, c);
input a, b;
output c;
wire a, b;
wire c;
assign c = a & b
endmodule
2. Verilog HDL 端口声明
Verilog中端口有以下三种类型:
(1)input :模块从外界发送数据的接口,在模块内可以不写。
(2)output :模块往外界发送数据的接口,在模块内可以不写。
(3)inout :可读取数据,也可以送出数据,数据双向流动。
以全加器为例,代码如下:
module fullAdder(a, b, cin, sum, cout);
// 端口声明的开始
input a, b, cin;
output sum, cout;
// 端口声明的结束
wire a, b, cin;
wire sum, cout;
assign sum = (a ^ b) ^ c;
assign cout = cin & (a ^ b) | (a & b);
endmodule
端口的默认数据类型是wire型,如果希望端口能保存数据 ,则声明为reg型,即寄存器类型(\(\texttt {register}\))。
3. Verilog HDL 数据类型声明
-
wire型wire型数据常用来表示以assign关键字指定的逻辑信号。Verilog程序模块中的输入、输出信号类型默认为wire型。wire型信号可以用作方程式的输入,也可以用作assign语句或者实例元件的输出。定义格式如下:
wire [n-1 : 0] 数据名1, 数据名2, ···, 数据名N;这里,总共定义了 \(N\) 条线,每条线的位宽为 \(n\) 。例如:
wire [2 : 0] a, b, c; -
reg型reg型是寄存器数据类型变量的关键字。reg型数据常用来表示always模块内的指定信号,代表触发器。在
always模块内被赋值的每一个信号都定义为reg型,即赋值操作符的有效变量必须是reg型。定义格式如下:
reg [n-1 : 0] 数据名1, 数据名2, ···, 数据名N;这里,总共定义了 \(N\) 条线,每条线的位宽为 \(n\) 。例如:
reg [2 : 0] a, b, c; reg d;reg型和wire型不同在于reg型保持最新一次的赋值,而wire型需要持续的驱动。 -
memmory型Verilog通过对
reg型变量建立数组来对存储器建模,可以描述RAM、ROM存储器和寄存器数组。数组中每一个单元通过一个整数索引进行寻址。
定义格式如下:
reg [n-1 : 0] 存储器名 [m-1 : 0]; // reg [n-1 : 0]定义了存储单元是一个n位位宽的寄存器存储器后面的
[m-1 : 0]定义了存储单元的数量,例如:reg [15 : 0] ROMA [7 : 0]; // 这个例子定义了一个存储位宽为16位,存储深度为8的存储器 // 该存储器的地址范围是0~7reg型和memory型的区别:reg [n-1 : 0] rega; //一个n位的寄存器 reg memb [n-1 : 0]; //一个由n个1位寄存器构成的存储器组 rega = 0; //合法 memb = 0; //非法如果要对
memory读写,必须指定地址。例如:memb[0] = 1; reg [3 : 0] rom [4 : 1]; rom[0] = 4^h0; rom[1] = 4^h1; rom[2] = 4^h2; rom[3] = 4^h3; -
parameter型在Verilog里用
parameter来定义常量,即用parameter来定义一个标识符表示一个常数。采用该类型可以提高程序的可读性与可维护性。
定义格式如下:
parameter 参数名1 = 数据名1;例如:
parameter a1 = 1; parameter [3 : 0] s0 = 4^h0; s1 = 4^h1; s2 = 4^h2; s3 = 4^h3; -
其他类型
integer:整型变量。
real:声明为real型的变量是双精度浮点数。
realtime:与real变量相同,但是是以实数形式存储时间的值。
wand:表示线和线网,由集电极开路逻辑实现。
wor:表示线或线网,由发射极耦合逻辑实现。
scalared:声明一个线性变量,这个变量的比特可以单独选中或部分选中。
time:64位无符号数的形式存储仿真时间。

浙公网安备 33010602011771号