龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 8754|回复: 9

龙芯相关技术总结

[复制链接]
发表于 2006-9-18 20:13:55 | 显示全部楼层 |阅读模式
龙芯相关技术总结
(45689040,2006年9月18日)
声明:本文所有内容均来自网络,版权归作者及相关单位。文中涉及作者过多,未能一一列出,请多多包涵。(您若觉得应该署上您的大号,请速与本人联系)

一、概述
本文参考网上龙芯相关资料,主要针对龙芯2号相关开发作简要总结。并针对广大FANs日益高涨的激情,介绍龙芯模拟环境,激发大家的开发热情。
不足或有误之处,望跟帖指正。

二、龙芯2号CPU

(一)主要性能
龙芯2号的主要结构特点包括,64位设计,7-10级流水线,包括取指、译码、重命名、发射、读寄存器、执行写回、提交等,其中乘除、浮点操作、以及访存操作在执行写回阶段需要多拍。四发射结构,最多可以有64条指令乱序执行。共有5个功能部件,包括定点ALU1(完成定点加减、逻辑、移位、转移),定点ALU2(完成定点加减、逻辑、移位、乘除),浮点ALU1(完成定点加减、转换、转移),浮点ALU2(完成乘除、开方),以及访存部件(完成访存、系统管理、数据传送)。通过对浮点指令fmt域的简单扩充,浮点部件可以执行完整的定点指令以及4路SIMD的媒体指令。在乱序执行方面,转移猜测使用混合预测+Gshare + BTB + RAS的转移猜测方式;通过物理寄存器到逻辑寄存器映射进行寄存器重命名,定点浮点寄存器堆各为64项;动态调度方面定点和浮点保留站各16项,Reorder Buffer为64项。  
在存储管理方面,TLB为64项全相联,每项两页,页大小在4KB-4MB之间可变。此外,有一个独立的8项的指令TLB是数据TLB的子集。与龙芯1号一样,在TLB中增加可执行位,防止缓冲区溢出攻击。数据CACHE和指令CACHE各为32KB,二路组相联。最多允许32个访存操作的Non-blocking访问,访存相关在访存队列中通过全相联的查找解决,避免了象Alpha21264或MIPS R10000中碰到访存相关时需要重新发射。实现load-speculation,允许前面的store操作未确定的情况下执行load操作并返回结果。Cache失效时实现关键字优先访问,以减少访存等待,Uncached操作实现uncached accelerate算法加速I/O访问。

龙芯2号的性能提高主要来自先进的结构设计,包括四发射和乱序执行结构的设计。而乱序执行的关键技术是龙芯2号结构设计的重点和难点,四发射的RISC结构如果没有乱序执行技术的支持是发挥不出效率的。例如典型的定点程序中平均每六、七条指令就有一条转移指令,意味着在四发射结构中每两拍就有一条转移指令。如果等转移指令的目标地址确定再进行后面的取指,意味着每取两拍指令就得等五、六拍甚至更多才能继续后面的取指。又如,做一个简单的加法需要两个操作数,而如果这两个操作数都需要从内存中(即主板上的内存条)取回来,那么在做这个加法之前,需要至少上百拍的时间为这个加法准备数据。指令乱序执行的核心思想就是减少各种相关引起的等待,充分发挥处理器的效率。  
主要做法包括:
(1)转移猜测,即在转移指令目标尚未确定的时候,根据过去转移指令执行的历史猜测该转移指令的转移方向和转移目标,并根据猜测的结果进行后续指令的取指,为处理器提供连续稳定的指令流。如果最后发现猜测错误,则取消猜错的转移指令后面的指令。
(2)动态调度,即在前面的指令由于操作数未准备好而等待时,后面的操作数已经准备好的指令可以越过前面的指令先执行。
(3)寄存器重命名,即指令运算后先写到一个临时的寄存器,等确定该指令不会被取消后再写到真正的目标寄存器中去。这样做的好处除了便于前面指令发生例外或转移猜错时取消外,还避免了由于两条指令写同一个寄存器时的等待。

