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 提高模块通用性
实例化 将子模块嵌套到顶层或中间模块中
相关推荐
9527华安14 小时前
Xilinx系列FPGA实现DP1.4视频收发,支持4K60帧分辨率,提供2套工程源码和技术支持
fpga开发·音视频·dp1.4·4k60帧
cycf17 小时前
高速接口基础
fpga开发
forgeda1 天前
从Vivado集成Lint功能,看FPGA设计的日益ASIC化趋势
fpga开发·vivado·lint·eco·静态检查功能
hexiaoyan8271 天前
国产化FPGA开发板:2050-基于JFMK50T4(XC7A50T)的核心板
fpga开发·工业图像输出·vc709e板卡·zynq 通用计算平台·模拟型号处理
雨洛lhw1 天前
The Xilinx 7 series FPGAs 设计PCB 该选择绑定哪个bank引脚,约束引脚时如何定义引脚电平标准?
fpga开发·bank·电平标准
红糖果仁沙琪玛2 天前
FPGA ad9248驱动
fpga开发
minglie12 天前
XSCT/Vitis 裸机 JTAG 调试与常用命令
fpga开发
沐欣工作室_lvyiyi2 天前
基于FPGA的电梯控制系统设计(论文+源码)
单片机·fpga开发·毕业设计·计算机毕业设计·电子交易系统
阿sir1982 天前
ZYNQ PS XADC读取芯片内部温度值,电压值。
fpga开发
@晓凡2 天前
NIOS ii工程移植路径问题
fpga开发·nios ii