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

别再只写assign了!用三种Verilog建模风格重构你的三人表决器(行为级/数据流/门级)

别再只写assign了用三种Verilog建模风格重构你的三人表决器三人表决器是数字电路设计中的经典案例它能直观展示不同抽象层次的Verilog建模风格如何影响代码质量与硬件实现。很多工程师习惯性地使用assign语句完成所有设计却忽略了Verilog作为硬件描述语言的多层次表达能力。本文将带你用行为级、数据流级和门级三种风格重构同一个功能揭示代码风格背后的硬件思维差异。1. 基础回顾三人表决器的功能定义三人表决器的基本功能是当至少两人投赞成票时输出通过信号。设三个输入为A、B、C输出为F其真值表如下ABCF00000010010001111000101111011111从布尔代数角度输出F可以表示为F AB AC BC这个简单的逻辑函数将成为我们比较三种建模风格的统一基准。接下来我们将看到相同的功能可以用完全不同的代码风格实现每种风格都会在可读性、可维护性和硬件映射方面带来不同影响。2. 数据流建模简洁但缺乏层次数据流建模是大多数Verilog初学者的首选方式它直接使用assign语句描述信号间的逻辑关系。对于三人表决器最直接的实现如下module voter_dataflow( input A, B, C, output F ); assign F (A B) | (A C) | (B C); endmodule这种风格的优势非常明显代码极其简洁一行完成核心逻辑与布尔表达式直接对应便于理解综合结果通常较为高效但它的局限性也不容忽视当逻辑复杂度增加时assign语句会变得冗长难读缺乏清晰的层次结构不利于模块化设计对时序控制无能为力提示在简单的组合逻辑中数据流风格依然是最佳选择之一但工程师应该掌握更多建模方式以应对不同场景。3. 行为级建模面向过程的设计思维行为级建模使用always块描述电路功能更接近软件编程风格。以下是三人表决器的行为级实现module voter_behavioral( input A, B, C, output reg F ); always (*) begin case ({A,B,C}) 3b011, 3b101, 3b110, 3b111: F 1b1; default: F 1b0; endcase end endmodule这种风格的特点包括使用case语句清晰列出所有有效组合输出必须声明为reg类型尽管综合后仍是组合逻辑更易于扩展复杂条件判断行为级建模的适用场景需要复杂条件分支的逻辑包含状态机的设计需要显式时序控制的情况与数据流风格相比行为级描述通常会产生相似的硬件结构但代码更易于维护和修改。例如如果需要改为必须全票通过的规则只需调整case语句的条件即可。4. 门级建模最接近硬件的描述方式门级建模直接实例化基本逻辑门提供了最高级别的硬件控制能力。三人表决器的门级实现如下module voter_gate_level( input A, B, C, output F ); wire and1_out, and2_out, and3_out; and AND1(and1_out, A, B); and AND2(and2_out, A, C); and AND3(and3_out, B, C); or OR1(F, and1_out, and2_out, and3_out); endmodule这种风格的显著特征明确显示了AND和OR门的具体连接需要手动声明所有中间连线代码量明显多于前两种风格门级建模的典型应用场景需要精确控制门级实现的设计定制单元库的开发教育目的展示硬件底层结构虽然现代设计很少直接使用门级描述但理解这种风格有助于调试综合后的网表因为综合工具生成的电路通常以门级网表形式呈现。5. 三种风格的对比分析与选择建议为了更清晰地比较三种建模风格我们总结以下对比表格特性数据流风格行为级风格门级风格抽象层次中等较高低代码简洁度★★★★★★★★★★★可维护性★★★★★★★★★★硬件控制精度★★★★★★★★★★时序处理能力有限强大有限适合场景简单组合逻辑复杂控制逻辑精确硬件实现在实际项目中我的经验法则是优先考虑行为级描述特别是当逻辑可能变更或需要添加时序控制时简单逻辑用数据流对于如门控、选择器这类简单功能assign语句更直观慎用门级描述除非有特殊需求否则应信任综合工具的优化能力6. 深入理解综合后的硬件差异虽然三种风格的代码完全不同但经过综合优化后它们可能会产生非常相似的硬件结构。使用Synopsys Design Compiler对三种实现进行综合得到的面积报告如下数据流风格 Combinational area: 12.5 μm² 行为级风格 Combinational area: 12.5 μm² 门级风格 Combinational area: 13.2 μm²有趣的是门级描述反而略大一些这是因为综合工具对前两种风格进行了更积极的优化。这个结果印证了现代综合工具的智能化程度——工程师无需过度关注门级实现细节而应该把精力放在更高层次的功能描述上。7. 进阶技巧混合使用多种风格专业的设计往往混合使用多种建模风格。例如可以在同一个模块中module voter_mixed( input A, B, C, output F ); // 数据流风格用于简单信号 wire any_two (A B) | (A C); // 行为级风格处理复杂条件 always (*) begin if (any_two | (B C)) F 1b1; else F 1b0; end endmodule这种混合方式结合了各种风格的优点既能保持代码清晰度又能灵活处理不同复杂度的逻辑部分。关键在于保持一致的代码规范合理划分功能块添加必要的注释说明在大型项目中通常会约定不同层次模块的建模规范例如顶层模块使用行为级描述基础功能模块使用数据流描述特定工艺相关模块可能使用门级描述8. 验证与调试确保功能一致性无论采用哪种风格功能验证都是必不可少的。以下是一个简单的测试平台可用于验证三种实现的功能一致性module tb_voter(); reg A, B, C; wire F_dataflow, F_behavioral, F_gate; // 实例化三种实现 voter_dataflow u1(A,B,C,F_dataflow); voter_behavioral u2(A,B,C,F_behavioral); voter_gate_level u3(A,B,C,F_gate); initial begin // 遍历所有输入组合 for (int i0; i8; i) begin {A,B,C} i; #10; // 验证三种实现输出一致 if (F_dataflow ! F_behavioral || F_behavioral ! F_gate) begin $display(Error at %b, {A,B,C}); $finish; end end $display(All tests passed!); $finish; end endmodule这个测试平台验证了三种实现在所有输入组合下的输出一致性确保它们功能等效。在实际项目中还需要考虑添加时序检查验证边界条件测量功耗和性能指标9. 工程实践中的建模选择经过多个项目的实践我发现建模风格的选择往往取决于以下因素项目阶段的影响原型开发阶段倾向于使用高层次的行为描述便于快速迭代性能优化阶段可能引入更多数据流描述进行精细调整后端集成阶段可能需要添加特定工艺的门级约束团队协作考量大型团队需要统一的编码规范模块接口通常约定使用特定风格的描述文档需要明确说明各模块的抽象层次工具链支持现代综合工具对行为级描述的支持越来越好形式验证工具可能对某些风格有偏好功耗分析工具需要特定风格的约束在最近的一个通信芯片项目中我们采用了分层策略算法层使用高抽象度的行为描述接口层使用数据流描述确保时序关键路径部分采用带约束的综合指令 这种混合方法既保证了开发效率又满足了性能要求。