此外,访存指令的乱序执行又有新的特征。除了通过增大CACHE和对CACHE进行有效的组织尽量提高CACHE命中率并降低CACHE访问的延迟外,还需要对访存指令进行乱序执行以提高效率。访存指令乱序执行的关键技术包括:
(1)Non-blocking技术,即在前面的访存指令由于CACHE不命中进行长延迟的存储访问时,后面的指令可以继续访问CACHE。
(2)Memory Disambiguation技术,即在存数和取数指令都乱序执行的情况下,保证取数指令都能取回它前面的最近一条对同一地址的存数指令所存的值。比如如果一条取数指令在一条存数指令之后且两条指令的地址相等,但取数指令先访问CACHE,也要保证取数指令取回该存数指令的值;又如如果一条取数指令在一条存数指令之前且两条指令的地址相等,但存数指令先访问CACHE,也要保证取数指令取回原来CACHE中的值,而不是存数指令新存的值。
(3)Load Speculation技术,即在取数指令访问CACHE后,它前面的存数指令地址还没有确定(即取数指令从CACHE中取回的值有可能是错误的),先把取数指令从CACHE中取回的值送给后续的指令用,如果后来发现它前面的存数指令和该取数指令访问的是同一个单元,再取消该取数指令后面的指令。
(4)Write Buffer技术,由于存数指令也是乱序执行的,存数指令所存的值不能立即写到CACHE或内存,而是要根据存数指令在程序中的次序写到CACHE或内存。  

在乱序执行的结构中,虽然指令执行是乱序的,但开始和结束是有序的。指令在译码和寄存器重命名后就放在一个有序的队列中,由该队列来记录每一条指令的执行阶段并有序地结束指令。即指令在流水线中是有序进入、乱序执行、有序结束。  

龙芯2E
龙芯2E通用64位处理器是目前全球除美日之外性能最高的通用处理器,也是祖国大陆地区第一个采用90纳米设计技术的处理器。“龙芯2E高性能通用CPU芯片在单处理器设计技术上已达到国际先进水平,居国内通用CPU研制领先地位;龙芯2E具有自主的知识产权”。该处理器最高主频达到1.0GHz,实测性能超过1.5GHz奔腾IV处理器的水平,具有低成本、低功耗、高性能、高安全性等特点,在不同工作条件下龙芯2E处理器的功耗在3-8瓦范围内。
龙芯2E的体系结构先进、效率较高。该芯片采用四发射的动态超标量超流水线结构、实现了先进的转移猜测、寄存器重命名、动态调度、以及非阻塞的高速缓存访问等乱序执行技术。龙芯2E片内含64KB一级指令高速缓存、64KB一级数据高速缓存、以及512KB二级高速缓存,片内实现了DDR内存控制器。龙芯2E包含4700万晶体管,面积为6.8*5.2平方毫米。
龙芯2E样机运行64位Linux操作系统。在该样机上能流畅运行Debian发行版视窗系统、Mozilla浏览器、OpenOffice办公套件、Mplayer流媒体播放器、WEB Server、MySQL数据库系统、Windows虚拟终端等应用程序并能正确支持中文输入和显示。龙芯样机实测得到的SPEC CPU2000分值为定点503分,浮点503分;最高双精度浮点运算速度每秒39.93亿次。龙芯2E样机通过软解压能流畅播放多种码率的mpeg1、mpeg2以及mpeg4视频流,实现标清DVD节目的流畅播放。


(二)主要参数
Godson-2D的设计(全贴出来吧)
一个CPU设计、两种芯片形态、三个应用系统
1、Godson-2处理器的增强型,1GHz,SPEC分值600分 <--值得期待
2、CPU和基于CPU的SOC(互连、存储控制、IO)
3、PC、SMP服务器、TeraFLOPS高性能机 <-- 高性能机和SMP系统

计算所负责CPU核和PC机

结构改进
浮点乘加:峰值性能双精度4GFLOPS,单精度8GFLOPS <--4GFlops是40亿次/s,8G就是……
片内512KB二级Cache和SMP支持 <--512Kb……还可以
物理设计
0.13um的HP工艺,更多的定制 <--好
目前进展
已完成乘加部件改造、11月完成二级Cache和SMP支持
11月中完成8端口寄存器堆的定制设计
2005年2月tapeout第一个芯片。
2005年底完成1GHz,SPEC分值600分的任务 <---看来优化和系统设计工作还比较多


