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

别再死记硬背Verilog语法了!用这5个实战小例子,帮你快速理解模块、wire和reg

别再死记硬背Verilog语法了用这5个实战小例子帮你快速理解模块、wire和reg学习Verilog最痛苦的事情莫过于面对一堆枯燥的语法规则却不知道它们在实际电路设计中有什么用。很多初学者会陷入死记硬背的泥潭记住了wire是连线reg是寄存器却不知道什么时候该用哪个背下了module的语法结构却写不出一个能工作的模块。今天我们就用5个从简单到复杂的实战例子带你从功能需求出发反向理解Verilog的核心语法概念。1. 从灯泡开关理解模块和端口想象我们要设计一个最简单的电路——用开关控制灯泡。在Verilog中这个电路可以这样描述module light_switch( input wire switch, // 输入端口 - 开关 output wire bulb // 输出端口 - 灯泡 ); assign bulb switch; // 灯泡状态直接由开关控制 endmodule这个例子展示了Verilog模块的四个基本要素模块声明module light_switch定义了一个名为light_switch的模块就像给我们的电路板贴了个标签端口定义input/output声明了模块与外界交互的接口相当于电路板上的接线端子信号类型wire表示这是一个直接的物理连线功能实现assign语句描述了输入输出的关系关键理解模块(module)就是电路的黑盒子端口(port)是盒子的对外接口wire是连接这些接口的导线。2. 用与门电路理解wire和连续赋值现在我们来设计一个稍微复杂点的电路——两个开关同时按下时灯泡才亮的与门逻辑module and_gate( input wire switch1, input wire switch2, output wire bulb ); wire and_result; // 内部连线 assign and_result switch1 switch2; // 与运算 assign bulb and_result; // 结果输出到灯泡 endmodule这里我们学到了wire类型用于表示模块内部的连接线可以暂存中间结果连续赋值(assign)只要右边的表达式值变化左边的wire会立即更新位运算是按位与运算符实现与门逻辑常见误区很多初学者会疑惑为什么这里不用reg。记住只有需要保存状态的电路才需要reg纯组合逻辑用wire就够了。3. 用D触发器理解reg和时序逻辑让我们进入时序电路的世界。一个带异步复位的D触发器可以这样实现module d_flip_flop( input wire clk, // 时钟 input wire reset_n, // 异步复位(低有效) input wire d, // 数据输入 output reg q // 数据输出 ); always (posedge clk or negedge reset_n) begin if (!reset_n) // 复位信号有效 q 1b0; // 输出清零 else // 时钟上升沿 q d; // 锁存输入数据 end endmodule这个例子揭示了几个重要概念reg类型用于存储状态只有在时钟边沿或特定事件发生时才会改变always块用于描述时序逻辑内部的赋值使用非阻塞赋值敏感列表(posedge clk or negedge reset_n)定义了触发条件关键区别特性wirereg赋值方式assignalways块内更新时机立即更新事件触发时更新用途组合逻辑连线存储状态4. 用计数器理解参数和位宽现在我们来设计一个4位二进制计数器它能在每个时钟周期自动加1并在达到最大值时自动归零module counter( input wire clk, input wire reset_n, output reg [3:0] count // 4位宽的输出 ); parameter MAX_COUNT 4d15; // 参数定义 always (posedge clk or negedge reset_n) begin if (!reset_n) count 4b0000; // 复位时清零 else if (count MAX_COUNT) count 4b0000; // 达到最大值归零 else count count 1b1; // 正常计数 end endmodule新知识点包括位宽声明[3:0]表示4位宽信号最高位是第3位参数定义parameter用于定义常量提高代码可读性和可维护性算术运算直接对reg变量进行1操作实用技巧在FPGA设计中明确的位宽声明可以帮助综合器生成更优化的电路。5. 用状态机理解复杂时序逻辑最后我们来看一个简单的交通灯控制器状态机它在红、绿、黄三种状态间循环切换module traffic_light( input wire clk, input wire reset_n, output reg [1:0] light // 00:红 01:黄 10:绿 ); // 状态定义 parameter RED 2b00; parameter YELLOW 2b01; parameter GREEN 2b10; // 状态寄存器 reg [1:0] state; // 定时计数器 reg [31:0] timer; always (posedge clk or negedge reset_n) begin if (!reset_n) begin state RED; timer 32d0; end else begin case (state) RED: begin if (timer 32d10_000_000) begin // 10秒 state GREEN; timer 32d0; end else begin timer timer 1; end end GREEN: begin if (timer 32d15_000_000) begin // 15秒 state YELLOW; timer 32d0; end else begin timer timer 1; end end YELLOW: begin if (timer 32d5_000_000) begin // 5秒 state RED; timer 32d0; end else begin timer timer 1; end end endcase end end // 输出逻辑 always (*) begin light state; end endmodule这个综合例子展示了状态机设计使用parameter定义状态编码用case语句实现状态转移混合时序/组合逻辑一个always块处理时序另一个处理组合输出大型寄存器32位定时计数器的使用非阻塞赋值确保状态转移的原子性设计经验复杂时序逻辑最适合用状态机实现每个状态明确对应一个电路行为。

相关文章:

别再死记硬背Verilog语法了!用这5个实战小例子,帮你快速理解模块、wire和reg

别再死记硬背Verilog语法了!用这5个实战小例子,帮你快速理解模块、wire和reg 学习Verilog最痛苦的事情莫过于面对一堆枯燥的语法规则却不知道它们在实际电路设计中有什么用。很多初学者会陷入死记硬背的泥潭,记住了"wire是连线&#xf…...

48V锂电池双向DCDC充放电MATLAB仿真研究

48V锂电池双向DCDC充放电MATLAB仿真上个月帮工作室新入职的阿凯改48V露营双向小储能的模型——对,仿真模型,毕竟48V、2kW半的IGBT炸一套顶他半个月咖啡钱。刚拿到手的时候阿凯拍胸脯说“buck-boost双向嘛,MATLAB/Simulink现成的库拉几个就行”…...

基于狄拉克金属特性的线-圆形状转换器设计及应用研究

基于狄拉克金属的线-圆转换器搞无线通信或者卫星接收的朋友肯定懂,极化匹配有多重要——你发的是圆极化信号,我天线收的是线极化,那信号直接打折扣,搞不好连不上都有可能。传统的线-圆转换器要么带宽窄得可怜,换个频段…...

OpenClaw对接Qwen3.5-9B实战:5步完成本地AI助手部署

OpenClaw对接Qwen3.5-9B实战:5步完成本地AI助手部署 1. 为什么选择OpenClawQwen3.5-9B组合? 去年冬天第一次听说OpenClaw时,我正在为重复性的文件整理工作头疼。作为技术博主,每天要处理几十个Markdown草稿、截图和参考文献&…...

OpenClaw+SecGPT-14B组合方案:5步搭建个人安全运营中心

OpenClawSecGPT-14B组合方案:5步搭建个人安全运营中心 1. 为什么需要个人安全运营中心 去年我的家庭实验室遭遇了一次未遂的入侵尝试。当时我正在外地出差,NAS上的异常登录提醒被淹没在几百条通知里。这件事让我意识到:安全监控不能只依赖碎…...

家庭照片管家:OpenClaw+Qwen3-32B自动识别人物与生成纪念册

家庭照片管家:OpenClawQwen3-32B自动识别人物与生成纪念册 1. 为什么需要自动化照片管理? 去年春节整理家庭照片时,我发现一个令人头疼的问题——10年间积累的3万多张照片杂乱地堆在硬盘里。想找一张孩子周岁照需要翻遍几十个文件夹&#x…...

工业机器人核心运动指令深度剖析:从MoveJ到MoveC的实战应用

1. 工业机器人运动指令基础入门 第一次接触工业机器人编程时,我被各种Move指令搞得晕头转向。直到在汽车焊接产线调试时,因为用错MoveJ导致机械臂剧烈抖动,才真正明白这些指令的区别。今天我们就来拆解工业机器人最核心的四大运动指令&#x…...

LY68L6400 SRAM的QSPI驱动优化:RT-Thread在STM32H743上的性能调优指南

LY68L6400 SRAM的QSPI驱动优化:RT-Thread在STM32H743上的性能调优指南 在嵌入式系统开发中,外部SRAM常被用作高速缓存或扩展内存,而QSPI接口因其高带宽特性成为连接SRAM的理想选择。LY68L6400作为一款64Mb的QSPI SRAM,在STM32H743…...

避开这些坑,你的STM32 CAN总线通信才能稳定跑起来:从硬件电路到软件配置的避坑指南

STM32 CAN总线通信实战避坑指南:从硬件设计到软件调试的深度解析 在工业控制、汽车电子和物联网领域,CAN总线因其高可靠性和实时性成为首选通信协议。然而,许多工程师在STM32平台上实现CAN通信时,总会遇到各种"诡异"问题…...

Android蓝牙安全服务注册机制解析——bta_security结构体与btm_cb.api的关联

1. Android蓝牙安全服务注册机制概览 在Android蓝牙模块中,安全服务注册是整个通信链路建立的关键环节。简单来说,这就像你去银行办业务前需要先登记个人信息一样,设备间建立安全连接前也需要完成类似的"身份登记"过程。这里涉及两…...

线性时不变系统的容错模型预测控制与同态加密融合研究 —— 以连续搅拌式反应器为例(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

搜索关键词SEO优化需要多长时间才能看到效果_搜索关键词SEO优化需要多少预算投入

搜索关键词SEO优化需要多长时间才能看到效果_搜索关键词SEO优化需要多少预算投入 在当今互联网时代,搜索引擎优化(SEO)是每个网站和在线企业提升流量、吸引潜在客户的重要手段。许多人在进行SEO优化时常常会疑惑:“搜索关键词SEO…...

UC2843芯片实战:用Simplis搭建PWM控制器模型(附完整仿真文件)

UC2843芯片实战:用Simplis搭建PWM控制器模型(附完整仿真文件) 在电源设计领域,UC2843系列芯片堪称电流模式PWM控制器的"常青树"。这款经典器件凭借稳定的性能和简洁的外围电路,被广泛应用于反激、正激等拓扑…...

基于三菱PLC和MCGS广场喷泉的系统:后发送产品包含梯形图、接线图与原理图等详细资料

基于三菱 plc和MCGS 广场喷泉 我们主要的后发送的产品有,带解释的梯形图接线图原理图图纸,io分配,组态画面最近刚折腾完一个广场喷泉的小项目,用的三菱FX3U PLC加MCGS触摸屏,本来就是冲着练手去的,结果搞…...

OpenClaw高阶玩法:Qwen3-4B模型微调适配专属自动化流程

OpenClaw高阶玩法:Qwen3-4B模型微调适配专属自动化流程 1. 为什么需要定制化模型? 去年夏天,我尝试用OpenClaw自动化处理一批专业文献时遇到了瓶颈。当AI试图理解"CRISPR-Cas9基因编辑技术"这类术语时,标准模型要么要…...

瀚高数据库安全版v4.5.9在Docker里跑起来后,别忘了做这7件小事

瀚高数据库安全版容器化部署后的7个关键运维动作 当你成功在Docker中运行瀚高数据库安全版v4.5.9后,真正的挑战才刚刚开始。许多开发者误以为容器启动就意味着工作结束,实际上,这只是数据库生命周期管理的起点。本文将带你深入探索那些容易被…...

STM32宏定义控制IO口实战:5分钟搞定LED闪烁(附完整代码)

STM32宏定义控制IO口实战:5分钟搞定LED闪烁(附完整代码) 引言 在嵌入式开发中,IO口控制是最基础也是最频繁的操作之一。对于STM32开发者来说,如何高效、简洁地管理GPIO端口直接影响着代码的可维护性和开发效率。传统方…...

保姆级教程:在Ubuntu上编译飞腾D2000 BIOS,搞定VPX-404国产板卡启动

国产飞腾D2000平台BIOS深度定制指南:从源码编译到VPX-404板卡适配实战 在信创产业快速发展的背景下,国产处理器与配套硬件的自主可控需求日益凸显。飞腾D2000作为国产高性能处理器代表,其BIOS定制能力直接关系到硬件平台的适配性与性能表现。…...

用Go语言搞GIS开发?手把手教你用Gogeo库处理10万+要素的空间分析(附性能对比)

用Go语言突破GIS性能瓶颈:Gogeo库处理10万要素的实战指南 当你在凌晨三点盯着进度条卡在78%的ArcGIS界面,咖啡杯已经见底,而项目截止日期就在几小时后——这种绝望每个GIS开发者都深有体会。传统桌面软件处理大规模空间数据时的性能瓶颈&…...

ESP8266嵌入式崩溃监控:基于看门狗的RTC上下文捕获

1. 项目概述ESPCrashMonitor 是一款专为 ESP8266 平台设计的轻量级嵌入式崩溃监控库,其核心目标并非替代系统级异常处理机制,而是构建一套面向固件开发者的可观察、可诊断、可复现的运行时健康状态监测体系。该库深度绑定 ESP8266 的硬件看门狗&#xff…...

低成本自动化方案:OpenClaw调用Qwen3.5-9B自建接口全记录

低成本自动化方案:OpenClaw调用Qwen3.5-9B自建接口全记录 1. 为什么选择自建模型接口 去年我尝试用OpenAI的API对接OpenClaw做自动化办公,结果一个月烧掉了200多美元——这还只是处理些简单的文档整理和邮件自动回复。痛定思痛后,我决定探索…...

OpenClaw+Qwen3-4B成本对比:自建模型vs商业API实测

OpenClawQwen3-4B成本对比:自建模型vs商业API实测 1. 为什么需要做这个对比 去年夏天,当我第一次用OpenClaw自动化处理周报时,发现一个惊人的现象:仅仅生成三份周报就消耗了价值5美元的API额度。这让我开始思考——对于个人开发…...

小团队协作方案:OpenClaw+Phi-3-vision共享知识库搭建

小团队协作方案:OpenClawPhi-3-vision共享知识库搭建 1. 为什么我们需要一个共享知识库 上周三晚上11点,我正试图从微信聊天记录里翻找三个月前的产品设计图。团队的设计师小A在飞书上发过最终版,但后来小B又迭代过一版,而我电脑…...

SecGPT-14B接口加密:保障OpenClaw安全任务通信隐私

SecGPT-14B接口加密:保障OpenClaw安全任务通信隐私 1. 为什么需要加密OpenClaw与SecGPT-14B的通信 去年我在调试一个自动化财务报告生成流程时,突然发现OpenClaw传输的报表片段竟然被公司内网监控系统捕获。虽然只是测试数据,但这个意外让我…...

资源推荐:无损音乐大合集!耳朵有福了

🎵无损音乐大合集!耳朵有福了周杰伦无损 / 抖音热歌 / 班得瑞 / 车载DJ / 欧美经典全部夸克网盘直取,存到手机随时听阅读约 3 分钟 建议收藏备用音乐这件事,花钱买会员还要被降音质,不如直接存无损版本。 这批音…...

OpenClaw+Phi-3-mini-128k-instruct:30分钟搭建个人搜索引擎

OpenClawPhi-3-mini-128k-instruct:30分钟搭建个人搜索引擎 1. 为什么需要个人搜索引擎? 上周我在研究某个开源项目时,发现官方文档分散在十几个不同页面中。每次用传统搜索引擎查找具体参数,要么被无关结果干扰,要么…...

自然语言处理期末通关指南:核心考点解析与实战预测

1. 自然语言处理基础概念与核心考点 自然语言处理(NLP)是让计算机理解、解释和生成人类语言的技术。期末复习首先要掌握三大核心模块:词法分析、句法分析和语义分析。举个实际例子,当你的手机语音助手回答"明天会下雨吗&…...

法律文书助手:OpenClaw调用Qwen3.5-9B生成合规合同草案

法律文书助手:OpenClaw调用Qwen3.5-9B生成合规合同草案 1. 为什么需要本地化的法律文书助手? 作为一名经常需要处理合同的法律从业者,我深知传统文书起草流程的痛点。过去要么手动从零开始撰写,要么使用SaaS平台的模板工具&…...

OpenClaw技能开发入门:为千问3.5-27B定制PDF解析模块

OpenClaw技能开发入门:为千问3.5-27B定制PDF解析模块 1. 为什么需要自定义PDF解析技能 去年我在处理一批学术论文时,发现OpenClaw内置的文本处理能力对复杂PDF支持有限。当需要从几百页的技术文档中提取特定章节时,要么手动复制粘贴&#x…...

网络安全学习(面试)

前言:今天就不学习,有更重要的事情明天写,还有一点感觉逻辑不通正题:面试题今天学习安全设备的使用依托全流量分析、NDR、EDR、WAF、蜜罐等多源安全设备我需要知道了,这上面几种设备是什么,做什么用的&…...