16位CPU多周期设计
16位CPU多周期设计
这个工程完成了16位CPU的多周期设计,模块化设计,有包含必要的分析说明。
多周期CPU结构图

多周期CPU设计真值表
对应某一指令的情况,但仅当对应周期时才为对应的输出,不是组合逻辑

设计思路
Instruction/Data Memory:
一共有两种模式:
1、 输入8位的地址PC,输出对应内存的16位指令内容
2、 输入8位的地址Address,输出对应内存的DataMemory的内容
输入写入内容WD,当WE写入信号为真的时候,写入到地址为Address的内存里面

Control Unit
唯一输入16位的指令,根据状态转移图和真值表,输出唯一信号列表,转移方向有指令的高五位Op来决定,并且地址输出集成在控制单元模块中,简化了框图。

Register File
输入三个地址和写入内容,写入信号,输出两个地址对应的内容
由于单周期内不能一边读一边写,故有一个时钟信号,通过一级缓存,在下一个时钟信号来临时立即写入内存

ALU
输入运算数和指令,输出运算结果以及标志位
由于单周期内,标志位并不在当前周期而在下一周期使用,故增加时钟信号,通过一级缓存,在下一个周期时判断使用

PC-NextPC
根据分支指令,跳转指令和标志位的组合逻辑,决定PC是+1还是到某目标位置,且这里需要一个enable信号进行PC写入控制

多周期CPU状态转移图

- 写入指令:需要最长的5个周期,读取指令一个周期,指令解码一个周期,寄存器寻址一个周期,读取Data一个周期,写入寄存器一个周期,总共用了五个周期。
- 存储指令:需要4个周期,读取指令一个周期,指令解码一个周期,寄存器寻址一个周期,写入寄存器一个周期,总共用了4个周期。
- 有关寄存器的R-type指令:需要4个周期,读取指令一个周期,指令解码一个周期,寄存器寻址一个周期,写入寄存器一个周期,总共用了4个周期。
- 有关立即数的R-type指令:需要4个周期,读取指令一个周期,指令解码一个周期,寄存器寻址和立即数获得一个周期,写入寄存器一个周期,总共用了4个周期。
- 分支指令:只需要3个周期,读取指令一个周期,指令解码一个周期,运算模块一个周期,总共需要3个周期。
- 跳转指令:只需要3个周期,读取指令一个周期,指令解码一个周期,立即数地址运算一个周期,总共需要3个周期。
特别解释:
i. 状态转移图仅列出了全部的enable信号和select信号,其余和时序逻辑无关的信号均为组合逻辑信号,不在状态转移图中列出,可直接看上面的真值表。
ii. 写入信号只在出现的状态中为真,其余状态均为假
iii. Docode状态里面确定真的不需要改变信号的值,所以为NULL
16位CPU多周期设计的更多相关文章
- verilog实现的16位CPU单周期设计
verilog实现的16位CPU单周期设计 这个工程完成了16位CPU的单周期设计,模块化设计,包含对于关键指令的仿真与设计,有包含必要的分析说明. 单周期CPU结构图 单周期CPU设计真值表与结构图 ...
- verilog实现的16位CPU设计
verilog实现的16位CPU设计 整体电路图 CPU状态图 idle代表没有工作,exec代表在工作 实验设计思路 五级流水线,增加硬件消耗换取时间的做法. 具体每一部分写什么将由代码部分指明. ...
- 16位cpu下主引导扇区及用户程序的编写
一些约定 主引导扇区代码(0面0道1扇区)加载至0x07c00处 用户程序头部代码需包含以下信息:程序总长度.程序入口.重定位表等信息 用户程序 当虚拟机启动时,在屏幕上显示以下两句话: This i ...
- 对所有CPU寄存器的简述(16位CPU14个,32位CPU16个)
32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)6个段寄存器(ES.CS.SS.DS.FS和GS)1 ...
- 16位/32位/64位CPU的位究竟是说啥
平时,我们谈论CPU,都会说某程序是32位编译,可以跑在32位机或64位机,或则是在下载某些开源包时,也分32位CPU版本或64CPU位版本,又或者在看计算机组成相关书籍时,特别时谈到X86 CPU时 ...
- Intel X86 32位CPU内存管理----《Linux内核源码情景分析》笔记(一)
Intel X86 32位CPU内存管理 在X86系列中,8086和8088是16为处理器,而从80386开始为32为处理器,80286则是该系列从8088到80386,也就是16位处理器到32位处理 ...
- 梦回----32位CPU和64位CPU的通用寄存器
1 32位Intel的CPU通用寄存器 32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX):2个变址和指针寄存器(ESI和EDI):2个指针寄存器(ESP和EBP):6个段 ...
- 通用32位CPU 常用寄存器及其作用
目录 32位CPU所含有的寄存器 数据寄存器 变址寄存器 指针寄存器 段寄存器 指令指针寄存器 标志寄存器 32位CPU所含有的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针 ...
- verilog实现16位五级流水线的CPU带Hazard冲突处理
verilog实现16位五级流水线的CPU带Hazard冲突处理 该文是基于博主之前一篇博客http://www.cnblogs.com/wsine/p/4292869.html所增加的Hazard处 ...
随机推荐
- C#导出
#region DataReader 的数据导出到Excle 中 //public string Exports(string str_sql) //{ / ...
- ajax 的简单应用
ajax作为前端技术,采用异步方式,根据其采用的方式来讲,不用刷新界面,只是进行数据的传递. 后台还是用servlet的.servlet接收到ajax的get或post请求后.将数据组装成xml或者j ...
- Use BEC to do mobile phone forensics
Belkasoft Evidence Center makes me very impressed that it supports lots of evidence type. I have to ...
- WireShark 过滤语法
1. 过滤IP,如来源IP或者目标IP等于某个IP 例子: ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107 或者 ip.addr eq 192.1 ...
- mysql中union与union all的区别
当查询表结构完全相同的多张表的数据时: 1.当查询条件完全相同且不包括主键,此时用union查询会过滤掉查询出的重复的记录,及漏查记录:使用union all进行查询,则会查出所有的符合条件的记录,保 ...
- POJ C程序设计进阶 编程题#5:细菌分组实验
编程题#5:细菌实验分组 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有 ...
- jquery二级目录选中当前页的样式
<div class="navlist clear"> <span><a href="/M/Page_32.html" title ...
- Resources are low on NN. Please add or free up more resources then turn off safe mode manually.
提交spark应用到yarn集群上的时候在跑一段时间就会出现这个报错: 根据上面的报错原因分析是因为集群资源不够,集群的自我保护机制使hdfs处于安全模式,然后我用"hdfs dfsadmi ...
- 巩固一下C语言中的指针
今天无意间看到一篇文章<[C语言] 浅谈指针>,对C语言指针的总结很好! 文章地址:http://blog.csdn.net/wbq1480/article/details/5150612 ...
- 用Python的smtp模块发邮件的示例
# -*- coding: UTF-8 -*- import smtplib from email.mime.multipart import MIMEMultipart from email.mim ...