IC行业排行榜

IC Insights数据显示,受DRAM和NAND闪存需求推动,全球20大半导体厂商第三季度销售额环比增长19%,与第二季度环比涨幅基本持平。

基于前三个季度的整体销售额,IC Insights评出了全球20大半导体厂商,英特尔仍排名首位,前三个季度销售额为225.94亿美元。三星位居第二,销售额为144.56亿美元。

如果按照市值计算,今年9月份,三星电子市值曾达到1102亿美元,首次超越英特尔成为全球最大半导体制造商。

以下为IC Insights评出的全球20大半导体厂商排名(前三季度):
1. 英特尔
2. 三星
3. 东芝
4. 德仪
5. 台积电
6. 意法半导体
7. 高通
8. Renesas
9. Hynix
10. 索尼
11. AMD
12. 美光
13. 英飞凌
14. NEC
15. Broadcom
16. 松下
17. MediaTek
18. 富士通
19. NXP
20. 飞思卡尔

近期小动态

好久没有发新日志,这段时间身陷coding,combine,debug的泥塘中,久久不能自拔。

回想一下自己没有做什么特别实质的事情,总结一下:

1 配合今年流片的芯片做EJTAG manycore的debug设计,和软件控制程序设计;现在已经进入后期调试,通过主机仿存已经比较稳定。

2 Debug部分测试平台的设计。光有RTL代码,光有C控制程序是不够的,如何测试便成为了最重要的。设计并实现通过System Verilog DPI模式的,C语言的控制程序与synopsys VCS/virsim交互的进程交互通讯(模拟JTAG Emulator)

3 用笔记本和另一个同学组了一个运算节点,用MPICH在节点上编程,得出了2台机子比一台机子快的结论!(实践证明) 

4 读了一本闲书,鼎鼎大名的唐俊的 《我的成功可以复制》。此书分三次看完,第一次看到他年少时的种种,我觉得还真的不咋样,小学的好小的事情都翻出来大作文章,让我一头雾水;第二次看到他去盛大之前,唐俊的光辉开始闪耀,从博士开始就是不走寻常路的个性青年;而第三次看到书的结束,让我真正的佩服在微软掀起风云,在盛大金牌经理的成熟而智慧闪耀的唐俊。我没有读过管理的书籍,但是这本书透出很多管理的思路和方法,我还是很赞同的。

=====================可恶的分割线===================================

近期感觉:

1 C语言的功底还是不牢靠的,对于我这样电子本科出身的人, C语言在用起来时候碰到了各种各样的问题。不过通过这个做这个debug控制软件,还是让我系统的重新洗礼了一遍C, 还是觉得成长不少。

2 Makefile绝对是一个必要,一定,并且特别需要好好掌握的Linux工具。在linux下开发的时候,程序经常会比较多,也比较难以管理,Makefile解决这一切的问题。