相关文章:

别再只写assign了!用三种Verilog建模风格重构你的三人表决器(行为级/数据流/门级)

别再只写assign了!用三种Verilog建模风格重构你的三人表决器 三人表决器是数字电路设计中的经典案例,它能直观展示不同抽象层次的Verilog建模风格如何影响代码质量与硬件实现。很多工程师习惯性地使用assign语句完成所有设计,却忽略了Verilo…...

基于MCP3421高精度ADC的电池电量监测方案设计与实践

1. 项目概述:为什么需要一个专用的电量监测板?在嵌入式开发和物联网设备中,电池供电是常态。无论是手持仪表、无线传感器节点还是便携式医疗设备,准确掌握电池的剩余电量,就像司机需要时刻关注油表一样,是确…...

智能体的真正核心:从“会聊天的大模型”到“会做事的系统”

大模型虽能"理解语言、回答问题、生成内容",但仅停留在对话层面无法构成真正智能体。智能体需具备理解目标、感知状态、拆解任务、选择工具、观察反馈、动态修正等闭环能力。其核心结构包括输入感知、记忆、规划、行动、反馈、评估六模块,形成…...

3步极速配置:LXMusic音源完全指南

3步极速配置:LXMusic音源完全指南 【免费下载链接】LXMusic音源 lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/guoyue2010/lxmusic- 作为全网音乐资源的整合引擎,LXMusic音源为你提供一站式音乐解决方…...

鸿蒙心理测评模块实战|PHQ-9/GAD7双量表答题、实时计分与结果本地化存储

一、前言 心晴驿站已正式稳定上架华为应用市场,所有专栏内容均基于线上真实版本复盘产出,所有逻辑、代码、优化方案均通过真机测试、性能校验、隐私合规审核,具备完整落地与参赛复用价值。 在前八篇专栏中,我们完成了项目整体架构…...

