0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

谁说中国不能做CPU?大一生惊爆你眼球

454398 来源:百度贴吧 作者:edwd2 2014-12-16 15:51 次阅读

目前只完成了设计概念和硬件描述,支持部分常用32位MIPS指令(ADD, SUB, LW, SW等)。硬件描述用的是SystemVerilog语言,生成软件Synplify 9.6.2。昨天我测试了执行单元和指令控制单元,这两个主要的组件没大问题,剩下的不敢保证。别抱太大期望,大一计算机工程学生能力有限。下图是中央处理器寄存器传输层的简化设计概念。

谁说中国不能做CPU?大一生惊爆你眼球

数据路径的部分单元改造自Harris & Harris的教材“Digital Design and Computer Architecture“的微架构例子。为了方便,我们假设内存分为数据内存和指令内存。可见CPU拥有常规的5级流水线(Instruction Fetch, Instruction Decode, Execute, Memory, Write Back),并有两份数据路径,因此超纯量,理想化下每周期可同时执行10个指令。


蓝线圈的是流水线的执行组件。

谁说中国不能做CPU?大一生惊爆你眼球

红线圈的是数据路径,两个完全相同

谁说中国不能做CPU?大一生惊爆你眼球

在HDL中,我将命名两个运行指令为I0和I1或Instr0和Instr1,PC为PC0和PC1,下周期PC为PC0F,PC1F。

CPU的完整硬件生成:

谁说中国不能做CPU?大一生惊爆你眼球

我的设计中最有趣(也是最难完成)的部分是名为IFHU(Instruction Flow and Hazard Unit)的指令流动及数据冒险控制单元。

谁说中国不能做CPU?大一生惊爆你眼球

原稿:


它内置了一个小型三级流水线,目的就是为了储存(如果存在)指令的RD(Destination Register),Register File的目标地址。地址在IFHU内的流动模拟了真正指令在处理器流水线的执行完成度,因此每次PC从指令内存读出对应指令后,指令如果是BEQ,R- Type或I-Type,他们的根寄存器的地址(RS,RT)将于存在于IFHU流水线内的RD做对比,如果有相同地址代表会出现数据冒险。这些结果会输出到IFU(Instruction Flow Unit),指令控制单元,它按照以下原理决定最终指令是否为空指令以及下周期PC的值:

1. I0和I1正常:执行两个指令,PC0,PC1 + 8

2. I1出现跳跃,分支,或数据冒险:执行I0,PC0 = PC1,PC1 + 4

3. I0出现数据冒险:不执行,PC都不变

4. I0出现跳跃或分支:内部执行,PC0为预测或跳跃后PC,PC1 = PC0 + 4

不出错的话PC1应该永远等于PC0。

下面是IFU:

谁说中国不能做CPU?大一生惊爆你的眼球

IFHURegSelect:

谁说中国不能做CPU?大一生惊爆你的眼球

IFHUXORComp:

谁说中国不能做CPU?大一生惊爆你的眼球


IFHU的另一个重要的组件是一个简单的2位分支预测器。目前我的CPU只支持BEQ(Branch on Equal)这一个分支指令,不过剩下的也都是这一个来的。这是分支预测器FSM:

谁说中国不能做CPU?大一生惊爆你的眼球

设三个状态位元为S2S1S0。主要状态Predict Taken,Weak Not Taken,和Strong Not Taken分别有自己的子状态In Progress,In Progress表示已做预测,不知结果,在这个状态下不会再做预测,确保流水线最多执行一个分支预测。根据上面的FSM,可得出一个下个状态的真值表:

谁说中国不能做CPU?大一生惊爆你的眼球

分支预测器将先把两个可能的PC存进FF,然后使用预测的方向(S1)选择预测PC。同时一个相反方向的电路(~S1)将选择相反的PC,最终由BRsuccess(预测是否成功)来选择最终输出到IFU。


谁说中国不能做CPU?大一生惊爆你的眼球

接下来的指令解码流程就比较直接了。MIPS指令需要读取的寄存器地址直接输进32x32位的寄存器,结果读到RDXX。从这里起,将会有两个数据路径以及两个控制单元。

谁说中国不能做CPU?大一生惊爆你的眼球

