MIPS. MicroMIPS. M14K

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




16日的 MPROnline 介绍了MIPS即将release(2010年2月正式release)的新的core: M14K和M14KC. 这是MIPS 意图用在中低端市场的core. M14K和M14KC的区别在于 M14KC有MMU/TLB 这些东西,而M14K只有被阉割的MMU单元. 可以这样理解, M14K是增强的32bit MCU,而M14KC是完整版本的32bit的处理器.

眼看ARM在嵌入式市场特别是消费电子领域呼风唤雨,MIPS怎能不眼馋呢? 距离03年推出的M4K系列已经有6年之久了,MIPS终于出手了(能不出手吗?看看现在的手机,MID,MP4等等,有多少用的是MIPS的core?). 这一次带来的M14K系列的core和传统的MIPS core有一些比较大的改变.下面容我一一到来.

第一个比较大的改变是MIPS引进了新的指令集,称为MicroMIPS. 这是一套16/32bit混合的玩意.什么意思呢?也就是说它既可以运行16bit的code,也可以运行32bit的code. 有同学举手发言了,”这有啥稀奇的, ARM不也有Thumb吗”. 没错,看来这位同学还是勤于思考的,相比于Thumb, MicroMIPS的16/32bit混合执行是无缝的.也就是说运行16bitcode和32bitcode的时候是不需要进行人工进行模式切换的. 在ARM Thumb中,如果要运行thumb指令,需要运行一条模式切换指令告诉CPU,我马上要切换到16bit指令下面了.同样,切回32bit指令还需要切回模式. 而MicroMIPS则不需要这样. 实际上,对于编译出来的程序使用的是16bit还是32bit的指令,程序员根本不需要关心,因为compiler会处理这些事情.当一条指令可以用16bit来完成的时候,它会自动生成16bit的code,否则生成32bit的code.

可能有些朋友要问了,费那么大事情干吗?都用32bit的或者16bit的不就完了吗. 想一下,如果都用16bit的指令,reg的index能分到几个bit? ALU时候的操作数能分到几个bit? 如果都用32bit当然好了,但是32bit的可执行程序相比16bit占用的存储空间大阿.对于MCU应用,能省则省阿. 因此,MircoMIPS是做了一个折中. 如果能用16bit,就用16bit,否则的话就还是用32bit的指令吧.

另外,MicroMIPS还兼容以前的MIPS32指令.也就是说原来为MIPS 4K写的OS/Application什么都不用改就可以直接run在新的core上面.当然了,为了能充分利用新的MicroMIPS指令集的性能,您还是废点事情重新编译一遍得了.

据这篇文章的测评,相比于32bit的MIPS指令, MicroMIPS可以降低35%的程序存储空间,性能的减少在2%左右.

第二个比较大的变化我认为是对于中断的处理. MicroMIPS有一些机制能快速地处理中断. 首先在MicroMIPS中,有可选的shadow register set. 这个register set可以是1/2/4/8/16个32个GPR的影子.  这个有什么用呢? 我们先来复习一下上下文切换的过程. 首先,你得保存当前的register到memory中吧,然后再从memory中load新的registe,然后执行. 这一来一去,得多少条Load/Store指令了?况且要是cache miss的话,还得从相比于CPU来说是比较慢的memory中存取数据. 而有了这个shadow register set, 当上下文切换的时候,直接把当前register 的值塞到影子中就可以了. 另外,M14K还有一条新的IRET指令.相比于通常的ERET指令的不同之初在于,IRET支持interrupt的chaining. 也就是说当一个中断处理完了调用IRET返回的时候, 如果CPU发现现在还有新的中断在等待,它不会返回原来被中断的地方,而是直接跑到中断处理程序继续处理中断!

第三个是M14K有一个flash的加速. 特别是当需要从flash中取指令执行的时候,如果flash 太慢,会影响效率.  其实说白了就是在flash和CPU之间加了一个预取的cache. M14K中,这个cache 的大小是2line,每个line是128bit.

其他方面,比如MMU/CACHE 方面和传统的MIPS差别不大,这里就不介绍了.