保姆级教程:用YOLOv8和Pyside6从零搭建一个火焰烟雾检测桌面应用(附完整源码和数据集)

从零构建火焰烟雾检测桌面应用:YOLOv8与Pyside6实战指南 在工业安全、家庭监控和实验室防护场景中,火焰与烟雾的早期检测至关重要。传统监控系统依赖人工值守或简单传感器,难以实现精准的实时预警。本文将带你用Python生态中最前沿的YOLOv8目…...

ROS Melodic下用Mapviz+天地图API显示GPS轨迹(保姆级避坑指南)

ROS Melodic下Mapviz与天地图API的高精度GPS轨迹可视化实战 在机器人定位与导航开发中,将GPS轨迹叠加到卫星地图上是验证算法效果的基础需求。对于国内开发者而言,直接使用Google Maps等国际服务常面临访问限制和偏移问题。本文将深入讲解如何在ROS Mel…...

彻底告别iPhone过热降频!thermalmonitordDisabler让你的设备性能满血释放

彻底告别iPhone过热降频!thermalmonitordDisabler让你的设备性能满血释放 【免费下载链接】thermalmonitordDisabler A tool used to disable iOS daemons. 项目地址: https://gitcode.com/gh_mirrors/th/thermalmonitordDisabler 你是否曾经在游戏激战中突然…...

如何快速获取网易云QQ音乐歌词:3大场景解决你的本地音乐无歌词困扰

如何快速获取网易云QQ音乐歌词:3大场景解决你的本地音乐无歌词困扰 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为本地音乐播放时没有歌词而烦恼吗&am…...

查询不准?响应延迟?Perplexity阅读推荐失效全归因,一线SRE团队72小时压测实录

更多请点击: https://intelliparadigm.com 第一章:查询不准?响应延迟?Perplexity阅读推荐失效全归因,一线SRE团队72小时压测实录 问题爆发现场还原 凌晨2:17,Perplexity阅读推荐API的P99延迟突增至8.4s&a…...

联想笔记本BIOS隐藏设置解锁工具:专业指南与深度解析

联想笔记本BIOS隐藏设置解锁工具:专业指南与深度解析 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具,例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirrors/le…...

C51内存优化:DATA段间隙问题解决方案

1. C51内存空间中的DATA段间隙问题解析作为一名长期使用Keil C51开发工具链的嵌入式工程师,我经常遇到内存空间利用率问题。最近在调试一个使用bit变量的项目时,发现链接器在寄存器组和bit区域之间留下了15字节的间隙。这种内存浪费在资源紧张的8051系统…...

Perplexity物理检索突然失灵?2024Q3模型更新引发的3类知识断层(附中科院物理所认证的降级兼容方案)

更多请点击: https://intelliparadigm.com 第一章:Perplexity物理知识查询 Perplexity 是一款基于大语言模型的实时知识检索工具,其核心能力在于融合权威学术资源(如 arXiv、APS、IOP、NASA ADS 等)与动态网页索引&am…...

有钱才懂爱:赚到钱你再去谈男女关系,你会发现,择偶逻辑都变了。 没钱的时候,你看到的是一堆条件:房子、车子、工作、家境。 有钱了之后,那些条件你都自己有了

先谋生,再谋爱:有钱之后,我才看懂了男女关系的真相 目录 先谋生,再谋爱:有钱之后,我才看懂了男女关系的真相 没钱的时候,你谈的从来都不是爱情,是“生存合伙” 钱是最好的过滤器,它能帮你滤掉所有的“功能性需求” 底层的“忠诚”,很多时候只是“没有选择”的同义词…...

蓝桥杯单片机备赛:AT24C02读写避坑指南(附STC15完整工程)

蓝桥杯单片机备赛:AT24C02读写避坑指南(附STC15完整工程) 在蓝桥杯单片机竞赛中,AT24C02这颗小小的EEPROM芯片常常成为决定胜负的关键。作为参赛选手,你可能已经掌握了I2C协议的基本原理,但在紧张的比赛环境…...

ICode竞赛Python闯关秘籍:用if else逻辑解锁三级训练场

1. ICode竞赛Python三级训练场通关指南 第一次接触ICode竞赛的Python三级训练场时,我和很多初学者一样被那些复杂的路径判断搞得晕头转向。直到我发现if else语句就像游戏中的"选择道具",整个编程过程突然变得清晰起来。ICode竞赛通过角色控制…...

Steam挂刀行情站:如何利用开源工具实现Steam饰品交易自动化监控

