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

别再死记硬背了!用Verilog/SystemVerilog手把手教你理解Decoder、Mux和Selector的电路本质

从Verilog代码反推Decoder与Mux的硬件本质写给会看电路图但写不出代码的工程师当你第一次在教科书上看到2-4解码器的门级电路图时是否觉得那些与门排列得像积木一样整齐但当你打开编辑器准备用Verilog实现时却发现大脑一片空白——这正是数字电路学习者最常见的认知断层。本文将用可综合的代码示例和仿真波形带你穿透抽象符号与具体实现之间的迷雾。1. 解码器Decoder独热码生成器的两种面孔1.1 行为级描述用case语句直击本质2-4解码器的核心功能是将2位二进制输入转换为4个输出线上的独热码one-hot。下面这个行为级描述直接映射了其数学定义module decoder_2to4 ( input [1:0] sel, input enable, output reg [3:0] out ); always (*) begin if (!enable) out 4b0000; else case(sel) 2b00: out 4b0001; 2b01: out 4b0010; 2b10: out 4b0100; 2b11: out 4b1000; endcase end endmodule关键观察enable信号在这里扮演全局开关角色当其为低时强制所有输出归零这是实际芯片中常见的节能设计模式。1.2 结构级实现与门阵列的Verilog映射若要将教科书中的门级电路图直接转换为代码可采用结构级描述方式module decoder_2to4_structural ( input [1:0] sel, input enable, output [3:0] out ); wire [1:0] sel_n ~sel; // 生成选择信号的反相版本 assign out[0] enable sel_n[1] sel_n[0]; assign out[1] enable sel_n[1] sel[0]; assign out[2] enable sel[1] sel_n[0]; assign out[3] enable sel[1] sel[0]; endmodule两种实现方式的综合结果对比实现方式逻辑门数量关键路径延迟代码可维护性行为级由综合工具优化通常更短高结构级固定4个与门固定2级门延迟低2. 多路选择器Mux数据通路的选择艺术2.1 基础4-1 Mux的三种写法以下代码展示了同一功能的三种不同实现风格// 方案1直观的if-else嵌套 module mux4to1_if ( input [3:0] data, input [1:0] sel, output reg out ); always (*) begin if (sel 2b00) out data[0]; else if (sel 2b01) out data[1]; else if (sel 2b10) out data[2]; else out data[3]; end endmodule // 方案2简洁的case语句 module mux4to1_case ( input [3:0] data, input [1:0] sel, output reg out ); always (*) begin case(sel) 2b00: out data[0]; 2b01: out data[1]; 2b10: out data[2]; 2b11: out data[3]; endcase end endmodule // 方案3位选择技巧 module mux4to1_index ( input [3:0] data, input [1:0] sel, output out ); assign out data[sel]; // 利用Verilog的位选择特性 endmodule2.2 大型Mux的层次化构建当需要实现64-1这样的大型多路选择器时直接列举所有case项会变得笨拙。此时可采用树状结构module mux64to1_tree ( input [63:0] data, input [5:0] sel, output out ); wire [7:0] stage1_out; genvar i; generate for (i0; i8; ii1) begin : STAGE1 mux8to1 mux ( .data(data[i*8 : 8]), .sel(sel[2:0]), .out(stage1_out[i]) ); end endgenerate mux8to1 final_mux ( .data(stage1_out), .sel(sel[5:3]), .out(out) ); endmodule设计提示:8是SystemVerilog的位切片语法表示从i*8开始选取8位。这种模块化设计使代码更易维护且利于时序优化。3. 解码器与Mux的联合应用地址译码实战3.1 存储控制器中的典型应用假设我们需要设计一个存储控制器将4GB地址空间划分为四个1GB的区域module address_decoder ( input [31:0] addr, output logic [3:0] region_select ); always_comb begin region_select 4b0000; casez(addr[31:30]) 2b00: region_select[0] 1b1; // 0x00000000-0x3FFFFFFF 2b01: region_select[1] 1b1; // 0x40000000-0x7FFFFFFF 2b10: region_select[2] 1b1; // 0x80000000-0xBFFFFFFF 2b11: region_select[3] 1b1; // 0xC0000000-0xFFFFFFFF endcase end endmodule对应的数据选择模块module data_selector ( input [3:0] region_select, input [31:0] data_bank [3:0], output [31:0] selected_data ); assign selected_data (region_select[0]) ? data_bank[0] : (region_select[1]) ? data_bank[1] : (region_select[2]) ? data_bank[2] : data_bank[3]; endmodule3.2 仿真验证技巧验证解码器与Mux协同工作的测试平台示例module tb_decoder_mux; logic [1:0] sel; logic enable; logic [3:0] decoder_out; logic [3:0] mux_data 4hA; // 测试数据 logic mux_out; decoder_2to4 u_decoder(.*); mux4to1_case u_mux(.data(mux_data), .sel(sel), .out(mux_out)); initial begin $monitor(T%0t sel%b en%b dec_out%b mux_out%b, $time, sel, enable, decoder_out, mux_out); enable 0; #10 enable 1; for (int i0; i4; i) begin sel i; #10 assert (decoder_out (1 i)) else $error(Decoder error at sel%b, sel); assert (mux_out mux_data[i]) else $error(Mux error at sel%b, sel); end end endmodule4. 高级技巧参数化设计与性能权衡4.1 可配置位宽的设计模式使用SystemVerilog参数创建可复用的解码器模块module generic_decoder #( parameter INPUT_WIDTH 3 ) ( input [INPUT_WIDTH-1:0] sel, input enable, output logic [(1INPUT_WIDTH)-1:0] out ); always_comb begin out 0; if (enable) out[sel] 1b1; end endmodule4.2 面积与速度的优化策略不同实现方式在FPGA上的资源占用对比实现方案LUT使用量最大频率(MHz)适用场景行为级case4 LUTs450标准设计结构级与门4 LUTs380需要确定门级映射优先级编码3 LUTs420资源紧张设计在Xilinx Vivado中可以通过以下Tcl命令查看综合后的资源报告report_utilization -hierarchical report_timing_summary -delay_type min_max实际项目中遇到总线冲突问题时一个调试技巧是在Mux输出端添加断言检查assert property ((posedge clk) disable iff (!rst_n) $onehot0(selector_signal)) else $error(Multiple selection detected!);