3 Vim用惯了,现在经常在Word中 :wq推出..:( 

4 越来越佩服改编译器的大牛,组里有个师兄跟代码跟着跟着就到glibc中了…然后编译器就改动了,然后我们碰到的问题就解决了。传说gcc所有的代码(包括所有的交叉编译等工具链)有7000W行。

5 我自己的网站开始建设了,大家有空去看看 http://ams.ict.ac.cn/manycore/people/leizhengmeng.html

 

近期会写几期非常基础的C语言编程总结,非常基础,大家不要歧视我哈。还会有些Linux C相关的知识。

Tilera-零度接触

(在计算机体系结构方面我只是个小菜,所有言论都代表我自己的理解,请读者去其糟柏的进行阅读)

Overview:

Tilera为MIT的著名学术manycore的始祖RAW的商业版,由MIT多媒体实验室的老大阿南特·阿加瓦尔带队拉国家funding,风投创立的一家针对特殊领域设计的manycore芯片。TILERA 64/64 pro为07年和08年底distribute出64cores 芯片,流片工艺都为90nm。按照他们的说法是低功耗,特殊领域应用优势明显,编程友好,debug方便的一个数据密集型运算的解决方案。Tilera中国区的Technology Manager到我们所给我们组做presentation和Demo,零距离的接触了传说中的manycore始祖公司。

Tech Part:

  1. Core: 因为接触的很晚,对RAW的结构没有了解,现在Tilera 64 为64bit RISC,ISA由设计人员特殊定义。主频533M-833M. 发射结构为VLIW(超长指令字),3 -way VLIW。功能部件没有浮点运算部件,全为定点处理。据我的猜测VLIW由2条ALU+1仿存组成。因为没有浮点运算部件,流水线阻塞的情况比有FALU的情况要少,但注定不能完成精度较高的科学计算的功能。(1条浮点指令需要多条定点指令完成,科学计算的浮点运算很密集)。加之主频并不是很高,所以很明确的判断出,Tilara的设计的应用面放弃了传统的HPC,而选择了更有针对性地网络处理,编解码方面的应用。TM告诉我们RAW的设计中是有FALU的,但是Tilara中没有,说明设计人员是胸有成竹的放弃了中庸的设计风格,这也是需要我们学习的,懂得放弃才能成就更辉煌的事业。
  2. NOC(Network on Chip):他们的iMesh我没有看出有什么特别之处,我认为做这么多核的设计人员肯定不会傻到用1条总线,通过仲裁选择数据传输路径。而mesh是一种最传统的设计方式,没有什么创新可言,不过这点也是RAW打天下时引起的潮流。
  3. Cache: Cache engine和L3 cache的概念完全就是忽悠人的,L1 i$ 8k,d$ 8k(tilera64) ,L1 i$ 16k,d$ 8k(tilera 64pro),L2 $ 64k,还有一个也是针对极强的DMA功能,图像处理专用(图形地址连续处理)。我现在对数据量化分析还不是很敏感,64pro 比 64性能提高有1.5-2.5倍之多,而我发现的区别最大的也就在i$上了,我不是很明白,因为我认为网络分析和编解码是数据处理量远大于程序量,难道是程序跳转的问题,使得代码的局部性特别差? 而数据重复处理次数较多,局部性较好。
  4.  runtime: 这点tilera很牛B, 为了提高可编程性,他们直接干了个linux Kernel进去,SMP的liunx去调度所有的小核,当然也要牺牲小核去完成linux OS的运行,各种驱动的处理,pci Express的驱动,DMA的处理等。因为使用了linux,使得对小核的控制能力大大加强,我相信可以完成复杂的小核调度算法,也可以实现小核分块分别运行不同的Multi-thread的代码。他们还专门为网络的应用重新写了高效的多线程的网络协议栈,使得网络应用如虎添翼。(TM说公司做开发的人50来人,有2/3是搞软件的,算来算去也就10来个人做芯片,这几个人从结构,模拟,RTL设计,验证,DFT到物理通吃的感觉,哎…)
  5. 功耗:这个也是弱化core设计和设定合适主频(700MHz-800MHz)的最好产物,也是manycore界达成一致的设计定理和优势方面。对功耗方面了解的不多,只知道时钟树的频繁翻转是功耗的主要产生部分。Tilera提出的自适应的小核工作/休眠模式也是解决功耗的他们鼓吹的一个重要方面。按照参数来说 18-22W远小于intel的主流产品60-80W.
  6. MDE:也就是集成开发环境,通过Ecelipse增加插件完成,但被改造为Tilara专业的开发工具。C/C++编程,编译,simlulation, loader(加载到芯片内存空间,启动tilera) ,debugger(检测相关数据 寄存器数据,一些利于分析的数据cache hit,packet number什么的,能精确设定断点,指定小核检测寄存器),profile(得出很多有用利于程序优化的工具)。 我这个做我们组硬件验证平台软件链的觉得这样全面的软件系统真的是无法达到的高度,对的起他们2/3 的优秀的MIT的设计人员扑在软件上了。

最后的话:

看到始祖级的产品后,发现我们追赶的步伐还是很快的。 我很佩服Tilera设计人员干掉FALU的非主流创新情节。manycore相对于streamprocessor和DSP的优势还没有完全体现出来,manycore何区何从,我们拭目以待。

Jirl,写在simplescalar之前

sim-safe.c from simplescalar tools,是一个程序解释器,在我们GT平台上,起到对比验证sim-gt的作用。执行流程与sim-fast基本相似。配置流程

  1. make config-mips(执行生成出machine.def等与架构有关的文件,可以关注一下makefile的设计)
  2.  make sim-safe 生成可执行文件 sim-safe,就可以执行仿真器的全部工作了。

sim-gt是一个事件驱动模式的模拟器,核心数据结构为队列,事件驱动过程在event.c(event.h)中设定完成,由状态机跳转函数指针完成,具体设计需要关注

但是对我震撼的是Jirl simlulator. 由 J师 短时间独立设计coding完成的多核验证模拟器,其完美重现了SS中的核心,

  1. md_init_decoder()->与simplescaler main中相同名称的函数完成的工作相同,译码的初始化(很复杂需要以后学习)
  2. sim_init()-> core中寄存其的初始化,MIPS架构中T9,A0,FP等寄存器要初始化,还有一些基本的初始化工作
  3. sim_load_runtime/program-> 载入runtime和program
  4. sim_start()
  5. sim_exit()

其中模拟器中的core的结构是8级流水,PC,IR,DE,X1,X2,X3,X4(执行部件有4级流水)

关于syscall, 在machine.def中DEFINST中定义的,syscall的执行流程为先去switch(syscode),case到相应的执行功能后执行。

SS第一篇 overview

关于simplescalar是什么,干什么,我就不介绍了。开门见山,直接开始。

泰勒斯说万物源与水,C语言说万物源于main()(当然这个entry是main还是要由ld.script决定),二话不说直接进main()

找到main.c,在main()的函数体里面都是_init(),都是模拟器的初始化,

真正进入执行的是sim-main() ,make决定了到达了哪个执行主体里面,sim-safe,sim-outorder,sim-fast.etc.

我们选择最简单的一个sim-fast.c

追踪到sim-main(),再次回避困难,直接进入#ifdef的else(还不清楚JUMP_TABLE是用来干什么的)

#else /* !USE_JUMP_TABLE */部分

在短暂的选择Alpha格式是否pre-decode的过程之后,进入真正的decode阶段。 通过以下的语句

/* load instruction */
MD_FETCH_INST(inst, mem, regs.regs_PC);

/* decode the instruction */
MD_SET_OPCODE(op, inst);

载入inst -> op, switch(op)进入decode,

这里有3个技巧,

1.#define DEFINST(OP,MSK,NAME,OPFORM,RES,FLAGS,O1,O2,I1,I2,I3)\

case OP:\

 SYMCAT(OP,_IMPL);\

 break; Macro DEFINST的定义,与下面include的结合,完成了case的相应功能。
2.include “machine.def”的加入,与Macro DEFINST的结合,完成case的功能。
3. SYMCAT(OP,_IMPL) Macro的调用,把case中的OP转化为相应的指令。

3点结合起来为,载入machine.def与ISA相关的控制程序,switch(op){#include”machine.def”}
通过Macro转化为 #define LDA_IMPL \
{ \
SET_GPR(RA, GPR(RB) + SEXT(OFS)); \
}
case LDA:
LDA_IMPL;
break;

完成之后,
/* execute next instruction */
regs.regs_PC = regs.regs_NPC;
regs.regs_NPC += sizeof(md_inst_t);

进入下一个while死循环。

2009新气象

一个新Blog,启动一种新心情,转换一种新状态。Cow…牛年…我来了。

我计划2-3月专研一下simplescalar, 研究的文档呢,就作为开场的文档和日志了。

稍微规划一下,2-3月SS,  XST自动化摸索下。 读读传说 top 0.82% ASPLOS的文章。