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 提高模块通用性
实例化 将子模块嵌套到顶层或中间模块中
相关推荐
tiantianuser43 分钟前
RDMA设计29:RoCE v2 发送及接收模块设计2
服务器·fpga开发·rdma·fpga设计·高速传输
9527华安2 小时前
FPGA实现GTP光口视频转USB3.0 UVC,基于Aurora8B10B+FT602芯片架构,提供4套工程源码和技术支持
fpga开发·gtp·usb3.0·uvc·aurora8b10b·ft602
zy135380675733 小时前
12V输入5V/2A输出升降压芯片AH4002
科技·单片机·物联网·fpga开发·硬件工程·智能电视
dadaobusi4 小时前
verilog的generate
fpga开发
从此不归路5 小时前
FPGA 结构与 CAD 设计(第2章)
ide·fpga开发
FPGA_小田老师5 小时前
FPGA例程(5):时钟(clock)分频倍频(PLL/MMCM)实验--vivado行为级仿真、综合后仿真和实现后仿真说明
fpga开发·pll·mmcm·run simulation·前仿真·后仿真
3有青年5 小时前
HPS cold reset pin和AVST configuration的功能和作用
fpga开发
3有青年21 小时前
Altera FPGA操作系统支持的情况分析
fpga开发
国科安芯1 天前
卫星通讯导航FPGA供电单元DCDC芯片ASP4644S2B可靠性分析
单片机·嵌入式硬件·fpga开发·架构·安全性测试
stars-he1 天前
FPGA学习笔记-图书馆存包柜,乒乓球游戏电路设计
笔记·学习·fpga开发