相关文章:

别再死记硬背了!用Verilog/SystemVerilog手把手教你理解Decoder、Mux和Selector的电路本质

从Verilog代码反推Decoder与Mux的硬件本质:写给会看电路图但写不出代码的工程师 当你第一次在教科书上看到2-4解码器的门级电路图时,是否觉得那些与门排列得像积木一样整齐?但当你打开编辑器准备用Verilog实现时,却发现大脑一片空…...

Embulk高级用法指南:如何实现高效并行处理与数据分片

Embulk高级用法指南:如何实现高效并行处理与数据分片 【免费下载链接】embulk Embulk: Pluggable Bulk Data Loader. 项目地址: https://gitcode.com/gh_mirrors/em/embulk Embulk是一个强大的可插拔批量数据加载器,专为高效处理大规模数据迁移而…...

别再手动算潮流了!用MATLAB+Matpower搞定IEEE标准算例(附完整代码)

电力系统潮流计算实战:MATLABMatpower高效解决方案 在电力系统分析与设计中,潮流计算是最基础却至关重要的环节。传统的手工计算方式不仅耗时费力,而且难以应对复杂网络结构的分析需求。本文将带您探索如何利用MATLAB平台上的Matpower工具包&…...

为内部工具集成 AI 能力时选择 Taotoken 作为中间层的考量

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部工具集成 AI 能力时选择 Taotoken 作为中间层的考量 当企业计划为内部管理系统、数据分析工具等引入大模型能力时&#xff0…...

别再只盯着Transformer了!用PyTorch手把手复现加性注意力(Additive Attention),理解注意力机制的起点

从加性注意力到Transformer:PyTorch实战与演进逻辑解析 在Transformer架构横扫NLP领域的今天,回望2014年提出的加性注意力机制(Additive Attention),犹如在摩天大楼顶端俯瞰地基。这个由Bahdanau在神经机器翻译中首次提…...