2B和2C的数据(2A流片没有成功), 它们的相关参数如下:

        最高频率        一级Cache        二级Cache        功耗        软件
龙芯2B        300MHz        64K        不支持        <3W        Linux(大软件比较吃力)
龙芯2C        500MHz        128K        支持最大到8M        3W~5W        Linux(基本满足浏览器,媒体播放器, office)

龙芯2C 500MHz,SPEC2000 大概300分左右。双精度浮点10亿次,单精度浮点20亿次。性能达到600MHz以上PIII的性能。而2E 1GHz大概500分
 楼主| 发表于 2006-9-18 20:14:24 | 显示全部楼层
三、龙芯盒子
(一)总体架构

产品规格

?        处理器龙芯2E CPU,主频600MHz-900MHz,支持DDR333内存总线,功耗2-4瓦
?        北桥简单北桥用ICT NB2E (ALTERA EP2C20F484)芯片,功耗0.1-0.3瓦
?        内存插槽200线 PC2700-SODIMM槽一个,标配256MB内存,可扩展到512MB
?        南桥威盛VT82C686B,33MHz 32-bit PCI接口
?        显示ATI RADEON 7000-M,33MHz 32-bit PCI接口,内部集成16MB DDR内存,外接VGA显示输出和S-Video输出
?        网络Realtek 8139D, 33MHz 32-bit PCI接口,外接RJ45接口
?        USBNEC uPD720101GJ 33MHz 32-bit PCI接口,外接4个USB2.0口,两个一组上下叠放
?        声音由南桥引出AC’97输出接口
?        IDE接口一个IDE接口,一个Mini-IDE接口,Mini-IDE接2.5英寸笔记本硬盘并能叠放且固定在主板上,IDE接口通过面板引出
?        COM口由南桥引出一个DB9型的COM口
?        PS2由南桥引出一个PS2接口
?        红外接口由南桥引出一个红外遥控接收器接口
?        按钮面板上引出一个开关按钮,一个复位按钮
?        指示灯面板上引出电源指示、IDE指示
?        主板尺寸14cm宽x18cm长电源一个12V笔记本电源输入接口,一个4-pin电源输出接口(提供+12V,+5V电源输出)
?        整机功耗15-20瓦

龙芯2E的DDR可以工作在全速状态,它跟CPU的主频有一个比例关系即6,8,10,12。比如,CPU工作在1GHz时, DDR的运行频率可以是166,125,100,83
166M x 2(上下沿采样) x 64bit/8bit/byte = 2.7GB,所以龙芯可以达到理论值,实际上的性能要低于这个值。龙芯不支持双通道DDR。
龙芯可开发板是Micro-ATX型的,但它是开发或叫做评估板,不是最终的产品,最终的产品还需要系统开发商来完成。



龙梦2.4所用的操作系统源码包是2.4.22或者2.6.14。
龙芯的内核都是在2.4或2.6的基础上增加了一些与CPU和板级相关的代码(如中断管理, Cache管理, 北桥初试化设置等)而成的,由于MIPS架构的机器没有一个统一的标准定义,这就导致板子变化了代码就需要相应的修改,开放源码的组织不可能对每块MIPS板子都一一开发,而基于龙芯的板子在市场上本来就很少,很难指望哪个组织会为我们的板子写代码并放到正式发布的内核源代码中。所以我们今后可能会维护并发布godson-linux内核,大家请放心,修改的内容只是很小的一点,你提到的那个guide的建议不错,我们会考虑出这样一份文挡。

在龙芯上能跑x86应用是我们龙芯发展的一个方向,我们已经在为之努力,但要真正实用,我个人觉得还需要一定的时间,除了技术还有许多方面的问题要解决。
龙芯PC在运行的时候先加载了一套BIOS,形式上与X86的BIOS完全不同,为全字符界面。随后在引导管理器的提示符上输入一条引导命令就进入一个Linux环境,据说是完全重新编译的系统,从内核到编译器都是重新编译而成的。龙芯的指令集与MIPS64不完全兼容,增加了一批多媒体指令。

