ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Multisim实战:从74LS151到32选1数据选择器的扩展设计与仿真

Multisim实战:从74LS151到32选1数据选择器的扩展设计与仿真 第一次在Multisim里做数据选择器实验时我其实有点懵8选1用74LS151好办3根地址线、8个数据输入照着真值表一接就完事。可老师丢来一句“那就扩展到32选1吧”问题立刻变得具体起来——32路输入怎么排布5位地址线怎么分配多片74LS151的输出能不能直接连在一起这篇文章就是把我自己从8选1一路搭到32选1的完整过程、踩过的坑、以及Multisim里最让人头疼的数据库报错问题都整理出来。适合正在做数字电路课程设计、准备Multisim仿真的电子类学生也适合想搞明白“多片选择器怎么协同工作”的自学者。我会先讲清楚数据选择器的本质和扩展思路再给一份可以直接照着接线的Multisim搭建步骤最后集中解决仿真过程中最常见的几个报错和显示问题。1. 数据选择器的本质与扩展矛盾为什么32选1不能直接买1.1 数据选择器到底是什么数据选择器本质上就是一个“多路转单路”的开关网络。你可以把它想象成一个旋转式电风扇开关2档、3档、4档拧到哪个档位哪一路电器就通电。数字电路里的数据选择器比这个开关高级一点因为它用二进制地址来选择通道而不是靠人手动拧。更准确地说一个N选1数据选择器有N个数据输入端、log2(N)个地址选择端以及1个或1对互补输出端。当地址端给出一个二进制数k第k路数据输入就被“接通”到输出端。在数字系统中它最常见的用法是数据路由、时分复用、总线切换以及实现任意组合逻辑函数——是的数据选择器还能直接用来生成逻辑函数这一点很多初学者容易忽略。回到Multisim仿真我们用到的74LS151就是最经典的8选1选择器8个数据输入D0到D73个地址选择端A、B、C1个低有效使能端E也叫选通端STROBE以及两个互补输出Y和W。实际项目中如果只需要8路切换一片74LS151就足够了。1.2 74LS151的核心引脚与真值表74LS151是16脚DIP封装典型的TTL器件。这里先把关键引脚说清楚后面接线全靠它。数据输入D0~D78个地址输入A、B、C其中A为最低位C为最高位使能端E低电平有效E0时正常工作E1时输出被强制为无效状态输出端Y数据输出、WY的反相输出74LS151的真值表简化如下ECBAYW1XXX010000D0~D00001D1~D10010D2~D20011D3~D30100D4~D40101D5~D50110D6~D60111D7~D7有一个细节值得注意当使能端E为高时Y并不是高阻态而是被强制拉低到0。这个特性在后面的输出合并环节会起到关键作用也让多片151的输出不能直接并联在一起——因为每个输出都是推挽结构强行并联会打架。1.3 从8到32地址、数据、输出的三座“山”从8选1扩展到32选1表面看只是把路数从8翻到32实际上要跨过三座山。第一座山是地址位不够。8选1只需要3位地址32选1需要5位地址。这多出来的2位地址必须有人“接盘”不能悬空。第二座山是数据输入端不够一片151只有8个D端32路输入至少要4片。第三座山就是前面提到的输出冲突4片芯片的输出怎么合并成一路需要动一番脑筋。想清楚这三座山扩展的思路其实就浮出水面了用5位地址的低3位去控制每一片151的通道选择高2位去决定“当前该听谁的”——也就是片选。说到片选最直接的生成方式就是用3-8译码器74LS138把2位地址翻译成4个独立的使能信号。这个思路不是我想出来的而是数字电路里非常经典的“字扩展”方法和内存芯片扩展位宽/深度的思想完全一致。2. 扩展方案对比译码片选、树形级联与三态总线选哪个2.1 方案A74LS138译码片选低有效对接更省器件最正统的扩展方式是4片74LS151 1片74LS138。高2位地址S4、S3送进74LS138译码后得到4个输出信号分别接4片151的使能端E。因为74LS151的E是低电平有效而74LS138的输出恰好也是低电平有效——选中哪一路哪一路输出就是低电平——所以这两个芯片直接对接不需要额外加反相器。这一点必须强调很多新手一看74LS138输出低有效就习惯性地想加个反相器结果反而把逻辑搞反了。138选中某一路时输出0151在E0时正常工作这俩是天生一对。多画一个非门等于告诉151“你别工作”整个电路就废了。输出合并则用74LS32四2输入或门实现。前面提到未选通的151在E1时Y被强制为0所以同一时刻4个Y输出里只有一个可能是信号其余都是0。把4个Y接进或门最终输出就等价于“选中那一路的数据”。这本质上是一个“伪线或”结构用或门来合并是最稳妥的做法。如果硬把4个Y直接短接在一起仿真时虽然不一定立刻报错但从电路规范上讲是不合理的推挽输出直接并联属于设计禁忌。2.2 方案B树形级联为什么不够干脆树形级联的思路是先用4片151做第一级选择得到4个中间结果再用一片4选1或8选1做第二级选择从4个中间结果里挑一个输出。听起来很合理实际上也能工作但对比方案A有几个明显劣势。首先它多需要一个甚至两个芯片电路复杂度和布线成本都上去了。第二每一级选择器都有输出延迟两级级联的总延迟比“译码片选或门合并”方案更大在高频场景下更容易出时序问题。第三Multisim图纸面积翻倍排查错误的时候眼睛会看花。所以除非是实验题目强制要求“只能使用8选1选择器”否则我一般不建议用树形级联。能用译码器解决的问题没必要再用选择器套娃。2.3 方案C三态缓冲器上总线适合复杂系统但仿真易踩雷第三种思路是把每一片151的Y接到三态缓冲器比如74LS126由片选信号控制哪个缓冲器把数据送上总线。这在真正的数字系统中非常常见因为总线本来就是多方共享、分时驱动的。但在Multisim仿真里这种方案对新手并不友好三态缓冲器的控制端极性、总线节点的放置、总线标签的命名每一个环节都可能出问题报错信息还不直观。如果后面要做更复杂的多模块总线互联三态方案值得学习但就“32选1数据选择器”这个题目本身而言方案A已经足够干净、可靠、容易验证。用最朴素的电路实现最明确的功能才是课程设计该有的样子。2.4 我的选型结论方案A在Multisim里的综合优势我最终选定了方案A理由可以归纳成四句话器件数量少4片151加1片138加1片32就搞定逻辑关系直白低有效对低有效天然匹配输出合并简单可靠或门方案不会给仿真带来隐患排查问题方便每个芯片的角色非常单一哪里不对看哪里。3. Multisim分步搭建4片74LS151如何变成32路选择器3.1 建工程与元件放置打开Multisim我这边以14.0版本为例其他版本大同小异新建一个电路图文件。放元件的方法很简单Place Component或者在右侧元件面板直接搜索框输入型号。需要放置的元件清单如下元件数量查找方式74LS151D8选14TTL → 74LS 系列或直接搜索74LS15174LS138D3-8译码器1TTL → 74LS 系列或搜索74LS13874LS32D四2输入或门1TTL → 74LS 系列或搜索74LS32VCC电源符号1Sources → POWER_SOURCES → VCCGROUND地符号若干Sources → POWER_SOURCES → GROUND逻辑开关或数字常量若干Place Component → Switch 或 Digital搜索时注意型号后缀D/N通常不影响仿真功能D一般指DIP封装N也可能出现随便选一种即可。74LS151在Multisim里的符号中地址端一般标注为A、B、C数据端为D0~D7使能端为G或E注意看符号角落的引脚名。3.2 地址分配低三位进151高两位进13832路数据选择器需要5位地址我约定这5位是S4、S3、S2、S1、S0其中S4是最高位S0是最低位。地址编号从0到31对应的数据D0到D31。分配规则如下S0、S1、S2分别接到每片74LS151的A最低位、B、C最高位。S3、S4接到74LS138的A、B端74LS138的C端固定接地。这个接法一定不要搞错。很多同学喜欢“怎么顺手怎么接”最后测试时发现地址顺序全乱了那不是电路的问题是引脚映射的问题。为了保险建议在图纸上把每根地址总线用标签标注好比如标上“S0”“S1”这种网络名看起来一目了然。3.3 片选对接138的低有效输出直接驱动151的使能端74LS138的G1接VCCG2A和G2B都接地保证译码器始终处于使能状态。由于只需要4个有效输出我们把138的Y0、Y1、Y2、Y3分别接到4片151的使能端E上。对应关系是S4 S3138选中输出接哪片15100Y0U1负责D0~D701Y1U2负责D8~D1510Y2U3负责D16~D2311Y3U4负责D24~D31再次提醒不需要在138输出和151使能端之间加非门因为138选中时输出低电平而151刚好低电平使能。如果你在仿真中看到某一片该工作时反而不工作优先检查这里是不是多了一级非门或者使能端接错线了。3.4 输出合并或门把4个Y合成一路4片151的Y输出分别接到74LS32的三个或门上第一个或门U1_Y U2_Y第二个或门U3_Y U4_Y第三个或门第一个或门的输出 第二个或门的输出最终第三个或门的输出就是整个32选1数据选择器的最终输出Y_FINAL。我之前强调过未选通的151其Y输出为0所以或门合并逻辑上是正确的。但从时序上看这个或门网络会引入两级门的延迟约为几纳秒级别。在纯数字功能仿真中这个延迟一般不影响逻辑正确性但如果后续要接入高频时钟电路就要把这段延迟考虑进去。3.5 电源、地和悬空处理别让仿真卡在默认状态Multisim里放置的74LS系列数字芯片很多型号默认隐藏了VCC和GND引脚。也就是说你在原理图上看到的是一个没有电源脚的矩形符号但仿真模型内部依然需要供电网络。这里有一个非常实用的经验电路图里必须放置VCC和GROUND符号Multisim会自动把这些符号连接到所有数字芯片的隐藏电源引脚。注意是放“VCC”这个电源符号不是从元件库里随便拉一个DC电源。如果你用普通的直流电压源给芯片“供电”数字芯片反而可能识别不到电源网络仿真时直接报错或者输出全是未知态。另外所有数字输入引脚不能悬空。74LS138的C端我们已经接地了G2A/G2B接地G1接VCC都不悬空。74LS32有四个或门我们只用了三个剩下那个门也把两个输入端都接地避免浮空输入导致仿真输出出现红色未知状态。这种细节在原理图里看不出来但仿真一跑就露馅。4. 仿真验证策略静态点灯、动态扫描与毛刺观察4.1 先验证一片8选1再扩展到32选1电路搭完不要急着扔32路开关上去建议先把电路“降级”成8选1来验证。怎么做把74LS138摘掉或者直接把U1的使能端E接地其余几片151的E接VCC强制关闭。这时整个电路逻辑上就是一片8选1。用3位地址S0~S2去选通D0~D7确认输出Y_FINAL能跟着数据输入变化。这一步非常重要。一旦32路全接上出了问题你根本不知道是片选错了还是数据线接错了还是或门合并错了。先验证单一芯片相当于给整套电路打个底。4.2 静态测试开关组指示灯逐地址核对8选1验证通过后把138接回去恢复完整32选1。然后做静态测试数据输入端D0到D31全部接逻辑开关可以让每个开关接高电平或低电平输出端接一个指示灯Probe或者一个LED。然后按下面这张表逐地址测试测试项地址 S4S3S2S1S0数据端设置期望输出最低路00000D01其它全部0灯亮第一片最高路00111D71其它全部0灯亮跨片边界101000D81其它全部0灯亮跨片最高01111D151其它全部0灯亮第三片中间10101D211其它全部0灯亮第四片最后11111D311其它全部0灯亮反向检查00000D00D11灯灭为什么测试时要把其它数据端全部置0因为这样才能确认输出的1确实来自你期望的那一路而不是多路同时为1通过或门“凑”出来的。很多同学测试时偷懒数据开关随便拨结果某一路没接通但灯也亮最后查了半天才发现是另一路的1串过来的。4.3 动态扫描用地址序列发生器做31步巡检手工拨开关只能验证几个关键点不能保证每一路都正确。更高效的做法是用Multisim里的Word Generator字信号发生器产生地址序列自动从0扫描到31然后用逻辑分析仪或者示波器观察输出。操作思路是这样Word Generator的输出是16位总线我们取低5位接到S0~S4。把Word Generator设置为连续循环模式产生的数据依次是00000、00001、00010……直到11111然后再复位循环。数据输入端则可以全部接上固定的测试电平比如让D0~D31中奇数序号为1、偶数序号为0这样输出波形应该呈现规则的方波串一眼就能看出哪一路错了。这个方法比手工拨开关快得多也更接近真实系统的工作方式。数据选择器在实际工程中不可能靠人去拨地址线它一定是由某个控制器自动产生地址的。4.4 观察毛刺输出不是“立即稳定”的用示波器观察输出时你可能会在地址切换瞬间看到一些极窄的尖峰脉冲。这是正常的竞争冒险现象。原因是74LS138的译码输出在地址变化的瞬间可能出现短暂的中间态或者多个151的使能端同时发生跳变再加上或门网络的延迟最终输出就产生了毛刺。对纯逻辑实验来说毛刺不影响功能判断因为稳定后电压还是会落到正确电平。但如果这个32选1要接入后续计数器、寄存器毛刺可能被当作有效脉冲触发误动作。解决毛刺的标准方法是在输出端加一个D触发器或锁存器等地址稳定后再锁存数据。Multisim里可以直接放一个74LS74把Word Generator的时钟信号反相后作为锁存时钟输出到锁存器的D端这样就能避开毛刺。5. 常见问题排查数据库访问、仿真失败与显示异常5.1 “主数据库无法访问”背后的路径和权限问题这个话题放在最后写因为它是Multisim使用中遇到最多、但和电路本身无关的问题。启动软件时弹出“主数据库无法访问”“访问数据库发生错误”或者点击放置元件时找不到数据库绝大多数情况不是软件坏了而是数据库路径丢了或者权限不够。我的排查顺序是这样的第一以管理员身份运行Multisim。很多学校实验室电脑用的是受限账户软件装在Program Files目录普通用户没有完全控制权限数据库索引读不出来。右键图标选择“以管理员身份运行”往往能解决一半的问题。第二检查数据库路径。打开Options → Global Preferences → Paths看Database路径是否指向安装目录下的database文件夹。如果路径是空的或者指向了不存在的目录手动重新定位到例如“C:\Program Files (x86)\National Instruments\Circuit Design Suite\14.0\database”这样的位置。不同版本路径有差异以实际安装目录为准。第三如果路径正确但还是报错八成是配置文件损坏。关闭Multisim找到当前用户目录下的NI相关配置文件夹把和Circuit Design Suite有关的settings配置文件备份后删除再重启Multisim软件会重建配置。第四如果以上都无效就考虑“修复安装”。在控制面板的“程序和功能”里找到NI Circuit Design Suite执行修复一般能把数据库文件重新注册一遍。顺带提醒如果电脑上装了多个版本的NI软件不同版本抢数据库的情况也时有发生。我建议只保留一个常用版本工程文件用哪个版本做的就尽量用那个版本打开减少不必要的跨版本迁移。5.2 一仿真就报错的排查链路电源→地→悬空脚“仿真失败”或“输出全是红色X”是另一个高频问题。我踩过最冤枉的一次坑是整个电路画得漂漂亮亮仿真却动不了检查了一小时发现电源符号选错了——放了一个直流电压源而不是VCC符号。这里给出一套我自己的排查链路按顺序来基本能覆盖90%的情况。第一步检查图纸上有没有VCC和GROUND符号。74LS系列芯片的隐藏电源引脚依赖这两个全局网络供电。没有它们再好的电路都是一堆废铁。第二步检查芯片的G2A、G2B这类低有效使能引脚有没有正确接地。74LS138的G2A和G2B一旦悬空在仿真里极易被识别为故障状态译码器一直不工作所有输出都为高151全部被关闭输出自然没有任何变化。第三步检查所有数字输入引脚是否被强制为确定电平。数据端、地址端、使能端一个都不能悬空。Multisim仿真画布上悬空输入会以红色或蓝色X显示这个视觉提示非常有用直接用眼睛扫一遍图纸就能发现。第四步如果是多页电路或使用了总线检查总线标签是否匹配。很多仿真错误不是电气错误是你把总线名写错了一个字母Multisim认为它们是两根独立的线自然就断路了。5.3 仿真速度慢关动画、调步长、换仪表Multisim仿真大一点的电路时卡顿很明显。数据选择器本身不复杂但如果你用了大量逻辑开关、数码管、探针软件每刷新一次都要重新计算整个电路的逻辑状态速度自然就掉下来了。我常用的调整方法有三个。第一关闭仿真动画效果。在Options → Global Preferences → Simulation里把和Animation相关的选项去掉比如“Animate logic gates”“Animate wires”之类这样原理图上就不会实时显示信号流动仿真会快不少。第二适当调整仿真步长或交互仿真速度。在Simulate菜单下的相关设置里按需把采样点数调低一些或者在Interactive Simulation模式下降低刷新优先级。毕竟我们做数字逻辑仿真不需要像模拟电路那样精细的电压曲线粗糙一点完全不影响结果。第三用逻辑分析仪代替示波器观察多路波形。Multisim的虚拟示波器在每次波形刷新时开销很大而逻辑分析仪对数字信号的处理更高效。在验证32选1这种多路数字信号的场景逻辑分析仪是更合适的仪表。5.4 示波器占空比读不准时基与触发的组合问题如果你的数据选择器信号源是用方波驱动的——比如想观察某一路方波信号是否被正确选通——示波器上读占空比不准也是常见现象。原因基本可以锁定在时基、触发、测量方式这三件事上。先说时基。方波频率是1kHz周期就是1ms。示波器Timebase如果设成1ms/div屏幕上刚好显示一个周期勉强能看但想精确读占空比很难。把时基调整到0.2ms/div左右让屏幕上显示4到5个完整周期读起来才舒服。再说触发。触发源要选择你正在观察的那路输出通道触发模式选边沿触发触发电平设在信号幅值的中间位置。TTL电平信号一般是0到5V触发电平设在2.5V附近比较合适。如果触发电平设得太高或太低波形会抖动、乱跳占空比读数自然也不可靠。最后是测量方式。在Multisim的示波器面板上可以直接用光标测量波形的高电平时长和周期然后手动计算占空比。也可以切换显示数据让软件直接读出相关参数但不同版本的显示位置不一样不熟练的话还是用光标测量最稳。最后分享一个我个人的操作习惯画这种中规模的数字电路图时我会给不同的信号类别分配固定颜色——地址线用蓝色数据线用绿色片选信号用红色电源和地用默认黑色。Multisim支持给导线单独设置颜色右键导线就能改。这样做最大的好处是排查错误时不用拿着万用表一根一根对网络名眼睛扫一眼颜色就知道这根线属于哪个功能组。人脑对颜色的识别速度远远快于对文字标注的识别速度这个习惯帮我省了非常多的调试时间也推荐你试试。
返回列表