关于内存单元的一些想法

﹥>﹥吖頭↗ 提交于 2019-11-28 13:20:39

最近换工作,CPU的物理设计physical design,PR阶段有点懵,icache,dcache,tlb,mmu,decode等等,巧的是最近看了下操作系统的cpu介绍,颇有些互相印证的关系,对于上述的icache,dcache,最初以为i代表输入,其实i代表instruction,d代表data

关键术语

PC:程序计数器,存放下个执行的指令地址

AC:累加器

IR:指令寄存器

MAR:内存地址寄存器

MBR:内存缓冲寄存器

I/O AR:I/O地址寄存器

I/O BR:I/O缓冲寄存器

CPU运算

以简单地2+3=5为例,譬如2的内存地址为200,3的内存地址为204,最后结果写入2的地址上,这个过程涉及三步:

  • 把2放到AC上,AC=2
  • 把3加到AC上,AC=AC+3=5
  • 把AC的值输出,AC>2

假设有一个32位的cpu,指令肯定是32位,指令由两个域组成,第一个字节存放操作码,第二个存放操作数地址,操作码如下

0001==1:代表将数据从内存中加载到AC上

0101==5:代表从内存加到AC

0010==2:  代表AC存到内存中

对于指令运算分为两部分,取指和执行,指令最初放在内存中100位置,以字节为显示单位,32位格式:字节 - 字节 - 字节 - 字节

内存地址 数据数据
0 0 0 100 1 0 0 200
0 0 0 104 5 0 0 204
0 0 0 108 2 0 0 200
0 0 0 200 0 0 0 2
0 0 0 204 0 0 0 3

取指

PC={0    0    0    100},指令内存地址为{0    0    0    100},指令为{1    0    0    200},存入IR,IR={1    0    0    200}

内存地址 数据数据
0 0 0 100 1 0 0 200

执行

获取下次指令,PC={0    0    0    104},解析IR,操作码为1,操作内存地址为{0    0    0    200} ,地址{0   0   0   200}存入MAR,数据{0   0    0    2}存入MBR,执行操作,把内存数据载入至AC,AC=MBR=2

内存地址 数据数据
0 0 0 200 0 0 0 2

取指

PC={0    0    0    104},指令内存地址位{0    0    0    104},指令为{5    0    0    204},存入IR,IR={5    0    0    204}

内存地址 数据数据
0 0 0 104 5 0 0 204

执行

获取下次指令,PC={0    0    0    108},解析IR,操作码5,操作内存地址{0    0    0    204},地址{0    0    0    204}存入MAR,数据{0    0    0    3}存入MBR,执行操作,把内存中数据加到AC,AC=AC+MBR=5

内存地址 数据数据
0 0 0 204 0 0 0 3

取指

PC={0    0    0    108},指令内存地址为{0    0    0    108},指令为{2    0    0    200},存入IR,IR={2    0    0    200}

内存地址 数据数据
0 0 0 108 2 0 0 200

执行 

无下次指令,PC=NULL ,解析IR,操作码2,操作内存地址{0    0    0    200},地址{0    0    0    200}存入MAR,AC数据载入至MBR中,{0    0    0    5}存入MBR,写入内存

内存地址 数据数据
0 0 0 200 0 0 0 5

取指

PC为空,结束计算,回顾上述执行过程,应该存在问题,欢迎指正。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!