FPGA基础 -- 什么是 Verilog 的模块(`module`)

一、什么是 Verilog 的模块(module

模块用于定义输入、输出端口功能逻辑,它支持层级结构,即模块可以实例化子模块。

verilog 复制代码
module 模块名 (
    端口列表
);
    // 信号声明
    // 行为或结构描述
endmodule

二、模块的组成部分

组成部分 说明
module 开始模块定义
input/output/inout 定义端口方向,数据类型默认为 wire
内部信号声明 wire, reg, integer, parameter
过程语句 assign(组合逻辑), always, initial(时序或行为描述)
子模块实例化 使用 模块名 实例名(...) 实例化子模块
endmodule 结束模块定义

三、Verilog 模块示例

✅ 示例1:简单与门模块

verilog 复制代码
module and_gate (
    input wire a,
    input wire b,
    output wire y
);

assign y = a & b;

endmodule

说明:

  • 使用 assign 实现组合逻辑
  • 输入输出均为 wire 类型

✅ 示例2:时序逻辑模块(D触发器)

verilog 复制代码
module dff (
    input wire clk,
    input wire rst,
    input wire d,
    output reg q
);

always @(posedge clk or posedge rst) begin
    if (rst)
        q <= 1'b0;
    else
        q <= d;
end

endmodule

说明:

  • always 块建模时序逻辑(posedge clk)
  • qreg 类型 → 可以在过程块中赋值

✅ 示例3:带参数的模块

verilog 复制代码
module adder #(
    parameter WIDTH = 8
)(
    input  wire [WIDTH-1:0] a,
    input  wire [WIDTH-1:0] b,
    output wire [WIDTH-1:0] sum
);

assign sum = a + b;

endmodule

说明:

  • parameter 允许模块泛化,支持宽度自定义
  • 使用 #(...) 参数化模块

✅ 示例4:模块实例化

verilog 复制代码
module top;

    wire a, b, y;

    // 实例化 and_gate 模块
    and_gate u1 (
        .a(a),
        .b(b),
        .y(y)
    );

endmodule

说明:

  • u1 是实例名,可以实例化多个相同模块
  • .连接形式是命名端口连接,推荐使用

四、模块间的层级结构

Verilog 模块支持层次化设计:

复制代码
top
├── uart_ctrl
│   ├── baud_rate_gen
│   └── parity_check
└── memory_ctrl
    └── fifo
  • 每层都是一个独立的 module
  • 支持模块复用(Reusable IP)

五、Verilog 中常见模块类型(工程实用)

模块类型 功能说明
数据通路模块 加法器、乘法器、比较器、位移器等
状态机模块 控制逻辑,如 FSM(有限状态机)
接口模块 UART、SPI、I2C、AXI-Lite、FIFO 控制等
存储模块 寄存器文件、RAM/ROM、双端口存储器等
验证模块 Testbench、驱动器、监控器、断言等

六、模块设计建议(工程实战)

  1. 模块只做一件事,职责清晰(单一职责)
  2. 端口宽度参数化,提升模块复用性
  3. 避免组合逻辑中使用 reg,使代码可综合
  4. 子模块之间通过明确的端口接口通信,避免全局变量
  5. 所有时序逻辑使用同步时钟边沿描述,避免异步时序错误
  6. 注意"组合逻辑漏赋值"问题,需使用 defaultcase default

七、小结

模块元素 描述
module 定义逻辑功能的实体单元
input/output 声明端口
assign 组合逻辑建模
always 时序或行为逻辑建模
parameter 提高模块通用性
实例化 将子模块嵌套到顶层或中间模块中
相关推荐
千宇宙航5 小时前
闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
图像处理·人工智能·深度学习·神经网络·计算机视觉·fpga开发
小眼睛FPGA17 小时前
【RK3568+PG2L50H开发板实验例程】FPGA部分/紫光同创 IP core 的使用及添加
科技·嵌入式硬件·ai·fpga开发·gpu算力
forgeda1 天前
如何将FPGA设计验证效率提升1000倍以上(2)
fpga开发·前沿技术·在线调试·硬件断点·时钟断点·事件断点
9527华安1 天前
FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持
fpga开发·架构·网卡·ethernet·nic·40g·pcie4c
search71 天前
写Verilog 的环境:逻辑综合、逻辑仿真
fpga开发
search72 天前
Verilog 语法介绍 1-1结构
fpga开发
小眼睛FPGA2 天前
【RK3568+PG2L50H开发板实验例程】Linux部分/FPGA dma_memcpy_demo 读写案例
linux·运维·科技·ai·fpga开发·gpu算力
幸运学者2 天前
xilinx axi datamover IP使用demo
fpga开发
搬砖的小码农_Sky2 天前
XILINX Zynq-7000系列FPGA的架构
fpga开发·架构
热爱学习地派大星2 天前
FPGA矩阵算法实现
fpga开发