模块结构
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 30 课,共 90 课。
模块是 Verilog 中的基本构建单元。每个设计都由相互连接的模块构成,从而形成更大的系统。
模块是一种硬件组件,包含:
- 名称
- 输入(传入的信号)
- 输出(传出的信号)
- 内部逻辑(模块的功能)
把模块想象成一个带有引脚和内部电路的芯片。
模块基本结构
每个模块都遵循以下结构:
module module_name (
input signals,
output signals
);
// 内部声明(wires、regs 等)
// 逻辑(assign 语句、always 块等)
endmodule模块的组成部分
| 部分 | 用途 |
|---|---|
module 关键字 | 开始模块定义 |
module_name | 模块名称 |
( ) | 输入和输出端口列表 |
input / output | 声明端口方向 |
| 模块主体 | 内部逻辑和连接 |
endmodule | 结束模块定义 |
简单模块示例
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule这个模块:
- 名为
and_gate - 有两个输入(
a、b) - 有一个输出(
c) - 包含一条定义逻辑的
assign语句
模块结构规则
- 一个文件对应一个模块 是常见做法
- 模块名称 应描述其功能
- 端口 列在名称后面的括号中
- 输入始终是
input(不能在内部编写) - 输出是
output(可以是reg或wire) endmodule必须关闭模块
挑战
补全缺失的部分,完成这个模块。
要做什么:
- 添加模块名称
my_and - 为
x添加input - 为
y添加input - 为
z添加output - 使用
assign添加内部逻辑
亲手试试
module ______ ( // 添加模块名
input x, // 添加输入
input y, // 添加输入
output z // 添加输出
);
// 在这里添加 assign 语句(z = x & y)
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器