- 博客(19)
- 资源 (18)
- 收藏
- 关注
原创 自己动手写CPU之第五阶段(2)——OpenMIPS对数据相关问题的解决措施
为实现数据前推而对OpenMIPS系统结构所做的修改。有两个方面。(1)将处于流水线执行阶段的指令的运算结果,包括:是否要写目的寄存器wreg_o、要写的目的寄存器地址wd_o、要写入目的寄存器的数据wdata_o等信息送到译码阶段,如图5-8中虚线所示。(2)将处于流水线访存阶段的指令的运算结果,包括:是否要写目的寄存器wreg_o、要写的目的寄存器地址wd_o、要写入目的寄存器的数据wdata_o等信息送到译码阶段。
2014-07-31 13:27:14 4568 8
原创 自己动手写CPU之第五阶段(1)——流水线数据相关问题
我们在第4章实现的五级流水线结构很简单,如果按照“简单即美(Simple is Beautiful)的标准,那么我们的流水线是美的,但是不完美,因为现实往往是复杂的,一个简单的流水线是解决不了如此多的现实问题的,本节探讨的数据相关问题就是其中一个问题。在我们实现逻辑、移位操作等其它指令之前,必须先讨论这个问题,因为这个问题已经影响到测试程序的编写了。流水线中经常有一些被称为“相关”的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些“相关”会降低流水线的性能。流水线中的相关分为三种类型。
2014-07-30 13:16:33 12147 2
原创 自己动手写CPU之第四阶段(4)——Makefile文件建立
为了得到指令存储器初始化文件,我们需要输入4条命令,有点麻烦,最好只输入一条命令就可以了,这需要使用到Makefile文件。
2014-07-29 13:01:58 3471 1
原创 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立
OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容,所以可以使用MIPS32架构下已有的GNU开发工具链。本节将说明如何安装使用GNU开发工具链以及如何制作Makefile文件,从而以更加方便、快捷、自动的方式对测试程序进行编译,并得到指令存储器ROM的初始化文件inst_rom.data。
2014-07-28 13:32:20 11033 13
原创 自己动手写CPU之第四阶段(2)——验证第一条指令ori的实现效果
将验证我们的OpenMIPS是否实现正确,包含:流水线是否正确、ori指令是否实现正确。在验证之前,需要首先实现指令存储器,以便OpenMIPS从中读取指令。
2014-07-25 12:58:59 8122 16
原创 自己动手写处理器之第四阶段(1)——第一条指令ori的实现
前面几章介绍了很多预备知识,也描绘了即将要实现的OpenMIPS处理器的蓝图,各位读者是不是早已摩拳擦掌,迫切希望一展身手了,好吧,本章我们将实现OpenMIPS处理器的第一条指令ori,为什么选择这条指令作为我们实现的第一条指令呢?答案就两个字——简单,指令ori用来实现逻辑“或”运算,选择一条简单的指令有助于我们排除干扰,将注意力集中在流水线结构的实现上,当然也可以选择其它类似的指令,只要简单即可。通过这条简单指令的实现,本章在4.2节将初步建立OpenMIPS的五级流水线结构,当我们在后面章节中实现其
2014-07-24 13:31:44 16147 10
原创 自己动手写处理器之第三阶段——教学版OpenMIPS处理器蓝图
从本章开始将一步一步地实现教学版OpenMIPS处理器。本章给出了教学版OpenMIPS的系统蓝图,首先介绍了系统的设计目标,其中详细说明了OpenMIPS处理器计划实现的5级流水线。3.2节给出了OpenMIPS处理器的接口示意图,及各个接口的作用。3.3节简单解释了各个源代码文件的作用。最后描述了OpenMIPS处理器的实现方法,读者将发现本书给出的实现方法与现有书籍的方法完全不同,更加易于理解、便于实践。
2014-07-23 13:15:14 7980 2
原创 自己动手写处理器之第二阶段(5)——ModelSim电路仿真
上一节实现了一个简化的处理器取指电路,需要通过仿真以验证其功能是否正确,直观的仿真思路就是:给出一个时钟信号,上述电路会在每个时钟信号上升沿将取指地址加1,同时从指令存储器中取出一条指令,观察取指地址是否依次递增,同时观察取出的指令是否是存储器中取指地址对应的指令,如果都符合,那么上述取指电路就实现正确。此处涉及到两个问题。1、如何在指令存储器中存储指令,也就是指令存储器初始化问题。2、如何给出时钟信号?本节将分别解答上述问题,在此基础上,使用ModelSim进行仿真。
2014-07-22 13:51:32 9586 5
原创 自己动手写处理器之第二阶段(4)——电路设计举例
本节将设计一个简化的处理器取指令电路,通过这个例子体会Verilog HDL的使用。处理器内部一般有一个PC寄存器,其中存储指令地址,正常运行过程中,PC的值会随时间增加,同时从指令存储器中取出对应地址的指令。所以,本节实现的处理器取指令电路,包含两部分:PC模块、指令存储器。
2014-07-21 13:44:32 4584
原创 自己动手写处理器之第二阶段(3)——Verilog HDL行为语句
Verilog定义的模块一般包括有过程语句,过程语句有两种:initial、always。其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的。此外,always过程语句是可综合的,initial过程语句是不可综合的。
2014-07-16 14:19:30 5091
原创 自己动手写处理器之第二阶段(2)——Verilog HDL简介
本书实现的OpenMIPS处理器是使用Verilog HDL编写的,所以本章接下来的几节将介绍Verilog HDL的一些基本知识,包括语法、结构等。因为本书并不是一本讲授Verilog HDL的专门书籍,所以此处介绍的内容并不是Verilog HDL的全部,只是一些基础知识,以及在OpenMIPS处理器实现过程中会使用到的知识。读者如果对Verilog HDL有进一步了解的需求,可以参考相关书籍,这方面有许多非常优秀的书籍。笔者推荐《数字系统设计与Verilog HDL(第4版)》,本章关于Verilog
2014-07-15 14:28:12 5855
原创 自己动手写处理器之第二阶段(1)——可编程逻辑器件与PLD电路设计流程
FPGA是可编程逻辑器件(PLD:Programmable Logic Device)的一种。PLD是上世纪70年代发展起来的一种新型器件,它的应用和发展不仅简化了电路设计,降低了开发成本,提高了系统可靠性,而且给数字系统的设计方法带来了革命性的变化。截止到现在,出现了多种工艺、不同原理的PLD,如下。 PLA(Programmable Logic Array)可编程逻辑阵列 PAL(Programmable Array Logic)可编程阵列逻辑 GAL(Generic Array Logic
2014-07-14 13:24:19 6257
原创 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简介
在前文介绍RISC的特点时提到一点:大量使用寄存器。这是因为寄存器的存取可以在一个时钟周期内完成,同时也简化了寻址方式。MIPS32的指令中除加载/存储指令外,都是使用寄存器或立即数作为操作数的。MIPS32中的寄存器分为两类:通用寄存器(GPR:General Purpose Register)、特殊寄存器。
2014-07-13 14:02:19 19419 5
原创 自己动手写处理器之第一阶段(2)——MIPS指令集架构的演变
MIPS指令集架构自上世纪80年代出现后,一直在进行着更新换代,从最初的MIPS I到MIPS V,发展到可支持扩展模块的MIPS32、MIPS64系列,再到集成代码压缩技术的microMIPS32、microMIPS64。每个MIPS ISA都是其前一个的超集,没有任何遗漏,只有增加新的功能。
2014-07-08 13:25:56 6457
原创 自己动手写处理器之第一阶段(1)——计算机的简单模型、架构、指令集
计算机很复杂,可以听歌、看电影、上网、玩游戏,内部是怎么工作的,这个问题太可怕了,太复杂了。计算机很简单,只有加、减、乘、除、逻辑、移位、转移、存储、加载等几类可以做的操作,太简单了。复杂?简单?其实取决于个人对事物的认识程度,认识的越多,了解的越深刻,那么就越接近本质,而本质往往都是简单的,比如大名鼎鼎的质能方程,一个简单的式子就解释了质量与能量的关系。计算机就是一台计算的设备,而且是一台很基础的计算设备,只能计算小学数学课堂上讲授的四则运算,再加上一些并不复杂的与、或、非等逻辑运算,其余诸如平方、
2014-07-07 13:00:41 10384 4
原创 自己动手写处理器开篇介绍
使用Verilog HDL设计实现了一款兼容MIPS32指令集架构的处理器——OpenMIPS。OpenMIPS处理器具有两个版本,分别是教学版和实践版。教学版的主要设想是尽量简单,处理器的运行情况比较理想化,与教科书相似,便于使用其进行教学、学术研究和讨论,也有助于学生理解课堂上讲授的知识。实践版的设计目标是能完成特定功能,发挥实际作用。
2014-07-04 11:52:24 9987 4
原创 OR1200处理器的可编程中断控制器PIC分析
可编程中断控制器Programmable Interrupt Controller(PIC)用来响应各种中断事件,如:键盘事件、串口数据到达等,PIC收集所有的中断,并通知CPU中断到达,后者转入到中断处理例程进行处理。OR1200最多支持32个中断。其功能实现主要依靠两个特殊寄存器:中断屏蔽寄存器PICMR、中断状态寄存器PICSR。通过PICMR可以设置是否屏蔽某些中断,通过PICSR可以知道中断源的信息。
2014-07-03 13:06:34 2256
原创 OR1200处理器的计时器模块TT介绍
计时器模块(Tick Timer:TT)一般用在操作系统的进程调度、用户程序的定时参考等。TT内部会对时钟周期计数,当计数值达到一个预设值时,会产生中断,通知处理器进行处理。其实现的主体是两个特殊寄存器:计时器单元计数寄存器TTCR、计时器单元模式寄存器TTMR,通过这两个SPR的不同配置,实现不同的工作模式,以及计时中断的产生。TTCR、TTMR是第10组特殊寄存器
2014-07-02 13:26:25 2263
原创 OR1200处理器中Wishbone总线接口模块WB_BIU介绍
WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块,15.1节给出了WB_BIU模块的对外连接关系,并指出WB_BIU模块的三个作用。因为OR1200处理器支持Wishbone B3版本,所以在15.2节介绍了Wishbone B3版本中的寄存反馈总线周期,重点说明了其中的周期类型识别地址标签CTI_O/CTI_I、突发类型扩展地址标签BTE_O/BTE_I的作用。
2014-07-01 13:02:52 2813
Jlink-v8固件烧写AT91-ISP v1.13及V8固件
2017-02-26
OpenMIPS教学版讲解
2015-09-22
DE2上使用OC8051运行点灯程序
2013-03-23
DE2上使用OC8051运行LED点灯程序
2013-03-23
OR1200各模块之间的连接关系图,使用VISIO绘制,理解源代码必备
2013-02-26
QMIS项目文件管理系统part2
2012-04-15
QMIS项目文档管理系统part1
2012-04-15
Ext.net+swfupload实现文件上传
2011-12-03
通过Openh323开发自己的H.323协议栈.pdf
2010-01-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人