买服装模板机选中捷、川田、杰克还是慧拿?紧凑型流水线升级,空间与适配才是核心决策

在服装智能制造全面普及的今天,线上模板机已经成为服装企业改造紧凑流水线、实现降本增效的核心装备。当前市场上,中捷、川田、杰克、慧拿四大品牌稳居全球服装自动化设备第一梯队,技术实力、产品品质、品牌口碑均处于行业头部水平。面对 “选…...

BooruDatasetTagManager AiApiServer深度配置:解决常见模型兼容性问题

BooruDatasetTagManager AiApiServer深度配置:解决常见模型兼容性问题 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager BooruDatasetTagManager是一款功能强大的AI图片标签管理工具&#xff…...

为Claude Code配置Taotoken解决密钥被封与Token不足难题

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置Taotoken解决密钥被封与Token不足难题 应用场景类,针对经常使用Claude Code但受限于官方限制的开发者…...

ARM+FPGA异构计算在能源电力领域的核心优势与应用实践

1. 项目概述:为什么是ARMFPGA?最近几年,在能源电力这个对可靠性和实时性要求极高的领域,我观察到一股明显的技术趋势:越来越多的项目开始采用“国产ARM处理器 FPGA”的异构计算架构。这不再是实验室里的概念验证&…...

TTK插件系统扩展指南:自定义Golden生成函数和输入数据生成函数的完整教程

TTK插件系统扩展指南:自定义Golden生成函数和输入数据生成函数的完整教程 【免费下载链接】ops-test-kit TTK(Ops Test Tool Kit)是CANN算子库提供的全链路、自动化、批量化算子测试框架,帮助开发者快速完成算子批量功能验证、性能…...

cann/cann-bench: Softmax算子API描述

Softmax 算子 API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台&#…...

从Dubbo超时到内存锯齿:高并发服务JVM调优与大对象排查实战

1. 项目背景与问题初现做后端服务开发,尤其是高并发场景下的核心服务,最怕的就是线上服务“抽风”——平时跑得好好的,一到业务高峰期就出现各种超时、失败。最近我就遇到了一个典型的案例,我们团队负责的一个音乐核心服务&#x…...

告别卡顿!手把手教你用UltraISO给老旧笔记本装上OpenEuler 22.03 LTS(保姆级BIOS设置指南)

告别卡顿!手把手教你用UltraISO给老旧笔记本装上OpenEuler 22.03 LTS(保姆级BIOS设置指南) 老旧笔记本性能跟不上现代操作系统?别急着淘汰它们!OpenEuler作为一款轻量级Linux发行版,特别适合为老设备注入新…...

CANN/cann-bench MHA算子API描述

MHA 算子 API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台&#xff0…...

终极Windows和Office激活指南:KMS智能激活工具三步永久激活方案

终极Windows和Office激活指南:KMS智能激活工具三步永久激活方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office突然变…...

CANN ops-fft未来规划:51+接口路线图与社区发展蓝图

CANN ops-fft未来规划:51接口路线图与社区发展蓝图 【免费下载链接】ops-fft ops-fft 是 CANN (Compute Architecture for Neural Networks)算子库中提供 FFT 类计算的基础算子库,采用模块化设计,支持灵活的算子开发和…...

IPv6网络规划必看:华为设备上DHCPv6与SLAAC(无状态地址分配)到底怎么选?

IPv6网络规划实战:华为设备地址分配方案深度解析 在IPv6网络部署的浪潮中,地址分配策略的选择往往成为困扰网络架构师的首要难题。当传统IPv4的DHCP方式遇上IPv6全新的SLAAC(无状态地址自动配置)机制,技术决策的复杂性…...

别再死记硬背了!手把手教你玩转COMSOL Desktop的窗口布局与自定义(附效率翻倍技巧)

别再死记硬背了!手把手教你玩转COMSOL Desktop的窗口布局与自定义(附效率翻倍技巧) 作为一名经常与多物理场仿真打交道的工程师,你是否曾因频繁切换窗口而打断思路?或是花费大量时间在菜单栏中寻找某个隐藏功能&#…...