以后龙芯的架构会起一个独立的名字叫GodSun2,而不再是MIPS64。


(二)测试结果
目前, Linux下的软件应该都能跑, Debian发行版中的软件在龙芯上都能运行,不涉及到使用模拟器。有些大的软件,可能会存在一些bug,但与CPU是无关的, 需要做些后序的工作。
四、龙芯开发
开发环境模拟

龙梦2E BIOS与模拟器gxemul

龙梦电脑所用BIOS:PMON
PMON运行模拟器:gxemul http://gavare.se/gxemul/
运行环境: Linux with X-window under x86

为了让大家看到龙梦电脑的运行界面,首先我们在模拟器上对其BIOS作了模拟。对操作系统的模拟会陆续推出。

运行方法:
下载附件提供的gxemul-0.3.8.tar.gz(模拟器)和pmon.bin,pmon.png为PMON在gxemul上运行的界面,gxemul为编译后可运行的模拟器
解压gxemul-0.3.8.tar.gz包,编译gxemul模拟器源代码,生成名为gxemul可执行文件,如果不想编译,也可以用附件中的gxemul(由于库版本的依赖关系,最好装有比较新的linux操作系统,譬如fedora 4)。
运行模拟器:gxemul -Xe bonito 0xbfc00000:pmon.bin (pmon.bin在当前目录下)

gxemul对龙梦硬件的模拟不是很健全,如果使用时遇到什么异常,这是正常现象,请不要见怪;希望大家对BIOS界面提出宝贵的意见

附件下载地址:http://www.lemote.com/download.php
如不能下,可到这些地方去:
1、http://www.lemote.com/bbs/viewth ... &extra=page%3D1
2、http://www.china-cpu.org/bbs/vie ... &extra=page%3D1

附件: [pmon二进制文件、pmon运行界面、编译后的gxemul]
pmon-gxemul.tar.gz (2006-7-13 09:42 PM, 955.84 K)

附件: [gxemul模拟器源码]
gxemul-0.3.8.tar.gz (2006-7-13 09:45 PM, 1.84 M)


模拟器虚拟硬盘
可以测试模拟器的虚拟硬盘,里面有模拟器运行所需内核,运行方法:在linux平台下解压disk.gz生成disk,运行pmon gxemul -Xe bonito 0xbfc00000:pmon.bin -d disk 在pmon>提示符下输入:load /dev/fs/ext2@wd0/vmlinux 在pmon>提示符下输入:g console=tty OK!


五、附录
(一)关于龙芯千元电脑的一些说明
最近新浪网上再次出现关于龙芯千元电脑的消息:

龙芯千元电脑批量生产年内上市 酝酿涉足机顶盒
http://tech.sina.com.cn/it/2006-06-27/07101008929.shtml

关于龙芯的新闻总是得到大家的极大关注,在此我们首先表示感谢。但是,我们也深知,东西没有做好,一遍又一遍的“狼来了”是很令人恼火和失望的。我们并不愿意这么做,在青年报记者联系我们的时候我们再三强调这一点,后来记者答应改为宣传龙芯产业化的机制(院地企合作),但是这篇稿子还是太多地使用了一些宣传性的字眼。我们已经在联系请该记者从新浪撤掉本稿(新浪科技的工作人员告诉我需要得到他们的许可)。

