CPU设计(单周期和流水线)

简介: CPU设计(单周期和流水线)

文章目录


设计的功能描述(含所有实现的指令描述,以及单周期/流水线CPU频率)

单周期模块作用

流水线模块作用

流水线划分


设计的功能描述(含所有实现的指令描述,以及单周期/流水线CPU频率)


add:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后相加之后将结果写入目的寄存器中。


sub:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后相减之后将结果写入目的寄存器中。


and:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后进行与运算之后将结果写入目的寄存器中。


or:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后进行或运算之后将结果写入目的寄存器中。


xor:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后进行异或运算之后将结果写入目的寄存器中。


sll:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后将操作数1逻辑左移操作数2大小的位数之后将结果写入目的寄存器中。


srl:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后将操作数1逻辑右移操作数2大小的位数之后将结果写入目的寄存器中。


sra:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后将操作数1算术右移操作数2大小的位数之后将结果写入目的寄存器中。


addi:将指令中指明的一一个包含操作数的寄存器中的操作数读出,然后将该操作数与指令中指明的立即数相加之后将结果写入目的寄存器中。


andi:将指令中指明的一个包含操作数的寄存器中的操作数读出,然后将该操作数与指令中指明的立即数做与运算之后将结果写入目的寄存器中。


ori:将指令中指明的一个包含操作数的寄存器中的操作数读出,然后将该操作数与指令中指明的立即数做或运算之后将结果写入目的寄存器中。


xori:将指令中指明的一个包含操作数的寄存器中的操作数读出,然后将该操作数与指令中指明的立即数做异或运算之后将结果写入目的寄存器中。


slli:将指令中指明的一个包含操作数的寄存器中的操作数读出,然后将该操作数逻辑左移指令中指明的立即数的大小的位数之后将结果写入目的寄存器中。


srli:将指令中指明的一个包含操作数的寄存器中的操作数读出,然后将该操作数逻辑右移指令中指明的立即数的大小的位数之后将结果写入目的寄存器中。


srai:将指令中指明的一个包含操作数的寄存器中的操作数读出,然后将该操作数算术右移指令中指明的立即数的大小的位数之后将结果写入目的寄存器中。


lw:以指令中指明的包含操作数的寄存器中的操作数和指令中指明的立即数相加,然后读出以此相加结果为地址的存储单元的值,并将其写入目的寄存器中。


ialr:将指令中指明的包含操作数的寄存器中的操作数和指令中指明的立即数相加作为下一次PC的值,然后将当前PC的值加4之后得到的值写入目的寄存器中。


sw:以指令中指明的包含操作数的寄存器1中的操作数和指令中指明的立即数相加,然后将指令中指明的包含操作数的寄存器2中的操作数写入以此相加结果为地址的存储单元中。


beq:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后进行比较,若操作数1与操作数2相等,则将当前的PC地址加上指令中指明的立即数的结果作为下一次的PC的值,否则,就将当前的PC地址加上4的结果作为下一次的PC的值。


bne:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后进行比较,若操作数1与操作数2不相等,则将当前的PC地址加上指令中指明的立即数的结果作为下一次的PC的值,否则,就将当前的PC地址加上4的结果作为下一次的PC的值。


blt:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后进行有符号比较,若操作数1小于操作数2,则将当前的PC地址加上指令中指明的立即数的结果作为下一次的PC的值,否则,就将当前的PC地址加上4的结果作为下一次的PC的值。


bge:将指令中指明的两个包含操作数的寄存器中的操作数读出,然后进行有符号比较,若操作数1大于或等于操作数2,则将当前的PC地址加上指令中指明的立即数的结果作为下一次的PC的值,否则,就将当前的PC地址加上4的结果作为下一次的PC的值。


lui:将指令中指明的立即数做符号拓展成32位之后的结果写入目的寄存器中。


jal:将当前PC的值和指令中指明的立即数相加作为下一次PC的值,然后将当前PC的值加4之后得到的值写入目的寄存器中。


单周期CPU频率25MHz

流水线CPU频率90MHz


单周期模块作用


PC:将下一条指令的地址值传到imem模块。


Next. _pc:得到下一-次的pc值并传到PC模块。


imem:存储指令的模块。


decoder:译码单元,将输入的指令拆分,得到相应的操作数或是符号拓展后立即数,供后面的模块使用。


control:通过输入的指令得到相应的各个控制信号取值并输出到其他模块。


execute:将相应的操作数进行对应的计算得到结果并输出到需用的模块。


dram:存储单元。


compare:进行比较指令的比较操作,并输出决定是否跳转的信号。


流水线模块作用


PC:将下一条指令的地址值传到irom模块。


