【自学嵌入式:计算机组成原理】48. - 49.

48. 修复一个短路的小细节

事先说明,内存中存储的数据如下:
image
第一个周期有一个严重的问题!!!!!!!
最开始程序计数器EN打开后,传递时钟信号后,忘了清除状态,后来第二个周期开始改正了
image
清除全部状态,打开PC的OE,打开MAR的WE,然后拍一下按钮,传递一个时钟信号
image

image
清除全部状态,打开PC的EN,然后拍一下按钮,传递一个时钟信号,此时PC变为1,说明0号指令传给MAR了,说明MAR执行完指令,下一个要执行的指令在内存的1号位置,操作系统里面的中断也是操作PC程序计数器实现的
image

清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE,然后拍一下按钮,传递一个时钟信号
image

清除全部状态,打开MAR的OE,打开IR的WE,然后拍一下按钮,传递一个时钟信号,MBR的指令存到IR中了
image
此时,取指阶段完成
image
发现短路,扩充位应该放到开关后面,因为那个0接地导致高电平传不过来
image

49. 手都完成计算机程序的执行

刚才的过程:
第一步
(这里稍微有点瑕疵,没清除全部状态)
清除全部状态,打开IR的OE,打开MAR的WE,拍一下按钮,传递一个时钟信号
image
清除全部状态,打开MAR的OE,打开内存的OE,打开MAR的WE,拍一下按钮,传递一个时钟信号
image

清除全部状态,打开MBR的OE,打开寄存器A的WE,拍一下按钮,传递一个时钟信号
image
此时,地址1111(F)的数据0000 0101写入寄存器A中(这里是错误的,应该是取地址1110的数据,失误失误,懒得改了)
此时完成第一条指令周期“取地址 译码 再重新取地址”
然后又开始取地址
然后接着按刚才的继续操作
清除全部状态,打开PC的OE,打开MAR的WE,传时钟
image
清除全部状态,打开PC的EN,传时钟,下一条程序的地址就来了
image
清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE,传时钟
image
清除全部状态,打开MBR的OE,打开IR的WE,传时钟
image
image
清除全部状态,打开IR的OE,打开MAR的WE,传时钟

image
清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE,传时钟,地址1111的数据送到了MBR
image
清除全部状态,打开MBR的OE,打开寄存器B的WE,传时钟,至此,A和B的数据都传过来了,A中是十进制3,B中是十进制5
image
进行下一个周期
清除全部状态,打开PC的OE,打开MAR的WE,传时钟
image

清除全部状态,打开PC的EN,传时钟
image
清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE,传时钟
image

清除全部状态,打开MBR的OE,打开IR的WE,传时钟
image
image
清除全部状态,打开寄存器A的OE,打开寄存器B的OE,打开ALU的OE,打开输出寄存器的WE,传时钟
image

从输出寄存器可以看到,成果计算出了结果3+5=8(二进制0000 1000)
进行下一个周期
清除全部状态,打开PC的OE,打开MAR的WE,传时钟
image
清除全部状态,打开PC的EN,传时钟,此时4条指令全部执行完
image

清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE(由于不小心按错了,还得再来一遍,懒得弄了,直接截视频的图了),传时钟
image
清除全部状态,打开MBR的OE,打开IR的WE,传时钟
image
image

清除全部状态,打开IR的OE,打开MAR的WE,打开输出寄存器的OE,打开MBR的WE,传时钟,3+5的结果放到了MBR中,
image

清除全部状态,打开MAR和MBR的OE,打开内存的WE,传时钟(此时将3+5=8的结果传入内存)

image

posted @ 2025-07-17 22:07  秦瑞迁  阅读(9)  评论(0)    收藏  举报