【verilog语法详解:从入门到精通】

【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 的核心是 “并行硬件映射”—— 代码的每一部分都对应具体的电路(导线、寄存器、逻辑门等)。
本文将从 基础语法框架→核心知识点→实战示例→规范与避坑 展开,系统讲解 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,否则高阻)
  1. 寄存器型(Register):有存储,时钟触发更新
    寄存器型对应硬件中的 “寄存器”“触发器”,需在 alway

Read more

新一年的开源AI工具神器:Antigravity Tools、Vibe Kanban、CC-Switch

CC-Switch 一键切换 Claude Code、Codex 与 Gemini 的 API 配置 AWS Bedrock 支持:内置 AWS Bedrock 供应商预设,支持 AKSK 和 API Key 两种认证方式,支持跨区域推理(global/us/eu/apac),覆盖 Claude Code 和 OpenCode、速度测试:测量 API 端点延迟,可视化连接质量指示器 导入导出:备份和恢复配置,自动轮换(保留最近 10 个)、国际化支持:完整的中英文本地化(UI、错误、托盘) Claude

By Ne0inhk
解锁超级生产力:手把手教你构建与GitHub深度集成的自动化工作流,让AI成为你的编程副驾驶

解锁超级生产力:手把手教你构建与GitHub深度集成的自动化工作流,让AI成为你的编程副驾驶

前言 在当今快节奏的软件开发世界中,效率就是生命线。每一位开发者、项目经理和技术爱好者都在不断寻求能够简化流程、自动化重复性任务并最终解放创造力的工具和方法。想象一下,如果你能用自然语言与你的开发环境对话,让它为你搜索代码库、管理项目任务,甚至直接在你最喜欢的代码托管平台GitHub上执行操作,那将会是怎样一种颠覆性的体验? 这并非遥不可及的科幻场景,而是已经可以实现的强大功能。本文将为你揭开这层神秘的面纱,通过一个名为“蓝耘”的平台(或任何支持此类功能的类似平台),一步步指导你从零开始构建一个基础的自动化工作流。更令人兴奋的是,我们将向你展示如何将这个工作流与强大的GitHub MCP(Multi-Capability Platform)工具无缝集成,从而赋予你的工作流直接与GitHub仓库进行深度交互的能力。 无论你是希望快速检索海量开源项目、自动追踪和创建任务(Issues),还是希望简化代码提交与拉取请求(Pull Request)的流程,本文都将为你提供详尽的、可操作的指南。我们将深入每一个步骤,从最基础的节点设置,到获取关键的GitHub密钥,再到最终实战演练,让你亲

By Ne0inhk
Git - 多人协作流程

Git - 多人协作流程

目录 多人协作流程 分支推送协作 分支拉取协作 删除远程分支 多人协作流程 1. 开发者A:在远程仓库中有一个testgit1仓库,点击管理 -> 左侧仓库成员管理  -> 申请列表  -> 邀请用户,将连接复制,发送给邀请的用户。 2. 开发者B:接受邀约后,可在仓库中看到开发者A的仓库。 3. 开发者A: * 点击管理 -> 左侧仓库成员管理中查看到仓库中的其他成员,并赋予身份(例如:管理者、开发者、测试者等),不同的身份有不同的管理权限。 * 拉取远程仓库到本地仓库,使两个仓库内容基本一致。 * 起项目框架,写内容,经本地仓库推送到远程仓库中。 4. 开发者B: * 开发者B不能在testgit1仓库本仓库中进行操作(重点),如果在这个仓库中操作,就使修改了开发者A的库; * 点击Fork,选中自己,

By Ne0inhk
如何在VsCode中使用git(免敲命令版本!保姆级!建议收藏!)

如何在VsCode中使用git(免敲命令版本!保姆级!建议收藏!)

目录 文章目录 前言 一、电脑安装git 二、在vscode安装git插件 三、克隆仓库 四、提交代码 五、创建分支、切换分支、合并分支 1、创建分支 2、切换分支 3、合并分支 六、创建标签和推送标签 七、解决冲突 八、拉取、抓取仓库 九、Reivew代码 总结 前言 随着Vscode的推出和普及,Git的使用也发生了变化,从原来的命令行管理仓库,再到现在用vscode从提交代码、解决冲突、reivew代码,整个管理仓库的过程全部都是可视化,大大降低了新手的使用难度,让新手也能轻松使用git 一、电脑安装git git官网:Git - 安装 Git 安装完git后,打开vscode显示这样的界面就是安装成功了

By Ne0inhk