1.一个简单的与-或-非门电路
module aoi(
a,
b,
c,
d,
f
);
input a,b,c,d;
output f;
wire a,b,c,d,f;
//用assign持续赋值语句定义
//assign 语句一般用于组合逻辑的赋值,称为持续赋值方式。赋值时,只需将逻辑表达式放在关键字assign后即可
assign f = ~ ( (a & b) | ~( (c & d) ) );
//
//用always过程块定义
//always@(a or b or c or d)
//always@(*)统配符,等价于a or b or c or d
endmodule
(1) 每个模块首先要进行端口定义,并说明输入和输出口(input 、output 或 inout)之后对模块的功能进行定义
input 输入端口 ;
output 输出端口;
inout 双向端口;
2. Verilog模块的基本结构
Verilog 模块的基本结构
//
//
module 名字(端口列表) :
端口定义
input 输入端口
output 输出端口
inout 双向端口
//
//
数据类型说明 :
wire
reg
parameter
//
//
逻辑功能定义 :
assign
always
function
task
...
(1)每个端口除了要声明是输入、输出还是双向端口外,还要声明其数据类型,是wire型、reg型还是其他类型
(2)输入和双向端口不能声名为寄存器型
(3)测试模块中不需要定义端口
3. Verilog模块的模板:
module <顶层模块名> (输入输出端口列表)
input 输入端口列表; //输入端口声明
output 输出端口列表; //输出端口声明
///
//
定义数据, 信号的类型, 函数声明, 用关键字 wire,reg,task, funtion等定义
wire 信号名;
reg 信号名;
///
//
逻辑功能定义
assign <结果信号名> = <表达式>;
///
//
用always块描述逻辑功能
always@(*)//敏感信号表达式
begin
//过程赋值
//if-else,case语句,for循环语句
//task,function调用
end
///
//
调用其他模块
<调用模块名> <例化模块名> (<端口列表>);
门元件例化
门元件关键字 <例化门元件门> (<端口列表>);
endmodule