内置门原语
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 39 课,共 90 课。
Verilog 内置了门原语,可以让你使用实际的门符号描述逻辑电路。这称为结构化建模。你可以通过连接逻辑门来搭建电路,就像绘制电路图一样。
门原语是预定义的关键字,用于模拟基本逻辑门。你无需编写类似 assign out = a & b 的表达式,而是实例化一个门:
and(out, a, b); // 与门,输出为 out,输入为 a 和 b通用语法
gate_type (output, input1, input2, ...);- 第一个参数始终是输出
- 后续参数是输入(一个或多个,取决于门的类型)
可用的逻辑门基元
| 逻辑门类型 | 关键字 | 输入数量 |
|---|---|---|
| AND | and | 2 个或更多 |
| OR | or | 2 个或更多 |
| NOT | not | 1 |
| NAND | nand | 2 个或更多 |
| NOR | nor | 2 个或更多 |
| XOR | xor | 2 个或更多 |
| XNOR | xnor | 2 个或更多 |
门原语的工作原理
当你编写 and(out, a, b) 时,Verilog 会创建一个与门,用 a & b 的结果持续驱动 out。每当 a 或 b 发生变化时,out 都会立即更新,就像真实的门电路一样。
门级原语与连续赋值
这两种方法生成的硬件相同:
// 门级原语
and(out, a, b);
// 连续赋值(结果相同)
assign out = a & b;如果你想用一组门来描述电路(结构化风格),门原语就很有用。对于行为风格(表达式),连续赋值更合适。
挑战
要做什么:
- 添加正确的门原语,让这个电路正常工作。模块应输出输入
a和b的 AND 运算结果。输出端口已经命名为c。
亲手试试
module gate_challenge (
input a,
input b,
output c
);
// TODO: 添加正确的逻辑门原语
// 输出 c 应为 a AND b 的结果
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器