自己动手写CPU

跳转至: 导航搜索

文件夹

处理器与MIPS

  1. 基本的ISA:x86 ARM SPARC Power MIPS

可编程逻辑器件与Verilog HDL

  1. 不同PLD:PLA PAL GAL PROM EPLD CPLD FPGA

    1. 基于乘积项的:与或门+存储元件(触发器)
    2. 基于查找表的:FPGA一般输入变量<=5
  2. 原理图(Schematic)
  3. Verilog HDL
    1. module
    2. port:input, output
    3. 数据类型:
      1. net型:wire(0 1 X Z) tri wor trior wand triand tri1 tri0 supply0 supply1
      2. variable型: reg integer real
    4. 逻辑功能:assign(堵塞= 非堵塞<=)
      1. always

        1. 敏感信号:电平/边沿(posedge, negedge)
      2. initial
    5. 编译指示:`define `include `ifdef ...
  4. 综合(Synthesis):算法/行为描写叙述 --> RTL --> 逻辑门级 --> PLD网表
  5. ModelSim仿真

教学版OpenMIPS处理器蓝图

  1. 5级流水线:取指、译码、运行、訪存、回写

第一条指令ori

逻辑、移位与nop

  1. 相关问题(流水线引入了并发竞争?每一个阶段可视为单独的HDL模块)

    1. 数据相关:RAW WAR WAW ==> OpenMIPS仅仅存在RAW相关,比如:ori $1, $0, 0x1100; ori $2, $1, 0x0020

      1. p111 假设读取的寄存器是在下一个时钟上升沿要写入的。那么直接将要写入的数据作为结果输出

        1. if( reg2_read_o==1'b1 && ex_wreg_i==1'b1 && ex_wd_i==reg2_addr_o begin reg2_o <= ex_wdata_i; ...
      2. 插入暂停周期
      3. 编译器调度(指令重排)
      4. 数据前推

移动

  1. 特殊寄存器HI、LO?

算术

  1. 流水线暂停:保持PC不变,同一时候第n阶段之前的暂停

    1. CTRL模块:仅仅有译码、运行阶段可能会有暂停请求
  2. 乘累加指令:这是不是有点背离了RISC的原则?
  3. 除法指令(试商法)

转移

  1. 延迟槽

    1. 在运行阶段假设转移。会有2条无效指令
    2. 仍然会导致已经进入取指阶段的指令无效:可在译码阶段进行转移推断。避免浪费时钟周期
  2. p210 bal是bgezal的特殊情况(rs=0)

Load/Store

  1. p258 Wishbone总线的相关规范?
  2. p268 MIPS32特殊的信号量机制:不保证原子操作一定是原子性的,同意检測设置在没有原子性的情况下执行。但仅仅在确实原子执行的时候才让‘设置’生效
    1. 链接载入ll:LLbit
    2. 条件存储sc
  3. load相关问题
    1. 在译码阶段检查是否与上一条指令存在load相关。假设存在。让译码、取指暂停,而运行、訪存、回写继续(相当于插入一个nop)

协处理器

  1. MIPS32:CP0用作系统控制,CP1、CP3用作浮点处理。CP2保留
  2. CP0中的寄存器
    1. Status
    2. MMU相关:EntryLo0/1 Context
    3. TLB相关:Index Random PageMask Wired EntryHi ...
    4. 异常:BadVAddr Cause EPC
    5. 定时中断:Compare

异常

  1. 类型:Reset, Soft Reset, DSS DINT NMI, Machine Check, Interrupt, ...
  2. 精确异常(k, 事务性?)
    1. 按指令运行的顺序处理异常,而不是依照异常发生的顺序?
  3. 假设发生异常的指令在延迟槽中,那么保存到EPC的值是PC-4,否则PC
  4. syscall
  5. eret
  6. 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 笔记的更多相关文章

  1. 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明

    将陆续上传新书<自己动手写CPU>,今天是第47篇. 9.7 ll.sc指令实现思路 9.7.1 实现思路 这2条指令都涉及到訪问链接状态位LLbit,能够将LLbit当做寄存器处理,ll ...

  2. 自己动手写CPU之第七阶段(7)——乘累加指令的实现

    将陆续上传本人写的新书<自己动手写CPU>.今天是第30篇.我尽量每周四篇 亚马逊的销售地址例如以下.欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...

  3. 自己动手写CPU之第五阶段(1)——流水线数据相关问题

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...

  4. 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第17篇.我尽量每周四篇 5.4 逻辑.移位操作与空指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条:and.and ...

  5. 自己动手写CPU之第六阶段(2)——移动操作指令实现思路

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第21篇,我尽量每周四篇 6.2 移动操作指令实现思路 6.2.1 实现思路 这6条移动操作指令能够分为两类:一类是不涉及特殊 ...

  6. 自己动手写CPU之第八阶段(4)——转移指令实现过程2

    将陆续上传本人写的新书<自己动手写CPU>,今天是第36篇,我尽量每周四篇 开展晒书评送书活动,在亚马逊.京东.当当三大图书站点上,发表<自己动手写CPU>书评的前十名读者,均 ...

  7. 《自己动手写CPU》写书评获赠书活动结果

    <自己动手写CPU>写书评获赠图书的读者有: 京东:8***2.16号哨兵.magicyu.kk6803.jddickyd.杰出的胡兵 亚马逊:徐贺.马先童.jaychen.farmfar ...

  8. 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ...

  9. 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...

随机推荐

  1. Red Gate系列之六 SQL Test 1.0.12.3 Edition SQL测试工具 完全破解+使用教程

    原文:Red Gate系列之六 SQL Test 1.0.12.3 Edition SQL测试工具 完全破解+使用教程 Red Gate系列之六 SQL Test 1.0.12.3 Edition S ...

  2. MessageBox()功能

    MessageBox()功能.这是一个非常频繁使用的Win32 API,在屏幕上显示一个窗体,提出问题,并等待用户输入.它的原型是 int MessageBox(HWND hwnd,LPCTSTR l ...

  3. git tag使用

    #git tag command git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]       ...

  4. 几种流行Webservice控制框架

     转会[http://blog.csdn.net/thunder4393/article/details/5787121],写的非常好,以收藏. 1      摘要 开发webservice应用程序中 ...

  5. emeditor 配置教程

    1.众多的图形界面配置功能 通过查看EmEditor的安装目录,可以发现,EmEditor有几个配置文件,理论上应该可以通过修改配置文件来达到配置EmEditor的目 的.然而,打开配置文件一看,如果 ...

  6. 英特尔® 硬件加速执行管理器安装指南 — Microsoft Windows*

    介绍 本文将指导您安装英特尔® 硬件加速执行管理器(英特尔® HAXM),这是一款可以使用英特尔® 虚拟化技术(VT)加快 Android* 开发速度的硬件辅助虚拟化引擎(管理程序). 前提条件 英特 ...

  7. U菜1G变化8M该解决方案

    我有一个大小1G纽曼U菜,不幸中毒一年前,格式化后你刚刚离开8M该.然后不再格式正确. 尽管只有8M,但始终我觉得扔了可惜.曾经,它已被搁置.昨天突然心血来潮,我们决定尝试.活马医.想不到最后居然被我 ...

  8. ./startup.sh: Permission denied

    今天在Linux上部署项目,之前报过这个错误,通过下面方式攻克了.如今发出来备份一下: LINUX权限-bash: ./startup.sh: Permission denied 运行./startu ...

  9. Codeforces Round #234 (Div. 2) B. Inna and New Matrix of Candies

    B. Inna and New Matrix of Candies time limit per test 1 second memory limit per test 256 megabytes i ...

  10. 你听说过XML吗?

    我们每天都会见到各种各样的书,今天我们就来谈一谈有关书籍带给我们学习的启发. 正如上图所看到的,不同的书籍有不同的外观,比如教科书.儿童图书等:而且书也不是随便能够出版的,要有自己文档结构,语义规则. ...