【紧急预警】Perplexity即将下线v1历史索引接口(倒计时≤45天):迁移至Time-Aware Search API的6步合规过渡方案

更多请点击: https://kaifayun.com 第一章:Perplexity历史资料搜索 Perplexity 是一款以实时网络检索与引用驱动为特色的 AI 搜索工具,自 2022 年由 Aravind Srinivas、Denis Yarats、Johnny Ho 和 Andy Konwinski 共同创立以来,…...

别只盯着波特率!深入理解英飞凌MCMCAN的报文过滤与优先级处理机制

别只盯着波特率!深入理解英飞凌MCMCAN的报文过滤与优先级处理机制 在嵌入式系统开发中,CAN总线通信的稳定性和效率往往决定了整个系统的性能表现。许多工程师在配置CAN模块时,常常将注意力集中在波特率设置等基础参数上,却忽略了报…...

CANN/hccl参数面建链阶段故障诊断

参数面建链阶段 【免费下载链接】hccl 集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可靠的通信方案 项目地址: https://gitcode.com/cann/hcc…...

用emWin定时器给你的STM32 GUI界面“注入灵魂”:实现动态数据刷新与简易动画(基于WM_TIMER消息)

用emWin定时器为STM32 GUI注入动态交互的灵魂 在嵌入式设备的人机交互设计中,静态界面往往给人呆板的印象。想象一下工业仪表盘上凝固的数字,或是医疗设备上永不变化的指示灯——这种缺乏生命力的呈现方式不仅降低用户体验,还可能掩盖关键数据…...

dialoqbase入门指南:如何在5分钟内创建你的第一个AI聊天机器人

dialoqbase入门指南:如何在5分钟内创建你的第一个AI聊天机器人 【免费下载链接】dialoqbase Create chatbots with ease 项目地址: https://gitcode.com/gh_mirrors/di/dialoqbase dialoqbase是一款强大的开源工具,让你能够轻松创建AI聊天机器人。…...

Python开发者三步完成Taotoken接入并调用多模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Python开发者三步完成Taotoken接入并调用多模型 对于希望便捷使用多种大语言模型的Python开发者而言,通过一个统一的AP…...

Linux串口编程进阶:深入termios2结构体,搞定CH340/FTDI各种转接器的非标准波特率

Linux串口编程实战:破解CH340/FTDI非标准波特率适配难题 当你在工业物联网项目中尝试将某个9600bps的设备升级到115200bps时,可能会发现某些USB转串口适配器死活不配合——明明代码正确,波特率却始终无法生效。这不是你的错,而是…...

百度网盘Mac版终极破解指南:免费解锁SVIP高速下载体验

百度网盘Mac版终极破解指南:免费解锁SVIP高速下载体验 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版的下载速度限制而…...

setup-java企业级实践:大型项目的依赖缓存和版本矩阵测试

setup-java企业级实践:大型项目的依赖缓存和版本矩阵测试 【免费下载链接】setup-java Set up your GitHub Actions workflow with a specific version of Java 项目地址: https://gitcode.com/gh_mirrors/se/setup-java 在现代软件开发中,Java环…...

如何用ComfyUI-Impact-Pack实现专业级AI图像增强:解决细节缺失的终极方案

如何用ComfyUI-Impact-Pack实现专业级AI图像增强:解决细节缺失的终极方案 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. …...

反向Shell隐藏技术深度解析:从进程伪装到网络隐匿的攻防实践

1. 项目概述:从“隐藏”到“隐匿”的攻防博弈在网络安全领域,反向Shell是一种经典且常见的远程控制手段。简单来说,它让被控端主动连接控制端,从而绕过防火墙等入站限制。然而,一个明晃晃的、持续存在的网络连接或进程…...

企业级应用如何利用Taotoken实现稳定高效的多模型调度

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何利用Taotoken实现稳定高效的多模型调度 在构建基于大模型的企业级应用时,开发团队常常面临几个核心挑战…...