关于龙芯千元电脑的工作,在此我们做一些说明:
1. 我们确实投入了极大的精力去做,也取得了一些成绩,但是离成功还有不小的距离,还希望大家多支持。有什么想法意见,随时可以到www.lemote.com/bbs和我们交流。
2. 今年3月曾经有过宣传说我们将于6月批量生产千元电脑。2005年底我们确实是做了这个计划,也和相关厂家签订了协议。2006年3月也如期做出第一版样机。但是后来深入调试碰到一个难以克服的技术问题,夜以继日地调试了几个月也没有彻底解决问题。这个问题很可能出在一个第三方的配套芯片或者它和龙芯的配合上,由于我们无法获得足够的技术支持,一直未能解决,导致我们没有按期推出产品。
3. 2006年4月,龙芯2号增强型样片研制成功,我们一面继续调试原有方案,一面紧急启动基于增强型的方案。目前新的方案第一版样机已经完成,正在紧张地调试中,预见7月初能够正常运转。从第一次打样到最终产品还需要一段时间,量产的芯片最早也要到10月才能出来,因此预见批量生产会在年底。
4. 关于“千元”,低成本信息化是我们所一直致力的研究方向,我们研制龙芯也一直以惠及大众为方向。但是在IT行业,成本实际上很大程度和产量直接相关,对于龙芯这种新兴的架构,初期的成本并没有太多的优势。在电脑中,大致只有1/3的成本是处理器和主板,2/3是存储和显示,而后者不是龙芯技术本身能够降低的。和市场上那些具有丰富运作经验的大厂家(比如价格杀手神舟)比起来,龙芯电脑目前在成本上并没有多少优势。为了保证品质,我们在龙芯电脑中采用的零配件都是相对比较好的。而且它小巧的个头也是有代价的:许多零配件个头越小越贵。“千元"是一个追求的目标,通过大量推广,进一步提高集成度,在存储和显示方面和专业厂家合作下大功夫,是能够在不远的将来达到的。


(二)龙芯前途展望
关于龙芯1号和龙芯2号的定位问题,从目前实际情况看,龙芯1号是在走嵌入式的道路,而龙芯2号我们也没有公开叫嚣要进军桌面市场。 至于龙芯2号的应用领域,我们正在进行积极的尝试,像中科龙梦推出的“龙梦电脑”就是我们一个重要的应用尝试。

(三)术语解释
发射:作为计算机术语的时候,对应的是英文的“issue”
龙芯2是“4发射”的意思就是龙芯2内部可以在一个时钟周期内“发射”出四个"内部指令"到执行机构。这里的“内部指令”是指一些很基本的事情,比如“让寄存器A加上寄存器B,把结果放在寄存器C里”或者“从内存XXXX:XXXX读取4个字节放入寄存器D”之类的。(Intel管这种“内部指令”叫做“微指令(Micro-Instruction)”,而Intel的奔腾和扣肉实际执行的是x86指令,所以,奔腾和扣肉实际上是先把x86指令翻译成微指令然后才执行的,通常由于x86是复杂指令集,有可能一条x86指令会翻译出几条甚至是一串微指令(据说最BT的一条x86指令能翻译出上千条微指令……果然是复杂指令集啊……), 所以,虽然扣肉是4发射(如果我没记错的话), 但是并不代表扣肉一个时钟周期能执行4条x86指令) 龙芯2使用类似MIPS的精简指令的,所以基本省去翻译的过程, 基本可以认为一条龙芯2指令就等同于一条内部指令。(也未必全是这种情况,听说龙芯2加入了多媒体指令,不知是如何处理的)

参考来源:
1、龙芯产业化联盟,http://www.china-cpu.org
2、神州龙芯,http://www.china-cpu.com
3、龙梦科技,http://www.lemote.com
发表于 2006-9-18 20:44:58 | 显示全部楼层
这贴好得让版主汗颜呀
 楼主| 发表于 2006-9-18 21:58:37 | 显示全部楼层
版主是我偶像,希望他不介意我的盗版 :P
发表于 2006-9-19 21:45:02 | 显示全部楼层

术语太多,没了解精华

能把复杂东西说简单了,才是真正掌握一个东西
发表于 2006-9-20 10:50:17 | 显示全部楼层
好贴,已经收藏了,版主应该加精啊
发表于 2006-10-1 18:05:36 | 显示全部楼层
建议龙芯与价格杀手神舟合作,将电脑价格降到很低.
发表于 2006-11-8 15:05:41 | 显示全部楼层
建议龙芯与价格杀手神舟合作,将电脑价格降到很低.

支持楼上的!
发表于 2009-3-4 15:21:51 | 显示全部楼层

回复 1# 的帖子

版主汗颜的同时,给你加分。。。

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-8-18 10:29 , Processed in 0.199325 second(s), 17 queries .

快速回复 返回顶部 返回列表