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

    文章

    10826

    浏览量

    211158
  • MIPS32架构
    +关注

    关注

    0

    文章

    1

    浏览量

    4465
收藏 人收藏

    评论

    相关推荐

    TPA3116主板开关机音怎么消除?

    原理图是按TI官方PDF资料设计的,GAIN=32db,输入电容4.7UF,主板电源接口是DC-005插座,外置通电的电源适配器插头插到主板DC005插座时,喇叭有很大的音,取下电源插头时也会有音(比通电音小
    发表于 11-01 06:56

    LMH6703不能做差分放大吗?

    用LMH6703放大一个差分信号,用TINA做的仿真.将两个全差分放大器得来的输入信号变成单端的,A=1 这是两个输入信号,相位相反,幅值相同. 但最后结果却不是幅值为2,DC=0的正弦. 为什么呢?LMH6703不能做差分放大么??
    发表于 09-20 16:07

    大功率贴片电感的电感值偏大一点可以用吗

    电子发烧友网站提供《大功率贴片电感的电感值偏大一点可以用吗.docx》资料免费下载
    发表于 09-20 11:33 0次下载

    中国智能汽车腾飞,为什么异构算力是第一生产力?

    智能时代的“世纪之车”,异构算力是第驱动力
    的头像 发表于 09-14 10:32 3579次阅读
    <b class='flag-5'>中国</b>智能汽车腾飞,为什么异构算力是第<b class='flag-5'>一生</b>产力?

    LMH6601是不是跨导型,能不能做峰值保持电路呢?

    我想做个峰值保持电路,跨导型的查到了4个放大器,但是我感觉LMH6601不像是跨导型。有哪位比较懂的帮忙看下数据手册,LMH6601是不是跨导型,能不能做峰值保持电路呢?
    发表于 09-09 06:17

    OPA4170不能做比较器用吗?

    Pin2、5不是应该和Pin8电压相同吗?Pin3应该是+8V左右,Pin6应该是-8V左右吗?难道运放输入端内部并非虚断?我换了TL074之后测得数据就是想要的结果了,难道OPA4170不能做比较器用吗?疑问多多,求指点。
    发表于 09-03 07:17

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

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

    人类历史上首届AI选美,谁吃到了第波AI审美红利?

    美,是第一生产力,甚至还有红利
    的头像 发表于 07-25 12:47 2368次阅读
    人类历史上首届AI选美,谁吃到了第<b class='flag-5'>一</b>波AI审美红利?

    RT-Thread宣布认可“一生芯”计划CBAS新认证体系,获认证同学自动获得开源实习联合培养工程的实习OFFER

    RT-Thread作为甲辰计划开源实习联合招聘培养单位,即日起接受“一生芯”计划认证体系。欢迎童鞋们通过甲辰计划投递简历!在7月14日举行的“一生
    的头像 发表于 07-18 08:35 516次阅读
    RT-Thread宣布认可“<b class='flag-5'>一生</b><b class='flag-5'>一</b>芯”计划CBAS新认证体系,获认证同学自动获得开源实习<b class='flag-5'>生</b>联合培养工程的实习OFFER

    2024“一生芯”暑期宣讲会圆满成功

    2024年7月14日,“一生芯”暑期宣讲会如期而至。为了能够让更多的学生、工程师和爱好者更深入了解“一生芯”计划,今年的“一生
    的头像 发表于 07-17 08:37 975次阅读
    2024“<b class='flag-5'>一生</b><b class='flag-5'>一</b>芯”暑期宣讲会圆满成功

    矽速科技宣布认可“一生芯”计划CBAS新认证体系,获认证同学自动获得开源实习联合培养工程的实习OF

    矽速科技作为甲辰计划开源实习联合招聘培养单位,即日起接受“一生芯”计划认证体系。欢迎童鞋们通过甲辰计划投递简历!在7月14日举行的“一生
    的头像 发表于 07-17 08:34 922次阅读
    矽速科技宣布认可“<b class='flag-5'>一生</b><b class='flag-5'>一</b>芯”计划CBAS新认证体系,获认证同学自动获得开源实习<b class='flag-5'>生</b>联合培养工程的实习OF

    一生芯”厦门基地正式启动

    一生芯”专注培养处理器芯片及计算机系统人才,提升同学们的“计算机软硬件系统协同设计能力”和“芯片全链条设计能力”,坚持开放性和公益性,不限学校、专业和年级,均可免费报名和学习(可零基础),支持
    的头像 发表于 07-11 08:37 1603次阅读
    “<b class='flag-5'>一生</b><b class='flag-5'>一</b>芯”厦门基地正式启动

    外接高级定时器1的刹车引脚后,STM32中能不能做滤波?

    请问下外接高级定时器1的刹车引脚后,STM32中能不能做滤波,因为这个刹车功能旦触发就直接关闭PWM波了,要是因为噪声等干扰意外触发,整个控制都关闭了,还有PWM是在刹车的中断服务函数执行前关闭,还是执行后关闭呢?如果是在执行后关闭,可以在这里做软件滤波吗
    发表于 07-02 08:04

    用DAVE生成的1302 ADC移植到MDK不能做AD转换是怎么回事?

    ( ADC_MEASUREMENT_0)这个函数启动,始终不能做AD转换,请问还需要进行什么设置?附件是用DAVE生成的工程和拷贝到MDK的工程
    发表于 05-20 08:24

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

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