Steam挂刀行情站:如何利用开源工具实现Steam饰品交易自动化监控 【免费下载链接】SteamTradingSiteTracker Steam 挂刀行情站 —— 24小时更新的 BUFF & IGXE & C5 & UUYP & ECO 挂刀比例数据 | Track cheap Steam Community Market items on buff.…...

Flutter代码混淆实战:五大常见问题与解决方案详解

1. 项目概述:为什么Flutter代码混淆是“必修课”而非“选修课”最近在跟几个独立开发者和中小团队聊Flutter应用上架后的安全状况,发现一个挺普遍的现象:很多人对Flutter的代码混淆要么是“听说过但没做过”,要么是“做了但问题一…...

5分钟掌握FanControl:Windows风扇控制终极指南,告别噪音与过热烦恼

5分钟掌握FanControl:Windows风扇控制终极指南,告别噪音与过热烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode…...

全志Tina Linux嵌入式开发实战:从环境搭建到系统定制全流程指南

1. 项目概述:为什么需要一份系统级的开发指南?在嵌入式Linux开发领域,尤其是基于全志这类主流国产芯片平台的开发,新手和老手都会面临一个共同的困境:官方文档往往散落在各处,有SDK的配置说明、有内核的移植…...

告别终端!为OpenWrt打造Web版脚本管家:Luci插件开发实战与全功能解析

1. 为什么我们需要Web版脚本管家? 每次在OpenWrt上折腾脚本都要打开终端,这对新手来说简直是噩梦。记得我第一次给路由器写脚本时,光是学会用vi编辑器就花了半小时,保存退出时还差点把系统搞崩。后来发现用WinSCP上传脚本还要改权…...

Upscayl终极指南:如何用免费AI工具让模糊图片变高清

Upscayl终极指南:如何用免费AI工具让模糊图片变高清 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 你是否曾因照…...

5G基站氮化镓功率放大器模块:技术原理、设计挑战与应用实践

1. 项目概述:当5G基站遇上氮化镓“心脏”最近,业内一个消息引起了我的注意:三菱电机开始提供用于5G Massive MIMO基站的氮化镓(GaN)功率放大器(PA)模块的样品。这听起来可能有点技术化&#xff…...

终极指南:3步快速掌握日语漫画OCR识别神器MangaOCR

终极指南:3步快速掌握日语漫画OCR识别神器MangaOCR 【免费下载链接】manga-ocr Optical character recognition for Japanese text, with the main focus being Japanese manga 项目地址: https://gitcode.com/gh_mirrors/ma/manga-ocr 你是否曾经面对日文漫…...

第11代酷睿工业主板PICO-TGU4:边缘AI与机器视觉的紧凑型解决方案

1. 项目概述:当紧凑型工业主板遇上第11代酷睿在工业自动化、边缘计算和智能零售这些领域里,我们常常面临一个经典的矛盾:一方面,应用场景对计算性能的要求越来越高,无论是机器视觉的实时图像处理,还是AI推理…...

Label Studio终极指南:高效构建多模态数据标注平台

Label Studio终极指南:高效构建多模态数据标注平台 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/la/label-studio 在人…...

Juniper设备密码恢复实战:从标准流程到疑难故障排除

1. Juniper设备密码恢复标准流程详解 遇到Juniper设备密码丢失的情况时,标准的单用户模式恢复是最常用的解决方案。这个过程看似简单,但实际操作中每个步骤都有需要注意的细节。下面我会结合自己处理过的几十个案例,把标准流程拆解成可落地的…...

Auto-Lianliankan:3步实现Python图像识别破解连连看

Auto-Lianliankan:3步实现Python图像识别破解连连看 【免费下载链接】Auto-Lianliankan 基于python图像识别实现的连连看外挂,可实现QQ连连看秒破 项目地址: https://gitcode.com/gh_mirrors/au/Auto-Lianliankan 在游戏自动化领域,Au…...

论文小白必看!书匠策AI到底怎么帮你把毕业论文“拼“出来?看完这篇你就全懂了

各位还在深夜对着Word文档抓头发的同学,先别急着崩溃,今天咱们用最轻松的方式,聊聊一个正在帮无数毕业生"逆天改命"的工具——书匠策AI。 官方网址:** 官网直达:www.shujiangce.com*,微信搜一搜…...

VideoDownloadHelper:三分钟掌握浏览器视频下载技巧,告别观看限制

VideoDownloadHelper:三分钟掌握浏览器视频下载技巧,告别观看限制 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是…...