最后少不了performance的评估了. M14K的竞争对手是ARM的Cortex A3. M14KC的对手是ARM的 Cortex A5. 在TSMC 90nm工艺下, area-optimized M14K功耗11.6mw,频率193MHZ,面积是0.21mm2. 而 speed-optimized的A3功耗13.3mw,频率191MHZ,面积为0.37mm2. 可以看出,在相同的评论下, M14K的功耗和面积都是好于A3的. 请注意,这里比较的是 area-optimized的M14K和 speed-optimized的A3. 如果比较 speed-optimized 的M14K和speed-optimized的A3,两者在性能上面的差距更大. M14KC和A5的比较这里就不详细列举数据了,总之, M14K/M14KC在性能/功耗/面积方面都是由于ARM的A3/A5的. 不过A5可以做成Multicore,这一点M14KC没有.MIPS也有multicore的产品,比如 1004K.

不过市场上谁能获胜和技术先进的关系不是一次方程.但无论如何, M14K/M14K的推出是MIPS狙击ARM的行动之一,至于最后的结果如何,让我们拭目以待.

(2个打分, 平均:5.00 / 5)

雁过留声

“MIPS. MicroMIPS. M14K”有23个回复

  1. 陈怀临 于 2009-11-17 11:03 上午

    中断处理的变化比较大。。。Shadow Register的用法不错。。。

  2. 读者 于 2009-11-17 11:46 上午

    ARM 的 Thumb-2 已经有了这个功能:

    “The ARM Thumb-2 core technology combines 16- and 32-bit
    instructions in a single instruction set and allows
    programmers / compilers to freely mix the instructions
    together without mode switching.”

    – URL: http://www.linuxfordevices.com/files/article078/Experiment_with_Linux_and_ARM_Thumb-2_ISA.pdf

  3. IPSECer 于 2009-11-17 4:44 下午

    不懂cpu的人问一个问题:性能方面一般根据什么指标衡量?dmips值能代表性能吗?m14k的dmips官方说是1.5,cortex现在最少都是2吧,mips处理器dmips超过2的我记得只有broadcom的1480吧,记得哪里看到说mips一般不注重单core的计算能力而关注整体性能,那m14k是怎么评估和arm来对比的呢?

  4. deltali 于 2009-11-17 6:15 下午

    肤浅的问问阿

    1。文中说Shadow Register是可选的,我想shadow register在用在单个中断的时候时很有用的。但是大多数情况嵌套中断的情况下,把它们保存到内存中的工作还是少不了的。为了这个应用在芯片中加这么多的register合算不?

    2。16/32bit混合的玩意,好几年前我们老板就搞出来了。但是从总体上看mips出来的东西体积是要比arm大,当然了我看到其他mips的东西也不多,但是从我看到的情况来看都是这样。

    3。我觉得mips应该在其他方面下大力气来和arm竞争。最明显的一个就是它的开发调试环境,你做个mips的产品,想买个仿真器都买不到。arm的开发资料到处都是,有这么大的群体想不发达都难。更别说其他的各种成熟的解决方案。很多时候嵌入式这方面不需要很高的性能,能快速开发出产品才是关键。

    不知道评论到这里是不是有点跑题了,哈哈,希望以后能看到更多的类似文章

  5. yajin 于 2009-11-17 6:43 下午

    回IPSECer:
    一般用dhrystone来衡量性能.虽然这个指标是不包含是浮点运算的.
    Cortext A3在90nm的工艺下,最大频率是191MHZ,最小是50MHZ. 能达到1.25DMIPS/MHZ.
    Cortext A5在90nm的工艺下,频率480M-1G. 1.57DMIPS/MHZ.
    以上数据来源于MPRONLINE.

    因此,cortext 最少是2是不准确的. A8 可以到达2(http://www.arm.com/products/CPUs/ARM_Cortex-A8.html). MIPS 和 A8对应的 74K 也可以达到 2. (http://www.mips.com/products/processors/32-64-bit-cores/mips32-74k/)

  6. yajin 于 2009-11-17 6:51 下午

    回deltali.
    1. 这个影子register set是有多个的.最多有32个这样的影子.所有嵌套的中断也是没有问题的.
    2. 面积方面我得到的结论恰好和您相反. 以下是数据.
    (1) A8. 2DMIPS/MHZ. 65NM with cache <4MM2.(http://www.arm.com/products/CPUs/ARM_Cortex-A8.html)
    MIPS 对应的74K. 65NM. 2.5MM2. (http://www.mips.com/products/processors/32-64-bit-cores/mips32-74k/)
    (2) M14K和A3
    文中已经说到, 在差不多的频率下面(191MHZ), M14K是0.21MM2, A3 0.37MM2.

    3. 是个问题阿. 相关的工具太少,开发板太少… 这是个市场问题…

  7. yajin 于 2009-11-17 6:55 下午

    另外还有一点,文中忘记说明. MicroMIPS 新引进了直接操作memory的指令(有点违背RISC的LOAD/STORE 理念了).
    ASET, 能直接set memory中一个byte的某个bit.
    ACLR, 能直接clear memory中一个byte的某个bit.

    以往在MIPS中,需要先LOAD,然后AND/OR,然后STORE的!

  8. egg 于 2009-11-17 7:09 下午

    现在arm cotex A9都出来了

  9. yajin 于 2009-11-17 7:27 下午

    1004K VS A9

  10. kkk 于 2009-11-17 7:46 下午

    没啥新意,16bit早就有mips16e,shadow register set 也是4ke/24ke早有了的,但是很少有产品实现,flash的那个cache说的是scratchpad 吗
    个人感觉它的目标市场还是留给altera的fpga去集成的,不过话说回来,其实在智能卡市场,mips几乎豪无建树,arm倒有半边天,也许是我孤陋寡闻吧

  11. 帅云霓 于 2009-11-17 7:58 下午

    这个直接对memory进行bit set的操作,其cycle数在没有cache-line miss的情况下是多少呢?跟load-set-store的三联操作相比哪个更快呢?
    实际上,CISC的处理器,如x86,虽然提供了这样的指令,但在内部做事情的模式仍然是load-set-store。我个人觉得这么做的好处,只是减少了指令条数,顺便节省了可执行文件的存储空间。不知这么做能否有别的advantage

  12. silentwings 于 2009-11-18 1:08 上午

    很多情况下是商业战胜技术,ARM就是因为其广泛而宽松的授权和完善的支持导致了今天的泛滥。

  13. coder 于 2009-11-18 2:21 上午

    >>。不知这么做能否有别的advantage?
    ASET 和 ACLR 是 atomic instructions

  14. 帅云霓 于 2009-11-18 2:46 上午

    那就没有违背RISC的理念。
    事实上,RISC和CISC本来就应当相互取长补短。听说RMI的新一代XLR多核MIPS处理器,都能够硬件处理unaligned word access了,不需要四条非对齐加载/存储指令。这也是违背RISC理念的地方,但能满足客户的特殊需求,在商业上就能够成功。
    是哪个客户提了这种“变态”需求呢?我听说是某通讯行业的国内著名公司,在此跟各位大侠求证一下?

  15. KISS 于 2009-11-18 5:35 上午

    显然M14K是对着32bit-MCU去的,早先的M4k定位挺尴尬,没记错的话最先是宣称多核特性,后来定位到MCU市场.

    shadow register set确实早有了,16/32bit无缝切换Arm Thumb2也早就实现了

    其实我觉得最有意思的是MicroMIPS混合有16/32/48-bit指令. 不过现在已经没人再争论RISC/CISC,适合需要的就是好东西.

  16. KISS 于 2009-11-18 5:38 上午

    Dhryston是个非常古老的东西了,DMIPS指标只能看出一个设计有多烂,但不能分辨设计有多好

  17. KISS 于 2009-11-18 5:40 上午

    @yajin: 你在公司还是学校?

  18. bone_collector 于 2009-11-19 7:14 下午

    MIPS的这个系列是瞄准控制器市场,对手应该是ARM的Cortex-M3,M3/M1/M0现在应用非常多。

  19. uniice 于 2009-11-26 4:15 上午

    国内首款自主研发的MIPS仿真器 IDE出来了,感兴趣的可以下载试用,官方网站www.uniice.com

  20. aaa 于 2009-11-26 5:49 上午

    TRACR32也被山寨出来了

  21. sl 于 2009-12-15 1:15 上午

    位操作cotex m3也有,m14k有具体型号吗?或者有什么厂商购买core?

  22. 好文得食 于 2010-09-30 11:41 下午

    看了 1help1 侠士的两篇文了。谢谢。
    对于文中提到的 shadow register set,结合IRET,
    如果中断嵌套几次的话,最终会不会又出现load/store的情况呢。

  23. 好文得食 于 2010-09-30 11:45 下午

    向6楼请教下,关于shadow register set,
    每次中断嵌套应该不只保存1,2个reigster吧,多保存几次就会不够用了吧,可以说明下不,谢谢