首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
自己动手写CPU 笔记
时间:
2015-12-11 20:24:14
阅读:
244
评论:
0
收藏:
0
[点我收藏+]
标签:
自己动手写CPU
跳转至:
导航
、
搜索
文件夹
1
处理器与MIPS
2
可编程逻辑器件与Verilog HDL
3
教学版OpenMIPS处理器蓝图
4
第一条指令ori
5
逻辑、移位与nop
6
移动
7
算术
8
转移
9
Load/Store
10
协处理器
11
异常
12
实践版OpenMIPS
13
小型SOPC
14
验证
15
移植uC/OS-II
16
附录A 教学版OpenMIPS各个模块的接口说明
17
附录B OpenMIPS实现的全部指令及相应机器码
18
參考文献
处理器与MIPS
基本的ISA:x86 ARM SPARC Power MIPS
可编程逻辑器件与Verilog HDL
不同PLD:PLA PAL GAL PROM EPLD CPLD FPGA
基于乘积项的:与或门+存储元件(触发器)
基于查找表的:FPGA一般输入变量<=5
原理图(Schematic)
Verilog HDL
module
port:input, output
数据类型:
net型:
wire
(0 1 X Z) tri wor trior wand triand tri1 tri0 supply0 supply1
variable型: reg integer real
逻辑功能:assign(堵塞= 非堵塞<=)
always
敏感信号:电平/边沿(posedge, negedge)
initial
编译指示:`define `include `ifdef ...
综合(Synthesis):算法/行为描写叙述 --> RTL --> 逻辑门级 --> PLD网表
ModelSim仿真
教学版OpenMIPS处理器蓝图
5级流水线:取指、译码、运行、訪存、回写
第一条指令ori
逻辑、移位与nop
相关问题(流水线引入了并发竞争?每一个阶段可视为单独的HDL模块)
数据相关:RAW WAR WAW ==> OpenMIPS仅仅存在RAW相关,比如:ori $1, $0, 0x1100; ori $2, $1, 0x0020
p111 假设读取的寄存器是在下一个时钟上升沿要写入的。那么直接将要写入的数据作为结果输出
if( reg2_read_o==1‘b1 && ex_wreg_i==1‘b1 && ex_wd_i==reg2_addr_o begin reg2_o <= ex_wdata_i; ...
插入暂停周期
编译器调度(指令重排)
数据前推
移动
特殊寄存器HI、LO?
算术
流水线暂停:保持PC不变,同一时候第n阶段之前的暂停
CTRL模块:仅仅有译码、运行阶段可能会有暂停请求
乘累加指令:这是不是有点背离了RISC的原则?
除法指令(试商法)
转移
延迟槽
在运行阶段假设转移。会有2条无效指令
仍然会导致已经进入取指阶段的指令无效:可在译码阶段进行转移推断。避免浪费时钟周期
p210 bal是bgezal的特殊情况(rs=0)
Load/Store
p258 Wishbone总线的相关规范?
p268 MIPS32特殊的信号量机制:不保证原子操作一定是原子性的,同意检測设置在没有原子性的情况下执行。但仅仅在确实原子执行的时候才让‘设置’生效
链接载入ll:LLbit
条件存储sc
load相关问题
在译码阶段检查是否与上一条指令存在load相关。假设存在。让译码、取指暂停,而运行、訪存、回写继续(相当于插入一个nop)
协处理器
MIPS32:CP0用作系统控制,CP1、CP3用作浮点处理。CP2保留
CP0中的寄存器
Status
MMU相关:EntryLo0/1 Context
TLB相关:Index Random PageMask Wired EntryHi ...
异常:BadVAddr Cause EPC
定时中断:Compare
异常
类型:Reset, Soft Reset, DSS DINT NMI, Machine Check, Interrupt, ...
精确异常(k, 事务性?)
按指令运行的顺序处理异常,而不是依照异常发生的顺序?
假设发生异常的指令在延迟槽中,那么保存到EPC的值是PC-4,否则PC
syscall
eret
p332 assign excepttype_o = {19‘b0, excepttype_is_eret, 2‘b0, instvalid, excepttype_is_syscall, 8‘b0};
实践版OpenMIPS
小型SOPC
验证
移植uC/OS-II
附录A 教学版OpenMIPS各个模块的接口说明
附录B OpenMIPS所有指令来实现和相应的机器代码
参考
自己动手写CPU 笔记
标签:
原文地址:http://www.cnblogs.com/mengfanrong/p/5039884.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!