跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

Verilog 语法详解:从入门到精通

综述由AI生成系统讲解了 Verilog 语法的基础知识,涵盖核心定位、语法框架、模块与端口定义、核心数据类型(线网型与寄存器型)、逻辑描述及运算符等内容。重点阐述了 Verilog 作为硬件描述语言的并行特性与硬件映射关系,区分了组合逻辑与时序逻辑的实现方式,并提供了模块定义、端口声明及信号赋值的规范示例,适合初学者建立硬件设计思维。

星星泡饭发布于 2026/4/5更新于 2026/6/1542 浏览
Verilog 语法详解:从入门到精通

Verilog 语法详解:从入门到精通

一、Verilog 核心定位与语法框架

1. 核心特点

  • 并行性:模块内的所有语句(如 assign、always 块)同时执行(对应硬件的并行工作),而非按代码顺序执行。
  • 硬件映射:每段语法都对应明确的硬件(如 reg 对应寄存器,wire 对应导线,and 对应与门)。
  • 层次化:通过'模块定义 + 例化'实现复杂设计。

2. 基本语法框架

Verilog 程序由模块(Module)组成,模块是最小的可综合单元(可被综合器转化为硬件)。一个完整的 Verilog 代码结构如下:

// 1. 宏定义(可选,全局生效)
`define WIDTH 8 // 大写命名,编译时替换

// 2. 模块定义(必须,可综合代码的核心)
module 模块名(
    // 端口列表:输入/输出/双向
    input [WIDTH-1:0] i_data,   // 输入端口(8 位)
    input i_clk,                // 时钟输入(1 位)
    input i_rst_n,              // 同步复位(低有效)
    output reg [WIDTH-1:0] o_data // 输出端口(寄存器型,8 位)
);

    // 3. 内部信号定义(wire/reg/parameter 等)
    wire [WIDTH-1:0] w_temp;    // 线网型信号(导线)
    reg [3:0] r_cnt;            // 寄存器型信号(计数器)

    // 4. 逻辑描述(组合逻辑/时序逻辑)
    // 组合逻辑:assign 连续赋值(对应 wire)
    assign w_temp = i_data + 1'b1;

    // 时序逻辑:always 块(时钟触发,对应寄存器)
    always @(posedge i_clk) begin
        if (!i_rst_n) begin     // 复位逻辑(优先级最高)
            o_data <= 8'd0;
            r_cnt <= 4'd0;
        end else begin
            o_data <= w_temp;   // 寄存器赋值(<= 非阻塞赋值)
            r_cnt <= r_cnt + 1'b1;
        end
    end
endmodule // 模块结束(必须与 module 成对)

Verilog 是硬件描述语言(HDL)的核心标准之一,用于描述数字电路的结构和行为,最终映射为实际硬件(如 FPGA、ASIC)。与软件语言(C/C++)的'串行执行'不同,Verilog 的核心是'并行硬件映射'——代码的每一部分都对应具体的电路(导线、寄存器、逻辑门等)。

二、基础语法:模块与端口

1. 模块定义(Module Definition)

模块是 Verilog 的基本单元,语法格式:

module 模块名 (端口 1, 端口 2,..., 端口 N); // 端口声明 + 内部信号 + 逻辑描述
endmodule 
  • 模块名:大小写敏感,建议与文件名一致(如 top.v 对应模块 top)。
  • 端口列表:必须在模块开头声明,或在模块内显式声明(推荐前者,可读性强)。

2. 端口类型与声明

端口按方向分为 3 类,需明确声明类型(input/output/inout)和位宽(默认 1 位):

端口类型功能描述硬件映射允许连接的信号
input模块输入(外部→模块)导线(wire)父模块的 wire/reg/常量
output模块输出(模块→外部)导线(wire)父模块的 wire(不可常量)
inout双向端口(模块↔外部)导线(wire)父模块的 wire(需三态)

端口声明示例:

// 方式 1:端口列表 + 内部声明(推荐)
module demo(
    input clk,          // 1 位输入(时钟)
    input [7:0] din,    // 8 位输入(数据)
    output [7:0] dout,  // 8 位输出(导线型)
    output reg [3:0] cnt, // 4 位输出(寄存器型)
    inout io_data       // 双向端口
);

// 方式 2:仅端口列表,内部声明(兼容旧语法)
module demo(clk, din, dout, cnt, io_data);
    input clk;
    input [7:0] din;
    output [7:0] dout;
    output reg [3:0] cnt;
    inout io_data;
endmodule 

关键注意:

  • output 端口默认是 wire 型,若需要在 always 块中赋值(时序逻辑),需显式声明为 output reg。
  • inout 端口必须是 wire 型,需通过三态门(assign io_data = en ? data : 1'bz)控制方向。

三、核心数据类型

Verilog 数据类型分为线网型(Net)和寄存器型(Register),核心区别是'是否存储数据'(对应硬件的'导线'和'寄存器')。

1. 线网型(Net):无存储,实时响应输入

线网型对应硬件中的'导线',必须通过 assign 连续赋值或模块输出驱动,无默认值(默认高阻 z)。 常用线网类型:

类型功能描述应用场景
wire最常用,单驱动源组合逻辑输出、模块端口连接
tri多驱动源(三态)双向总线(如地址总线)
tri0下拉电阻(默认 0)复位信号(默认低)
tri1上拉电阻(默认 1)使能信号(默认高)

示例:

wire [7:0] data_w;      // 8 位线网信号
tri bus;                // 三态总线
assign data_w = a + b;  // 连续赋值(wire 必须用 assign)
assign bus = en ? data : 1'bz; // 三态控制(en=1 时输出 data,否则高阻)

2. 寄存器型(Register):有存储,时钟触发更新

寄存器型对应硬件中的'寄存器''触发器',需在 always 块中赋值。

目录

  1. Verilog 语法详解:从入门到精通
  2. 一、Verilog 核心定位与语法框架
  3. 1. 核心特点
  4. 2. 基本语法框架
  5. 二、基础语法:模块与端口
  6. 1. 模块定义(Module Definition)
  7. 2. 端口类型与声明
  8. 三、核心数据类型
  9. 1. 线网型(Net):无存储,实时响应输入
  10. 2. 寄存器型(Register):有存储,时钟触发更新
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大数据基于Python的在线考试与评估系统设计与实现
  • 9 篇必读的大模型前沿论文
  • 深入理解 Agent:定义、构建模式与最佳实践
  • 网络安全岗位详解与就业前景分析
  • 从高原到云端:一名青海学子的 AI 农业创业实践
  • 飞牛 NAS 原生 WebDAV 挂载 115 网盘配置指南
  • ChatGPT 降低毕业论文 AIGC 重复率方法指南
  • 鸿蒙电商购物车全栈项目:用户管理、商品列表与购物车实现
  • 建筑设计 AI 绘画提示词:从入门到精通的创作指南
  • Chromium 144 Windows 编译指南:Git 安装与配置
  • Python 安全有效地处理配置的最佳实践
  • Topaz Photo AI v1.3.3 中文便携版:智能图片降噪与无损放大工具
  • Qwen-Image-2512 本地部署实战指南
  • 让 GitHub Copilot 复用 Claude Code 本地技能的方法
  • C++ 哈希表封装:模拟实现 unordered_map 与 unordered_set
  • 2026 Python 展望:AI 时代的核心基础设施语言
  • Ubuntu 25.04 私有化部署 Ollama + DeepSeek + OpenWebUI 实战
  • LeetCode 141:环形链表检测的经典解法
  • OpenClaw 免费 AI 大模型选型与配置指南
  • Clumsy 网络故障模拟工具使用指南

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online