当前位置: 首页 > web >正文

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

一、什么是 Verilog 的模块(module

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

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

二、模块的组成部分

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

三、Verilog 模块示例

✅ 示例1:简单与门模块

module and_gate (input wire a,input wire b,output wire y
);assign y = a & b;endmodule

说明:

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

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

module dff (input wire clk,input wire rst,input wire d,output reg q
);always @(posedge clk or posedge rst) beginif (rst)q <= 1'b0;elseq <= d;
endendmodule

说明:

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

✅ 示例3:带参数的模块

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:模块实例化

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提高模块通用性
实例化将子模块嵌套到顶层或中间模块中
http://www.xdnf.cn/news/13780.html

相关文章:

  • 再现重大BUG,微软紧急撤回Win 11六月更新
  • Karate整合PlayWright方式之playWright Driver
  • Vulkan学习笔记4—图形管线基础
  • Visual Studio 里面的 Help Viewer 提示Error: “.cab未经Microsoft签名” 问题解决
  • 【Net】OPC UA(OPC Unified Architecture)协议
  • Fastadmin报错Unknown column ‘xxx.deletetime‘ in ‘where clause
  • [算法][好题分享][第三大的数][最短无序子数组]
  • 小飞电视:智能电视与移动设备的娱乐新选择
  • Meta发布V-JEPA 2世界模型及物理推理新基准,推动AI在物理世界中的认知与规划能力
  • Python 标准库之 os 模块
  • Vue + element实现电子围栏功能, 根据省市区选择围栏, 自定义围栏 ,手动输入地名围栏, 保存围栏,清除围栏,加载围栏,批量检测标点是否在围栏内。
  • Chapter05-SSRF
  • Nodejs特训专栏-基础篇:1. Node.js环境搭建与项目初始化详细指南
  • Conda 安装 nbextensions详细教程
  • C++编程语言:标准库:STL容器(Bjarne Stroustrup)
  • 2025【证券从业】时间事件
  • CHI 总线协议及一致性总线相关的 NOC
  • c/c++ 汇编码中的.cfi 指令有什么用途?
  • (LeetCode 每日一题) 3423. 循环数组中相邻元素的最大差值 (数组)
  • Java面试避坑指南:牛客网最新高频考点+答案详解
  • Mac电脑-Office 2024 长期支持版 PPT、Excel、Word(Mac中文)
  • RabbitMQ实现异步消息监听机制
  • Makefile 学习笔记
  • 无外接物理显示器的Ubuntu系统的远程桌面连接(升级版)
  • C#学习第30天: 匹配模式
  • 大模型技术30讲-5-利用数据来减少过拟合现象
  • Next.js + Supabase = 快速开发 = 高速公路
  • 怎样下载某个SCI期刊的endnote style?答:直接去endnote官网搜索期刊名称并下载即可
  • JMeter + 命令行服务器端压测全流程详解
  • 风控系统中,要调用第三方服务获取信息,很慢,如何解决?