自己动手写CPU——寄存器堆、数据存储器(基于FPGA与Verilog)
上一篇写的是基本的设计方案,由于考研复习很忙,不知道下一次什么时候才能打开博客,今天就再写一篇。写一写CPU中涉及到RAM的部件,如寄存器堆、数据存储器等。
大家应该在大一刚接触到计算机的时候就知道ROM、RAM了吧。但也记不得那些繁杂的名称,只知道ROM是只读存储器,RAM是可读写存储器。其实知道这些也就够了。CPU内寄存器堆、数据存储器等部件都是可读出可写入的部件,所以全部属于RAM,其实在ISE中是可以直接进行调用IP核来完成这些操作的,但今天暂且不谈IP核,或许后期会对IP核模块进行详细的阐述。
首先来说一说寄存器组,由于指令时MIPS指令,采用32位定长指令字,存数据的寄存器地址位宽都为5位,所以寄存器堆为32x32位的寄存器组。书上或者老师给的一些原理图都复杂的看不懂,其实只要理解透彻了寄存器堆是很简单的。如图为寄存器堆的输入输出结构图。
首先说写入,要将32位的数据写入32x32的寄存器堆中,那么必定有一个写使能信号(we),还得有一个写入数据寄存的地址(Rw)。当写入使能(we)为1时,表示我现在要向寄存器中写入数据了,那么立马通过Rw在寄存器组([31:0] Reg_Data [31:0]——32个32位寄存器)找到对应的32位寄存器,例如Rw = 5'd16,那么找到的就应该是32位寄存器组中32’d16的寄存器。找到要写入的寄存器后,将要写入的数据赋给寄存器即可。读出其实和写入是一样的,想要读出一段数据,就必须先找到存放数据的寄存器,那么依旧通过地址来寻找,当Ra = 5'd16时,那么找到的就是32位寄存器组中32’d16的寄存器,再将寄存器中的数据输出即可。仿真后波形如图。 寄存器堆如果理解了,那数据存储器就非常简单了,都是同样的道理,先通过地址找到对应的寄存器,然后将数据输进去或者将里边的数据输出来就可以,在此就不再赘述了。
以上就是关于寄存器堆和数据存储器的全部,时间有限,可能写的有些粗糙,代码这些东西,还是重在理解,理解透彻了,写出来加上仿真真的是分分钟的事。
今天就......emmmmm到次结束。
自己动手写CPU——寄存器堆、数据存储器(基于FPGA与Verilog)的更多相关文章
- 自己动手写CPU之第五阶段(1)——流水线数据相关问题
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...
- 自己动手写CPU之第五阶段(2)——OpenMIPS对数据相关问题的解决措施
将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第16篇.我尽量每周四篇 5.2 OpenMIPS对数据相关问题的解决措施 OpenMIPS处理器採用数据前推的方法来解决流水 ...
- 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明
将陆续上传新书<自己动手写CPU>,今天是第47篇. 9.7 ll.sc指令实现思路 9.7.1 实现思路 这2条指令都涉及到訪问链接状态位LLbit,能够将LLbit当做寄存器处理,ll ...
- 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立
将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ...
- 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现
将陆续上传本人写的新书<自己动手写CPU>,今天是第28篇.我尽量每周四篇 China-pub的预售地址例如以下(有文件夹.内容简单介绍.前言): http://product.china ...
- 自己动手写CPU之第九阶段(4)——载入存储指令实现思路
将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...
- 自己动手写CPU之第六阶段(2)——移动操作指令实现思路
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第21篇,我尽量每周四篇 6.2 移动操作指令实现思路 6.2.1 实现思路 这6条移动操作指令能够分为两类:一类是不涉及特殊 ...
- 自己动手写CPU 笔记
自己动手写CPU 跳转至: 导航. 搜索 文件夹 1 处理器与MIPS 2 可编程逻辑器件与Verilog HDL 3 教学版OpenMIPS处理器蓝图 4 第一条指令ori 5 逻辑.移位与nop ...
- 自己动手写CPU(基于FPGA与Verilog)
大三上学期开展了数字系统设计的课程,下学期便要求自己写一个单周期CPU和一个多周期CPU,既然要学,就记录一下学习的过程. CPU--中央处理器,顾名思义,是计算机中最重要的一部分,功能就是周而复始地 ...
随机推荐
- jquery AJAX数据传输路径写法~
$.post('{:url("index/index/logininfo")}',{'username':name,'password':pwd},function(data){ ...
- Vue-admin工作整理(三):路由
1.router-link和router-view组件 router-link组件实际上是封装了一个a标签(链接标签),里面有一个重要属性:“to”,它的值是一个路径,其路径对应的渲染组件,要在路由列 ...
- springboot2.0配置连接池(hikari、druid)
springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...
- Web 前端技术图谱-菜鸟教程
- Cow Cycling 动态规划
1552: Cow Cycling 时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte总提交: 39 测试通过:20 描述 The ...
- java笔记 -- java字符串
概念: Java字符串就是Unicode字符序列, Java没有内置的字符串类型, 而是在标准Java类库中提供了一个预定义类. 每个用双引号括起来的字符串都是String类的一个实例.String ...
- C# Timer 定时任务
C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件. 指定时间间隔是指按特定的时间间隔,如每1分钟.每10分钟.每1个小时等执行指定事件: 指定时间是指每小时的第30分 ...
- Oracle解决ora-01653 无法通过1024扩展
综合上述检查结果,可断定遇到的问题是因为可能性1—表空间不足导致.解决办法也就是扩大表空间 扩大表空间的四种方法: 1.增加数据文件 ALTER TABLESPACE ***_TRD ADD DATA ...
- cmd非运行完再保存,结果显示&保存同时进行
#coding:utf-8 """ fps信息获取到文件 """ import sys import subprocess class Lo ...
- leetcode 78,236,300
---恢复内容开始--- 2018.3.16目前已刷27题,打卡记录有意思的题目. leetcode78 subsets 思路1:DFS遍历子集,每遇到一个数就把该数加上原来的子集变成新的子集. cl ...