Verilog HDL是1983年由GDA公司的Phil Moorby首创。
特点:1、支持多级建模方式:系统级;算法级;RTL级;门级;开关级;
2、支持多种建模方式:功能建模方式、结构建模方式、数据流建模方式
3、并发性,具有在同一时刻执行多任务的能力。
4、时序概念,硬件电路中有延时特性
5、…… 6、……
HDL——Hareware description language
Verilog HDL程序基本结构
1、模块。module,它可以表示:物理块,如IC;逻辑块,如CPU中的ALU;甚至整个系统。每一个模块的描述都是从关键字module开始的,有一个名称,由关键字endmodule结束。一个完整的模块代码如下:
module module_name ( input / output_port list);
Declarations:
input/output_port declarations;
reg, wire, parameter, function, task, UDP&;
Statements:
initial statements
always statements
gate/module instantiation
UDP instantiation
assign statements
endmodule
module: module 模块名(端口号1,端口号2,……);
Declarations:输入口:input 端口名1,……;
输出口:output 端口名1,……;
内部信号:reg[n-1:0] 变量1……;
wire[n-1:0] 变量2……;
模块定义部分:这也是模块中最重要部分,例:二位比较器
module conpare (equal,a,b);
output equal;
input [1:0]a,b;
assign equal = (a==b)?1:0;
endmodule
2、Verilog的描述方式,这里要举三个例子
数据流方式。通常描述组合功能,常用assign连续赋值语句来实现连续赋值(可以看出这种方式只能描述简单的那种组合电路)。
例:半加器的数据流描述
module HalfAdder (A, B, Sum, Carry);
input A,B;
output Sum,Carry;
assign Sum = A^B;
assign Carry = A&B;
endmodule
行为描述方式。
常见的高级语言中的描述方式,具有很强的通用性和有效性。关键词是initial和always,其中前一个只能执行一次,而always可以无限循环执行。(这里可以看出这种方法的好处是容易理解,不过效率较低)还是半加器例子:
module HalfAdder (A, B, Sum, Carry);
input A,B;
output Sum,Carry;
always@ (A or B) begin
Sum = A^B;
Carry = A&B;
end
endmodule
结构描述方式。通过实例进行描述,通过将Verilog预定义的基本单元实例引用到语言中,一旦实例的输入中任何一个发生变化,便重新运算并输出。(可以看出这种方式的优点是连接关系清晰,电路模块清晰,但是较难理解)例:四位寄存器的结构描述
module REG4 (d, clk, clr, q, qb);
output [3:0] q, qb;
input [3:0] d;
input clk,clr;
DFF d0 (d[0], clk, clr, q[0], qb[0]);
DFF d1 (d[1], clk, clr, q[1], qb[1]);
DFF d2 (d[2], clk, clr, q[2], qb[2]);
DFF d3 (d[3], clk, clr, q[3], qb[3]);
endmodule
以上的三种方式各有优劣,所以说常常在程序中混合使用。 例:全加器
module F_adder (A, B, Cin, Sum, Cout);
input A,B,Cin;
output Sum,Cout;
reg Cout;
reg T1,T2,T3;
wire S1;
always@(A or B or Cin) begin
T1 = A&Cin;
T2 = B&Cin;
T3 = A&B;
Cout = (T1 | T2) | T3;
end
assign Sum = S1 ^ Cin;
endmodule
对于上面这段程序,全加器,输入为A,B,进位位为Cin,输出位Sum,输出进位位Cout。将A,B,Cin三个输入的全部情况列出来比较来看,可以得出当这三个中有任意两个或者是两个以上为1是则进位Cout则为1,固有always块中对A,B,Cin的处理。然后就是Sum就是A^B^Cin。
明天接着写^_^
接上文:
Verilog的逻辑系统。Verilog采用四值逻辑系统:0,1,x,z。
0——低电平,false,logic low,接地,VSS、负信号
1——高电平,true,logic high,电源、VCC,正信号
x——未知状态,通常是信号处于不确定状态或者是发生冲突是用“x”表示
z——高阻态,三态门或驱动电路中经常出现这种状态
Verilog的数据类型