计算机设计CPU设计计算机实验.docx
- 文档编号:4314145
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:12
- 大小:652.29KB
计算机设计CPU设计计算机实验.docx
《计算机设计CPU设计计算机实验.docx》由会员分享,可在线阅读,更多相关《计算机设计CPU设计计算机实验.docx(12页珍藏版)》请在冰豆网上搜索。
计算机设计CPU设计计算机实验
哈尔滨工业大学计算机科学与技术学院
实验报告:
CPU设计与实现
课程名称:
计算机设计与实践
课程类型:
必修
目录
CPU设计与实现1
一CPU设计3
1.设计思路图3
2.内部信号设计3
二模块设计4
1.BEATER:
节拍生成器4
2.MEMIO:
内存IO访问接口4
3.T0取指模块5
4.T1运算模块5
5.T2读写周期6
6.T3回写周期6
一CPU设计
1.设计思路图
2.内部信号设计
1)控制信号
BEAT:
节拍信号
Order:
指令信号
2)T0取指周期
T0_IOMAR:
取指周期所用的指令地址
3)T1运算周期
T1_T3PCupdate:
零旗帜,主要用于辅助判别是否要对指令地址进行更新
T1_IOMMAR_T3PCnew:
生成地址,在存数、取数指令中作为数据地址,在条件跳转、无条件跳转指令中作为更新指令地址;
T1_T2Rtemp_IOMMDR:
运算器输出,根据指令的不同分别送入回写缓存或数据总线低八位
4)T2读写周期
T2_T3Rdata:
回写缓存
5)T3回写周期
T3_T1REG:
回写缓存
T3_T0PCupdate:
决定是否更新指令地址
T3_T0PC:
更新指令地址
6)内存IO访问接口
IOM_T0IR:
完整的十六位数据总线,作为指令;
IOM_T2Rtemp:
低八位数据总线,作为回写缓存;
二模块设计
1.BEATER:
节拍生成器
输入:
CLK
(1):
时钟信号
RST
(1):
重置信号
重置信号有效时输出为0000;否则,从1000开始,每过一个时钟周期循环右移一位
2.MEMIO:
内存IO访问接口
在重置信号有效时,输出与所有交互端口都输出高阻;否则,考察节拍情况。
如为第一拍1000,则地址总线接指令地址,主存选中并读有效,数据高低位传送,取得指令接数据总线,其余端口与输出均输出高阻;
如为第二拍0100,输出与所有交互端口都输出高阻;
如为第三拍0010,则根据指令高五位决定动作——
——如为00100存数指令,则地址总线接数据地址,数据总线低八位接运算器输出,主存选中并写有效,数据低位传送,其余端口与输出均输出高阻;
——如为00101取数指令,则地址总线接数据地址,回写数据接地址总线低八位,主存选中并读有效,数据低位传送,其余端口与输出均输出高阻;
——如为01000输入指令,则IO地址接指令中的对应数据,回写数据接IO数据,IO选中并读有效,其余端口与输出均输出高阻;
——如为01001输出指令,则IO地址接指令中的对应数据,IO数据接运算器输出,IO选中并写有效,其余端口与输出均输出高阻;
——如为其他指令,所有交互端口与输出均输出高阻;
如为第四排0001,所有输出与端口均输出高阻。
3.T0取指模块
在重置信号有效时,输出与所有交互端口都输出高阻;否则,考察节拍情况。
如为第一拍1000,则输出指令接输入指令,其余端口输出高阻;
如为第二拍0100,在时钟下跳沿为指令地址进行自增操作;
如为第三拍0010,不改变接线;
如为第四排0001,若指令地址更新信号有效,则指令置为更新指令地址。
4.T1运算模块
运算模块内部又可分为三个子模块:
运算器、通用寄存器与数据地址寄存器。
运算器由运算器寄存器、运算器结果和零旗帜组成,仅在0100拍工作,默认把指令中Ri字段对应寄存器值送进A,把指令中Rj字段对应寄存器值送进B,运算结果为零时零旗帜置1,而后根据指令高五位进行工作:
对于加减指令00000、00001,对运算寄存器执行相应运算,并把运算结果送到端口;对于寄存器转存指令00010,直接将B送到运算结果;
对于立即数转存指令00011,将指令低八位送到运算结果;
对于存数指令00101和条件跳转00110,将A送到运算结果;
对于无条件跳转00111,将00000000送到运算结果;
对于输出指令01001,将A送到运算结果;
其余情况下,运算结果一律置为高阻。
通用寄存器模块在0100拍时,负责把寄存器值送入运算寄存器,在0001拍时,根据指令决定是否读入更新寄存器值,并改写对应的寄存器。
数据地址寄存器模块仅在0100拍工作,把指令低八位送到生成地址低八位,而把R7送到生成地址高八位,而后根据指令高五位工作:
对于存数指令00101,把生成地址送入内存IO访问端口;
对于条件跳转00110和无条件跳转00111,把生成地址送入回写模块的更新指令地址;
其余情况下送出值为高阻。
5.T2读写周期
在0010拍,回写缓存根据指令类型读入运算器结果或数据总线低八位;在0001拍,把回写缓存送往寄存器。
6.T3回写周期
在0100拍,读入零旗帜,在指令高五位为00110条件跳转或00111无条件跳转时,更新指令地址信号置1。
在0001拍,根据指令类型输出回写数据、回写指令地址或高阻。
三仿真波形
1.节拍发生器
2.主存IO端口
重置信号有效期间,访存控制字全1,其余端口输入高阻
立即数转存指令
加法指令
存数指令
输入指令
输出指令
3.取指模块
4.运算模块
零旗帜仅在运算周期改变,下一周期前维持不变。
5.读写模块
6.回写模块
7.CPU
四感悟
1.自顶而下的设计思路
最初,我设计电路时仍沿用以往设计具体部件的思路,着眼于每个部件,从具体电路开始直接设计。
但刚开始设计运算模块时我就发现,这种思路会给设计带来极大的不便,往往会陷入任意调用信号而不知来源的境况。
于是我改变思路,从指令出发,划分每个动作所应处于的节拍,进而明确信号的需求,从而设计各个模块。
果然,设计效率极大提高。
2.不要滥用时钟跳变
最初,我的设计非常依赖时钟跳变,经常借助跳变来分隔不同的动作。
但实际上,有很多动作可以并行执行,也不必划分在不同跳变沿上;对于访存指令和IO指令,甚至有必要使用电平触发以保证稳定性。
因此我取消了很多条边条件,改用电平触发。
3.不要滥用进程
进程的意义是构建时序逻辑;但很多时候,我们用组合逻辑就能解决问题。
这个时候就应该用赋值语句等直接解决问题,使用进程降低效率。
4.结构复用
在运算器模块中,很多不同的操作其实可以标准化为相同的结构;尽管对于部分指令,这么做显得繁琐,但经过这样的标准化可以反复利用相同的结构,使得实际的电路比较简单。
附:
各指令对应的数据流
首先为取指模块的数据流动;此后所有指令数据流都相同,故不做赘述。
而后便是根据不同指令,各个模块间的数据流动。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 设计 CPU 实验