简介:本资源是一份面向计算机专业本科生的《计算机组成原理》课程实验配套材料,聚焦多思实验平台下的累加器基础实验,帮助学习者深入理解数据通路、寄存器功能与微命令控制机制。资源以完整实验报告为核心,涵盖实验目的(掌握累加器作用、数据通路连接及微命令设计)、原理图说明、分步操作流程(如数据开关→R0、存储器读取→ALU运算→结果回存)、6组详细微命令配置表(含S3-S0、MW、EL等信号设置)及电路连接示意图,内容紧扣教学实践,适合作为课前预习、课中参考与课后复盘依据。压缩包仅含1个458KB的Word文档(.doc),结构清晰,含学号姓名填写栏、原理图标注、三张关键微命令对照表及存储器验证步骤,便于直接打印或编辑使用。目前已有1120人学习下载,是理解运算器-累加器-存储器协同工作的典型入门级实操资料。
1. 累加器实验不是背微命令表:它是计算机数据通路的“第一块拼图”,专治总线迷路、ALU失联、寄存器不响应三大玄学故障
你有没有在做《计算机组成原理》实验时,明明连线全对、开关拨到位、时序也点了Start,可LED灯就是不亮、存储器读不出数、R0死活不存值?不是芯片坏了,也不是软件卡了——是你的大脑还没建立起“数据在哪儿、往哪儿走、谁在控制它”这三重空间映射。这个多思平台上的累加器实验,恰恰就是专为打破这种黑匣子感而设计的:它用最简硬件链路(数据开关→总线→R0→ALU→DR1/DR2→存储器),把CPU一个周期内数据搬运、运算、暂存、写回的全过程,拆成6步可触摸、可单步、可验证的物理动作。它不教你怎么写Verilog,而是逼你亲手拨动8位开关、盯着74LS374的Q端电平变化、看RAM6116地址09H里那个十六进制数从00变成03——这才是真正能焊进你肌肉记忆里的组成原理。适合刚学完寄存器传输级描述、但一上实验台就手抖的新手;也适合带学生做课设、需要一份零依赖、纯硬件逻辑、无软件抽象层干扰的实操范本的某高校实验导师。
2. 从电路图到信号流:为什么必须用74LS374当R0?为什么S3S2S1S0要配1001?为什么MW=1却要先置0?
2.1 R0不是随便选的寄存器:74LS374的边沿触发特性决定了它只能当累加器,不能当地址寄存器
实验正文明确要求“加入一个74LS374芯片作为累加寄存器R0”。这不是凑数——74LS374是8位D型触发器,带三态输出(OE引脚),其核心特性是:仅在CP(Clock Pulse)上升沿采样D端数据,并在OE=0时将Q端数据驱动到总线上。对比实验中已有的74LS273(CP下降沿锁存)、74LS245(纯三态缓冲器),你会发现:只有74LS374能同时满足两个硬性条件——
① 在“DR1+DR2→R0”这一步,它必须在ALU运算完成(BUS-SW灯稳定)后的下一个CP上升沿才锁存结果,避免采样到ALU过渡态;
② 在“R0→存储单元”时,它必须通过OE控制,在总线空闲期才把数据推上去,否则会和AR或DR冲突。
所以当你在电路图里看到CP140(74LS374)的CLK连到时序发生器的CP1(而非CP0或CP2),且OE连到BUS-R0信号线,这就是设计者埋下的第一个伏笔:R0的更新时机,由CP1边沿+BUS-R0使能共同裁定,不是你想写就写的。若误用74LS273,你会在“DR1+DR2→R0”后发现R0值滞后一个周期,导致后续所有步骤错位。
2.2 S3S2S1S0=1001不是巧合:这是ALU选择“算术加法”的唯一编码,错一位结果变移位或逻辑与
表6-3中“DR1+DR2→R0”对应的S3S2S1S0=1001,这个编码直接决定ALU(74LS181)的工作模式。翻看74LS181真值表,S3~S0组合共16种,其中:
1001→Arithmetic Add(算术加法),Cn=0时执行A+B,Cn=1时执行A+B+1;0000→ 逻辑与(AND);0110→ 异或(XOR);1100→ 算术减法(A-B)。
实验中Cn被固定接低电平(Cn=0),所以S3S2S1S0=1001是唯一能触发加法的编码。若你手滑填成1000(算术传递A),结果就是R0原封不动;若填成0001(算术加1),结果就是R0+1,与预期B+R0完全不符。更隐蔽的坑是:S3S2S1S0必须在CP到来前至少20ns稳定,所以你在“设置控制信号4”前,必须先拨好开关、再点Start——不能边拨边点,否则ALU可能锁存到中间电平,输出不可预测。
2.3 MW=1却要先置0:存储器写脉冲的“预充电-写入-保持”三阶段时序,漏掉任一环就写不进RAM
表6-4中“R0→存储单元”对应MW=1(Memory Write Enable),但实验步骤强调:“设置控制信号5:存储单元地址→AR”后,要等一个周期,再“设置控制信号6:R0→存储单元”。这里藏着RAM6116的写时序秘密:
RAM6116是静态RAM,写操作需满足:
①地址建立:AR先将地址送至RAM地址线(A0~A10),并保持≥50ns;
②数据建立:R0数据经总线到达RAM数据线(I/O0~I/O7),并在WE下降沿前≥30ns稳定;
③写脉冲:WE(即MW)必须在地址和数据都稳定后,产生一个≥100ns的低电平脉冲。
所以“地址→AR”那步本质是预充电阶段,让地址线先就位;“R0→存储单元”才是真正的写脉冲触发。若跳过地址预置,直接MW=1,RAM会把R0当前值写入随机地址(通常是00H),导致你查09H永远是00。这也是为什么实验要求你用“工具/存储器芯片设置”去查09H——它强制你验证地址是否真的被AR锁存了。
3. 六步微命令实操:从拨码开关到LED验证,每一步都附带信号灯状态对照表
3.1 步骤1:数据开关→R0(A→R0),重点看BUS-R0和CP1的协同动作
# 操作序列(按实验报告顺序) 1. 将数据开关SW7~SW0拨为00000011(即十进制3,A=3) 2. 确保BUS-R0开关拨至ON(使能R0输出到总线) 3. 点击时序发生器Start按钮(触发CP1上升沿)逻辑说明:此步目标是让R0锁存开关值。关键信号路径是:SW→总线→74LS374的D端→CP1上升沿→Q端输出。此时BUS-R0必须为ON,否则R0的Q值无法驱动总线,LED灯不会亮,你无法确认R0是否真的存进去了。
参数说明:
- SW值必须是8位二进制,高位SW7是符号位(本实验不涉及负数,填0即可);
- CP1必须是上升沿触发,若误用CP0(下降沿),R0将锁存上一周期的残值;
- BUS-R0是使能信号,不是数据线,拨错位置会导致总线悬空(LED全灭)。
| 总线LED状态 | 含义 | 排查方向 |
|---|---|---|
| 全灭 | BUS-R0=OFF 或 CP1未触发 | 检查BUS-R0开关、时序发生器Step是否为1、Start是否点击 |
| 显示00000011 | R0成功锁存,且BUS-R0=ON | 正常,进入下一步 |
| 显示乱码(如00001010) | SW开关接触不良或CP1抖动 | 重新拨动SW,长按Start 1秒 |
3.2 步骤2&3:存储器操作数→DR2 + R0→DR1,双寄存器加载必须分时进行
# 操作序列(严格按周期顺序) 1. 将SW拨为00001000(B的地址08H) 2. 点击Start(CP1上升沿)→ 地址08H存入AR 3. 再次点击Start(CP1上升沿)→ RAM[08H]数据读出,经总线→DR2锁存 4. 将SW拨回00000011(A=3,确保R0值未被覆盖) 5. 点击Start(CP1上升沿)→ R0数据经总线→DR1锁存逻辑说明:DR2和DR1都是74LS273(下降沿锁存),但实验用CP1统一触发,靠的是总线数据切换时机。第2步后,AR=08H,RAM自动输出[08H]内容(假设你之前已向08H写入5),此时总线数据即为05H;第3步CP1上升沿虽不锁存DR2,但74LS273的下降沿锁存特性意味着:当CP1从高变低(即CP1下降沿)时,DR2才采样总线。而多思平台的CP1波形是方波,上升沿后必有下降沿,所以“点击Start”实际触发了完整周期。同理,第5步让R0值(03H)出现在总线,再经CP1下降沿锁存到DR1。
参数说明:
- DR2和DR1不能同时加载,否则总线冲突;必须先载B再载A,保证ALU输入端DR1=A、DR2=B;
- SW在步骤3后必须改回A值,否则第5步R0会加载错误值。
| DR2/DR1 LED状态 | 含义 | 排查方向 |
|---|---|---|
| DR2显示00000101(5) | B=5已加载成功 | 正常 |
| DR2显示00000000 | RAM[08H]为空或AR未锁存地址 | 检查步骤2是否执行、RAM是否初始化 |
| DR1显示00000011(3) | A=3已加载成功 | 正常 |
| DR1显示其他值 | R0被意外修改或SW未拨正 | 回溯步骤1,确认R0值 |
3.3 步骤4:DR1+DR2→R0,ALU运算结果必须经BUS-R0回显才能验证
# 操作序列 1. 设置S3S2S1S0=1001, Cn=0, BUS-ALU=ON, BUS-SW=OFF 2. 点击Start(CP1上升沿)→ ALU执行A+B,结果暂存于ALU输出端 3. 确保BUS-R0=ON,再点击Start(CP1上升沿)→ R0锁存ALU结果逻辑说明:ALU(74LS181)本身不带寄存功能,它的输出是组合逻辑,只在输入稳定时有效。所以“DR1+DR2→R0”实际是两拍操作:第一拍ALU计算出A+B(如3+5=8),第二拍R0在CP1上升沿采样ALU输出。但ALU输出必须先送到总线,才能被R0读取——这就要求BUS-ALU=ON且BUS-SW=OFF(避免开关数据抢占总线)。若BUS-ALU=OFF,总线无数据,R0锁存到00H。
参数说明:
- Cn必须为0,否则结果为A+B+1=9;
- BUS-ALU和BUS-SW是互斥开关,必须一开一关,否则总线竞争;
- R0锁存发生在第二拍,所以你要点两次Start。
| 总线LED状态(第二拍后) | 含义 | 排查方向 |
|---|---|---|
| 显示00001000(8) | A+B=8计算正确,R0已更新 | 正常 |
| 显示00000000 | BUS-ALU=OFF 或 ALU输入未稳定 | 检查S3S2S1S0、Cn、DR1/DR2是否已加载 |
| 显示00001001(9) | Cn=1被误接 | 检查Cn跳线是否接地 |
3.4 步骤5&6:存储单元地址→AR + R0→存储单元,写RAM前必须“地址先行”
# 操作序列 1. 将SW拨为00001001(C=09H) 2. 点击Start(CP1上升沿)→ AR锁存09H 3. 设置MW=1, BUS-R0=ON 4. 点击Start(CP1上升沿)→ R0数据写入RAM[09H]逻辑说明:这步最容易翻车。RAM写入不是“MW=1就完事”,而是AR先送地址→RAM地址线稳定→R0数据经总线到达RAM数据线→MW下降沿触发写入。所以步骤2是地址建立,步骤4才是写脉冲。若省略步骤2,AR仍是08H(上一步残留),R0值就会被写进08H而非09H。
参数说明:
- MW=1是写使能,但实际写入发生在MW从高变低的瞬间,所以“点击Start”本质是给MW一个下降沿;
- BUS-R0=ON确保R0数据能驱动总线,若为OFF,RAM收到的是高阻态,写入失败。
| 存储器查看结果(工具→存储器芯片设置→09H) | 含义 | 排查方向 |
|---|---|---|
| 00001000(8) | R0=8已成功写入09H | 正常 |
| 00000000 | 地址未送入AR或MW未触发 | 检查步骤2是否执行、MW开关是否拨对 |
| 00000101(5) | 写入了上一步的B值,AR仍为08H | 回溯步骤2,确认SW拨的是09H |
4. 避坑:六步操作中五个真实踩过的坑,现象、原因、解决全写透
4.1 现象:总线LED全灭,但SW拨码正确,CP1指示灯亮
原因:BUS-R0、BUS-ALU、BUS-SW三个总线使能开关全部处于OFF状态,总线呈高阻态,无任何设备驱动LED。
解决:按当前操作步骤检查使能开关——步骤1必须BUS-R0=ON;步骤4必须BUS-ALU=ON且BUS-SW=OFF;步骤6必须BUS-R0=ON。记住口诀:“谁输出谁使能,互斥开关不并存”。
4.2 现象:DR2 LED显示00000000,但RAM[08H]已确认写入05H
原因:AR未成功锁存地址08H,导致RAM仍在输出默认地址(如00H)的内容,而00H单元为空。
解决:回到步骤2,确认SW拨的是00001000(08H),且点击Start后,观察AR相关LED(通常标有AR0~AR3)是否亮起对应位。若AR灯不亮,检查AR的LDA信号(表6-1中LDA=1)是否接入、CP1是否连接AR的CLK。
4.3 现象:R0 LED显示00001000(8),但“R0→存储单元”后,RAM[09H]仍是00H
原因:MW=1开关拨错位置,实际接入的是MW的反相信号(如某些版本电路图中MW经反相器),导致MW=1时物理上是高电平,无法触发写入。
解决:用万用表(或平台电压检测工具)测RAM芯片的WE引脚电平——写入瞬间应为低电平(0V)。若为高电平,说明MW信号极性反了,需改接MW非门输出或检查电路图标注。
4.4 现象:ALU输出LED显示00001000,但R0锁存后仍是00000011(A值未变)
原因:R0的CLK引脚(CP140 Pin1)未连接到时序发生器的CP1,而是误连到CP0或悬空。R0无法在CP1上升沿采样,一直保持初始值。
解决:对照电路图连线表,找到CP140 Pin1(CLK),追踪其连线终点。多思平台中CP1输出标为“CP1”,必须与74LS374的CLK引脚直连,中间不能经过门电路。
4.5 现象:连续点击Start多次,R0值在3→8→11→19之间累加(如3+5=8,8+5=13…)
原因:DR2未清零,每次“存储器操作数→DR2”都复用上一次的B值,而B地址未变(仍为08H),导致DR2始终加载同一值,形成隐式循环加法。
解决:在每次“B+R0→R0”前,手动将SW拨至新地址(如08H→0AH),或在实验前用“工具→存储器芯片设置”清空RAM所有单元,确保DR2每次加载的都是预期值。
5. 微命令表不是抄答案:用真值表反推S3S2S1S0,用LED状态反向定位信号故障
5.1 别死记硬背表6-3:用74LS181真值表现场推导S3S2S1S0编码
你不需要背下16种S3S2S1S0组合。遇到新运算(比如要算A-B),直接查74LS181手册:
- 找到“Function Select”表格,列标题为S3 S2 S1 S0;
- 行标题为“Function”,找“Arithmetic Subtract A-B”;
- 对应单元格写的是
0110; - 再核对Cn:若要求无借位(即A≥B),Cn=0;若要求带借位(A<B),Cn=1。
所以A-B的微命令就是S3S2S1S0=0110, Cn=0。同理,A+1是0001,A AND B是0000。把真值表截图钉在屏幕边,比抄表6-3管用十倍——因为考试或调试时,你永远有手册,但未必记得住老师发的表格。
5.2 LED状态是硬件Debugger:三组灯对应三层数据流
多思平台的LED不是装饰,它是三组独立的数据探针:
- 上排LED(标BUS):总线实时数据,反映当前哪一设备在驱动总线(R0、ALU、SW);
- 中排LED(标AR/DR1/DR2):各寄存器内部值,不依赖总线,是寄存器真实锁存内容;
- 下排LED(标RAM):存储器当前地址单元内容,独立于总线,是RAM物理存储值。
当结果异常时,按此顺序排查:
- 看中排LED:DR1=03H?DR2=05H?若否,问题在加载步骤;
- 看上排LED:ALU运算时是否显示08H?若否,问题在ALU使能或输入;
- 看下排LED:RAM[09H]是否变?若否,问题在AR或MW。
这比看示波器还快——因为LED刷新率远高于人眼识别阈值,你一眼就能抓住数据流断在哪一层。
5.3 一个血泪经验:每次改微命令前,先用“工具→电路重置”清空所有寄存器
我带某高校学生做课设时,有组同学反复失败,最后发现:他们没意识到DR1、DR2、R0、AR都是带电保持的触发器,一旦上电,它们会保留上次实验的残值。比如步骤3“R0→DR1”前,DR1里还存着上一轮的5,导致ALU算的是5+5=10而非3+5=8。
从那以后我每次开始新实验,都强制走一遍:工具→电路重置→点Start一次(让所有寄存器归零)→再拨SW开始。这个习惯花了我10秒,却省了2小时排查时间。希望帮到你。
本文还有配套的精品资源,点击获取