基础知识
0.1 模块(Module)
Verilog中的module可以看成一个具有输入输出端口的黑盒子,该黑盒子有输入和输出接口(信号),通过把输入在盒子中执行某些操作来实现某项功能。(类似于C语言中的函数)

图1 模块示意图
0.1.1 模块描述
图1 所示的顶层模块(top_module)结构用Verilog语言可描述为:
module top_module(
input a,
input b,
output out
);
.......
endmodule
- 模块以module 开始,endmodule结束
- top_module 为模块名
- input : 为输入端口
- output: 为输出端口
- 所有代码必须处于module模块中!
同理,图1 所示的次级模块(mod_a)结构用Verilog语言可描述为:
module top_module(
input in1,
input in2,
output out
);
.......
endmodule
注意事项:每个模应单独块处于一个.v文件中,模块名即为文件名(规范代码!)
0.1.2 模块输入输出信号
- 输出: output
- 输入: input
模块的输入输出端口都可看出模块的信号,若不写信号类型则默认为wire类型信号!
// 以下这两个语句本质是一直的
input a;
input wire a;
除了wire型信号,还有reg型信号,具体详见1.4节!
0.1.3 模块实例化
如图1所示,top_module的两个输入端口连接到次级模块(mod_a)的输入端口,那如何在top_module模块模块中使用mod_a模块的功能呢?这就需要通过模块实例化,可以把top_module看成C语言中的主函数,次级模块mod_a看成普通函数,这样就可以在主函数中调用其他函数来完成相应的功能!
在top_module中实例化mod_a的方式为:
模块实例化语法: 模块名 实例名(定义连接port的信号);
module top_module(
input a,
input b,
output out
);
mod_a instance2 (.in1(a), .in2(b), .out(out));
endmodule
- 按mod_a定义的端口顺序实例化: mod_a instance1 (a, b, out);
- 按mod_a端口名实例化: mod_a instance2 (.in1(a), .in2(b), .out(out)); (推荐此种写法)
0.2 逻辑块(always、generate)
0.2.1 always逻辑块
always块可构建 组合逻辑块 和 时序逻辑块,复杂的逻辑操作都需要处于该逻辑块中,如if、case、for等
(1) 组合逻辑块
module top_module();
always @(*) begin
....
end
endmodule
- always逻辑块中任意信号变化时立即触发,执行begin - end之间的语句
- begin - end用于将多条语句组成一个代码块,只有一条语句时可省略
(1) 时序逻辑电路
module top_module();
always @(posedge clk) begin
....
end
endmodule
- clk 信号的上升沿触发
- posedge: 上升沿
- negedge: 下降沿
0.2.2 generate逻辑块
generate主要结合for循环使用,主要用途有:
- 对向量中的多个位进行重复操作
- 对同一个模块进行多次重复实例化(主要用途)
(1) 操作向量
module top_module(input [7:0] in, output [7:0] out);
genvar i; // genvar i; 也可以定义在generate内部
generate
for(i=0; i<8; i++) begin: bit
assign out[i]=^in[8-1:i];
end
endgenerate
endmodule
(2) 模块重复多次实例化
module top_module(
input a,
input b,
output out
);
genvar i;
generate
for(i=0; i<8; i++) begin: gen_mod_a // gen_mod_a 为每个begin_end的结构的名称
mod_a instance2 (.in1(a), .in2(b), .out(out));
end
endgenerate
endmodule
- 注意:模块多次实例化时必须写每个begin_end结构的名称(gen_mod_a)
- 仿真器会通过gen_mod_a来标识生成结构: gen_mod_a[0],gen_mod_a[1]....
0.2.3 initial块
initial块可以理解为一个初始

本文详细介绍Verilog的基础知识,包括模块、逻辑块、赋值方式、基础语法等内容。讲解了Verilog的基本概念及其在数字电路设计中的应用。
最低0.47元/天 解锁文章
2518

被折叠的 条评论
为什么被折叠?