Next_pc:得到下一次的pc值并传到PC模块。


irom:存储指令的模块。


jump_ test:检测是否是跳转指令,并决定是否暂停。


IF_ID_ reg: 将IF阶段的部分信号传到ID阶段。


decoder:译码单元,将输入的指令拆分,得到相应的操作数或是符号拓展后立即数,供后面的模块使用。


control:通过输入的指令得到相应的各个控制信号取值并输出到其他模块。


conf_ test:冲突的检测模块,检测是否出现数据冲突,并输出相应的冲突信号以及发生冲突后应该从寄存器中读出的正确值。


ID_ EX_ reg: 将ID阶段的部分信号传到EX阶段。


execute:将相应的操作数进行对应的计算得到结果并输出到需用的模块。


compare:进行比较指令的比较操作,并输出决定是否跳转的信号。


EX_MEM_reg:将EX阶段的部分信号传到MEM阶段。


dram:存储单元。


MEM_WB._reg:将MEM阶段的部分信号传到WB阶段。


流水线划分



7d7c48d798584745a9444d4fce285a86.png


IF阶段:完成下一次pc取值的计算,并根据当前pc值把相应指令从irom模块中取出然后输出到后续的阶段;再者还有对跳转指令的检测,决定是否暂停。


ID阶段:接收IF阶段取得的指令,然后将指令中的有效信息提取出来,例如I型指令的立即数符号拓展值、R型指令的操作数等等,并得到各个控制信号的取值然后输出到后续的模块,再者检测是否出现数据冲突,并进行相应的处理。


EX阶段:接收ID阶段传来的一些控制信号和相应的操作数,并据此进行相应的计算或比较操作,得到结果后输出到MEM阶段。


MEM阶段:对DRAM进行读或写的操作。


WB阶段:将前面阶段得到的数据根据控制信号选择之后写入相应的寄存器中。



相关文章
|
5月前
|
存储 Ruby 内存技术
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
220 1
|
12月前
CPU和指令周期
转移指令时,需要判别转移是否成功,若成功则 PC 修改为转移指令的目标地址,否则下一条指令的地址仍然为PC自增后的地址
414 1
CPU流水线越大越好吗?
流水线技术是提升性能的银弹吗?它通过把一条指令的操作切分成更细的多步,可避免CPU“浪费”。每个细分的流水线步骤都很简单,单个时钟周期时间就可设得更短,变相让CPU主频提升很快。
192 0
|
缓存
CPU流水线竞争解决方案
增加资源,通过添加指令缓存和数据缓存,让我们对于指令和数据的访问可以同时进行。帮助CPU解决取指令和访问数据之间的资源冲突。
126 0
|
程序员 C++
《我的Vivado实战—单周期CPU指令分析》
《我的Vivado实战—单周期CPU指令分析》
175 0
《我的Vivado实战—单周期CPU指令分析》
|
程序员 C++
《我的Vivado实战—单周期CPU指令分析》
博文主要环境基于 Vivado 实现,逐步解析单周期 CPU 指令状态
1547 0
《我的Vivado实战—单周期CPU指令分析》
CPU的流水线指令设计(下)
CPU的流水线指令设计
184 0
CPU的流水线指令设计(下)
CPU的流水线指令设计(上)
CPU的流水线指令设计
440 0
CPU的流水线指令设计(上)
|
搜索推荐 数据安全/隐私保护 计算机视觉
ABF平台设计(二)-流水线的配置器
ABF平台的配置中心又可以称之为渲染中心,负责所有应用的渲染数据与渲染功能配置。 在中后台研发的过程中,我们发现中后台系统存在着普遍性的原则。多个系统在渲染的功能上存在几乎100%的可复用性。例如常见的中后台的页面就是搜索展示表格、表格内容新增、编辑表格内容、删除表格内容等针对不同业务的相同形式页面。所以配置中心的目标就是作为“中后台工厂流水线”的配置器,完成业务系统的高效开发。 那么,流水线应该有哪些配置呢?
193 0
ABF平台设计(二)-流水线的配置器
|
存储 缓存 数据处理
单周期16位CPU模型机的设计与实现
使用Verilog语言和Quartus软件,设计并仿真了一个单周期CPU模型,该模型遵循冯诺依曼架构,包括控制器、运算器、存储器等组件。模型机支持16位指令,包含算术、逻辑、移位、存储器读写和无条件转移等指令。设计中,指令存储器、控制单元、数据寄存器、算术逻辑单元和数据存储器各自承担相应功能,如指令读取、指令解析、数据处理和存储。通过测试程序验证了模型机的正确性,实现了预期的运算和存储操作。
841 0
单周期16位CPU模型机的设计与实现