寄存器或许也同时要储存四个周期前的指令的计算结果或内存数据,WA[4:0]是写入地址,WD[31:0]是写入内容,寄存器的CLK依然和处理器同步但 FF在Falling Edge更换,保持同周期完成。SigExt是Sign Extend的缩写,它负责把指令的Immediate从16位扩到32位。

32x32位的寄存器矩阵:

谁说中国不能做CPU?大一生惊爆你的眼球

控制单元:

谁说中国不能做CPU?大一生惊爆你的眼球

执行单元的输出ALUcontrol控制ALU的功能:

谁说中国不能做CPU?大一生惊爆你的眼球

RegWrite和MemWrite控制寄存器和内存是否写入,RISel控制执行单元ALU的第二个输入使用寄存器内容还是Imm。这些控制电路会如数据电路往流水线的下一个阶段进行。


接下来是 EU(Execution Unit),执行单元。EU以目前支持的指令来看,只需要一个多功能ALU,以后可以加一个FPU和支持SIMD扩展的计算单元。另外RD1读出的内容直接接到WriteData逻辑,在SW指令里,这个将直接写入数据内存。RegAddr是R-Type或I-Type指令的Write Back地址,因为地址在这两类指令里的位置不一样,控制单元根据OPCode输出的RISel逻辑会选择对应的地址

R-Type:0000 00ss ssst tttt ddddd000 0010 0101 (Write Back地址为d)

I-Type:1000 11ss ssst ttttiiii iiii iiii iiii (Write Back地址为t)

谁说中国不能做CPU?大一生惊爆你的眼球

ALU的设计很简单,控制单元根据Funct输出的ALUcontrol[1:0]控制ALU的功能。现在只需要ADD,SUB,AND,OR。我这里懒省事了,本来想自己写个Carry Look-Ahead Adder但是时间来不及,直接用SV的“+”了。
谁说中国不能做CPU?大一生惊爆你的眼球

谁说中国不能做CPU?大一生惊爆你的眼球

这是用ModelSim测试EU的结果:

谁说中国不能做CPU?大一生惊爆你的眼球

谁说中国不能做CPU?大一生惊爆你的眼球

谁说中国不能做CPU?大一生惊爆你的眼球

结果都正确。


接下来测一下IFHU,我用以下六个指令

谁说中国不能做CPU?大一生惊爆你的眼球

如果正常的话,IFHU应该并行执行指令1和2,到第二个周期,指令4有冒险,因此IFHU应该只执行指令3,并继续读取指令4和5,这两个都依然有冒险,所以在第三周期PC不变。

汇编器的结果:

谁说中国不能做CPU?大一生惊爆你的眼球

ModelSIm运行指令:(完全列出来)

谁说中国不能做CPU?大一生惊爆你的眼球

结果:

谁说中国不能做CPU?大一生惊爆你的眼球

细看一下第一周期的结果:

谁说中国不能做CPU?大一生惊爆你的眼球

可见两个指令都顺利通过,PC都加8

第二周期:

这里的I1F为0开头,代表空指令,PC0 = PC1,而PC1 = PC1 + 4

第三周期:

谁说中国不能做CPU?大一生惊爆你的眼球

两个指令都成空指令,PC也不变,根预料的一样。目前IFHU未发现大问题,指令流动正常。


剩下的就不多说了,MEM和WB都很直接。如果不是马上要考期末了,我会再加点指令,再仔细测测所有单元。本来还想来个乱序执行设计,再放个寄存器重命名单元和保留站,但现在的能力有限,我想先读几本更深的教材。接下来我把几个主要Module的描述发出来。

谁说中国不能做CPU?大一生惊爆你的眼球

谁说中国不能做CPU?大一生惊爆你的眼球

谁说中国不能做CPU?大一生惊爆你的眼球
谁说中国不能做CPU?大一生惊爆你的眼球

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10435

    浏览量

    206522
  • MIPS32架构
    +关注

    关注

    0

    文章

    1

    浏览量

    4462
