资讯动态

基于74LS283的十进制加减法器设计与BCD修正

发布时间:2026/10/29 13:21:56 来源:尧图企业网站定制
简介面向数字电路课程设计与实验学习者的一份十进制加减法器课程设计文档围绕一位十进制数的加、减运算电路展开可用于理解加减法器、编码译码与数码管显示的工作机制。压缩包内共1个doc文件约689KB集中收录设计指标、原理方框图、元器件介绍、设计原理、整体电路与安装调试等内容并给出Multisim8仿真实现思路。文档结合74LS283或4008、74LS86、74LS08等器件说明减法补码运算、加法进位处理及二进制码与8421BCD码转换附9716、9-72等测试示例和训练总结便于读者对照复现电路、梳理设计报告结构并排查常见故障。已有3873人学习适合课程设计参考与实验复盘。1. 一块加法器扛下加减两种运算十进制加减法器的难点在显示不在运算做十进制加减法器数字电路课程设计题目摊开看并不复杂0 到 9 十个输入按键、一个加减切换开关、数码管把结果显示出来。很多人第一反应是去找一块“十进制减法器”芯片翻遍手册才发现根本没有这种现成器件最后卡住的也不是怎么减而是 9716 这种超出 0 到 9 的结果怎么送进译码器——直接接上去数码管给的是一串看不懂的段码。我的做法是运算部分只保留一片 4 位超前进位加法器减法用异或门取反加一绕过去加法超过 9 就用第二片加法器加 6 修正。这套结构器件少、每一级都能单独测适合要在一两周内做出能上电演示、还能写进报告的场景。2. 需求拆解与器件选型把“显示 0 到 18”翻译成电路约束2.1 四条功能指标落到电路上是什么样子原始设计指标写的是“学习数字逻辑电路设计方法、熟知加减法器与译码显示原理、培养分析故障的能力”这些话写进报告没问题但没法直接指导接线。真正要落到电路上的是后面那三条功能描述0 到 9 十个字符和“”“-”各对应一个按键、一个开关控制加减、数码管显示结果。把它们翻译成电路约束才是一份方案真正的起点。第一条约束是输入编码。0 到 9 需要 4 位二进制8421BCD 的合法码只有 0000 到 10011010 到 1111 这六种状态在电路里必须保证不可能被置入。用十个拨码开关手工置数靠的是操作者自觉用按键加一片 10 线-4 线优先编码器74LS147非法码在物理上就产生不了。这一条直接决定输入模块选哪种做法也决定答辩时会不会被问“如果我按下两个键会怎样”。第二条约束是结果位宽。加法最大 9918需要两位十进制减法按题目要求被减数不小于减数结果落在 0 到 9一位就够。整条显示链路按两位设计个位一套译码加数码管十位一套。有人图省事只做一位97 就显示 6这是最典型的翻车点。第三条约束是运算方式必须由一个逻辑电平决定不能靠拔线、换接线柱来切换。演示现场没有时间改线报告里的方框图也画不出“手动改接”这种操作。所以加与减的切换必须收敛到一个开关 S1 上由它同时控制取反和进位输入。第四条约束是显示要稳定可读。数码管是共阴还是共阳、译码驱动器带不带锁存、限流电阻怎么取这些细节没定下来后面画总图时会反复返工。把结果空间算清楚也有好处0 到 9 两两组合共 100 种加法 100 个用例减法因为限定 A≥B 只剩 55 个合计 155 个输入组合——这就是验收时需要覆盖的全部空间不多不少。2.2 器件选型每片芯片在电路里扛什么活选型的核心思路是“运算只做一次修正单独做一次”。第一片 4 位全加器负责原始二进制加法第二片只负责在结果大于 9 时加 6两片的职责不重叠出问题时能立刻定位到是哪一级。器件型号在电路中的角色关键引脚替代方案4 位超前进位全加器74LS283第一片做 AB 与补码减法第二片做加 6 修正A1~A4、B1~B4、S1~S4、C0、C4CD4008四异或门74LS86对 B 的 4 位逐位取反一端统一接 S14 组输入输出74LS86 一片刚好够用二输入与门74LS08产生修正判断项 S3S2、S3S14 组与门74HC08三输入或门74LS27或非门取反把三个修正条件合成一个加 6 信号3 组输入三输入或门型号较少多绕一级反相七段译码驱动器74HC4511把 4 位 BCD 译成段码带锁存A B C D、a~g、LE、BI、LTCD4511七段数码管共阴 0.56 寸显示个位与十位共阴共阳要跟驱动器匹配共阳需换驱动极性拨码开关/按键—置入两个一位十进制数每位一个开关按键方案需加编码器74LS283 和 CD4008 功能上都能做 4 位加法但两者引脚排列完全不同不是“插上去就能换”的关系。做法是先在仿真里把 283 的封装定死报告里的引脚图、接线表全部按它画如果实验室只剩 4008就把整张接线表重画一遍而不是对着旧图硬改。这一点在动手前就要跟同组的人对齐否则两个人画的图对不上。另一处容易被忽略的是电平匹配。74LS 系列是 TTL 工艺5V 供电下输出高电平典型值在 2.7V 到 3.4V 之间74HC4511 是 CMOS 输入5V 供电时输入高电平门限约 3.5V。仿真的理想模型不体现这个差别实物上就可能出现数码管时亮时暗。稳妥的做法是给驱动 4511 的那几根信号线加 4.7k 上拉电阻或者直接选用 74HCT4511TTL 电平兼容。2.3 仿真环境与文件组织仿真在 Multisim 里做按“单元电路—模块电路—整机总图”三层组织文件。单元电路阶段每个文件只放一个待验证的小电路比如一片 283 加四个开关单独跑一遍 97 看 S 端和 C4 输出对不对模块电路把输入级、运算级、显示级分别接好最后才是整机总图。这样做的直接好处是总图跑不出正确结果时能退回到某一级单独复测而不是对着几百根线猜。文件命名上带版本号和日期改一版另存一份不要在同一个文件上反复覆盖。仿真电路里所有开关、数码管、电源都要有明确标注尤其是 S1 这个加减切换开关图上必须写清“0加、1减”。这条标注后面写报告、答辩讲原理时都要用到先标清楚能省掉很多口头解释。3. 总体架构四个模块与一条被开关翻转的数据通路3.1 模块划分与信号流整机拆成四个模块每个模块有明确的输入输出边界接口定义清楚之后可以几个人分头画。模块输入输出核心器件单独测试方法输入置数0~9 十个开关/按键4 位 A、4 位 B8421BCD拨码开关或 74LS147逐个置数看译码显示是否为对应数字运算方式选择开关 S1、B 的 4 位取反后的 B、进位输入 C074LS86拨动 S1量四个异或门输出是否翻转运算核心A、取反后的 B、C0和 S、进位 C4、修正后 BCD两片 74LS283 门电路分别测第一片和第二片的输出译码显示运算核心输出的 BCD两位数码管显示74HC4511×2 数码管单独给 0000~1001看段码信号的主通路是这样走的十个输入开关给出两个 8421BCD 数 A 和 BB 的 4 位先经过异或门阵列异或门的另一端统一接 S1第一片 283 把 A 和“处理过的 B”加起来同时接收 S1 作为进位输入第一片的 4 位和进入第二片 283 的 A 端修正信号决定第二片是加 0 还是加 6最后两片 283 的进位共同决定十位第二片的和决定个位分别送两片 74HC4511 译码驱动数码管。按这个划分每个模块都能脱离整机单独上电测试。实际调试时大部分故障都集中在模块交界处比如异或门输出到 283 的 B 端断了一根或者十位进位少接了一路模块内部反而不太容易出问题。3.2 S1 一个开关干两件事整个设计里最巧的一处是那个加减切换开关同时接到四个异或门的一个输入端和第一片 283 的进位输入 C0。它不是一个简单的“模式选择”而是直接参与运算。S1 电平异或门输出C0第一片 283 实际完成结果含义0B⊕0 B0A B加法和正常输出1B⊕1 B̄1A B̄ 1 A − B模 16减法C41 表示无借位道理在补码的定义里4 位二进制是模 16 运算B 的补码等于 B 取反加一所以 A B̄ 1 在模 16 意义下就等于 A − B。开关拨到减法一侧时四个异或门把 B 的每一位翻过来同时 C0 送一个 1 进去正好凑成那个“加一”。一个单刀开关没有增加任何器件就把加减两种运算合并到了同一片加法器上。这里有个必须讲清楚的细节C4 的含义在加法和减法下不一样。做加法时 C41 表示和超过 15是十位进位的来源做减法时 C41 表示 A≥B 没有借位C40 才表示不够减。题目限定了被减数不小于减数所以正常演示时 C4 恒为 1可以直接忽略或者反相后接一个“借位”指示灯提示操作者输入超出了约定范围。3.3 位宽、显示位与扩展余量第一片 283 是 4 位加法器两个 4 位输入最大能到 11111111结果 30两位十进制完全够用。但要注意输入被限制在 0 到 9所以真实的和最大只有 18这给修正逻辑留了很大余量——加 6 之后最大 24第二片的 4 位输出仍然不会溢出到需要三位显示。有一种常见的扩展设想是把电路改成两位十进制数相加减比如 9999。那就需要两片 283 级联成 8 位加法器低位片的 C4 接高位片的 C0同时每一级都要配独立的 BCD 修正和译码器件数量翻三倍调试量也翻三倍。课程设计阶段不建议这么做除非题目明确要求把一位十进制的加减法做到 155 个用例全部通过比做一个到处是错误的两级电路更有说服力。4. 运算通路实现补码减法、BCD 加法修正与译码显示4.1 减法通路四个异或门加一个进位输入减法通路的全部硬件就是一片 74LS86它内部有四个独立的二输入异或门刚好一位一个。接线时把四个异或门的一个输入端并在一起接到 S1另一个输入端分别接 B 的 B1、B2、B3、B4输出接第一片 283 的 B1、B2、B3、B4同时把 S1 接到 283 的 C0。以 9−7 为例走一遍A1001B0111。S11 时异或门输出 B̄1000C01第一片算的是 1001 1000 1 10010取低 4 位得 0010C41。0010 就是十进制 2十位显示 0个位显示 2符合 09−0702。真正容易出错的是位序。74LS283 的引脚命名里 B1 是最低位、B4 是最高位但封装图上四个引脚往往是从左到右排下来的看图时不注意就会把最高的 B4 接到最低位上去。表现出来就是置入 0111 结果出来一堆奇怪的值而且越看越像“少了一位”。校验办法很土但很有效接完之后逐位单比特测试分别置入 0001、0010、0100、1000数码管应该依次显示 1、2、4、8四个都对了位序就不会错。还有一处需要提前想好如果某次演示时被减数小于减数C4 会变成 0第一片输出的是差的补码而不是原码数码管显示的就是错的值。题目虽然限定了 A≥B但答辩老师很可能会问“如果 3 减 7 会怎样”。标准答案是此时 C40 表示产生借位需要对结果再取一次补码才是绝对值本设计按指标约定不做这一处理但 C4 反相后可以作为借位指示输出。4.2 加法通路和大于 9 时加 6 的修正逻辑加法的问题出在编码不在运算。第一片 283 给出的是纯二进制和而数码管和译码器只认 8421BCD一旦和超过 1001同一个四位码在两种编码体系里代表的意思就对不上了。55 得到 1010译码器不认97 得到 10000低四位是 0000直接显示会变成 0。修正的逻辑很简单凡和大于 9就给结果加 6让它跳过 1010 到 1111 这六个非法码。十进制和第一片输出 S3S2S1S0C4修正判断加 6 后显示910010否1001091010100是10000101211000是10010121511110是10101151600001是00110161800101是0100018把 10 到 18 这九种情况列成真值表化简修正条件可以写成 Y C4 S3S2 S3S1。三项分别对应“和已经超过 15”、“和在 12 到 15 之间”、“和在 10 到 11 或 14 到 15 之间”合起来正好覆盖 10 到 18。C4 这一项不要漏97 得到 10000 时低四位是 0000光看 S3、S2、S1 全是 0只有进位把它捞回来。用门电路实现时两个二输入与门74LS08分别算出 S3S2 和 S3S1再和一个 C4 一起送进三输入或门。三输入或门在常见型号里不好找多数人用 74LS27 三输入或非门再取一次反逻辑等价。修正动作由第二片 74LS283 完成它的 A 端接第一片的和 S1~S4B 端接成 (Y, Y, 0, 0)——也就是 Y 接 B4 和 B3B2、B1 接地C0 接地这样当 Y1 时它算的就是“和加 6”。第二片输出的低四位就是修正后的个位 BCD 码。这里有个必须说透的点十位不是只取第二片的进位。55 时第一片 C40第二片算 1010011010000C41十位由第二片给出97 时第一片 C41第二片算 000001100110C40十位得由第一片给出。所以十位信号应该是两片进位相或加一个二输入或门即可。只接其中一路就会出现“有的加法显示对、有的少个十几”的诡异现象。4.3 译码显示74HC4511 的三个控制脚译码用 74HC4511它把 4 位 BCD 译成七段码内部带锁存。三个控制脚必须接对否则会出现“数码管全灭”“数字卡住不变”这类看起来像芯片坏了的现象LT 是灯测试低有效正常工作时接高电平BI 是消隐低有效正常工作时接高电平LE 是锁存使能高电平时锁存、低电平时透明本设计不需要锁存直接接地。十位数码管的接法要简单得多它只会显示 0 或 1把十位信号接到 4511 的 D1最低位数据输入D2、D3、D4 接地即可不需要额外的译码逻辑。数码管选共阴还是共阳取决于驱动器的输出极性两者必须成对匹配。段输出到数码管之间串 330Ω 到 470Ω 的限流电阻Multisim 里可以用理想数码管省掉但画实物接线图时必须补上。仿真阶段还有一个常见误区虚拟器件没有扇出限制、没有传播延迟、没有电平门限仿真跑通不代表实物能跑通这一点在验收前要专门留出时间做实物验证。4.4 用脚本和模型把期望值钉死155 个输入组合靠手算期望值不现实也容易算错。做法是写几行脚本把期望值表生成出来仿真跑完直接对着表逐行勾错了立刻知道是哪个输入组合出的问题。# 生成 0~9 加减法的期望值表导出 CSV供 Multisim 波形逐条比对 import csv rows [] for a in range(10): for b in range(10): s a b # 加法结果按两位十进制记录十位在前、个位在后 rows.append((a, b, , f{s // 10}{s % 10})) if a b: # 减法只覆盖 A≥B 的 55 种组合 rows.append((a, b, -, f0{a - b})) with open(vec.csv, w, newline, encodingutf-8) as f: w csv.writer(f) w.writerow([A, B, OP, EXPECT]) w.writerows(rows) print(len(rows)) # 100 条加法 55 条减法共 155 条脚本只负责产生期望值不参与电路本身。它的价值在于把“我觉得应该对”变成一张可以打勾的表答辩时把这张表和仿真截图一起贴出来比口头说“全都测过了”有力得多。参数上唯一要改的是减法条件如果指导老师允许被减数小于减数if a b这一行就要去掉期望值也要改成对 16 取补后再求绝对值。另一件事是用一段行为级模型做交叉验证。门级电路看的是波形模型看的是逻辑两者对不上就说明某个门的接法有问题。// 4 位 BCD 加法修正的行为模型仅用于和门级仿真结果对照不参与综合 module bcd_add_cmp ( input [3:0] a, // 第一片 283 的 A 端 input [3:0] b, // 第一片 283 的 B 端 output [3:0] tens, // 十位数码管输入 output [3:0] ones // 个位数码管输入 ); wire [4:0] raw a b; // 第一片的和与进位 wire c4 raw[4]; // 第一片 C4 wire fix c4 | (raw[3] raw[2]) | (raw[3] raw[1]); // Y C4 S3S2 S3S1 wire [4:0] corr raw[3:0] (fix ? 5d6 : 5d0); // 第二片完成加 6 assign ones corr[3:0]; assign tens {3b000, c4 | corr[4]}; // 十位由两片进位相或 endmodule这段模型的三个中间信号和门级电路一一对应raw是第一片的输出fix是那两个与门加或门的合成结果corr是第二片的输出最后一行c4 | corr[4]对应的就是那一路容易漏掉的或门。仿真时把门级波形和模型输出并排放在一张图上任何一处不一致都能直接定位到具体是哪一级。5. 避坑与排查五处最容易翻车的地方5.1 输入与开关类第一处拨码开关一端悬空。现象是不碰任何开关数码管上的数字自己跳变或者手一靠近就变。原因是开关只接了信号线另一端没有确定的电平TTL 输入端悬空在逻辑上算高电平但抗干扰能力极差。解决办法是把每个开关做成单刀双掷一端接 VCC、一端接 GND中间抽头出信号或者用 10k 下拉电阻把每个输入位钉在低电平开关只负责往上拉。这一条在仿真里完全看不出来只有上实物才会暴露。第二处S1 的极性定义前后不一致。现象是选了加法结果却减了或者报告里原理图画的是“高电平加法”、测试步骤写的却是“低电平加法”。原因很简单取反加一的推导里 S11 对应减法写报告时两处描述没对齐。解决办法是在画总图之前就把约定写在图上S10 做加法、S11 做减法原理段、接线表、测试步骤三处统一用这一句。答辩被问到开关极性时直接指着图上的标注回答比临场回忆可靠。5.2 运算与进位类第三处B 的位序接反。现象是置入 7数码管显示出来的值怎么算都不对而且规律很像“乘二”。原因是 74LS283 的 B1 是最低位封装图却常常把 B4 画在左边按图从左往右接就反了。解决办法是接完立刻做单比特测试分别置 0001、0010、0100、1000显示 1、2、4、8 才算接对。这个测试只要两分钟能省掉后面几个小时的排查。第四处十位进位只取了一路。现象是 55 能显示 1097 却显示 06。原因是加法结果超过 15 时进位由第一片 283 给出第二片反而没有进位没超过 15 但大于 9 时进位由第二片给出。解决办法是加一个二输入或门把两片 283 的 C4 相或之后再送十位数码管。判断方法也简单把所有加法用例按“和是否大于 15”分成两组各测一遍只错其中一组就说明是这个问题。第五处TTL 驱动 CMOS 的电平余量不足。现象很有迷惑性——仿真全部正确实物上数码管有时正常有时乱码用手碰一下板子显示还会变。原因是 74LS 系列的高电平输出典型值只有 3.4V 左右而 74HC4511 在 5V 供电下的输入高电平门限约 3.5V刚好卡在临界点上。解决办法是给这几根信号线加 4.7k 上拉电阻到 5V或者把译码器换成 74HCT4511它的输入门限按 TTL 电平设计可以直接对接。5.3 显示与仿真类第六处其实也值得单列74HC4511 的控制脚处理不当。现象是数码管全灭或者数字卡在某个值上不跟着输入变。原因是 LE 悬空时电平不确定芯片可能进入锁存状态BI 被拉低则整片消隐。解决办法是把 LT 和 BI 都接高电平、LE 直接接地三个脚一个不留地处理掉。排查顺序建议是先量这三个脚的电平再看段输出最后才怀疑数码管本身——很多时候换了两块数码管问题其实在控制脚上。仿真层面还有一个心态上的坑Multisim 里的器件是理想模型没有扇出限制、没有毫秒级的传播延迟、没有接触电阻。仿真跑通只说明逻辑是对的不说明电路能焊出来。留出至少半天做实物验证比在仿真里反复优化波形更值。6. 验收与答辩用一组测试向量把电路自证清楚验收时最忌讳的是“我随便拨几下能显示就交差”。老师只要挑一个边界值就能问出问题。稳妥的做法是提前准备一张测试向量表挑八条覆盖所有分支的用例现场按顺序走一遍走完这张表电路的正确性基本就自证了。序号AB运算期望显示这条用例覆盖什么100加00全零输入检查上电初始状态245加09和刚好等于 9不触发修正355加10和刚好等于 10修正边界十位来自第二片进位497加16和超过 15十位来自第一片进位599加18最大和修正后仍不溢出697减02常规减法C41 无借位799减00差为零的边界850减05减数为零检查 B 取反后是否仍正确第 2、3、4 条是这张表的核心。三条用例分别对应“不修正”“第二片进位”“第一片进位”三种情况只要这三条全对BCD 修正和十位进位这两块最容易出错的地方就都被覆盖了。第 8 条也值得留减数为 0 时 B 取反变成 1111加一之后正好回绕到 0能顺带验证补码通路的完整性。答辩讲述的顺序我一般建议按“约束—架构—关键推导—现场演示”四步走。先讲那四条电路约束说明为什么结果要两位、为什么运算方式必须收敛到一个开关再讲四个模块的划分和信号流让老师知道你不是照着图抄的然后挑“为什么加 6”和“为什么十位要两片进位相或”这两个点做推导这两处最能体现是否真懂最后现场演示上面那张表。整个过程控制在五六分钟留出时间回答问题。有个细节别忽略提前准备好“如果被减数小于减数会怎样”的答案。这是最常被追问的一个问题答“会产生借位C4 变 0此时输出的是补码需要再取一次补码才是绝对值本设计按指标约定限定 A≥B所以没有做这一级”就够了既说明你知道原理也说明你清楚设计的边界在哪。从那以后我每次带人做这类课设都强制要求先写测试向量表再画总图——表写不出来说明需求还没想清楚画出来的图大概率要推倒重来。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