ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

74系列编码器译码器上板验证:74147、74248与Quartus II仿真踩坑指南

74系列编码器译码器上板验证:74147、74248与Quartus II仿真踩坑指南 简介面向数字电路课程与 EDA 仿真初学者这份 PDF 实验报告以数据编码器和译码器功能验证为主线完整覆盖优先 10-4 编码器 74147 的功能测试、译码显示电路 74248 的引脚分配与开发板下载验证、数据选择器 74151 和全加器 74183 的仿真流程并附有功能表、仿真波形图及 2 位串行进位全加器的扩展设计思路。资源包仅含 1 个 PDF 文件大小 1.85MB内容紧凑、步骤清晰适合用于实验预习、报告参考或复习备考。已有 636 人学习下载。通过这份报告读者可以深入了解集成组合电路的内部结构与功能验证方法熟悉 Quartus II 软件的原理图输入、仿真操作和下载验证流程同时也能借鉴实验小结中关于课前准备与细节把控的经验提升数字电路实验的完成质量。1. 数据编码器与译码器功能验证为什么仿真过了上板还会翻车第一次做这个实验的人往往把 74147 和 74248 当成黑盒功能仿真一对就急着下载结果数码管要么全灭要么乱码。问题不在芯片逻辑而在输入有效电平、未用引脚处理和共阴共阳匹配。这份实验指导书把优先编码器 74147、七段译码器 74248、数据选择器 74151、双全加器 74183 串成一条从原理图到下载的验证链路正好能把数电组合逻辑电路课本里的真值表变成波形和字形。适合正在填数电实验报告、或者想摸清 74 系列器件在 Quartus II 里怎么验证边界条件的读者。先记住结论功能仿真只证明逻辑上板验证还要管引脚和电气特性。2. 74147 优先编码器反码输出与 Quartus II 波形验证74147 是 TTL 优先编码器输入 n1~n9 低电平有效输出 nA~nD 是 8421 BCD 反码。设计上采用低电平有效是为了简化 TTL 输出级代价是阅读真值表时容易看反。实验第一步不是连原理图而是先把这张表的规律吃透。2.1 输入有效电平与优先级顺序先看功能表。注意表中的「1」和「0」都是针对引脚电平本身不是逻辑表达式里的真假值。有效输入低电平nD nC nB nA对应十进制无全部为高1 1 1 10n101 1 1 01n201 1 0 12n301 1 0 03n401 0 1 14n501 0 1 05n601 0 0 16n701 0 0 07n800 1 1 18n900 1 1 09输入 n9 优先级最高n1 最低。比如 n5 和 n9 同时为低时输出仍然按 n9 编码也就是 0110。这就是「优先」二字的核心含义也是实验报告里功能表最容易填错的地方。只测单输入有效看不出优先级必须构造两个以上同时有效的组合。2.2 原理图输入与行为模型对照在 Quartus II 里新建 Block Diagram/Schematic File在 symbol 库的mf分类下找到 74147放到图纸上。输入引脚 n1~n9 接到输入端口输出 nA~nD 引出到输出端口编译后就能做波形仿真。未用的输入引脚必须接高电平否则悬空输入会被当成有效低电平波形里出现莫名其妙的编码结果。为了核对功能表也可以把 74147 写成 Verilog 行为模型和原理图方案互相印证。下面这段代码可以直接用module encoder_74147( input wire n1, n2, n3, n4, n5, n6, n7, n8, n9, output reg nA, nB, nC, nD ); always (*) begin if (!n9) {nD, nC, nB, nA} 4b0110; else if (!n8) {nD, nC, nB, nA} 4b0111; else if (!n7) {nD, nC, nB, nA} 4b1000; else if (!n6) {nD, nC, nB, nA} 4b1001; else if (!n5) {nD, nC, nB, nA} 4b1010; else if (!n4) {nD, nC, nB, nA} 4b1011; else if (!n3) {nD, nC, nB, nA} 4b1100; else if (!n2) {nD, nC, nB, nA} 4b1101; else if (!n1) {nD, nC, nB, nA} 4b1110; else {nD, nC, nB, nA} 4b1111; end endmoduleif-else if的顺序就是优先级顺序从 n9 到 n1 依次判断。{nD, nC, nB, nA}是位拼接nD 是最高位。对照功能表看n90 时输出 0110n80 时输出 0111整个输出是 BCD 码的按位取反。仿真时应先让所有输入为 1看到输出 1111再依次拉低单个输入最后故意让 n5、n9 同时为低确认输出仍是 0110。如果仿真结果跟着 n5 走了说明优先级逻辑写反。2.3 波形激励与功能表判读在 Vector Waveform File 中把 n1~n9 分别设为固定电平或手动翻转。常见做法是给每个输入一段独立的高电平区间然后依次拉低间隔一个仿真周期。输出用 bus 形式显示看一眼就知道是否与功能表一致。要注意实验指导书里的波形图通常把 n1~n9 画成一组依次变低的曲线而不是同时变化这样便于逐项核对。编译时在 Assignments - Settings 里确认仿真工具已经挂上。Quartus II 自带波形仿真器可以直接用也可以挂 ModelSim 或 QuestaSim差别只是波形文件格式。功能仿真阶段不需要关心延迟所有输出边沿都和输入对齐这是正常的不代表电路没有延迟。3. 74248 译码显示电路引脚分配、七段字形与下载验证译码显示这步把抽象的逻辑电平变成了肉眼可见的数字是整份实验里最有反馈感的一节。但很多人栽在数码管类型上74248 输出高电平有效只能驱动共阴极数码管接反了全灭或显示反向段码。3.1 为什么是 74248 而不是 451174248 是 BCD 到七段译码器/驱动器输出高电平有效内置上拉电阻可以直接驱动共阴极 LED 数码管。常见的 4511 译码器数码管方案同样输出高电平但 4511 带锁存端 LE74248 没有输入一变字形立即跟随。如果实验板上已经放了 4511不能直接换 74248需要检查 LE 引脚和 LT、BI/RBO 辅助引脚的处理方式。从内部结构看74248 和 3线-8线译码器74138的译码逻辑同源都是对输入二进制码做与或展开。区别在于 74138 输出的是独热码74248 把 4 位 BCD 码映射成 7 段字形码。实验中 LT灯测试要接高电平BI/RBO灭零输入/输出悬空或接高否则灯测试信号会把全部段点亮掩盖真实字形看起来像芯片坏了。3.2 引脚分配SW 到 HEX0 的完整映射指导书给出了开发板上的具体引脚分配整理后如下输入信号FPGA 引脚输出信号FPGA 引脚sw[0]PIN_N25hex0[0]PIN_AF10sw[1]PIN_N26hex0[1]PIN_AB12sw[2]PIN_P25hex0[2]PIN_AC12sw[3]PIN_AE14hex0[3]PIN_AD11hex0[4]PIN_AE11hex0[5]PIN_V14hex0[6]PIN_V13这些约束可以在 Pin Planner 里手动填也可以写入 Tcl 脚本批量执行。以后换板子只要改引脚号脚本可以直接复用set_location_assignment PIN_N25 -to sw[0] set_location_assignment PIN_N26 -to sw[1] set_location_assignment PIN_P25 -to sw[2] set_location_assignment PIN_AE14 -to sw[3] set_location_assignment PIN_AF10 -to hex0[0] set_location_assignment PIN_AB12 -to hex0[1] set_location_assignment PIN_AC12 -to hex0[2] set_location_assignment PIN_AD11 -to hex0[3] set_location_assignment PIN_AE11 -to hex0[4] set_location_assignment PIN_V14 -to hex0[5] set_location_assignment PIN_V13 -to hex0[6]set_location_assignment是 Quartus II 的 Tcl 约束命令-to后面跟的是原理图里的网络名不是芯片物理引脚名。总线信号必须逐位分配不能写sw[3..0]一条命令代替。分配完必须重新全编译再看 Fitter 生成的 Pin-Out File确认没有引脚冲突或 I/O bank 电压报错。3.3 下载验证与字形表填写用 Programmer 下载 .sof 文件后把 SW[3:0] 从 0000 拨到 1001观察 HEX0 数码管。正常情况下显示如下D C B A显示字形点亮的段00000a b c d e f00011b c00102a b d e g00113a b c d g01004b c f g01015a c d f g01106a c d e f g01117a b c10008a b c d e f g10019a b c d f g从 1010 开始74248 的输出不再对应 0~9 字形不同批次可能显示为空白或特殊符号所以实验报告只要求填到 1001不要硬扩展。上板前用万用表量一下 HEX0 公共端是否接地。共阴极板子上插共阳数码管段码全部反相a 段该亮的时候灭该灭的时候亮现象非常像引脚分配错误。4. 74151 数据选择器与 74183 双全加器两类组合逻辑的验证路径数据选择器和全加器分别是组合逻辑里「选路」和「运算」的典型代表。两个芯片放在一起做实验能一次性把使能端、数据流、进位链这几类概念全部过一遍。4.1 74151 的使能端与数据流74151 是 8 选 1 数据选择器A2A1A0 是选择端D0~D7 是数据输入GN 是低有效使能端输出 Y 和 WN。WN 是 Y 的反相输出。A2 A1 A0GNYWNX X X1010 0 00D0~D00 0 10D1~D10 1 00D2~D20 1 10D3~D31 0 00D4~D41 0 10D5~D51 1 00D6~D61 1 10D7~D7验证时把 D0~D7 接不同的固定电平A2A1A0 用计数器或者手动开关依次变化。GN 接地观测 Y 是否等于当前选中的 D 输入。可以故意在某个时间段把 GN 拉高这时 Y 被强制为 0波形上是一条平直线正好用来验证使能端的作用。如果仿真时忘了接 GN输出恒为 0很容易误判成芯片损坏。我一般会在波形里把 A2A1A0 设置成递增的 repeat pattern一个周期跑完 8 个通道再回来翻功能表逐行核对。如果想扩展到 16 选 1需要两片 74151 加一个 2 线-4 线译码器用最高位选择哪一片的 GN 有效。这个实验没要求但理解 GN 的用途后可以自己追加验证思路是一样的。4.2 74183 的引脚连接与串行进位74183 是双 1 位全加器不是 4 位全加器。一个封装里有两个独立的全加器每个全加器有 A、B、CI 三个输入S、CO 两个输出。实验报告里如果写成 4 位全加器属于概念性错误器件手册上写得很清楚。第一步先验证 1 位全加器把其中一个全加器的 CI 接地A、B 接拨码开关观察 S 和 CO。第二步做 2 位串行进位把低位的 CO 接到高位的 CI低位片A0、B0、CI 接输入信号输出 S0、CO。高位片A1、B1、CI1 接低位片的 CO。最终结果{CO1, S1, S0}其中 CO1 是进位输出。验证样例可以参考下面这组A1 A0B1 B0CIS1 S0CO100000000011001101101000110111101串行进位的特点是高位的 S 比低位的 S 晚一个门级传输延迟因为进位要从低位一级一级传上去。功能仿真看不到这个延迟波形图上 S1 和 S0 的变化边沿在同一时刻这是正常的。做时序仿真时S1 的边沿会比 S0 明显晚一点那才是真实电路的行为。4.3 波形判读与常见误接把 A1A0、B1B0 和 {CO1, S1, S0} 在波形窗口里都改成 bus 显示用二进制或十六进制看一眼就能校对 ABCI 是否等于输出结果。常见的误接有两种一是高位片的 CI 直接接地而不是接低位片的 CO导致最高位加不上进位二是把 S0 和 S1 接反看上去结果总是差 2 的幂次。遇到波形和功能表对不上先检查输入 bus 的位序再检查进位链的连接最后查 GN 或 CI 这类控制端有没有被悬空。5. 用 Tcl 和 do 脚本把实验流程固化一键回归验证5.1 把功能检查写进 testbench原理图工程也可以配一个 Verilog testbench 做自动化验证。把第 2 章那段行为模型保存为encoder_74147.v再写一个 testbench 遍历所有输入组合用$display打印 PASS/FAIL。ModelSim 或 QuestaSim 里用 do 文件一次跑完vlib work vlog ../rtl/encoder_74147.v ../sim/tb_encoder_74147.v vsim work.tb_encoder_74147 add wave -radix binary /tb_encoder_74147/* run -all quit -simvlib work创建默认工作库vlog编译设计和 testbenchvsim加载仿真顶层add wave把信号按二进制加入波形窗口run -all跑完所有激励quit -sim退出仿真。在 ModelSim 里执行do sim.do终端会打印每次比较的结果出现 FAIL 就说明当前代码和功能表不一致。如果做无界面批量回归把vsim换成vsim -c并删掉add wave那行适合挂到 CI 里跑。5.2 三个容易漏掉的边界检查未用输入必须接固定电平。TTL 悬空输入表现为高电平但对低有效输入来说悬空引脚容易被相邻信号串扰出毛刺导致无输入时编码器输出乱跳。下载前至少区分两种仿真功能仿真只查逻辑时序仿真才查路径延迟。74183 串行进位的进位链毛刺只有时序仿真能看出来。引脚分配做完必须重新全编译只保存 Pin Planner 不编译下载的还是旧布局现象会非常诡异。把这三个检查点写进 do 文件末尾的$display输出里下次做实验只要看终端里有没有 FAIL 就行没有 FAIL 就说明功能表和实验报告可以直接用有问题也一翻日志就能定位到具体信号。本文还有配套的精品资源点击获取
返回列表