收藏 人收藏

    评论

    相关推荐

    网线接口为什么是 RJ45 规格,而不能做成 USB 型?

    网线接口为什么是RJ45规格而不能做成USB型,这是因为RJ45规格的接口设计是专门用于以太网协议的数据传输的,而USB型接口则是专门用于USB协议的数据传输。 RJ45接口是一种标准的8P8C接口
    的头像 发表于 03-18 10:57 185次阅读

    GaN HEMT为什么不能做成低压器件

    GaN HEMT为什么不能做成低压器件  GaN HEMT(氮化镓高电子迁移率晶体管)是一种迅速崭露头角的高频功率器件,具有很高的电子迁移率、大的电子饱和漂移速度、高的饱和电子流动速度以及较低的电阻
    的头像 发表于 12-07 17:27 411次阅读

    中国CPU无需再依赖任何国外授权技术

    cpu行业资讯
    深圳市浮思特科技有限公司
    发布于 :2023年11月28日 15:21:30

    用AD8367为什么不能做音频AGC?

    最近在用AD8367做音频AGC想达到的目的就是 不管电脑音量加大还是减小(也就是输入) 输出保持在定值 照着手册上面试了几次都不能做到AGC只能做到输入越大输出越大相当于就是很普通的放大
    发表于 11-20 06:20

    使用AD8001放大一个100mv左右的信号,在经过放大的信号低电平都是三点几伏不能够从零开始的原因?

    请问,如图我想使用AD8001放大一个100mv左右的信号,然后使用比较器输出信号进行计数,但是现在经过放大的信号低电平都是三点几伏,不能够从零开始,请问这是什么原因呢?如图,红色是需要放大的信号,紫色是经过放大的信号。
    发表于 11-17 06:07

    NRF51822能不能做蓝牙音箱,为什么蓝牙4.0手机就收不到蓝牙?

    NRF51822能不能做蓝牙音箱,为什么蓝牙4.0手机就收不到蓝牙,但是在APP里面能搜索到!
    发表于 11-09 06:37

    请问keil C51中的data怎么设置成大一点的值?

    keil C51中的data怎么设置成大一点的值?
    发表于 11-01 07:42

    为什么SD卡的容量不能做到跟硬盘样大?

    为什么SD卡的容量不能做到跟硬盘样大
    发表于 10-09 08:54

    核废水来了,我们能做什么?

    核废水来了,我们能做什么?
    的头像 发表于 09-08 08:26 474次阅读
    核废水来了,我们<b class='flag-5'>能做</b>什么?

    当在NUC505发WDT重置不能正常触发发生硬故障如何解决?

    当在NUC505发WDT重置时,WDT的硬件机制将拉动重置针低的电压以触发重置;如果重置针的电压不能拉低,则重置不会正常触发,并可能发生硬故障。因此,有必要修改电路设计。请参考NUC505开发板的设计,用于重置针的电路
    发表于 08-28 07:56

    求助,LNK304能不能做成输出3.3V 250mA的?

    请问LNK304能不能做成输出3.3V 250mA的?板子上想提供3.3V电压,约250mA的电流,该怎么解决?输入是AC220V。或者用什么方法能满足这个条件?不能用变压器,空间不够!各位给点意见!
    发表于 08-01 15:21

    为什么NCP1654不能做大功率而L4981可以?

    为什么NCP1654不能做大功率的而L4981可以做大功率的
    发表于 07-31 15:07

    #硬声创作季 电子知识 谁说三极管不能做交流电子开关?

    元器件电子知识
    Mr_haohao
    发布于 :2023年07月25日 22:24:28

    倪光南院士:RISC-V是中国最受欢迎CPU架构,不受垄断制约

    “今天,RISC-V是中国CPU领域最受欢迎的架构,成为推动新代信息技术发展的新引擎。”3月2日,由阿里巴巴旗下的平头哥半导体有限公司举办的首届玄铁RISC-V生态大会在上海举行,中国
    发表于 05-28 08:45

    个文盲画的1000W2.1功率放大器。

    如图↑。 由于缺乏专业知识,别人画的大功率电路图看不懂。于是自己按照对那些图的理解画了张,准备搭棚用的。 也不知道验证这个图的电路如果焊接起来能不能响,可有专业的好心大哥路过,停下脚步轻轻看图看。狠狠的把错误的地方都喊出来
    发表于 05-19 05:03