Board logo

标题: 3龙芯系列电脑硬件和相关信息搜集 <丙申羊年20160206> [打印本页]

作者: zzz19760225     时间: 2016-2-6 22:57    标题: 3龙芯系列电脑硬件和相关信息搜集 <丙申羊年20160206>

主要分成三个层面方便重复于一个层面的类似范围。

中国国家生活用电标准层
         住处工作处学习处电源,电脑机器的电源电压,断电电源,   

机器内脏的集成板块的电路标准层
         主板
         处理器<CPU>
         内存
         硬盘【没有硬盘也可以哦】
         输入
         输出

人机界面
         键盘【不看屏幕用个声音信号系统也可以】
         显示器屏幕【命令行必须,高级盲打可以不必】
         鼠标【窗口可以方便跑】
           
输出设备
         声卡【主板集成,独立显卡】
         显卡【主板集成,核心自带核显,独立显卡】
            
输入设备
         软驱【其实业可以继续用】
         光盘【光盘系统也很方便】
         优盘【是设备还是存储或者通信,一个标准】
         写字板
         画图板
         网络卡
         无线卡
         蓝牙设备
         红外设备

生活学习工作专用门路
        生活的费用医疗手续交易养老
        学习【国学的自身文化发展中国传统文化东西方历史和创新,百家和科学】
        工作【工作中介工作手续延续休假,结婚假生儿育女假和退休】     
  
懒汉智能家庭生活系统
       住,睡觉【叠被子】   
       食,吃饭【烧饭炒菜刷锅洗碗包括买米菜】
       衣,衣服【洗衣服晒衣服收衣服叠衣服放衣服取衣服买衣服捐衣服】
       行,运动车子【没有自行车人就是自行车】
       乐,身心【放松身心为了让其干活:(】

机器人
       机械化机器人概念
       半自动化机器人概念
       专项事务自动化机器人
       智能全功能低级机器人【帮你干活不要工资不喊苦不喊累】
       智能中级机器人【你将其看做人但是确实不是人】
       智能高级机器人【人不能自以为是了她们是伙伴或和你一样的思索问题解决问题更好的运用她们的工作能力】

人的自我包容化
       人在自我所建立的基础上,从根本的身体为主,形成一体化的过程,自我改造。【被自己所造而触动为新的自我】

[ Last edited by zzz19760225 on 2016-2-6 at 23:02 ]
作者: zzz19760225     时间: 2016-2-6 23:09    标题: 龙 芯 2H处 处 理 器 用 户 手 册

2014年8月
龙芯中科技术有限公司
版权声明
本文档版权归龙芯中科技术有限公司所有,并保留一切权利。未经书面许可,任何
公司和个人不得将此文档中的任何部分公开、转载或以其他方式散发给第三方。否则,
必将追究其法律责任。
免责声明
本文档仅提供阶段性信息,所含内容可根据产品的实际情况随时更新,恕不另行通
知。如因文档使用不当造成的直接或间接损失,本公司不承担任何责任。
龙芯中科技术有限公司
Loongson Technology Corporation Limited
地址:北京市海淀区中关村环保科技示范园龙芯产业园 2 号楼
Building No.2, Loongson Industrial Park, Zhongguancun Environmental Protection Park
电话 (Tel) :010-62546668
传真 (Fax) :010-62600826
http://www.loongson.cn/product/cpu/2/Loongson2H.html

[ Last edited by zzz19760225 on 2016-2-6 at 23:19 ]
作者: zzz19760225     时间: 2016-2-6 23:11
阅读指南
《龙芯 2H 处理器用户手册》主要介绍龙芯 2H 的架构与寄存器描述;包括用户手册
和片上设备使用指南两部分,软件编程指南介绍对 BIOS 和操作系统开发过程中的常见
问题。关于龙芯 2H 处理器所集成的 LS464 高性能处理器核的相关资料,请参阅《龙芯
LS464 处理器核用户手册》
修订历史
序号 更新日期 版本号
更新内容
1 2012-11 V1.0 初稿,第一次正式发布
2 2013-11 V1.1 修正若干拼写错误,更正 CLKSEL1 描述、EJTAG DROP 寄存器
3 2014-03 V1.2 配置
更新到 2H3 版本,增加 CHIPID、 USB PHY 配置, PCIE 增加总
4 2014-08 V1.3 线错屏蔽和插入状态检测,增加 HPET 和 PWM章节
文档排版,修正若干文字错误
作者: zzz19760225     时间: 2016-2-6 23:16    标题: 龙芯2H处理器用户手册目录



目录 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · i
第一章 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1
1.1 体系结构框图 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1
1.2 芯片主要功能 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 2
1.2.1 处理器核 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 2
1.2.2 媒体处理器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3
1.2.3 GPU · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3
1.2.4 显示控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3
1.2.5 DDRII 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 3
1.2.6 SATA 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 4
1.2.7 USB2.0 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 4
1.2.8 GMAC 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 4
1.2.9 LPC 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 4
1.2.10 HDA 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 5
1.2.11 NAND 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 5
1.2.12 SPI 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 5
1.2.13 UART · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 5
1.2.14 I2C 总线 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 5
1.2.15 PWM · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6
1.2.16 HPET · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6
1.2.17 RTC · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6
1.2.18 Watchdog · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6
1.2.19 中断控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6
1.2.20 ACPI 功耗管理 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6
1.2.21 PCIe 接口 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 7
1.2.22 HT 接口 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 7
第二章 引脚定义 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9
2.1 约定 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9
2.2 引脚列表 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9
第三章 时钟结构 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 19
3.1 系统参考时钟 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 19
3.2 CPU 时钟 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 19
3.3 DDR 时钟 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 20
3.4 SYS 时钟 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 20
3.5 显示时钟 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 21
3.6 时钟信号说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 21
第四章 电源管理 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 23
4.1 电源管理模块介绍 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 23
4.2 电源级别 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 23
4.3 控制引脚说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 24
第五章 芯片配置与控制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 25
5.1
芯片工作模式 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 25
5.1.1 独立 SoC · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 25
5.1.2 HT 桥片 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 25
5.1.3 PCIE 桥片 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 26
5.2 芯片初始化信号 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 27
5.3 地址空间分配 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 28
5.4 时钟与复位控制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 29
5.5
- ii -
5.4.1 时钟配置概要 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 29
5.4.2 高频 PLL 配置 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 30
5.4.3 展频 PLL 配置 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 30
5.4.4 复位控制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 31
芯片配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 32
5.5.1 消息中断写端口(msiport) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 38
5.5.2 中断状态寄存器(intisr) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 38
5.5.3 中断使能寄存器(intien) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 38
5.5.4 中断设置寄存器(intset) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 39
5.5.5 中断清除寄存器(intclr)· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 39
5.5.6 中断极性寄存器(intpol) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 39
5.5.7 中断模式寄存器(intedge) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 39
5.5.8 通用输入输出配置(gpiocfg)· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 39
5.5.9 通用输入输出方向(gpiooe) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 40
5.5.10 通用输入采样(gpioin) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 40
5.5.11 通用输出设置(gpioout) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 40
5.5.12 DMA 命令控制寄存器(dma order) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 40
5.5.13 芯片配置寄存器 0(chip config0) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 41
5.5.14 芯片配置寄存器 1(chip config1) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 42
5.5.15 芯片配置寄存器 2(chip config2) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 43
5.5.16 芯片配置寄存器 3(chip config3) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 43
5.5.17 芯片采样寄存器 0(chip sample0) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 44
5.5.18 芯片采样寄存器 1(chip sample1) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 44
5.5.19 芯片采样寄存器 2(chip sample2) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 44
5.5.20 芯片采样寄存器 3(chip sample3) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 45
5.5.21 芯片采样寄存器 4(chip sample4) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 45
5.5.22 芯片采样寄存器 5(chip sample5) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 45
5.5.23 时钟配置寄存器 0(clock ctrl0) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 45
5.5.24 时钟配置寄存器 1(clock ctrl1) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 46
5.5.25 时钟配置寄存器 2(clock ctrl2) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 46
5.5.26 时钟配置寄存器 3(clock ctrl3) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 47
5.5.27 显示时钟配置寄存器 0(pixclk0/1 ctrl0) · · · · · · · · · · · · · · · · · · · · · · · · · · · 47
5.5.28 显示时钟配置寄存器 1(pixclk0/1 ctrl1) · · · · · · · · · · · · · · · · · · · · · · · · · · · 48
5.5.29 USB PHY0 配置寄存器(usbphy0 ctrl) · · · · · · · · · · · · · · · · · · · · · · · · · · · · 49
5.5.30 USB PHY1 配置寄存器(usbphy1 ctrl) · · · · · · · · · · · · · · · · · · · · · · · · · · · · 49
5.6
中断配置及路由 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 50
第六章 DDR2/3 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 53
6.1 功能概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 53
6.2 读操作协议 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 54
6.3 写操作协议 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 54
6.4 参数配置格式 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 54
第七章 HT 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 87
7.1 HT 硬件设置及初始化 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 87
7.2 HT 协议支持 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 87
7.3 HT 配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 89
7.3.1 Bridge Control · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 90
7.3.2 Capability Registers · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 90
7.3.3 自定义寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 93
7.3.4 接收地址窗口配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 94
7.3.5 中断向量寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 95
7.3.6 中断使能寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 97
7.3.7 Interrupt Discovery & Configuration · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 99
7.3.8 POST 地址窗口配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 100
7.3.9 可预取地址窗口配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 101
7.3.10 UNCACHE 地址窗口配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 102
第八章 PCIE 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 105
8.1 使用说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 105
8.2 地址空间划分和地址转换机制 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 105
8.3
8.2.1 RC 模式下的地址空间划分 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 105
8.2.2 EP 模式下的地址空间划分 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 107
8.2.3 PCI 地址空间到物理地址的转换 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 108
龙芯 2H 处理器 PCIE 控制器内部寄存器定义 · · · · · · · · · · · · · · · · · · · · · · · · · · · · 108
8.3.1 PCIE 端口控制寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 109
8.3.2 PCIE 端口控制寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 110
8.3.3 PCIE 端口状态寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 111
8.3.4 PCIE 端口状态寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 112
8.3.5 用户定义消息 ID 寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 114
8.3.6 PCIE 端口中断状态寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 114
8.3.7 PCIE 端口中断状态清除寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 117
8.3.8 PCIE 端口中断掩码寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 117
8.3.9 PCIE 端口对外配置访问参数寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 118
8.3.10 PCIE 端口控制和状态寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 118
8.3.11 PHY 状态寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 118
8.3.12 用户定制消息寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 119
8.3.13 用户定制消息寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 119
8.3.14 用户定制消息数据发送寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 119
8.3.15 用户定制消息数据发送寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 120
8.3.16 MSI 参数寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 120
8.3.17 地址译码掩码寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 120
8.3.18 地址译码掩码寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 120
8.3.19 地址译码转换地址寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 120
8.3.20 地址译码转换地址寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 120
8.3.21 接收消息数据负载寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 121
8.3.22 接收消息数据负载寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 121
8.4
PCIE 配置头空间 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 121
8.4.1 Ack Latency Timer and Replay Timer Register · · · · · · · · · · · · · · · · · · · 122
8.4.2 Vendor Specific DLLP Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 123
8.4.3 Port Force Link Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 124
8.4.4 Ack frequency and L0-L1 ASPM control Register· · · · · · · · · · · · · · · · · · 124
8.4.5 Port Link Control Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 125
8.4.6 Lane Skew Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 126
8.4.7 Symbol Number Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 127
8.4.8 Symbol Timer Register and Filter Mask Register 1 · · · · · · · · · · · · · · · · 127
8.4.9 Filter Mask Register 2 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 129
8.4.10 AMBA Multiple Outbound Decomposed NP Sub-Requests Control
Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 129
8.4.11 Transmit Posted FC Credit Status Register · · · · · · · · · · · · · · · · · · · · · · · 130
8.4.12 Transmit Non-Posted FC Credit Status Register · · · · · · · · · · · · · · · · · · 130
8.4.13 Transmit Completion FC Credit Status Register · · · · · · · · · · · · · · · · · · 130
8.4.14 Queue Status Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 131
8.4.15 VC0 Posted Receive Queue Control · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 131
8.4.16 VC0 Non-Posted Receive Queue Control · · · · · · · · · · · · · · · · · · · · · · · · · · 132
8.4.17 VC0 Completion Receive Queue Control · · · · · · · · · · · · · · · · · · · · · · · · · · 132
8.4.18 VC0 Posted Buffer Depth · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 132
8.4.19 VC0 Non-Posted Buffer Depth · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 132
8.4.20 VC0 Completion Buffer Depth · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 132
8.4.21 Gen2 Control Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 133
8.4.22 Master Response Composer Control Register 0 · · · · · · · · · · · · · · · · · · · · 134
8.4.23 Master Response Composer Control Register 1 · · · · · · · · · · · · · · · · · · · · 134
8.4.24 MSI Controller Address · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 134
8.4.25 MSI Controller Upper Address · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 135
8.5
常用例程 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 135
第九章 显示控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 139
9.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 139
9.2 寄存器定义 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 139
9.2.1 帧缓冲配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 139
9.2.2 帧缓冲地址寄存器 0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 139
9.2.3 帧缓冲地址寄存器 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 140
9.2.4 帧缓冲跨度寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 140
9.2.5 帧缓冲初始字节寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 140
9.2.6 颜色抖动配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 140
9.2.7 颜色抖动查找表低位寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 140
9.2.8 颜色抖动查找表高位寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 141
9.2.9 液晶面板配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 141
9.2.10 水平显示宽度寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 141
9.2.11 行同步配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 141
9.2.12 垂直显示高度寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 142
9.2.13 场同步配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 142
9.2.14 伽玛校正目录寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 142
9.2.15 伽玛校正值寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 142
9.2.16 光标配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 143
9.2.17 光标存储地址寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 143
9.2.18 光标显示位置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 143
9.2.19 光标背景色寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 143
9.2.20 光标前景色寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 144
9.2.21 中断寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 144
9.2.22 DAC 控制寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 144
9.2.23 DAC Sense 值寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 145
9.2.24 Sense 配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 145
9.2.25 DVO 输出模式寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 145
9.3
相关功能说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 145
9.3.1 颜色抖动 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 145
9.3.2 输出定序 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 146
9.3.3 伽玛校正 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 146
9.3.4 硬件光标 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 147
第十章 GMAC 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 149
10.1 DMA 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 149
10.1.1 Register0 (Bus Mode Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 149
10.1.2 Register1 (Transmit Poll Demand Register) · · · · · · · · · · · · · · · · · · · · · · · 150
10.1.3 Register2 (Receive Poll Demand Register)· · · · · · · · · · · · · · · · · · · · · · · · · 150
10.1.4 Register3 (Receive Descriptor List Address Register) · · · · · · · · · · · · · · 150
10.1.5 Register4 (Transmit Descriptor List Address Register) · · · · · · · · · · · · · 151
10.1.6 Register5 (Status Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 151
10.1.7 Register6 (Operation Mode Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 152
10.1.8 Register7 (Interrupt Enable Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 154
10.1.9 Register8 (Missed Frame and Buffer Overflow Counter Register) · · · 155
10.1.10 Register9(Receive Interrupt Watchdog Timer Register) · · · · · · · · · · · 155
10.1.11 Register10 (AXI Bus Mode Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · 156
10.1.12 Register11 (AXI Status Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 157
10.1.13 Register18 (Current Host Transmit Descriptor Register) · · · · · · · · · · 157
10.1.14 Register19 (Current Host Receive Descriptor Register) · · · · · · · · · · · · 157
10.1.15 Register20 (Current Host Transmit Buffer Address Register) · · · · · · 158
10.1.16 Register21 (Current Host Receive Buffer Address Register) · · · · · · · 158
10.2 GMAC 控制器寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 158
10.2.1 Register0 (MAC Configuration Register) · · · · · · · · · · · · · · · · · · · · · · · · · · 158
10.2.2 Register1 (MAC Frame Filter) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 159
10.2.3 Register2 (Hash Table High Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 160
10.2.4 Register3 (Hash Table Low Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 160
10.2.5 Register4 (GMII Address Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 161
10.2.6 Register5 (GMII Data Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 161
10.2.7 Register6 (Flow Control Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 161
10.2.8 Register7 (VLAN Tag Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 162
10.2.9 Register8 (Version Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 162
10.2.10 Register14 (Interrupt Status Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · 163
10.2.11 Register15 (Interrupt Mask Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · 163
10.2.12 Register16 (MAC Address0 High Register) · · · · · · · · · · · · · · · · · · · · · · · 164
10.2.13 Register17 (MAC Address0 Low Register) · · · · · · · · · · · · · · · · · · · · · · · · 164
10.2.14 Register18 (MAC Address1 High Register) · · · · · · · · · · · · · · · · · · · · · · · 164
10.2.15 Register19 (MAC Address1 Low Register) · · · · · · · · · · · · · · · · · · · · · · · · 165
10.2.16 Register48 (AN Control Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 165
10.2.17 Register49 (AN Status Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 165
10.2.18 Register50 (Auto-Negotiation Advertisement Register) · · · · · · · · · · · · 166
10.2.19 Register51 (Auto-Negotiation Link Partner Ability Register) · · · · · · 166
10.2.20 Register52 (Auto-Negotiation Expansion Register) · · · · · · · · · · · · · · · · 167
10.2.21 Register54 (SGMII/RGMII Status Register) · · · · · · · · · · · · · · · · · · · · · · 167
10.2.22 Register448 (Time Stamp Control Register) · · · · · · · · · · · · · · · · · · · · · · 168
10.2.23 Register449 (Sub-Second Increment Register)· · · · · · · · · · · · · · · · · · · · · 169
10.2.24 Register 450 (System Time - Seconds Register) · · · · · · · · · · · · · · · · · · · 169
10.2.25 Register 451 (System Time - Nanoseconds Register) · · · · · · · · · · · · · · 170
10.2.26 Register 452 (System Time - Seconds Update Register) · · · · · · · · · · · 170
10.2.27 Register 453 (System Time - Nanoseconds Update Register) · · · · · · 170
10.2.28 Register 454 (Time Stamp Addend Register) · · · · · · · · · · · · · · · · · · · · · 170
10.2.29 Register 455 (Target Time Seconds Register) · · · · · · · · · · · · · · · · · · · · · 170
10.2.30 Register 456 (Target Time Nanoseconds Register) · · · · · · · · · · · · · · · · 171
10.2.31 Register 457 (System Time - Higher Word Seconds Register) · · · · · · 171
10.2.32 Register 458 (Time Stamp Status Register) · · · · · · · · · · · · · · · · · · · · · · 171
10.2.33 Register 459 (PPS Control Register) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 172
10.2.34 Register 460 (PPS Auxiliary Time Stamp - Nanoseconds Register) 172
10.2.35 Register 461 (PPS Auxiliary Time Stamp - Seconds Register) · · · · · 172
10.3 DMA 描述符 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 173
10.3.1 TDES0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 173
10.3.2 TDES1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 175
10.3.3 TDES2 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 175
10.3.4 TDES3 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 175
10.3.5 TDES6 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 176
10.3.6 TDES7 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 176
10.3.7 RDES0 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 176
10.3.8 RDES1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 177
10.3.9 RDES2 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 178
10.3.10 RDES3 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 178
10.3.11 RDES4 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 178
10.3.12 RDES6 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 179
10.3.13 TDES7 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 179
10.4 软件编程向导 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 180
10.4.1 DMA 初始化 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 180
10.4.2 MAC 初始化 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 180
10.4.3 发送和接收的一般过程 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 181
第十一章 SATA 控制器· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 183
11.1 SATA 总体描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 183
11.2 SATA 控制器内部寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 183
第十二章 USB 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 185
12.1 总体描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 185
12.2 USB 主机控制器寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 185
12.2.1 EHCI 相关寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 185
12.2.2 Capability 寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 185
12.2.3 Operational 寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 185
12.2.4 EHCI 实现相关寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 186
12.3 OHCI 相关寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 188
12.3.1 Operational 寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 188
12.3.2 OHCI 实现相关寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 189
第十三章 OTG 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 191
13.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 191
13.2 寄存器列表 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 191
13.2.1 全局控制与状态寄存器 (Global CSR Map) · · · · · · · · · · · · · · · · · · · · · · · · 191
13.2.2 模式控制与状态寄存器 (Host Mode CSR) · · · · · · · · · · · · · · · · · · · · · · · · · 193
13.2.3 模式控制与状态寄存器 (Device Mode CSR) · · · · · · · · · · · · · · · · · · · · · · · 193
13.2.4 数据 FIFO 访问寄存器组( DFIFO Access Register MAP ) · · · · · · · 194
13.2.5 功耗控制与门控时钟寄存器组( Power and Clock Gating CSR
Map ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 195
13.3 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 195
13.3.1 寄存器访问特性 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 195
13.3.2 全局寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 195
13.3.3 Host 模式寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 218
13.4 Device 模式寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 227
13.4.1 功耗与门控时钟寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 241
第十四章 HDA 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 243
14.1 功能概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 243
14.2 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 244
14.2.1 协议定义的音频控制器寄存器集 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 244
14.2.2 自定义的调试寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 247
14.3 内存数据结构 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 247
第十五章 AC97 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 249
15.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 249
15.2 AC97 控制器寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 249
15.2.1 配置状态寄存器 (CSR) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 250
15.2.2 输出通道配置寄存器 (OCC) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 250
15.2.3 输入通道配置寄存器 (ICC) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 251
15.2.4 声道格式说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 251
15.2.5 Codec 寄存器访问命令 (Codec) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 251
15.2.6 中断状态寄存器 / 中断掩膜寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 252
15.2.7 中断状态 / 清除寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 252
15.2.8 OC 中断清除寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 252
15.2.9 IC 中断清除寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 253
15.2.10 CODEC WRITE 中断清除寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 253
15.2.11 CODEC READ 中断清除寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 253
第十六章 LPC 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 255
第十七章 SPI 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.1 SPI 控制器结构 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.2 配置寄存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.3 接口时序 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.3.1 SPI 主控制器接口时序 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.3.2 SPI Flash 访问时序 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.4 使用指南 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.4.1 SPI 主控制器的读写操作 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 257
17.4.2 硬件 SPI Flash 读 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 259
17.4.3 混合访问 SPI Flash 和 SPI 主控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 259
第十八章 I2C 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 263
18.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 263
18.2 I2C 控制器结构 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 263
18.3 I2C 控制器寄存器说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 263
18.3.1 分频锁存器低字节寄存器( PRERlo )· · · · · · · · · · · · · · · · · · · · · · · · · · · · 264
18.3.2 分频锁存器高字节寄存器( PRERhi )· · · · · · · · · · · · · · · · · · · · · · · · · · · · 264
18.3.3 控制寄存器( CTR ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 264
18.3.4 发送数据寄存器( TXR )· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 264
18.3.5 接受数据寄存器( RXR ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 265
18.3.6 命令控制寄存器( CR )· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 265
18.3.7 状态寄存器( SR ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 265
第十九章 UART 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 267
19.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 267
19.2 控制器结构 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 267
19.3 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 267
19.3.1 数据寄存器( DAT ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 268
19.3.2 中断使能寄存器( IER )· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 268
19.3.3 中断标识寄存器( IIR )· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 269
19.3.4 FIFO 控制寄存器( FCR )· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 269
19.3.5 线路控制寄存器( LCR ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 269
19.3.6 MODEM 控制寄存器( MCR ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 270
19.3.7 线路状态寄存器( LSR ) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 271
19.3.8 MODEM 状态寄存器( MSR )· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 271
19.3.9 分频锁存器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 272
第二十章 NAND 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 273
20.1 NAND 控制器结构描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 273
20.2 NAND 寄存器配置描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 273
20.2.1 命令寄存器 NAND CMD · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 273
20.2.2 页内偏移地址寄存器 ADDR C · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 274
20.2.3 页地址寄存器 ADDR R · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 274
20.2.4 时序寄存器 NAND TIMING · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 274
20.2.5 ID 寄存器 ID L · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 275
20.2.6 ID 和状态寄存器 STATUS & ID H · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 275
20.2.7 参数配置寄存器 NAND PARAMETER · · · · · · · · · · · · · · · · · · · · · · · · · · · 275
20.2.8 操作数量寄存器 NAND OP NUM · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 275
20.2.9 DMA 读写数据寄存器 DMA ADDRESS · · · · · · · · · · · · · · · · · · · · · · · · · · 276
20.3 NAND ADDR 说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 276
20.4 NAND-flash 读写操作举例 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 278
20.5 NAND ECC 说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 278
20.6 NAND 启动说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 279
第二十一章 PWM 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 281
21.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 281
21.2 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 281
21.3 功能说明 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 282
21.3.1 脉宽调制功能 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 282
21.3.2 脉冲测量功能 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 283
21.3.3 防死区功能 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 283
第二十二章 HPET 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 285
22.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 285
22.2 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 285
第二十三章 DMA 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 289
23.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 289
23.2 DMA 控制器结构描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 289
23.3 DMA 控制器与 APB 设备的交互 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 289
23.4 DMA 控制器 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 289
23.4.1 下一个描述符地址寄存器 (DMA ORDER ADDR) · · · · · · · · · · · · · · · · 289
23.4.2 内存地址寄存器 (DMA SADDR) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 290
23.4.3 设备地址寄存器 (DMA DADDR) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 290
23.4.4 长度寄存器 (DMA LENGTH) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 290
23.4.5 间隔长度寄存器 (DMA STEP LENGTH) · · · · · · · · · · · · · · · · · · · · · · · · · 291
23.4.6 循环次数寄存器 (DMA STEP TIMES) · · · · · · · · · · · · · · · · · · · · · · · · · · · 291
23.4.7 控制寄存器 (DMA CMD) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 291
第二十四章 电源管理模块 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 293
24.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 293
24.2 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 293
24.2.1 PMCON SOC : SOC General PM Configuration Register · · · · · · · · · · 293
24.2.2 PMCON RESUME : RESUME General PM Configuration Register 294
24.2.3 PMCON RTC : RTC General PM Configuration Register · · · · · · · · · 295
24.2.4 PM1 STS : Power Management 1 Status Register · · · · · · · · · · · · · · · · · 296
24.2.5 PM1 EN : Power Management 1 Enable Register · · · · · · · · · · · · · · · · · · 297
24.2.6 PM1 CNT : Power Management 1 Control Register · · · · · · · · · · · · · · · 297
24.2.7 PM1 TMR : Power Management 1 Timer · · · · · · · · · · · · · · · · · · · · · · · · · 298
24.2.8 P CNT : Processor Control Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 298
24.2.9 P LVL2 : Processor LVL 2 Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 298
24.2.10 P LVL3 : Processor LVL 3 Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 298
24.2.11 GPE0 STS : General Purpose Event0 Status Register · · · · · · · · · · · · · 299
24.2.12 GPE0 EN : General Purpose Event0 Status Register· · · · · · · · · · · · · · 299
24.2.13 RST CNT : Reset Control Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 300
24.2.14 WD SET : Watch Dog Set Register · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 300
24.2.15 WD Timer : Watch Dog Timer Register · · · · · · · · · · · · · · · · · · · · · · · · · 301
24.2.16 DVFS CNT : Dynamic Voltage Frequency Scaling Control Register 301
24.2.17 DVFS STS : Dynamic Voltage Frequency Scaling Status Register · 301
24.2.18 MS CNT : Media Subsystem Power Control Register · · · · · · · · · · · · · 302
24.2.19 MS THT : Media Subsystem Throttling Register · · · · · · · · · · · · · · · · · 302
24.2.20 THSENS CNT : CPU Thermal Sensor Control Register · · · · · · · · · · 303
24.2.21 GEN RTC 1 : General RTC Register 1· · · · · · · · · · · · · · · · · · · · · · · · · · · 303
24.2.22 GEN RTC 2 : General RTC Register 2· · · · · · · · · · · · · · · · · · · · · · · · · · · 303
第二十五章 RTC · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 305
25.1 概述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 305
25.2 寄存器描述 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 305
25.2.1 寄存器地址列表 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 305
25.2.2 TOY 计数器低 32 位数值 (SYS TOYWRITE0) · · · · · · · · · · · · · · · · · · · · 306
25.2.3 TOY 计数器高 32 位数值 (SYS TOYWRITE1) · · · · · · · · · · · · · · · · · · · · 306
25.2.4 TOY 计数器低 32 位数值 (SYS TOYREAD0) · · · · · · · · · · · · · · · · · · · · · 306
25.2.5 TOY 计数器高 32 位数值 (SYS TOYREAD1) · · · · · · · · · · · · · · · · · · · · · 306
25.2.6 TOY 计数器中断寄存器 0/1/2(SYS TOYMATCH0/1/2) · · · · · · · · · · 307
25.2.7 RTC 定时器中断寄存器 0/1/2(SYS RTCCTRL) · · · · · · · · · · · · · · · · · · 307
25.2.8 RTC 计数器写入端口 (SYS RTCWRITE) · · · · · · · · · · · · · · · · · · · · · · · · · 308
25.2.9 RTC 计数器写入端口 (SYS RTCREAD) · · · · · · · · · · · · · · · · · · · · · · · · · · 308
25.2.10 RTC 定时器中断寄存器 0/1/2(SYS RTCMATCH0/1/2) · · · · · · · · · · 308
作者: zzz19760225     时间: 2016-10-22 01:56
致龙芯CPU15周年 胡伟武

suoniao / 2016-10-21 13:38
浏览: 325 / 回复: 34
      2016年是红军长征胜利80周年,2016年研制成功的龙芯3A3000处理器即以CZ80命名,每颗芯片的硅片上都刻有CZ80字样。 1936年10月,红一、二、四方面军经过艰苦卓绝的努力,三大主力会师,开创了中国革命的新局面。它雄辩地表明,只要坚持理想,实事求是,中国共产党完全有能力摧坚于正锐、挽澜于极危,从重大挫折中走出来。 2016年10月,以长征胜利80周年命名为CZ80的龙芯3A3000处理器研制成功。它雄辩地表明,只要坚持自主研发,进行持续改进,自主研发的CPU性能完全可以超过引进技术的CPU,满足自主信息化需求。 2016年10月7日,我怀着虔诚的心情走进毛主席纪念堂,向毛主席汇报龙芯3A3000的研制成功。步出毛主席纪念堂,我感慨万千。当十年前我开始龙芯3号研制时,完全没有想到龙芯3号系列CPU发展道路之曲折,奋斗之艰辛,付出之巨大。
      2006年9月13日,以长征胜利70周年命名为CZ70的龙芯2E通过科技部组织的验收,时任科技部部长徐冠华亲自参加了龙芯2E的验收会。龙芯2E的研制是“十五”末国家863计划紧急安排的一个任务。当时“汉芯”造假事件被曝光,加上“十五”863计划早期支持的龙芯2C没有达到合同要求的SPEC CPU2000分值300分的目标,自主处理器研发受到普遍质疑。2005年4月,科技部高新司领导把我叫到办公室,问我到2005年年底前能不能完成863计划“十五”初制定的主频1GHz、SPEC CPU2000分值达到500分的目标。我说剩下不到一年时间,肯定来不及。他说根据有关规定,项目时间到期后三个月内(即2006年3月底前)提出验收申请就算按时完成。我硬着头皮接了该任务,因为我知道如果“十五”的任务完不成,那“十一五”国家是不是还支持自主CPU研发就成问题。经过艰苦的努力,龙芯2E在2005年11月底交付流片(把设计好的技术文件交给芯片生产厂家进行生产),2006年3月18日流片成功,达到了技术指标。虽然达到这些指标有些勉强(SPEC CPU2000分值达到500分是计算所的编译组做了很多编译优化实现的,但SPEC CPU的测试是允许进行编译优化的),但毕竟完成了指标。龙芯2E的意义从徐冠华部长参加完验收会后接受新闻联播记者采访时说的一句话可以看出:龙芯2E的成功表明,我国在“十五”期间安排的自主CPU研发是成功的。这也为“十一五”期间国家继续支持自主CPU研发打下了基础。
     2005年深秋,利用龙芯2E流片后等待芯片回来的时间我带着部分龙芯课题组的骨干在香山别墅讨论龙芯3号的结构方案。香山别墅和香山饭店一样在香山公园内,但比香山饭店便宜而且清静。香山别墅三天讨论的成果是基本明确了龙芯3号系列CPU的可伸缩互连结构以及基于目录的Cache一致性协议。龙芯3号的互连结构中,每个结点四个处理器核通过交叉开关进行全相连,结点间(不论片上还是片间)通过可伸缩的mesh网络相连;多核的Cache一致性采用基于目录的一致性协议,目录设置在片上共享的最后一级Cache(LLC)上。上述结构有别于当时主流的环状多核互连以及基于侦听的Cache一致性协议。现在看来,该结构是成功的,目前商用主流处理器随着核数的增加也越来越多采用可伸缩的互连结构以及基于目录的Cache一致性协议。
      在香山别墅的讨论中还明确了龙芯3号片内集成内存控制器以及HyperTransport(简称HT)接口。HT是AMD主推的系统总线接口。当时计算所高性能中心与AMD合作紧密,希望我们使用HT接口。此外HT接口比较开放,只要每年交5000美元就可以用于商业应用,但AMD开放的HT接口不支持多片互连的Cache一致性协议,我们自己进行了扩充。曾经有一段时间,我后悔选择了HT总线,觉得HT总线不如PCIE总线普及,一是HT总线没有现成的PHY(片内高速接口模块)可以买到,每次工艺升级都需要定制HT的PHY,而PCIE的PHY有很多;二是PCIE接口的外围器件很多,而HT接口的桥片只有AMD有。但现在觉得选用HT是对的。HT是系统总线,协议简单高效,相当于Intel的QPI系统总线,而PCIE是IO总线,通过HT总线可以方便地把多片龙芯3号直连起来形成多路服务器。虽然每次工艺升级都要定制HT PHY,但可以使龙芯CPU不依赖别人的IP,自主性强。龙芯3号所有CPU中,没有一款CPU需要到厂家merge第三方IP。尤其是龙芯3A2000和3A3000,除了厂家提供的标准单元库、单/双端口RAM以及低速IO单元,每一行代码(包括CPU核、内存控制器、HT控制器、互连网络等)以及每一个定制模块(包括多端口寄存器堆、锁相环、HT PHY、DDR2/3 PHY等)都自主设计。至于外围桥片,龙芯已经开始研制并提供外围桥片,桥片上支持足够多的PCIE接口。以后不论AMD是否继续发展HT接口,龙芯都能自成体系往前走了。
收藏收藏
回复 举报

2#
suoniao 发表于 昨天 13:38 | 只看该作者
香山别墅会议的另外一个成果是明确了龙芯抗辐照CPU的发展。有一天晚上8点左右,我们正在会议室热烈地讨论龙芯3号的结构,当时在计算所科研处工作的夏洪流和傅信国给我打电话说是要来跟我谈一个项目的事。他们到香山别墅已是晚上9点多,我们就坐在香山别墅的走廊尽头谈,他们说科学院有一个抗辐照CPU的预研项目,希望龙芯课题组来承担。我刚开始不愿意做,结果他们好说歹说地让我勉强答应了,当时的一个理由是领导每年对他们争取的项目经费有要求,我如果不做这个抗辐照CPU项目,他们的任务就完不成了,我头脑一热就答应了。现在龙芯抗辐照CPU已经随着以北斗为代表的多颗卫星在天空翱翔,每年还为龙芯公司带来较可观的收入,成为龙芯公司的战略产品并开始走向系列化。真是非常感谢夏洪流和傅信国那天晚上的苦口婆心。
在龙芯3号结构基本确定后就展开了龙芯3号CPU的研发。但当时“十五”863课题结束了,“十一五”“核高基”(即“核心电子器件、高端通用芯片和基础软件产品”重大专项)课题迟迟启动不了。为此,科学院对龙芯3号的研制给了500万元的前期经费支持(执行期限2007年1月到2007年12月)。科技部高新司冯记春司长得知龙芯3号的第一款芯片龙芯3A1000已经基本完成设计,但缺少流片费时,在863计划内紧急安排了2000万的经费支持龙芯3号的研制(执行期限2008年1月到2010年12月)。原计算所所长李国杰院士曾经在计算所中层干部会上当众点我的名说,“胡伟武,你不能以任何经费的理由放缓龙芯3号的研制,计算所就是砸锅卖铁也要支持龙芯的研发”,并在所内设立了一个经费没有封顶的课题,到2010年龙芯第一笔“核高基”课题经费到账时,龙芯课题组已经预支了计算所七、八千万元经费。
不记得经历了多少加班加点,龙芯3A1000于2008年底交付流片。只记得流片前的几个月每天晚上十点开例会安排工作。晚上十点例会是非常高效的一种工作方法,会后大家把有关设计在EDA服务器上跑起来再回家,第二天早上上班时刚好跑出结果来;如果是早上上班后开始在EDA服务器上跑,基本上大半天就在等待服务器运行出结果中度过。在此后龙芯CPU问题的攻关中,一直沿袭了晚上例会安排工作的方法。 2009年5月20日龙芯3A1000晶圆生产下线,9月28日样片回来,成功启动操作系统,主频800MHz-1GHz。这是龙芯CPU第一次启动多核操作系统,免不了调一通。印象最深刻的是10月2日晚上熬了个通宵,一起的有王剑等人,刚开始是挨个核跑单核操作系统,把每个核都跑一遍,再把多核操作系统搞稳定,一直到第二天早上才弄完。
回复 举报

3#
suoniao 发表于 昨天 13:39 | 只看该作者
中国科学技术大学的陈国良院士曾经在2007年用三百多颗龙芯2F搭建了峰值性能达到1TetaFLOPS的高性能计算机KD50。在龙芯3A1000出来以后又用80颗龙芯3A1000搭建了KD60高性能计算机。在KD60运行LINPACK过程中,总是出现偶发性错误。这个错误如果单个芯片跑一个月也碰不上一次,只有像KD60这样80多片一起跑才会一天碰到一次。有三个多月的时间,我们一直进行各种尝试,试图定位该错误并明确其机理。现在只记得2010年春节的大年三十晚上还在跟当时负责软件的高翔商量进行各种尝试,缩小搜索范围。一直到春节后才定位了这个错误,错误的原因是当访问Cache失效,从内存回填(Refill)数据时,同时回填一级和二级Cache,通常为了提高性能,这是应该的。但在某种极端情况下出现了错误,即二级Cache的回填由于二级Cache忙需要等待,而处理器核得到一级Cache回填数据后继续运行,该数据被修改后再从一级Cache中替换出来写回二级Cache,替换回来的新数据写到二级Cache后,从内存回来的老数据再回填二级Cache把新数据冲掉了,从而引起错误。这个问题以及其它的小问题导致龙芯3A1000进行了第一次改版并于2010年5月中旬流片,10月底第一次改版流片成功,然后开始了小批量生产。
龙芯3A1000在2012年又进行了第二次改版。第二次改版主要是双路直连时在特定访问序列下导致两片间的互连网络死锁。大致机理是HT协议的虚通道只有三个,分别是POST、NONPOST、RESPONSE,而龙芯的片上网络协议AXI有五个实通道,分别是读请求、写请求、写数据、读响应、写响应。于是在通过HT传输Cache一致性协议时,就将写请求与写数据合并一个通道,读响应与写响应合并一个通道传输。Cache一致性协议要求写响应不能被堵,而读响应通道发出的二级Cache给一级Cache的一致性请求有时会因为一级Cache处理不过来而被堵住,这时就会顺带堵死写响应通道,导致死锁。当时解决的办法是在HT原有三个虚通道的基础上增加了第四个虚通道并且允许写命令与写数据之间插入写响应包。3A1000的第二次改版还解决了HT互连时一个异步握手的问题。3A1000的第二次改版于2012年2月下旬流片,2012年8月中旬流片成功。至此龙芯3A1000就很稳定了,至今还是龙芯销售的一款重要芯片,尤其是在工控领域。
回复 举报

4#
suoniao 发表于 昨天 13:39 | 只看该作者
现在回头看,龙芯3A1000的研制是成功的。3A1000是我国第一个四核CPU芯片。在3A1000的研制过程中,我们掌握了多核CPU的片内互连及Cache一致性技术,以及片间多路互连技术。直到今日,龙芯仍然是唯一能支持多路服务器的自主CPU。在最近国外CPU企业对中国企业的CPU技术授权中,支持多路服务器的技术受美国政府限制还是不能给中国的。龙芯3A1000的处理器核沿袭了龙芯2E和龙芯2F的处理器核结构,虽然在MIPS64兼容性方面有较大改进,性能只进行了局部优化。龙芯3A1000处理器核的性能略高于Pentium III的水平,在2006年龙芯2E刚出来时这个性能还说得过去。龙芯3A1000仍沿用该处理器核有点慢了,但在应用比较固定的很多领域还能用,按理说龙芯的下一款CPU应该致力于处理器核的性能优化,大幅度提高通用处理性能,但在学院派的思想主导下,随后的龙芯3B走了弯路,使龙芯遭受了挫折。
龙芯3B的研发得到“核高基”重大专项的支持,是在龙芯团队转型成立公司(龙芯中科技术有限公司)以及有关部门大力展开自主基础软硬件应用试点的背景下展开研制的。2010年把龙芯课题组转型成立公司是下了很大决心的,当时已认识到不能脚踩两只船,办企业和做研究不一样,即使呕心沥血,也是九死一生,因此一定要专心,要求绝大多数技术骨干都从计算所辞职。像张戈25岁就已经是副高职称,是学术上很有前途的苗子,也毅然从计算所辞职。下这么大决心,与我当时担任全国人大代表,对中央以企业作为创新主体,科技创新要为经济社会发展服务的精神非常了解有很大关系。尤其是在“十七大”报告中,传统的“科教文卫”不再单独作为一个板块,科技创新直接在经济发展的第一部分来描述,对我触动很大。龙芯公司的成立得到很多领导专家的支持。除了李国杰所长的大力支持外,路甬祥院长专门批示,要求科学院有关部门落实龙芯团队的股权激励。原国家外专局局长马俊如从2006年起就曾多次对我说,龙芯在科学院里面已经做得很好了,不能再好了,要想更好,就必须下海办企业;在成立企业后马局长又给了我很多指导。工信部的电子司司长丁文武也给了我很多鼓励。
回复 举报

5#
suoniao 发表于 昨天 13:39 | 只看该作者
龙芯3B的研发工作在2008年底龙芯3A交付流片后开始全面展开。首款龙芯3B1000继续基于65nm工艺,目标主频800MHz-1GHz,八核结构,每个核包含两个256位向量部件,峰值浮点性能达到128GFLOPS,这在当时处于世界领先行列。龙芯3B1000于2010年6月20日左右流片,2010年11月底回来第一批芯片。但第一批芯片回来测试并不顺利,连操作系统都启动不了。很快就找到了原因:由于芯片可测性设计部分的逻辑设计错误,在功能模式下误把内存引脚置为测试状态,导致芯片访问不了内存,通过FIB(用离子束改变硅片上的连线)修复后功能正常。 这是一个重大的打击,龙芯历史上从来没有犯过这样简单的错误,而且在同一时期流片的龙芯1A、龙芯2I等芯片也出现了由于简单工作失误引起的错误。究其原因,是龙芯团队在2010年初从课题组管理机制转向公司管理机制的过程中,原来“作坊式”的设计流程被打破了,“工业化”的设计流程没有建立起来。在课题组阶段,我作为课题组长,每颗芯片从结构设计、逻辑设计、功能验证、可测性设计、定制设计、物理设计各个环节从头盯到尾,及时协调各组的配合,关注每一个细节,因此没有出现管理上的错误。而在3B1000的研制过程中,龙芯课题组转型成立了龙芯公司,我的主要精力转向公司,芯片研发的总协调人缺位,导致频频失误。痛定思痛,从此我着手芯片研制的质量体系建设,建立了“五步法”(立项、方案、签核、测试、结项)研制过程,并详细规定了每个阶段的研发和审核内容。在此后龙芯公司进行的几十次流片中,没有出现过严重的质量问题,而且比我作为课题组长天天盯着效率高很多。 龙芯3B1000首款流片不成功促使我们马上进行改版,好在只要改一层金属,时间和费用上都比较省。3B1000的第一次改版2011年2月初流片,7月初回来,调试比较顺利。但在压力测试时又出现死机现象,经过几个月的攻关发现又是死锁问题。大致机理是一个处理器核访问其它结点的内存时,写地址和写数据是分开发出的,结果在另外一个结点的处理器核也过来访问内存,而且同时有几十个这样的互相访问时,写地址过去了但写数据互相堵住,导致死锁。避免死锁的办法是要求写地址和写数据保持原子性,即必须一起发出和传输。为此龙芯3B1000进行了第二次改版,于2011年12月初流片,2012年4月底回来。从此达到稳定状态
在掌握65nm工艺的基础上,我们于2009年11月开始评估32/28nm工艺,并准备把它作为龙芯CPU的下一个工艺结点。2010年12月选定意法半导体与三星合作的32nm工艺并开始八核3B1500的设计。3B1500基于3B1000的设计,主要通过工艺升级提高性能,同时做了局部的性能优化,尤其是在处理器核中增加了私有二级Cache。2012年1月中旬完成3B1500的设计并交付流片。2012年8月底拿到样片,初步测试正常,频率从3B1000的900MHz提高到1.25GHz(最高可达1.5GHz)。在经过测试后对该芯片进行了万片规模的小批量生产。在应用验证过程中,出现了在很大的应用压力下个别芯片不稳定现象。刚开始觉得是个体问题,后来出现的次数多了,开始于2013年1月31日组织人员攻关定位问题,查找机理。也是每天晚上召开例会讨论,安排各种尝试,在这个过程中发现了几个软硬件磨合的问题并通过软件调整后,出问题的概率小了很多,但问题如幽灵般还在。直到2013年4月12日,才抓到了该问题。这个问题是从3B1000到3B1500改版过程中引进的,为了提高性能,处理器核收到多个维护Cache一致性的无效请求时,原来每两拍才能处理一个,改成可以连续处理,导致清除LL/SC同步指令的同步位llbit时错了一拍,误把IO DMA引起的Cache无效请求当作0号处理器核的Cache无效请求(IO DMA的编号刚好为0,与0号处理器核区分不开),通过软件调整可以规避此问题。经过批量测试,原不稳定现象消失。 为了从根本上消除该问题和其它一些小问题,我们对3B1500进行改版。改版时根据生产厂家的建议,工艺从32nm迁移到28nm,于2013年4月底流片,10月底收到样片,功能正常,但成品率极低,与厂家确认后明确是厂家生产问题。厂家又建议我们恢复到32nm工艺流片,并以某种方式补偿此次流片费用,于是又再次改版,于2015年1月底流片,2015年6月下旬收到样片,测试后功能正常,而且成品率正常,目前已经量产。 龙芯3B的研制过程真是一波三折。出现过龙芯从课题组向公司转型过程中的管理问题,生产厂家引起的问题,多核互相访问引起的死锁问题,处理器核Cache一致性引起的问题。在解决了一个个问题后总算取得了成功。 但龙芯3B的主要问题不在研制过程中,而是刚开始定方向就出了很大偏差。主要问题在于虽然龙芯团队从课题组转型成为了公司,但龙芯3B的研发还保持着学院派导向,过度追求多核以及浮点峰值性能的单一指标,通用处理性能不足,满足不了在“十一五”期间展开的自主CPU应用和试点对性能的要求。 龙芯3B在学术上是成功的,3B1500峰值浮点运算速度达到160GFLOPS,现在拿出来也不丢人,当时在国际上算高的。论文分别被国际顶级会议Hotchips和ISSCC录用,龙芯3B的报告引起了很大反响,美国IT Times对此专门进行了报道,MIT也发表评论,认为龙芯3B的浮点性能超过了同期的Intel处理器。但3B1500的通用处理能力比3A1000提高得不多,通过每个处理器核增加128KB的私有二级Cache以及主频及内存频率的提高,3B1500的单核通用处理性能比3A1000提高了30%-50%,但与国外主流产品的性能差距还很大。 SPEC CPU是一组国际上公认的测试通用处理器性能的测试程序。2006年SPEC CPU2006刚出来时,厂家公布的SUN的blade服务器单核性能为2-4分左右,高端Pentium IV的分值是10来分。2006-2013年是国外主流处理器通用处理性能高速增长期,在主频不怎么提高的基础上,通过微结构优化,厂家公布的SPEC CPU2006单核分值提高到50分左右,平均提高了5倍以上。当然厂家公布的分值都是经过精雕细刻编译优化(包括使用向量和多核加速)的,一般我们使用gcc编译出来的单核分值需要把这些厂家自己公布的分值打7折左右,大致是20-40分。2013年以后,国际单核性能的提高趋缓,每代提升5%就不错,已经到了天花板。SPEC CPU先后发展了1989、1992、1995、2000、2006五个版本,开始时每三年更新一版,后来五、六年更新一版,到2006年后就没有更新。从中也可以看出,CPU的通用处理性能到2010年前后已经到了天花板,运行SPEC CPU2006的时间就够长了。
回复 举报

6#
suoniao 发表于 昨天 13:40 | 只看该作者
“十一五”期间,多核CPU成为国际学术界的热点研究方向。因此,学院派思想主导的国内CPU在“十一五”期间都放松了单核性能的提高,而是转做多核,而且核数做得比国外还多。2006年研制成功的龙芯2E的通用处理性能与市场上主流X86处理器差1-2倍(与龙芯2E微结构相同的龙芯3A1000在900MHz时SPEC CPU2006单核分值为定点2.4分,浮点2.3分),但龙芯CPU的单核性能从2006年的龙芯2E到2013年的龙芯3B1500只提高了50%左右;而在此期间市场主流X86处理器的单核通用处理性能提高了5倍以上。也就是说,“十一五”期间我国CPU通用处理性能被国外大幅度拉开了距离,从相差1-2倍到相差一个数量级。 技术上的差距体现在市场上就是不好用。“十一五”期间,国家有关部门在涉及国家安全的领域开始了自主CPU应用试点,大量的应用往基于自主CPU和操作系统的计算机上移植。在2011-2013年的三年中,以嵌入式计算机为代表的装备类应用取得了不少成功;而以通用PC和服务器为代表的信息化类应用虽然通过基础软硬件的磨合优化取得了较大进展,但由于自主CPU的性能基础与国外产品有数量级差距,在很多应用中遭遇性能瓶颈。 由于自主CPU的通用处理性能不够,2013年起,“核高基”基本上放弃了CPU自主研发路线,转而支持引进国外CPU技术的路线。以IBM、AMD、威盛、ARM为代表的国外/境外CPU趁虚而入,纷纷寻求与国内企业合资或开放技术授权的方式,把原来的产品摇身一变成为自主CPU(操作系统和数据库也有类似情况)。这使得主要靠国家支持进行研发的龙芯CPU陷入了巨大困境。 虽然当时对“核高基”支持引进CPU不满,但究其原因,还是我们自己在“十一五”“核高基”支持的龙芯3B上没有摆脱学院派的惯性,走了弯路,满足不了当时迫切的自主信息化市场需求。问题还是出在我们自己身上。“十五”期间负责863计划的科技部高新司领导在龙芯2C没有达到预期技术指标,龙芯2E立项专家提出19条反对意见的情况下作为非共识项目支持龙芯2E的研发,给了我们一次改进的机会。而这次,机会没有了,需要我们自己想办法。
痛定思痛,知耻后勇。2013年5月,龙芯公司结合市场需求对CPU的研发路线进行了认真调整。一是龙芯3号系列多核CPU不追求核的个数而是大幅度提高单核性能,放弃高性能机专用CPU的研制,暂停16核处理器研制,重点把双核、四核处理器做精做透。二是龙芯2号系列SOC芯片不追求“大而全”的复杂度,而是重视结合用户需求定义芯片,以及SOC片内互连的通畅性。三是龙芯1号系列结合特定应用,如宇航、石油、流量表等研制专用芯片,专用芯片产业链短,容易形成技术优势并快速形成销售(如面向宇航应用的龙芯1E和1F已经为龙芯公司带来持续稳定的销售收入)。种瓜得瓜、种豆得豆。从2014年下半年开始,龙芯研发和市场结合的作用开始显现,2014年龙芯公司销售收入比2013年增长51%;2015年在2014年基础上再增长57%,为龙芯公司的可持续发展奠定了良好的基础。龙芯公司逐渐摆脱国家项目的支持,能够主要通过市场销售养活团队和产品研发。
回复 举报

7#
suoniao 发表于 昨天 13:40 | 只看该作者
基于上述对龙芯CPU研发路线的调整,2013年5月,我们暂停了已经完成主要设计的16核龙芯3C处理器流片,开始四核3A2000处理器的研发。核多了没有用,单核必须要强。就像体育比赛,靠人多取胜的只有拔河(相当于计算机中的高性能计算机),绝大多数项目要靠运动员个人素质。3A2000主要目标就是大幅度提高单核性能,使单核通用处理器性能提高3倍以上。当时龙芯公司承担了基于某境内40nm LL工艺的高可靠嵌入式CPU研制项目,虽然工艺性能不高,甚至比我们原来用的65nm GP工艺还慢30%,但至少流片的钱有地方出了,我们就基于该工艺研制3A2000。当时还有一个重要决定就是保持3A2000与3A1000的引脚兼容,这样龙芯客户中基于3A1000研制的已有上百种板卡解决方案可以直接通过换焊3A2000来提高性能。基于境内工艺、通过微结构优化大幅提升性能以及与3A1000引脚兼容说明3A2000开始摆脱了学院派惯性,走出结合用户需求研发CPU的关键一步。 2013年初,在龙芯最困难的时候,中科院计算所孙凝晖所长在所里资金本身就很困难的情况下,拿出500万元支持龙芯3A2000处理器核GS464E的前期研发。虽然与研制3A2000所需要的上亿元经费相比,500万显得很少,但在龙芯最困难的时候得到来自龙芯“娘家”计算所的支持,觉得非常温暖。
事实上2012年初龙芯公司在香山饭店召开年度规划会时就决定对GS464处理器核(龙芯2F、2H、3A1000、3B1000、3B1500等都基于GS464微结构)进行优化,形成新一代龙芯微结构GS464E。GS464处理器核一直是我自己维护,其中有一半左右代码(包括流水线控制部分如寄存器重命名、乱序发射队列、寄存器堆控制、重排序缓存,以及访存部分如地址运算、一级数据Cache、TLB、访存失效队列、最后一级共享Cache)是我自己写的,2012年上半年我在机房中花了整整两周时间为GS464升级为GS464E打好必要的基础(我当时说要把马的架子变成骆驼的架子,先要把一个访存部件升级为两个访存部件)后,把维护和升级处理器核的任务移交给汪文祥和吴瑞阳。这很可能是我最后一次有机会写龙芯CPU的代码了。现在回忆起来,能够在机房中心无旁骛地写代码真是莫大的幸福,有无比的成就感,但我不能让自己成为龙芯CPU发展的瓶颈。而且经过多年实践的锻炼,龙芯的年轻人已经充分地成长起来了。龙芯3A1000、3B1000和3B1500都是我自己当技术负责人,3A2000开始由年轻人担任芯片的技术负责人,3A2000的技术负责人是王焕东,3A3000的技术负责人是杨梁。承担国家项目也主要由年轻人作为项目负责人。 GS464E对GS464的改造是全方位的。在指令系统方面,我们在MIPS64 R3的基础上进行了扩展(MIPS指令系统的授权允许用户进行扩展)并形成龙芯指令系统LoongISA,除增加一些基础指令外,还有支持云计算的虚拟化扩展,以及加速X86和ARM二进制翻译的扩展。在微结构方面,除了前述的把访存功能部件从一个增加到两个外,还把Cache行大小从256位增加到512位,最后一级Cache从四路组相联提高到16路组相联,增加了多个层次的预取,把重排序缓存ROB从64项增加到128项,重命名寄存器个数从64个增加到128个,乱序发射队列由原来的定点和浮点各16项增加到定点16项(3A3000增加到32项)、浮点24项(3A3000增加到32项)、访存32项,重新构建了整个转移猜测模块。此外,用大量的测试程序对微结构进行了细节的磨合,局部优化达到三十多处。3A2000的多核互连模块和内存控制器也进行了性能优化。尤其是内存控制器的优化,可以大幅度提高访存频率和效率。2014年7月,RTL代码冻结。
回复 举报

8#
suoniao 发表于 昨天 13:41 | 只看该作者
3A2000除了使用流片厂家提供的标准单元库、Memory Compiler生成的RAM、低速IO单元以及efuse单元以外,包括锁相环、HT PHY、DDR2/3 PHY、多端口寄存器堆、CAM、温度传感器等宏单元都是我们自己定制的,没有使用任何第三方的宏单元模块。因此,全定制工作量也不小。 3A2000的物理设计采取了很多优化措施,初步建立起一套在主流EDA工具基础上的In-House的流程和工具,包括统一数据库支撑的设计平台,基于触发器聚类的定制时钟设计,深度层次化设计等。这套In-House的流程和工具比纯粹依赖EDA工具的单元级设计流程提升性能20%左右。 2014年11月初,3A2000交付流片。这次流片共有龙芯的三款芯片一起拼了个全掩膜。由于流片前的功能验证非常充分,尤其是在3A2000验证过程中,王朋宇负责的验证组完善了龙芯指令级随机验证环境,从原来只覆盖用户态指令到覆盖核心态指令以及例外处理,大大提高了3A2000的功能验证覆盖率。物理设计和检查也精雕细刻,我们对3A2000流片成功很有信心。
经过几个月的焦急等待,2015年4月10日晚饭后,终于拿到了3A2000的盲封样片,连夜进行调试,到第二天早上三点多成功运行操作系统。随后的测试一切顺利:在运行了包括SPEC CPU2000、SPEC CPU2006、Unixbench等大型程序后,功能未见异常;主频可以达到1GHz;SPEC CPU2006单核分值达到6-7分,是3A1000的3倍左右,尤其是以STREAM测试表征的访存带宽大幅度从3A1000的不到1GB/s上升到10GB/s,与市场主流处理器基本持平。在基于龙芯3A2000的桌面终端上进行各种办公应用,觉得流畅多了。有部分芯片在较高电压下运行不稳定,当时并没有引起重视。 2015年5月,经过ATE测试台成测的一批芯片回来测试,发现功能测试结果与ATE测试台测试结果不一致,即部分芯片通过ATE测试后功能还是不正常,这是3A2000完成产品化的严重障碍(即通过测试后提供给客户的芯片中有一部分可能是坏的)。通过调整ATE向量,ATE测试与功能测试的一致性增强,但还有部分芯片不完全一致,总体感觉N管偏快的工艺稳定性明显增强。为了更好地分析原因,6月初请厂家把第一次流片中6个hold的晶圆调整工艺角开始生产。
经过继续深入的分析,发现两个明显现象:一是N管偏快的芯片稳定性好很多,ATE测试和功能测试比较一致;二是通过改善主板电源稳定性,有利于芯片稳定。虽然机理不是很清楚,但在当时巨大的市场压力下(采用引进技术的CPU到处攻击龙芯性能不行,要求有关自主化应用放弃龙芯,使用引进技术的CPU),决定结合已有的现象进行改版流片,一是更换定制的电容更大的DECAP替换厂家提供的DECAP以抑制动态压降(定制的DECAP电容比厂家提供的DECAP电容提高一个数量级),这会带来抗ESD能力下降的风险,但我们经过分析觉得风险不大(事后流片回来进行了ESD实验,抗2000V人体模型没问题);二是根据负责全定制工作的钟石强的建议调整了定制寄存器堆的字线和位线配合时序(增加了20ps左右的裕量),因为仿真发现N管偏快有利于定制的寄存器堆字线和位线时序配合,与实验现象符合。3A2000的第一次改版只改了6层掩膜板,于9月初完成改版设计并交付流片。 2015年11月初,6个调整工艺角的芯片回来,经过大量的ATE测试和功能测试,确定寄存器堆是部分芯片功能不稳定的主要原因。ATE测试发现不同工艺角芯片的寄存器堆MBIST测试在1.30V到1.50V的不同电压下出错,功能测试出错电压则比寄存器堆低100-150mV,有较强的一致性,但机理仍不清楚。
回复 举报

9#
suoniao 发表于 昨天 13:41 | 只看该作者
2016年1月11日下午下班前,我跟范宝峡、苏孟豪在讨论苏孟豪通过JTAG通路(这是预留的除了正常的ATE测试外的另外一条测试通路)以Scan Collar方式测试寄存器堆没有发现错误的问题,并了解到杨旭审查版图发现写端口的位线的延迟在其它端口写相反值及读端口旁路读时是最差情况,我马上叫苏孟豪用最差情况向量通过JTAG端口进行测试,很快就复现了寄存器堆出错的问题并经过进一步分析搞清楚了寄存器堆写出错的机理:在寄存器堆写端口写入过程中,要求位线比字线先到,字线与位线之间保持必要的延迟差才能保证写入的正确性,但在位线负载大时(其它写端口写相反值及其它读端口读旁路)位线延迟变大,字位线延迟差太小,导致写寄存器堆出错。提高电压会进一步减少字线与位线的延迟差,因此更容易出错。 真是柳暗花明,困扰我们大半年的3A2000产品化问题终于搞清楚了,尤其是这说明我们在2015年9月份在机理不清楚情况下的改版是正确的。而且这个测试向量提供了一种在已有芯片中把不稳定的芯片筛选掉的办法,这是龙芯3A2000产品化过程迈出的重大一步。
2016年2月8日是春节,3A2000第一次改版的芯片在2月4日完成封装,为了在春节前完成3A2000第一次改版芯片测试,孙凯军专门到封装厂等待封装好的芯片,拿到芯片时已经是下午6点多,直飞北京的飞机已经没了,半夜到上海倒了一次飞机,5日上午到北京,马上安排测试,确实寄存器堆的问题大大缓解了,稳定性大幅度提高。春节上班后我们又组织攻关解决了一个软硬件磨合的问题,到2016年2月22日,完成3A2000的初步产品化工作,开始对外销售芯片(原来一直只能以样片方式赠送给客户试用)。 2016年3月中旬,3A2000进行再次改版,这次改版是全掩膜改版(原来是三个芯片拼了个全掩膜),除了进一步增加寄存器堆字线和位线的延迟差以外,还修改了其它几个小问题。2016年7月下旬,芯片回来后经测试,原来的定制模块问题不复存在,芯片功能正常,而且ATE测试与功能测试一致性好。目前3A2000已经进入量产阶段,其中经过测试支持通过直连形成多路服务器的芯片成为3B2000。 在随后的应用推广中,3A2000与3A1000保持引脚兼容以及软件兼容体现出巨大优越性,很多客户直接在原来3A1000的主板上换焊3A2000芯片,只需通过简单的BIOS和内核调整,就可以大幅度提升性能。龙芯的整机厂家迅速升级了部分原来基于龙芯3A1000的计算机并进行了应用试点。在2016年6月进行的某办公应用试点验收会上,有关部门和专家认为,基于3A2000的计算机使自主化办公应用从“基本可用/可用”提高到“基本好用/好用”。
龙芯3A3000是在2015年5月临时安排研制的。2015年5月初,我去常熟跟龙芯梦兰公司的张福新、吴少刚等人讨论3A2000整机解决方案的研发。大家对3A2000大幅度提升性能都很高兴,大大增强了信心。同时张福新他们提出,由于我们使用境内的40nm低速工艺,而引进ARM和威盛的CPU都使用境外28nm高速工艺,虽然3A2000在微结构上已经超过了引进的ARM和威盛的CPU,由于主频偏低,3A2000在综合性能上还是吃亏(1.0GHz的3A2000处理器核SPEC CPU2006分值为6-7分,而1.6-2.0GHz的ARM和威盛处理器核SPEC CPU2006分值达到8-10分),建议龙芯也尽快使用境外工艺提升频率。经过认真讨论,我们认为如果我们采用Intel的Tick-Tock(嘀嗒)研发策略,应该可以很快推出主频1.5GHz以上,综合性能超过2GHz的ARM和威盛的处理器。Tick指的是结构不变,通过工艺优化提升性能;Tock指的是工艺不变,通过结构优化提升性能。Tick-Tock策略可以把两个芯片流水推进,加快进度的同时降低技术风险。
回复 举报

10#
suoniao 发表于 昨天 13:42 | 只看该作者
3A2000主要是通过结构优化提升性能,属于Tock;3A3000则直接采用3A2000的源代码,通过工艺优化提升性能,同时继续保持与3A2000的引脚兼容,属于Tick。因此,3A3000在功能上没有什么风险,主要是工艺移植的风险。当然,3A3000在微结构上还是做了适度增强:一是结合3A2000的性能瓶颈分析把定点/浮点发射队列从16/24项增加到32/32项,二是把最后一级Cache从4MB提高到8MB。到6月底,完成了RTL源代码修改,随后全面展开物理设计。 3A3000物理设计中继续需要定制包括HT-PHY、DDR-PHY、锁相环、多端口寄存器堆、CAM等全定制模块。由于3A2000中的全定制模块出过问题,3A3000的全定制模块检查特别严格。除了加强设计仿真外,还让原龙芯全定制组的组长杨旭(现在是龙芯中科公司全面负责生产的副总)重新披挂上阵,进行背靠背的复查。紧赶慢赶,于2016年1月底完成了全定制设计的签核和复查评审。 3A3000物理设计中另一个难点是时序收敛。3A3000使用的28nm FD SOI工艺晶体管确实比3A2000使用的40nm LL快60%左右,但连线延迟大,而且互相干扰也大,废了很多周折。杨梁率领物理组在2016年春节期间也没有休息,终于在2016年2月中旬交付流片。
2016年6月端午假期期间,龙芯3A3000完成晶圆生产并进行了中测,刚开始比较顺利,已经调试完成大部分向量,只是测试我们自己研制的锁相环时发现锁相环输出时钟有不稳定现象。6月中旬拿到盲封芯片,测试发现只有在低于0.8V的低电压下芯片才能正常工作,经过两周的分析发现还是寄存器堆的问题,这次是读出电路的问题,读电路译码时产生了毛刺,把别的字的内容耦合到读出字内容来了。好在该问题只需要修改一层掩模版。 2016年9月13日,修改寄存器堆问题的改版芯片回来。这次测试非常顺利,很快就运行了SPEC CPU2000和SPEC CPU2006等大型程序,均未发现异常。主频可以达到1.5GHz以上。进一步的测试结果比想象的好,一是内存频率可以达到750MHz以上,而且信号眼图还非常好,STREAM测试带宽达到13GB/s;二是虽然主频只提高了50%,但综合SPEC CPU2006和SPEC CPU2000分值可以提高60%,其中SPEC CPU2006单核分值为定点11分以上、浮点10分以上,四核分值为定点36分,浮点33分;三是可以运行在很低电压下,例如运行在1.0V电压下主频1GHz时功耗还不到3A2000运行1GHz时的一半。对于复杂应用(如打开几十MB的复杂文件),3A3000的用户体验比3A2000有显著提高。 2016年10月17日,龙芯3A3000通过了龙芯公司质量体系要求的商业级产品的鉴定检验摸底测试(工业级产品鉴定检验工作正在同步展开),表明龙芯3A3000可以进入批量生产状态。目前3A3000已开始小批量生产,其中经过测试支持通过直连形成多路服务器的芯片成为3B3000。
回复 举报

11#
suoniao 发表于 昨天 13:43 | 只看该作者
龙芯3A3000运行SPEC CPU2000定点分值1100多分,浮点分值1700多分,运行一遍不到一个半小时(如果使用计算所的编译器进行优化,定点和浮点分值还分别可以提高15%和30%以上)。回想2002年龙芯1号刚诞生时,运行一遍SPEC CPU2000需要近三天时间,龙芯2C由于SEPC CPU2000分值没有达到863课题合同要求的300分而没有完成验收,龙芯2E费了九牛二虎之力才勉强达到500分,真是“向来枉费推移力,今日中流自在行”。
3A3000研制成功对自主CPU来说具有里程碑意义。首先,3A3000的通用处理性能已经跨过了国际通用处理器性能的第一个门槛,其单核SPEC CPU2006性能已经不低于ARM用于服务器的高端处理器、Intel的低端系列(凌动系列)处理器以及威盛处理器(这些处理器在1-4核环境下2GHz时单核SPEC CPU2006性能一般在8-10分之间,如果核数更多,由于最后一级Cache巨大,性能会有所提高),而且3A3000的访存带宽已经与AMD以及Intel的高端系列(酷睿系列)持平。这样的性能玩复杂的3D游戏可能还有差距,但对于以党政办公为代表的事务处理应用是足够了(如果软件做适当磨合优化,3A2000就够了)。龙芯3A3000跨过了国际通用处理器性能的第一个门槛后,也为下一步跨越第二个门槛(即达到Intel和AMD主流处理器的性能)打下了坚实的基础。其次,3A3000的通用处理性能超过了目前靠引进ARM和威盛技术发展的国内同类(四核)CPU。“十一五”开始的自主信息化应用试点发现第一代自主CPU通用处理性能不够的问题后,国内CPU研制单位均展开了第二代CPU的研发,并衍生出三条不同的技术路线。第一条是以龙芯和申威为代表的“研”的路线,即通过分析第一代产品应用中发现的问题进行自主研发升级。第二条是“攒”的路线,即使用国外的处理器核“攒”SOC,并在此基础上对处理器核进行局部优化。第三条是“O(ODM)”的路线,即中国人掏钱请外国人干,目前主要是把国外/境外已有的现成设计直接拿过来换成中国的品牌。由于自主研发路线在“十一五”期间走了弯路,很多人对自主研发路线产生了疑虑,觉得此路不通,因此“核高基”在“十二五”期间主要支持以ARM的处理器核“攒”SOC的路线和“O”威盛的路线为主。一是钱多,二是引进别人的产品省时间,加上龙芯3A2000与境内工艺磨合,在产品化方面花了较多时间,从2014年年底到2016年年初大约一年半的时间,采用引进技术的CPU大肆攻击自主CPU性能不行,要求在已有的自主信息化试点中换掉龙芯(而且确实换掉了一些),给龙芯造成很大压力。
3A3000的通用处理性能超过引进的ARM和威盛技术的CPU,加上前些日子使用申威处理器的“太湖之光”高性能机取得世界第一的好成绩,充分说明不论是通用CPU还是高性能机专用CPU,自主研发的道路都是走得通的,不仅安全性好,性能也高。尤其是通过自主研发形成持续改进能力后,未来的后劲更足。可以说,在与引进CPU的技术路线的斗争中,龙芯3A3000是抗日战争的石牌保卫战,是解放战争的济南战役,拉开了自主CPU战略反攻的序幕。尤其值得指出的是,龙芯3A3000的研制没有得到任何国家项目的补助,是完全由企业自己掏钱研制的自主通用CPU,也具有里程碑意义。
根据Tick-Tock策略,我们制定了龙芯3号系列下一步研制计划。四核龙芯3A4000为Tock,继续使用目前的28nm工艺,争取主频达到2GHz以上,SPEC CPU2006单核分值达到20分以上。3A4000的主要结构优化包括:增加256位的向量指令,增加片内安全机制,以及进一步通过微结构优化提高流水线效率,争取每GHz的单核SPEC CPU2006分值达到10分(目前3A3000每GHz的单核SPEC CPU2006分值为7分,ARM的高端处理器为5-6分,X86主流处理器为10-15分)。目前3A4000的研制工作已经展开。在3A4000之后将研制Tick阶段的新一代处理器,初步考虑使用16nm或14nm的工艺以及3A4000的处理器核研制16核的龙芯3C。经过3A4000的又一轮优化,龙芯的处理器核微结构已经基本到位,是时候把2013年5月暂停的16核龙芯3C重新提上日程了。
回复 举报

12#
suoniao 发表于 昨天 13:43 | 只看该作者
十年以来,我们先后研制了龙芯3A1000、3B1000、3B1500、3A2000/3B2000、3A3000/3B3000五款龙芯3号系列芯片,大的流片版本12个,小的流片版本(只改几层掩膜板)6个,碰到了各种各样的问题,经历了很多坎坷。为什么龙芯CPU的研制经历这么多坎坷呢?除了龙芯的质量流程需要持续改进以外(最近结合3A2000和3A3000的全定制问题正在举一反三,并完善全定制流程),究其根本原因,是因为我们坚持芯片中的核心模块自己研制。前面提到的龙芯3号研制过程中碰到的问题,都是包括CPU、HT控制器、内存控制器、全定制寄存器堆、全定制锁相环等核心模块内部的问题,并不是把这些模块“攒”在一起产生的问题。这些问题,如果购买商业IP(如ARM的CPU,Imagination的GPU等)来“攒”芯片一般不会碰到。自从2001年开始研制CPU以来,我直接或间接负责了近百次流片,流片后碰到的问题除了极个别外,都是核心模块内部的问题。
长期坚持芯片中的核心IP自己掌握。这些核心IP包括CPU核、内存控制器、DDR2/3/4的PHY、互连网络、HT控制器、HT PHY等,最近还展开了GPU的研发,只有少量的外围IP使用商用IP。不是吃饱了饭没事干,而是我们使用别人的IP吃过亏。2003年我们刚开始研制龙芯2号时委托一个很有名的EDA和设计服务公司定制一个3写6读寄存器堆,在交付流片后发现其中的电源地严重缺失,跟他们交涉时他们说这个不会有问题,导致龙芯2号系列的第一款芯片龙芯2A流片失败,后来我们自己定制了该寄存器堆才使龙芯2B流片成功。龙芯3A1000刚开始研制时曾经使用过商业DDR2/3 PHY,我们在检查中发现了一些问题,但厂家觉得没问题不愿意修改,后来3A1000流片时同时流了使用商用DDR2/3 PHY和自主研制DDR2/3 PHY的两个版本,并在使用自主DDR2/3 PHY的版本流片成功后确定使用自主DDR2/3 PHY的版本进行量产。龙芯3A1000和3B1000曾经使用过商业的内存控制器,但商业的内存控制器满足不了高性能CPU的带宽要求(使用商业内存控制器的SOC在双通道下不可能做出龙芯3A3000 的13GB/s实测带宽来),因此从3B1500开始自主设计内存控制器。龙芯2H集成了商用的GPU核,该GPU核有 Android操作系统的驱动程序,但我们需要Linux的Xserver驱动,厂家自己开发不了,我们希望厂家把内部配置寄存器如何使用的手册给我们,我们自己开发,可是厂家说这是商业机密,不愿意给,至今龙芯2H只有在Android上有3D驱动,Linux的Xserver驱动只有2D的。
一是吃过亏,二是觉得洋鬼子干得还不如我们,所以就自己干。在国际上,虽然Nvidia巴心巴肝地帮Intel做配套GPU,Intel还是坚持自己做GPU;虽然Imagination巴心巴肝地帮ARM做配套GPU,ARM也坚持自己做GPU;虽然开源的火狐浏览器很不错,谷歌还是坚持自己做Chrome。苹果和高通公司都是在ARM的架构授权下自主设计处理器核,其性能远高于ARM的处理器核。他山之石、可以攻玉。只有技术上不受制于人,才有产业上的主动权。
做任何事情,依靠别人总是容易一些,完全靠自己则困难得多。但依靠得多了,吃过亏后才明白还得靠自己。毛主席在青年时期也没有想过要革命,想着改良主义可以救中国,后来才觉得马克思主义是“山穷水尽诸路皆走不通了”的选择;建党后在陈独秀领导下在湖南搞工人运动,光大的罢工就举行了十多次,结果是罢工受镇压,工人领袖被杀;国共合作期间依靠国民党的武装干革命,结果蒋介石发动“四一二”政变杀共产党人;好不容易上井冈山建立了自己的军队,找到了武装夺取政权、农村包围城市的道路,却被那些在上海租界呆不住跑到井冈山避难的书生们轻松地夺了权,不得不进行两万五千里长征;经历千难万险与四方面军会师了,还差点被贪心不足的张国焘武力扣押。吃了这么多亏后,毛主席在以后的革命和建设中就牢牢掌握了主动权,包括国共第二次合作时坚持独立自主的山地游击战,反对共产国际的“一切通过统一战线”的错误主张;重庆谈判坚持保留边区和军队;建国后先是抗美援朝,后是中苏论战。等等。
回复 举报

13#
suoniao 发表于 昨天 13:44 | 只看该作者
在中国的近代史上,我们有三次向外国老师学习的经验,每次都是受老师欺负吃了亏后走上自力更生的道路。第一次是洋务运动,晚清时期中国海关关长都是英国人担任的,是中国历史上最开放的时期,却被西方列强欺负得水深火热,毛主席领导共产党推翻了三座大山,解放了中国人民。第二次是建国后向苏联学,一边倒,结果苏联在中国的土地上又想建联合舰队,又想建长波电台,毛主席拒绝后苏联又撤专家又逼债,毛主席还是领导中国人民自己搞了“两弹一星”,建立了自主可控的工业体系。第三次是改革开放,我们学习西方的管理理念和科学技术,刚开始觉得挺好的,现在有点觉得吃亏了(像我这样气性大的觉得忍无可忍了,很多人觉得还可以再忍忍)。2011年我国IT产业百强企业的利润总和是苹果公司的40%(我刚开始觉得华为是通信企业,可能不算在IT百强里面,后来查到华为也算在这里面时很有挫折感)。总是听专家说,我国跟美国的经济互相依赖,美国也不敢把我们怎么样,可是当美国制裁中兴时,我们不得不认怂,中兴公司定期向美国商务部报告工作,以获得延期制裁。美国可以通过不卖元器件在三个月之内把国人引以为豪的华为、联想、中兴等企业搞死,十大军工集团有大半开不了张,我们有哪种产品不卖给美国企业,会把美国的Intel、IBM、谷歌、微软、苹果搞死呢,我们顶多能把沃尔玛搞得比较难受。现在想想,毛主席周总理带着全国人民勒紧裤腰带炼钢铁、打油井、发展两弹一星,建立起自主可控的工业体系真是无比英明。
正如改革开放进入深水区,容易改的都改完了,剩下都是难改的;创新也进入深水区,容易创新的都创完了,剩下难创新的,需要十年磨一剑的积累。我们的IT产业先学会了用国外的芯片在主板上“攒”系统,后来又学会了用国外的IP在硅上“攒”系统。掌握这些简单技术后,下面该深入到CPU、GPU这些复杂的核心模块中去了。这些复杂的创新不是领导重视、钱多、人多就能一下子干出来的,还需要时间来磨,在探索和试错过程中不断演进。领导重视、人多、钱多可以加速探索和试错的过程,但不能消除这个过程。中国航天建空间站,先来个天宫一号试试看,再来个天空二号(还分两期)接着试,最后再发射正式空间站,也是这个演进的道理,不是缺钱,也不是领导不重视。CPU是超复杂系统,超复杂系统只能走进化论的道路,在产业化实践中通过长期演进发展起来。即使在这个过程中,得到别人的源代码,也只能加速自主研发的进度,取代不了自主研发的工作。更何况复杂系统是很难消化吸收的,即使拿到国外CPU的源代码,每一行都看得明白,但把几百万行代码拼在一起就不知道是干什么的,就像我们可以打开一头猪的大脑看得清清楚楚,但不知道猪在想什么。很多人现在还寄希望于引进国外技术发展我国的CPU,那是因为吃洋鬼子的亏没吃够。须知天上是不会掉馅饼的,要发展以自主CPU和操作系统为代表的基础软硬件,我们必须克服急躁情绪,克服崇洋情绪,发扬愚公移山精神,坚持实事求是作风,在自主创新实践中不断发现问题,在解决问题过程中不断提高能力,才能保障国家安全和支撑产业发展。
龙芯今年15岁了。中国共产党在15岁的时候完成了举世瞩目的万里长征,建立了陕北根据地,取得了生存的基础,但共产党长征的目的决不仅仅是建立一块根据地活下来,而是以此为基础解放全中国。龙芯在15岁的时候完成了3A3000的研发,跨越了国际上通用CPU的第一个性能门槛,性能超过了引进设计的CPU,龙芯公司实现盈利,取得了生存的基础,但龙芯的目标绝不是为了生存和挣钱,而是为了建立自主可控的信息产业体系。目前我国的信息产业主要建立在以Wintel体系(Intel的CPU和微软的Windows操作系统)和AA体系(ARM的CPU和谷歌的Android操作系统)为代表的国外基础软硬件平台上。要改变我国信息产业和信息安全受制于人的局面,不能只着眼于单项技术的突破和产品市场占有率的提高,必须建立起自主可控的信息技术与产业生态体系,形成与Wintel体系和AA体系“三足鼎立”的局面,才能掌握产业发展主导权,消除安全隐患。如果我们没有建立起自主可控的IT产业体系,继续在已有的Wintel体系和AA体系中当“马仔”,是难以实现中华民族的伟大复兴的“中国梦”的。反之,只要我们坚持自主创新,打通技术链,完全可以在局部指标不如国外产品的情况下,建设出优于国外产品的应用系统。须知判断技术是否先进的标准,不是看其跟美国人跟得紧不紧,而是看其跟应用结合得紧不紧。
回复 举报

14#
suoniao 发表于 昨天 13:44 | 只看该作者
古人说“事非经过不知难”。但只要认真去做,也有“事非经过不知易”的道理。龙芯3号系列CPU通用处理性能在从2013年起的不到四年时间提高到了原来的五倍以上,充分说明了这个道理。2001年我们开始研制龙芯CPU的时候,很少人相信我们能够做出来,在整个“十五”期间,网络上“龙芯打假”的言论层出不穷,但我们坚持做出来了,方法是在别人都不信的情况下,做给他看。2006年我们开始推广龙芯CPU应用的时候,也很少有人相信龙芯能用起来,不知受了多少奚落和冷嘲热讽,甚至有人说,如果龙芯能够卖得出去,他就从此倒立着走,但龙芯公司现在能够通过龙芯CPU的销售养活自己了,方法还是在别人都不信的情况下,做给他看。今天我们说要建立自主可控的信息产业体系,还是多数人不信,无非是认为做生态太难,自己肯定做不好,不如跟着别的老大当个马仔,所以总说与X86和ARM兼容生态好,总之是一种畏难情绪。对付信心不足,我们还是老套路,做给他看。世界上做CPU的企业中,凡是不做生态(DEC、IBM、HP、SUN、SGI)或者跟生态(AMD、威盛)的CPU企业都活不好。八十年前几万衣不蔽体的红军刚到陕北时有谁相信这帮泥腿子能解放全中国?改革开放初期以能买到日本彩电为荣的中国人有几个相信今天中国的制造业产值已超过美国加日本的总和?在建立自主信息产业体系方面,我们要在自己内部肃清一切软弱无能的思想,就像毛主席说的:“我们的同志,在困难的时候,要看到成绩,要看到光明,要提高我们的勇气”。
八十年前,当衣不蔽体的几万红军完成两万五千里长征时,他们是中国最生气勃勃,具有百折不挠的献身精神,真正的民族精英。他们是怀着对革命的坚定信念,在崇高理想的指导下走完长征的。同样,自从2001年开始龙芯处理器研发以来,龙芯人也是怀着坚持自主创新、保障国家安全、支撑产业发展的坚定信念走了一条别人没有走过、多数人不信能走通、非常艰难的“长征”。十五年来,很多龙芯的技术骨干都把人生最美好的青春献给了龙芯的“长征”。加班加点仍是龙芯研发人员的常态,而龙芯的薪酬长期低于同行业水平,有些人三十多岁就出现了各种健康问题。不少龙芯的技术骨干都接到过猎头公司百万年薪的电话,但龙芯团队的核心骨干非常稳定。为了龙芯的产业化,很多技术骨干都毅然放弃中科院的事业编制,辞职到龙芯公司。人都是有私心的,但我敢保证龙芯人的私心相对少一些;大家离毛主席要求的“一个高尚的人,一个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于人民的人”都有差距,但我敢自豪地说龙芯人的差距相对小一些。后之视今,尤今之视昔。我相信,我们的后人会像我们今天崇敬长征的英雄、崇敬抗美援朝的英雄、崇敬两弹一星的英雄一样,来崇敬今天在建立我国自主可控的信息产业体系道路上历经艰难险阻完成新长征的我们。
龙芯十五年的坚持来自中国科学院的光荣传承。中科院计算所是我国计算机事业的摇篮,经历了“完全自主但没有市场化”的第一个三十年,为两弹一星做计算机;也经历了“完全市场化但丧失自主性”的第二个三十年,创办了联想和曙光,为了与市场接轨,研发工作忍痛从CPU和操作系统中退出。我们是中国第三代计算机人,任务是在市场化条件下实现自主性,保障国家安全和支撑产业发展。我的导师夏培肃院士是我国计算机事业的重要奠基人,她多次对我说过,这辈子最大的心愿就是把中国的计算机事业搞好,她们这代人没搞好,希望我们搞得比她们好。李国杰院士曾经在一次自主可控行业的大会上动情地说:我的导师夏老师(李国杰院士也是夏培肃院士的学生)已经九十岁了,干不动了;我也七十岁了,快干不动了;如果到胡伟武这一代我国的CPU和操作系统还没有发展起来,中国的IT产业就没戏了。龙芯团队有一个老研究员黄令仪老师,今年八十岁了还天天在屏幕前拖着鼠标查版图。有一次我请黄老师参加某用于安全领域的芯片研发工作时,黄老师脱口而出:胡老师,我这辈子最大的心愿就是匍匐在地,擦干祖国身上的耻辱;我是亲眼见过我的同胞被日本鬼子的飞机炸死的。前辈的精神感染了我们,前辈的荣光照亮了我们前进的道路,让我们咬着牙关,勇往直前!
回复 举报

15#
suoniao 发表于 昨天 13:45 | 只看该作者
龙芯十五岁了。2001年8月19日清晨当屏幕上第一次出现“godson login”时的那声欢呼已经远去,在雨中登黄山的台阶上高唱《真心英雄》时的那种豪情已经消退,夜深人静时在计算所北楼长长的走廊尽头泡方便面记忆已经模糊,但龙芯人“为人民做龙芯”的初心未改,“十年磨一剑”的执着依旧,“人生能有几回搏”的奋斗长在。我们已经走在“以安全可控为主题、以产业发展为主线、以生态建设为目标”的新长征道路上。迷失方向时,坚持从国家和人民的角度(而不是自己的角度)做出选择就是我们心中的“北斗星”。长征的道路蜿蜒曲折,不仅有芳草鲜美、落英缤纷,更有沼泽沙漠、雪山草地、豺狼虎豹,因此前进的路上就要苦我们的心智、痛我们的体肤。龙芯走自主研发道路,比直接引进处理器芯片或者引进处理器核的道路见效慢一些,在路上会被别人暂时超过心里着急;走市场化道路,要结合客户需求把短板补齐,比起在计算所做研究时只关注几个有显示度的指标来,在显示度方面差一些;要建立自主软硬件体系,比只在单一领域做单一产品难度大很多。这就要求我们在前进的道路上不仅要有冲天的豪情,艰苦奋斗、奋勇争先,而且要有钢铁般的意志,做到专心致志、持之以恒、精益求精,直至取得最后的胜利。我们是“苦命”而光荣的龙芯人,虽千万人吾往矣。
我们正在前进。我们正在做我们的前人从来没有做过的极其光荣伟大的事业。我们的目的一定要达到。我们的目的一定能够达到。
作者: zzz19760225     时间: 2017-6-14 01:35
1
作者: zzz19760225     时间: 2017-6-14 01:35
1
作者: zzz19760225     时间: 2017-6-14 01:35
1
作者: zzz19760225     时间: 2017-6-14 01:35
1
作者: zzz19760225     时间: 2017-6-14 01:36
1
作者: zzz19760225     时间: 2017-6-14 01:36
1
作者: zzz19760225     时间: 2017-6-14 01:36
1
作者: zzz19760225     时间: 2017-6-14 01:36
1
作者: zzz19760225     时间: 2017-6-14 01:36
1
作者: zzz19760225     时间: 2017-6-14 01:36
MIPS 指令集(共31条)
标签: 扩展
2011-08-30 10:06 38334人阅读 评论(1) 收藏 举报
分类: MIPS(3)  

MIPS 指令集(共31条)
MIPS 指令集(共31条)

助记符

指令格式

示例

示例含义

操作及其解释

Bit #

31..26

25..21

20..16

15..11

10..6

5..0







R-type

op

rs

rt

rd

shamt

func







add

000000

rs

rt

rd

00000

100000

add $1,$2,$3

$1=$2+$3

rd <- rs + rt   ;其中rs=$2,rt=$3, rd=$1

addu

000000

rs

rt

rd

00000

100001

addu $1,$2,$3

$1=$2+$3

rd <- rs + rt   ;其中rs=$2,rt=$3, rd=$1,无符号数

sub

000000

rs

rt

rd

00000

100010

sub $1,$2,$3

$1=$2-$3

rd <- rs - rt   ;其中rs=$2,rt=$3, rd=$1

subu

000000

rs

rt

rd

00000

100011

subu $1,$2,$3

$1=$2-$3

rd <- rs - rt   ;其中rs=$2,rt=$3, rd=$1,无符号数

and

000000

rs

rt

rd

00000

100100

and $1,$2,$3

$1=$2 & $3

rd <- rs & rt   ;其中rs=$2,rt=$3, rd=$1

or

000000

rs

rt

rd

00000

100101

or $1,$2,$3

$1=$2 | $3

rd <- rs | rt   ;其中rs=$2,rt=$3, rd=$1

xor

000000

rs

rt

rd

00000

100110

xor $1,$2,$3

$1=$2 ^ $3

rd <- rs xor rt   ;其中rs=$2,rt=$3, rd=$1(异或)

nor

000000

rs

rt

rd

00000

100111

nor $1,$2,$3

$1=~($2 | $3)

rd <- not(rs | rt)   ;其中rs=$2,rt=$3, rd=$1(或非)

slt

000000

rs

rt

rd

00000

101010

slt $1,$2,$3

if($2<$3)
  $1=1 else
   $1=0

if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1

sltu

000000

rs

rt

rd

00000

101011

sltu $1,$2,$3

if($2<$3)
  $1=1 else
   $1=0

if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1
  (无符号数)

sll

000000

00000

rt

rd

shamt

000000

sll $1,$2,10

$1=$2<<10

rd <- rt << shamt  ;shamt存放移位的位数,
  也就是指令中的立即数,其中rt=$2, rd=$1

srl

000000

00000

rt

rd

shamt

000010

srl $1,$2,10

$1=$2>>10

rd <- rt >> shamt ;(logical) ,其中rt=$2, rd=$1

sra

000000

00000

rt

rd

shamt

000011

sra $1,$2,10

$1=$2>>10

rd <- rt >> shamt  ;(arithmetic) 注意符号位保留
其中rt=$2, rd=$1

sllv

000000

rs

rt

rd

00000

000100

sllv $1,$2,$3

$1=$2<<$3

rd <- rt << rs  ;其中rs=$3,rt=$2, rd=$1

srlv

000000

rs

rt

rd

00000

000110

srlv $1,$2,$3

$1=$2>>$3

rd <- rt >> rs  ;(logical)其中rs=$3,rt=$2, rd=$1

srav

000000

rs

rt

rd

00000

000111

srav $1,$2,$3

$1=$2>>$3

rd <- rt >> rs  ;(arithmetic) 注意符号位保留
其中rs=$3,rt=$2, rd=$1

jr

000000

rs

00000

00000

00000

001000

jr $31

goto $31

PC <- rs

I-type

op

rs

rt

immediate







addi

001000

rs

rt

immediate

addi $1,$2,100

$1=$2+100

rt <- rs + (sign-extend)immediate ;其中rt=$1,rs=$2

addiu

001001

rs

rt

immediate

addiu $1,$2,100

$1=$2+100

rt <- rs + (zero-extend)immediate ;其中rt=$1,rs=$2

andi

001100

rs

rt

immediate

andi $1,$2,10

$1=$2 & 10

rt <- rs & (zero-extend)immediate ;其中rt=$1,rs=$2

ori

001101

rs

rt

immediate

andi $1,$2,10

$1=$2 | 10

rt <- rs | (zero-extend)immediate ;其中rt=$1,rs=$2

xori

001110

rs

rt

immediate

andi $1,$2,10

$1=$2 ^ 10

rt <- rs xor (zero-extend)immediate ;其中rt=$1,rs=$2

lui

001111

00000

rt

immediate

lui $1,100

$1=100*65536

rt <- immediate*65536 ;将16位立即数放到目标寄存器高16
         位,目标寄存器的低16位填0

lw

100011

rs

rt

immediate

lw $1,10($2)

$1=memory[$2
+10]

rt <- memory[rs + (sign-extend)immediate] ;rt=$1,rs=$2

sw

101011

rs

rt

immediate

sw $1,10($2)

memory[$2+10]
=$1

memory[rs + (sign-extend)immediate] <- rt ;rt=$1,rs=$2

beq

000100

rs

rt

immediate

beq $1,$2,10

if($1==$2)  
goto PC+4+40

if (rs == rt) PC <- PC+4 + (sign-extend)immediate<<2

bne

000101

rs

rt

immediate

bne $1,$2,10

if($1!=$2)
goto PC+4+40

if (rs != rt) PC <- PC+4 + (sign-extend)immediate<<2

slti

001010

rs

rt

immediate

slti $1,$2,10

if($2<10)
  $1=1 else
   $1=0

if (rs <(sign-extend)immediate) rt=1 else rt=0 ;
   其中rs=$2,rt=$1

sltiu

001011

rs

rt

immediate

sltiu $1,$2,10

if($2<10)
  $1=1 else
   $1=0

if (rs <(zero-extend)immediate) rt=1 else rt=0 ;
  其中rs=$2,rt=$1

J-type

op

address







j

000010

address

j 10000

goto 10000

PC <- (PC+4)[31..28],address,0,0   ;address=10000/4

jal

000011

address

jal 10000

$31<-PC+4;
goto 10000

$31<-PC+4;PC <- (PC+4)[31..28],address,0,0
   ;address=10000/4

注意:因为MIPS16只有16个16位的寄存器,所以JAL指令中$31改成$15, 所有立即数均无需扩展,LUI指令直接就是将立即数付给RT寄存器。

[ Last edited by zzz19760225 on 2017-6-14 at 01:43 ]
作者: zzz19760225     时间: 2017-6-14 01:37    标题: 简单说我对龙芯的看法(转载勿垮省)

龙芯算是中国现在一项重要科研项目了,钱是几个亿几个亿往里砸,印象中有六七年过去了,还是蒙着一层神秘的面纱。性能据说是媲美奔腾4了,但是没说是哪款P4,频率、架构、步进,是5系6系双核的8系,还是刚出来的时候那种连P3都不如的P4?不知道,后来才补充了一个P4 2.0,但是这个结论怎么来的,用哪种方法测试的,还是不知道。量产也说了好几年了,像天上的浮云一样,基本从来没兑现过,今年向外界发放了第一批龙芯电脑,但是测试数据必须保密,甚至连《微型计算机》这种权威杂志也不例外,所以《微机》上次给出的龙芯评测特别搞笑,说龙芯可以聊QQ、玩连连看、看电影,至于浮点计算、整数计算什么的,具体的数值都没有,你好歹算个圆周率小数点后一百万位,看看得几小时吧?这可能是《微机》有史以来最业余最没实际内容的一次评测,连这些事都干不了,还叫什么电脑,改名叫小霸王学习机算了。


我是不相信龙芯有什么料的。第一是主设计师胡伟武确确实实是举世无双的大SB,他放出的每篇关于龙芯的论文都必然提到毛泽东,还占不少篇幅。每当他遇到技术难题时,就组织龙芯小组学习毛泽东思想,结果就攻克了一个个难题。我觉得不说SB这么严重,起码这个人很不实在。其二是龙芯牛B吹得太多了,说是媲美P4,这句话太空泛了,一点实际意义都没有,骗骗外行还可以。说马上就能年产多少多少CPU,这个我已经当作每年的一个保留节目了,就像EA的骗钱大作《极品飞车》一样。李国杰还放话说要造64核,要彻底颠覆世界的计算机技术,现在又不吭声了,我很想知道已现有的技术造个64核那DIE SIZE得有多大,封装出的CPU是不是比他的脸还大?


是的,龙芯详细的资料我都不知道,它保密了吗。但我就是敢说它没料,我这个人很看重品格的,对于那些一向喜欢忽悠人的,他说的每句话我都要严格的证明,否则不予参考;那些总是说实话只是偶尔出错的人,他就算一个论据都没有我也可以相信,就跟银行的信用制度差不多。比如这两天外媒都在报导说嫦娥失踪了,中国官方马上跳出来说,这是完全正常的,不用担心。那我就不知道该不该信了,因为你老是忽悠人,我SPZ左边那栏留下的全是你光辉灿烂的事迹,留下的都是你的微言大义舌璀莲花,你说不用担心,可最近一段时间又对嫦娥三缄其口,我哪能不担心啊?


龙芯那帮设计者在我看来就是一帮没节操的人,年年说量产年年没影子,这种小母牛过生日牛B大了的人,要能搞出成果就真活见鬼了,龙芯若是有料,还保密呢,早就四处乱吹了,就算数字真的很烂吧,咱也无所谓啊,中国啥都缺,就是不缺SB,你就算只跟奔腾2差不多,SB们也不会当一回事的,他们只要有就行了,就像金二造原子弹,朝鲜人都很开心。至于导弹技术落后,造出来的原子弹只能炸炸中国韩国和他们自己,这个没多少人关心的,对他们来说,只要有原子弹,一切帝国主义就都只是纸老虎了。龙芯现在搞这么神秘吧,第一数字应该确实拿不出手,第二估计也是吃了上顿没下顿,持续发布成果的话,万一哪天研究突然熄火了,就很不好跟那些媒体交代了。其实纵观中国这几年的科研成就,大都没什么料,比如吸粪列车耻辱号,说是自主知识产权,车身上却打着川崎重工的标志。乍一看好象很牛B,中国也有子弹头了,但你要到德国日本那个水平,根本不可能的事情,你就是花钱买人家一口剩饭,人家给你吃,你还能继续忽悠忽悠民众,人家不给你,那你这个所谓的“自主知识产权”就只能停步不前了。军用的银河麒麟操作系统,CSDN上的人分析出来和FreeBSD代码60%相似,函数名99.5%相似,最后官方承认有“借鉴”,但是疑点还很多,程序大牛们似乎还在研究。嫦娥据说是俄罗斯买回来的技术,这个没考证过,不确定。至于汉

芯就是一个笑话了,农民工拿砂纸打磨打磨摩托罗拉芯片造出的“世界一流水平数字处理器”就能撂倒上交大一批专家,但是你现在再看当年那几个当事人,他们现在还混得好好的,而且凡是跟汉芯有关的部分都从履历里抹掉了,中国学术界就那么垃圾,官员腐败,军队腐败,学术也腐败,所以对龙芯不用指望太多。银河麒麟还是军用的呢,美国国防部报告说中国1/3的军队都在从事经济活动,中国“不具备打一场现代化战争的能力”,你看看咱军队这个水准,说真的打台湾我都替他们担心啊。


以上只是以过去的经验猜测一下龙芯的水平而已,发泄一番,没什么实际内容。下面咱们说正题,假设龙芯真如现在所说的,有P4 2.0的水准,那中国有没有必要搞龙芯?

我应该这么问,中国干吗要搞自己的CPU?这时二百五就要跳出来了,他摆出一副“这你都不知道!?”的架势,一脸同情又耐心的告诉你,这是国防的需要,中国没有CPU,万一打起仗来,美国不卖给你CPU,你用一颗少一颗,那可就惨了。我CAO,你干吗要跟美国打?你看看跟美国过不去甚至被痛揍的都是些什么国家,我们明明处在五千年来最大的和谐盛世,这些人们为什么老觉得我们跟伊拉克朝鲜伊朗古巴委内瑞拉一样不堪,这不是诋毁我们改革开放以来取得的伟大成就吗?中国的FQ有受迫妄想者,觉得美国也要打我日本也要打我,整天拿人家当假想敌,这主要是思维还停留在野蛮的中世纪造成的,其实人家还真没拿你当道菜。中国被美国打,那估计得等到世界上只剩我们一个专制国家吧,现在还有众多跳梁小丑替我们挡子弹,短期内不必担心。CPU保护得好,用个七八年不成问题吧,中国美国要是打全面战争,我估计七八天内解放军就该缴械了,还用一颗少一颗呢,说这种话的人太young了,too simple,sometimes naive。


还有一种说法,美国可以在CPU内做点手脚啊,比如说放个无线电发报器,把我们的军事机密全都盗过去。这话你说过学电子的人听,都会告诉你不可能。一个无线发信机,里面总得有调制器和载波振荡器吧,电容或是晶体谐振器之类的元件是必不可少的吧?CPU里面是什么样,我手头还有四块废弃CPU,谁感兴趣的,自备榔头或是电锯,随你折腾,外面的壳子砸开来,里面就是一块小小的晶硅,根本不可能隐藏一个发信机,CPU在那么强的电磁干扰下基本上也是无法工作的。除非——老美的科技水平已经发展到外星文明级了,以我们现有的知识体系根本就无法揣摩。真要那样的话,你多个CPU,还是得被老美蹂躏,也没什么意思。可行的方法是在引脚的定义上做点手脚,设置一个触发器,发送一组电平信号把CPU强制关闭,然后再也无法正常工作,这是有可能的。AM2有940根引脚,酷睿2应该是775根吧,这些引脚一般都身兼数职,有时是内存寻址有时又变成读写控制器了,据说有根引脚还是万恶的锁倍频。这些学过8088的人应该都知道,在CPU上动这点手脚理论上还是可以的。但是控制CPU强制关闭的信号,必须由操作系统发出,这是肯定的。这事缺了MicroSoft还不行,咱们都有银河麒麟了,还怕它个鸟?


当然了,我想象力比较匮乏,这个CPU到底怎么搞才能变成军事武器,我也想不出太多方案,这种光荣而艰巨的任务,除了INTEL的科学家,就唯有中国的FQ们可以胜任了。不过咱们可以看看当今世界上在量产X86通用CPU的,算来算去就是美国和台湾(别小瞧了台湾,世界上现存所有的图形芯片(GPU)制造商,包括ATI和NVIDIA这两个巨无霸,几乎都是台湾人创立的),那瑞士加拿大之类的国家,都没CPU,是不是就不活了?显然不可能。现代的军用电脑,模拟个战场3D环境之类的,图形处理能力总得有吧?那我们GPU也没有啊,龙芯也用不了ATI和NVIDIA最新的显卡,龙芯电脑虽然配了显卡,但居然没有3D处理能力,只能做2D处理,别说Crysis了,CS都玩不了。世界上还是只有两个国家

在量产GPU,美国和台湾。我这么一说,有人开始动歪脑筋了,台湾好象要啥有啥吗,咱抢过来不就行了?恩,恭喜,FQ们和美国开战的心愿,我估计应该马上就能实现了……

就军事方面而言,龙芯还有一个致命弱点:龙芯是在国外造出来的!咱们的龙芯都得靠意法半导体流片,然后再漂洋越海的运回来,你再讲什么军用价值,这不是放P吗?控制INTEL、AMD和控制意法半导体,对老美来说有区别吗?


为什么要找意法半导体,难道我们国内没有能力制造吗?这得普及一点基本知识,下面很多内容都跟这段有关,懂的人就可以直接跳过了。要提高CPU的性能有两种主要的方法,一是通过优化结构算法之类的去提高处理效率,比如说人类算6*6有两种方法,一种是6+6+6+6+6+6,算五步,很SB,你也可以参照乘法九九表,直接就得出36了,还有像76*74,你参照九九表算,还不如用同头尾合十法,马上就得出5624了。另一种提升芯片性能的方法是扩大晶体管规模,集成度越高越好,像R580,饼干大一块GPU上居然有8亿左右的晶体管,很不可思议吧?要扩大晶体管规模,那就得把晶体管做得越小越好,也就是“制程”得不断缩小,缩小制程几乎是百利而无一弊,可以减小CPU尺寸,减小功耗,减小发热量,提升工作频率,还能降低制造成本,唯一的坏处就是得花大钱往里砸去研究怎么减小制程了。现在GPU的制程普遍是80nm,CPU已经达到65nm了,INTEL的ROADMAP上还有45nm,32nm,22nm,在这个过程中肯定会遇到很多困难,半导体业每在微观世界里前进一步,就会遇到各种各样稀奇古怪的物理和化学现象,65nm向45nm跨相对于90nm向65nm跨,又会有许多前所未见的障碍,但那些业界巨头却乐此不疲,因为这才是提高CPU包括一切芯片产品性能的终极方法,你一块CPU就算架构再优秀,面对一块集成规模超你N倍的产品也只能无奈叹息,甚至连架构本身很多时候都是根据晶体管规模一并发展的,说白了是前者在适应后者,不断作出修正。制程方面的技术,INTEL很牛B,AMD落后一节,台湾的台积电、联电也是紧跟INTEL步伐,印象中IBM好象也是有几把刷子的。对国内流片的能力我也不太了解,现在应该还在0.13微米,和INTEL目前的65nm差了四倍,而且好象知识产权也不是我们的,只是国外借中国的地盘造造芯片而已。龙芯卖身给意法半导体,可以直接跳到90nm制程,万一意法半导体不肯造龙芯了,龙芯再回到国内用落后一代的制程技术,那可能整个设计就得打掉重来。当然这还不是最关键的,因为用0.13微米,其实还能凑合,也就是性能倒退回上个时代而已,还有其它原因,咱们慢慢说。


这里插点题外话,中国不光制程上差人家几个档次,机械加工的能力也比不上国外,精度等级差得太远,国内很多车床,还是民国时期德国人的技术。为什么我们没有保时捷法拉利这种超牛B的牌子?原因很多,比如没有好钢好铁啊,缺乏精加工能力也是关键,人家车子几十万几百万的卖,品质放在那里,真的是精益求精,每一刀车下去精确到小数点后多少多少位毫米,尤其是引擎变速箱轮轴这些关键部位,你达不到这个水准,经常出点小毛病就很正常,据说以前中国造战斗机,出了问题都没有零件可以换,同一批造出来的零件却不能都和同一架飞机完美噬合,那你这个飞机就算什么载弹量爬升速度之类的性能跟人家一样,你还是打不过别人,可能人家F15得吃好几十发子弹才失去战斗力,你歼10被弹弓一打就掉下来了,因为你其它没有承受直接攻击的配件在冲击下可能自己就散架了。其次工业设计能力不行,造出来的车子丑得一B,仿人家的造型总是仿个形似神不似,像日韩很多牌子都是工业设计能力出众的。有的人看不起工业设计,觉得不就是拿笔画画吗,一点技术含量都没有,咱们随便努力一把就能灭了SONY三星。照这么说人家设计师真可以下岗了,不就是个壳子吗?工业设计不光是艺术性,还得考虑材质的选用,安全性舒适性高不高,得兼顾美观与成本,还得确保在现有的制造工艺能造得出来,设计者对产品本身也必须有相当

了解,好的工业设计马上就能让产品上个档次,中国现在缺这方面的人才,还不是特别重视,注定了中国造就是低端货的代名词。


对于龙芯还要了解一个事实:龙芯目前是不兼容X86指令集的,而指令集决定了这种CPU所能运行的软件的编程方式,换句话说就是龙芯不可能使用Windows操作系统,还有一切基于Windows的软件。X86的专利几乎都控制在INTEL和AMD手里,想用就得缴纳专利金,可你要做电脑的CPU,那么通用性是基本功。龙芯基于MIPS指令集,国外指出龙芯的指令集和MIPS达到95%相似,而这95%的内容MIPS是不收权利金的,也就是说,龙芯其实也是吃了老外的剩饭,而且是人家连钱都不好意思收的剩饭中的剩饭,还自称是自主知识产权。问题来了,人家老外也不傻,你缺了这5%还就是不行,连linux都用不了,所以龙芯用的linux是专门开发的,上面的软件也都是专门开发的。你说龙芯可以自己设计一个指令集吗?第一不一定有这个实力,第二你自己做指令集,那配套软件也全得自己来,现在有95%的MIPS,虽然正统的linux用不了,但稍加修改也能凑合凑合。要把所有的常用软件都自己编出来,从操作系统到图象处理、文字处理、视频处理、3D处理——哦不好意思,龙芯没有3D处理能力——再到下面的聊天工具、播放器,星际争霸这些游戏——CS还不行,3D的。这些软件全部得从头再来!Windows、MAC OS、linux上的这一切软件,是全世界软件开发者共同的智慧结晶,不是微软一个人的功劳,更不是INTEL一个人的功劳,它是一个完整的体系,全世界共同耕耘几十年的成果,一步一个脚印,更是难以计数的美金砸出来的,你中国一个小小的龙芯开发组,就那么几十个人,就想横插一脚,颠覆世界计算机体系,我很严肃的说,你们这帮人已经不自量力到了令人发指的地步了!

这时候,又有一种二百五要跳出来了。龙芯只要超越INTEL成为全世界最好的桌面处理器,到时候为龙芯开发的软件的人还不是一茬一茬的?实在不行,集合我们中国十六亿人的智慧,创造一个完整的软件体系还不是小菜一碟?到时候大不了西方用西方的,中国用中国的,我们中国人这么爱国,大家都抵制洋货,还怕龙芯发展不起来了?


这个真的是比龙芯的开发组还要令人发指。你中国要玩闭关锁国,尽管玩去,我看你还能和谐几年,就中国这个保护知识产权的力度,连我这么正直的人都没买过正版,谁TM给你开发软件啊,搞到最后多半就是小霸王学习机。至于什么超越INTEL,这绝对是毛时代的遗风。老毛这个人整天讲唯物主义,其实他是最唯心主义的,老毛坚信人的精神可以转化为物质成就,只要我们中国人团结一心勤奋努力,就可以赶英超美,可以亩产万斤,可以大炼钢铁,可以一脚跨入社会主义,可你超了这么多年,除了环境污染确实比几百年前的英国还夸张了,还超了什么?中国这么弱是因为我们还不够勤奋吗?谁敢说这种话,就应该被全中国挑灯夜战的学生一人一口吐沫淹死!当然我就算了,我这个人就是中国学生中的败类,这个大家都知道,我就不说什么了。


而龙芯投身意法半导体,不仅是制程上的需要。意法是拥有最后那5%MIPS指令集的使用权的,如果龙芯变成意法半导体门下一款产品,就可以名正言顺的使用全部的MIPS指令集了,软件上的问题迎刃而解,我估计,下一代龙芯说不定能使用任何版本的linux了。但是,这时候我们看到了非常搞笑的一幕,龙芯上面竟然打上了意法半导体的标志,你们谁见过NVIDIA的芯片打上台积电标志的?龙芯已经不再是我们中国人的东西了,龙芯的开发组已经基本相当于意法半导体的雇工了,而龙芯是什么,龙芯是靠几亿中国人的税款砸出来的,是传说中的自主知识产权,是国人的骄傲,FQ们的精神寄托,现在你没创造一毛钱的利润,没给国内增加一个工作岗位,也没逼迫酷睿和速龙的价格降低哪怕0.1个百分点,

你拿中国人的钱砸砸砸,砸出来的研究成果居然变成欧洲人的了!


好在FQ们还没意识到这一点,或者说他们根本不愿意承认这一点,他们很快乐,我看着他们那么快乐,我也很快乐。


这时候你再看龙芯,军事价值基本为0,讲什么国防根本狗屁不通,起码就跟银河麒麟不兼容,到时候两个863项目打起来,嘿嘿……民用价值也不大,我们来研究一下龙芯这么搞下去,到底能有什么优势?我们需要另僻蹊径,去寻找性能和功能以外的卖点,这两点咱是不指望了,连3D处理都不行,放个720P视频还卡得要死,软件少得可怜,短期内赶英超美是不行了。价格吧,本来自己造还有点指望,而且龙芯以前一直是以低价为宣传卖点的,但现在卖给意法半导体,已经没有任何成本优势,龙芯盒子公开售价2000元(假如你能买到的话),不包括显示器光驱键盘鼠标,只有一块破处理器,一块ATI的显卡,好象是16M的Raedon 7000吧,可能连GeForce4 MX440都不如,也不知道他们是不是碰上淘宝星人了,居然挖到这么古老的东西,还不支持3D。再加诡异的芯片组,没听说过的北桥+VIA淘汰多年的南桥,256M DDR333内存还只有一个DIMM,40G2.5寸5400转硬盘,说白了就是移动硬盘,这东西卖2000,这叫什么,这叫抢钱,谁买谁是二,除了那块硬盘还值点钱,显卡可以留着作为纪念,剩下的东西就应该打包像垃圾一样处理掉,2000元随便怎么配,也比这么个玩意强。


有人又说了,龙芯功耗低啊,官方说才4W呢!我还说VIA的C7M才1W呢。这时龙粉又说了,龙芯的性能好象比C7M强!我就觉得这么比的人特别SB,你谈性能的时候他不跟INTEL比跟VIA比,你谈功耗他又不跟VIA比跟INTEL比,就像索饭抱着PS3那个棺材盒子,跟WII比时就说我机能比你强,跟XB360比时就说我在日本地区销量比你高,其实眼明的人都知道PS3注定就是夹在WII和XB360之间的垃圾罢了。C7M刚出来的时候我感觉是没太大意义的,但后来微软突然搞了个omega折纸计划,推行超便携电脑(比笔记本略小,比PDA还是大很多),这种电脑本来就是讲节电不讲性能,于是C7M突然就火起来了。为什么龙芯没火呢?你不支持Windows啊,谁TM用你那个破烂操作系统和少得可怜的软件?何况人家厂家看中的就是C7M比你少的那3W功耗,你龙芯性能有C7M四倍强吗?其实这两个CPU之间没有系统的比过,谁强谁弱,还真说不清,只是龙粉自己吹嘘罢了。


龙芯就是处于这么一个尴尬的地位,高不成低不就,要性能没性能要功耗没功耗,价格不行功能也不行,两个字概括就是废品。FQ又不高兴了,这是我们中国人自己开发的啊,为什么你就不能爱护一点,宽容一点呢,龙芯借鉴了这么多先进技术,发展的可比INTEL和AMD当年快多了,赶上去也不是什么怪事啊。这就是典型的唯心主义了,他嘴皮子一翻,就小母牛掉就酒缸里最牛B了,一切皆有可能,impossible is nothing。事实是这样吗?你现在同时把45nm技术给中国和INTEL,你看看是谁先跨入32nm时代,人家多年的半导体经验放在那里,技术这种东西是很讲积累的,不是别人开发出来的成果,你花钱买过来就行了。即使是芯片架构,中国还是不太可能比上那些业界大佬的。ATI为了扩大内部数据吞吐量在R520里引入环型内存总线,为了适应渲染的需要又在R580里将pixel shader和vertex shader比例改为3:1,于是7900已经年老色衰,X1900却是老而弥坚;DirectX8时代开始显卡单独划分出了pixel shader,增强了像素渲染能力,被称为划时代的设计,到DirectX10又和其它shader合并成了unified shader,还是被称为划时代的设计。还有酷睿的SmartCache,冷热代码配比,AMD的HyperTransport总线,内置内存控制器……这种例子太多了。这一项项技术成就都带有它们的时代背景,为了适应应用需求而不断改进,在架构的不断进化甚至循环中又衍生出新的应用方式,这些都是这么多年来一个脚步一个脚步走出来的,历经市场大浪淘沙,3DFX、艾尔莎、昆腾这样的传奇都倒下了,活下来的公司都是精英中的精英,不是龙芯这样缺乏竞争对手、缺乏应用环境、缺乏开发经验的产品能比的,你可以一直追,但是永远也追不上,你眼看着距离越来越近了,可那最后的一小步,就是跨越不了。


我把中国的科研能力说得如此不堪,什么都不如国外,而且什么都追不上国外,那是不是中国就不搞科技了?肯定不行啊,你看国外卖过来的,都是高附加值产品,CPU不就是用紫外线在随处可见的硅上面刻线,顶上加个盖子后面插几百根针,物质成本能值几个钱,还有软件不就是几块钱一张的光盘上烧点数据,怎么就卖几万元一套了呢?而我们卖过去的都是什么鞋子衣服,表面上看我们出口额高,好象占便宜了,其实人家只用脑力劳动就把我们的资源和廉价劳动力都给买走了,可中国人却特别happy,以此为荣,乐在其中。没有技术是肯定不行的,像韩国,你光从地理条件上看,这个国家的资质简直是差到极点了,连铁矿都奇缺,除了地比较好种以外一无所有,照理来说就该是个农业国,事实上人家朝鲜战争以前比朝鲜弱多了,首都三天时间就丢了。现在能腾飞,靠的就是技术,还有日本、新加坡、台湾,都有自己那点绝活,一个国家没有技术出口,在世界上肯定混得不会太好。

但中国人的脑袋就是比较死,老是想着追别人,追别人,追上了再把别人甩下去,就是不会另僻蹊径,当一回领头羊,眼界只能放在别人已经想出来的东西上,而想象不出这个世界上还缺少的东西。微软和SONY还在那里拼机能的时候,任天堂却发明了WII,革新了游戏的操作方式;全世界还在用鼠标键盘的时候,微软又发明了SURFACE,革新了电脑的操作方式;西数和希捷还在垂直存储上苦苦打拼,追求一点点磁性存储的性能提升时,IBM又发明了全息存储,一下把存储带进了光学时代,容量和速度呈几何级上升;IBM在搞全息存储时,可能谁又在搞全息影象了,今后出现星球大战里那种通讯模式也不奇怪。韩国有NAND闪存和SPVA面板,日本有CCD和全世界最发达的TV游戏业,中国呢?人家搞DVD,我们来个EVD,人家有奔腾,我们搞龙芯,人家登月,我们嫦娥,人家有什么我们就要搞什么,可无论做什么东西都不伦不类的,永远追着人家的脚步跑。


就说半导体吧,刚才讲到制程,它有可能这么一路永远按照摩尔定律发展下去吗?不可能,你晶体管再小,总不能比电子还小吧,等到了制程再也无法减小的时候,也许半导体的发展就到头了,那是不是电脑就不会发展了呢?也许会有性能更好的材质取代硅,但是IT界还有很多别的方案。现在芯片内是靠电信号传递数据,也许将来就会变成依靠光信号传递数据的量子计算机,也有可能变成以DNA为载体的生物计算机,晶体管只有低平高平断阻三种状态,DNA却有N种状态(由于本人生物极烂,搞不清具体是几种,但毫无疑问哪怕只多出一态,计算和存储能力都会以几何级数上升……)。还有很多未来计算机的方案,每一种在理论上都能超越现在的计算机几千甚至上亿倍。而这些技术在国外都是在不断进行研究的,兴许哪天划时代的产品就诞生了,到时候就算我们的龙芯真的赶英超美,在一个全新的领域,又有新的差距产生了。


中国人缺少的便是这种创新能力,这首先有教育的问题,教不出那种学生。其次就算偶尔培养出来几个,这帮聪明人也早去美国投奔自由民主了,要么就是在国内郁郁不得志,为什么?管科研资金的那帮人都不欣赏你的创新你的塌实你的低调,你不会吹牛就骗不到钱。中国科技成就还是有一些的,要论芯片产业吧,龙芯可能连国产前十都排不进,人家在嵌入

式领域低调耕耘,国家的钱拿得不如龙芯多,影响力不如龙芯大,但自己养活自己,还能养活好多研究生。相同的,你不会投机钻营就当不了官,甚至不道德沦丧一点连活都活不下去。唉不说了,满眼心酸泪啊。我准备设计个GPU,填补一下国内相关领域的空白,就暂定名为华芯好了,先骗点启动资金招募几个博士什么的来研究研究,看看是打磨还是找国外淘汰的现成技术,接着申报863和国家五个一工程,学校肯定也以我为荣,聘我当个微电子学院院长什么的,然后等资金一到手直接学×××儿子商业移民澳大利亚了, 钱是几个亿几个亿往里砸, 印象中有六七年过去了, 还是蒙着一层神秘的...

[ Last edited by zzz19760225 on 2017-6-14 at 01:40 ]
作者: zzz19760225     时间: 2017-6-14 01:41
龙芯CPU的用户在哪里?

gentoofly / 2017-6-11 14:43
浏览: 224 / 回复: 11
本帖最后由 gentoofly 于 2017-6-13 23:43 编辑


     最近媒体又在密集地报道龙芯CPU,CCTV2还进行了专门报道,主要原因是龙芯3A3000CPU已于近日问世,报道中龙芯中科还展示了基于龙芯3A3000的笔记本。外观看上去还不错,操作系统运行的肯定不是windows,而是Linux操作系统。就在龙芯3A3000正式问世不久,国产操作系统厂商中标软件、深度Linux、普华基础软件、中兴新支点纷纷表示自家操作系统已经支持龙芯3A3000。从技术的角度来说,Linux本身支持多平台,针对龙芯MIPS指令集进行重新编译即可运行。
     龙芯CPU,对于普通用户来说,一直如同神一般的存在,只闻其神而不见其身。10几年前在报纸杂志上就经常看到关于龙芯的报道,但是就是买不到。龙芯CPU采用的是MIPS指令集,并且龙芯购买了MIPS指令的永久授权,并在MIPS原有指令的基础上,龙芯中科自己研发了1500多条指令集。目前国内龙芯整机的生产厂商主要有长城电脑、中科曙光、航天706所等电脑制造商。其中,曙光积极性最高,原因很简单,龙芯与曙光两者都有中科院的背景,能不支持么。
一直以来,通用CPU的研发与生产都掌握在国外IT巨头Intel和AMD的手上,国内芯片厂商只能做一些专用CPU,比如专门用于工业控制等领域。而龙芯从成立之初就背负着研发国产CPU的使命,国人一直以来也对其寄予厚望,希望在不久的将来,能够使用上国家自主生产研发的CPU,使核心技术不再受制于人。盼望着,盼望着,这么多年过去了,龙芯依然只存在于报纸与媒体报道当中,始终还没有进入寻常百姓的家里。于是,有人愤怒了,认为龙芯是骗子,甚至把龙芯认为是上海交通大学的汉芯骗局一样。只要在搜索引擎上搜索,到处都是网友质疑龙芯的声音。
我由于工作原因,2013年开始接触使用龙芯CPU直到2014年将近一年时间,当时使用的龙芯3A1500,最大的感触就是其实对于日常办公,上网、写文档、收发邮件等来说,龙芯的性能已经完全够用,而我当时使用的还是龙芯前几代的产品。我相信现在的3A3000,速度会更快,性能更强。只是对于普通用户来说,电脑是生产工具,需要能够满足各种工作场景。比如,对于财务人员来说,要能够使用网上银行企业版本,要能够使用各种ERP软件,CRM软件等。对于设计人员来说,要能够运行各种设计软件。当然,这些并不是CPU所能够决定的事,而是需要CPU之上的操作系统能够支持。而目前,个人用户使用最广泛的操作系统window并不是支持龙芯CPU。所以龙芯CPU只能够使用Linux操作系统,而比较尴尬的现状是,目前国内的大众软件厂商,对于Linux操作系统的支持力度很弱,甚至完全不支持。比如腾讯,阿里等。用户买电脑的目标是为了用,而不是用来当摆设。而龙芯CPU,由于无法运行window操作系统,用户的日常工作干不了,自然没有购买欲望。
        如此一来,难道龙芯CPU就没有市场了么?当然有了,龙芯CPU可以做为教学工具给计算机等相关专业的学生使用。据龙芯内部人士介绍,他们已经推出了相应的产品。当然,这种产品的购买是学校买单而不是学生买单。当然还有其它领域,比如龙芯中科CEO胡伟武老师介绍的目前很多红绿灯控制系统、电视机顶盒等使用的都是龙芯CPU,但这些领域不是通用CPU的范畴。还有这几年,政府在提倡的IT国产化,相信龙芯在里面会有一定的作为。
普通用户要使用龙芯,可以在龙芯的团购网购买。龙芯俱乐部 龙芯3A2000开源电脑首发 最便宜的龙芯嵌入式开发板199 - 龙芯俱乐部 然而这个网购并不是龙芯官方发起的,其主页的介绍里明确写着这个网站是由一群龙芯爱好者发起的网站。在这里可以购买到龙芯CPU的电脑,其中龙芯三号开源电脑主机 3A2000 4核 社区专供 价格为3799,只有主机,不含显示器、键盘、鼠标等配件。龙芯三号开源电脑主机 3A2000 4核 1G 价格为4299,价格对比Intel CPU没有优势,更关键的是无法运行Window操作系统。
       龙芯的创始人胡伟武老师是一个毛主席的崇拜者,办公室里挂着毛主席的画像,龙芯中科还有一个专门的节日—毛诞节,12月26日。如今政府行业IT国产化已经是大趋势,相信龙芯在政府里的应用会越来越多,但普通用户的数量,可能还是那么少,因为它要求用户不仅要有国产的情怀,更要熟悉使用Linux操作系统。

---------------------------------------------------------------------------------------------------------------------------------------

中国首颗量子通信卫星 又一个世纪大骗局  此博文包含图片        (2016-08-22 13:28:52)转载▼
分类: 科学
向作人:

中国首颗量子通信卫星 又一个世纪大骗局


中国首颗量子通信卫星 <wbr>又一个世纪大骗局


作者:VOLTES


小弟刚看了这个新闻,还真吓了一跳,还以为中国在量子通信有什么重大突破,不过负责这个的潘健伟本来争议就很大,标准的牛皮大王一个,他干的事都要存疑,仔细看了一下内容,只差没喷饭。


这哪里是什么量子通信??实际上的通信内容还是用传统方式加密通过激光传送,被量子加密的只有秘钥(先不谈真假),敌人要窃听根本不用去管被量子加密的秘钥,只要破解用传统手段加密的实际内容就成了,这个所谓的量子加密的秘钥唯一的作用就是一但被别人侦测,量子态会塌陷可以被自己侦知,切断通讯,不过这其实没啥意义,因为激光通讯量巨大,等你知道切断通讯,资料都早被敌人拿走了,要侦查有没有人窃听高指向性的激光方法多的是,不需要用到连爱因斯坦都搞不懂的量子纠缠。


量子通信早在1984年就由IBM公司的研究人员Bennett和蒙特利尔大学的学者Brassard提出,但是专管通信安全的美国国家安全局是连经费都懒得出,原因就是量子通信用的量子纠缠在理论本身都还有很大的问题(连爱因斯坦都搞不懂),真正的量子通信是要通信内容都用量子加密,实用上必须制造一个一个单光子出来量子加密,做不做的出来是另一回事,就算做的出来,通讯速度也奇慢无比,所以不管美国欧洲日本都还停留在实验室阶段。


中国一向爱吹牛造假,用个量子通信这个连爱因斯坦都搞的迷迷糊糊的名词来胡弄世人,说穿了就是一个激光通信卫星而已,但是说激光通信卫星,比起来中国仍然落后的很,加个量子两字,就变世界第一了嘛。


网友评论:


不管白猫黑猫,能捞钱就是好猫。


这哪里是什么量子通信?


骗取大胖欢心,多撒点试验经费就行了。然后移民米帝。


量子纠缠是两个量子之间的同步关系,之间不需要任何传输介质,所有发射卫星就显得多此一举!


主傻钱多,速来。


现在是不得不继续骗下去,否则上上下下都有危险,奇骏之罪啊。


不但忽悠不了外国淫,连国内老百姓都不好忽悠,能一层层扒开你,这一届百姓太精了,唉!


猫粪眼里,一切都是骗局。


方肘子又开始闹了。


汲取龙芯教训,因为懂芯片的人太多,被揭穿了,这次弄个人人不懂的,连爱因斯坦都整不明白的来糊弄人,果然有效。


欧美科学家给脸,都憋着不笑。


这名称的叫法真是误导,不知道是有意还是无意?正式的名称是--量子科学实验卫星(Quantum Experiments at Space Scale,简称QUESS)。和通信没有什么直接的关系。


https://en.wikipedia.org/wiki/Quantum_Experiments_at_Space_Scale


现在是不得不继续骗下去,否则上上下下都有危险,欺君之罪啊。量子密钥、量子通信、量子计算,当事人(或者他们的代言人或吹鼓手)在这几个非常不一样的概念上来回腾挪,闪烁其词。看上去根本就不像在办正经事。


而且,他们实际做的,好像连量子密钥都不是,因为根本就没有做到“单光子”测量,而是对一束光(多光子)中的各光子的自旋测量结果做统计。


这个实验是对激光进行的。一束激光不可能是单光子。所以,实验中不可能隔离出单光子,也不可能隔离出两个相互纠缠的单光子构成的光子对。


村骗乡,乡骗县,一直骗到。。。。哈哈


不懂不敢发言,但领先美国什么的,就是不信


激光通信与灯泡WIFI差不多吧?


-----------------------------------------------------------------------------------------------------------------------------


下愚
愚蠢的碳基猴子
8 人赞同了该回答
首先,一个国家地区对高科技投资是值得肯定的事情。抛开爱国主义民族主义这些政治正确不提,科技进步是现代文明进步的基础,投资高科技有利于文明进步,也有利于相关技术从业者。至少很多底层技术爱好者可能会有更多的工作机会。虽然世宗皇帝挫的很你也想揍他,但是指责海瑞的行为减缓了黑暗封建统治的瓦解也是不对的。就这么个意思。
其次,具体到龙芯这事上。槽点太多,吐不胜吐。稍提几点,<1>开始说为了低调叫“狗盛”,这歧义就先忽略了,但是你先打出了“龙芯”的旗号又假惺惺的搞这么个名字是啥意思?开始要炒作民族主义情绪也就炒作了,小脚都能是国粹,叫个“龙芯”,“中*华*芯”什么的也不算什么大不了的,可你再搞个“贱名”什么的,这是当人都是聋子么?哪边的道理都要占上,一边喊着“贱名好养活”表示低调一边用名字煽动大众情绪。<2>当时的领导hww跑到太祖面前汇报工作这事恶心了很多人,有兴趣的人可以找找看当初hww用太祖思想武装龙芯课题组的新闻,想必还能找到。<3>号称完全自主知识产权,完全自主研发等等乱七八糟的事就不说了。这大概是天朝官场特色,亦或者相关课题领导人技能不够娴熟,表演的夸张了一点。不过仅凭公开报道的事情就难以让人产生好感。据称天朝做芯片的很有几家,但是表演这么拙劣的别无分号,所以不要吃惊龙芯被人黑出〇。
最后,说安全这个事情。每次说到自主研发必定躲不开的,帝国主义亡我之心不死。这个想法对于长老们来说正常的很,对于居委国家领导人们也很正常,唯独对一介草民来说是想多了。假设现在天朝弄出来一款性价比可以媲美Intel产品的芯片,你是信任Intel还是信任天朝?答案很简单,在天朝就信Intel,在化外就信天朝。美帝插了多少后门也不会蛋疼到隔着太平洋把手伸到你桌子上,而派出所就方便多了;同理天朝也几乎不会有心思去偷窥远在化外的用户,反倒是不能沐浴皇恩的同学们要仔细帝国主义的后门。想到了这一步,有点警觉心的都会考虑,如果天朝的处理器真的能用了,应用勉强能撑场面了,你不担心在天朝用Intel的处理器变成违法吗?你真的不担心吗?真的不担心吗?1984就在眼前。
https://www.zhihu.com/question/19612562
-----------------------------------------------------------------------------------------------------------------
http://blog.renren.com/share/741047355/1447487744

龙芯的骗局终于结束了。。

龙芯团队的骗子们坐不住了 大量的6月注册的新ID开始新的忽悠了 那我们就回顾一下历史 展望一下未来 话说这龙芯的发展可是一波多折呀 :

      当龙芯刚一立项时 就高调宣传 我们就建议制造CPU可没那么简单 要谦虚实干 5mao们不干了 挺身而出大声嚷嚷:“发现一个WT, 这可是咱们自主研发 自主制造的 你看着咱们项目一上马INTEL马上就要宣布倒闭 这叫亮剑 懂吗”我们只好闭嘴忍了 等两年看看再说。


      当龙芯的宣布设计成功时 我们疑惑它的速度很慢 落后INTEL 5mao们又不干了 “看来你真是个WT , INTEL发展了多少年 咱们才几年 你看老外知道我们造出龙芯后 比死了爹还难受” 我们只好又忍了。再等两年再说。


      当龙芯号称量产时 我们质疑为什么看不到其产品 为什么不兼容WINDOWS 5mao再次被激怒了 “ 又是你这个WT, 咱们这是用于国防的 不是民用 为了国防安全 就你也配用 这是百分百自主的产品 图的就是安全 比买INTEL的值” 我们还是忍了。等吧 。


      当有人爆料龙芯是意法半导体公司生产时 我们纳闷 不是为了国防安全吗 怎么让老外制造? 5mao冷笑“这个WT很面熟嘛!
      你懂CPU吗 核心技术是设计架构 这是咱们设计的架构 让他们做的 还是咱们自己的产品 INTEL还在中国生产呢” 忍了 反正我们也忍习惯了。


      当2009年6月18号 主流媒体爆出龙芯架构抄袭 已主动花钱买下了专利时 5mao开始坐在地上耍泼“WT WT WT !!!我不管我不管说你是就是WT 这么多骗钱的 就盯住我们不放了是吧 买个架构很正常吗 咱们还有XX部分是自主的 说了你也不知道” 老子这次真的是忍无可忍了 cao图纸买别人的产品让别人做的 都被人拔成这样了 还嘴硬 我不是看扁你们这些中科骗 有种你说出来除了龙芯这两个字还有什么是你设计的 用不了多久 老子还能鞭你们的尸 。
      还有的5mao说 “没什么嘛 我们现在买 以后在这个基础上设计超越他们” XX的 你早说呀 这么多年 这么多钱 都干嘛了你过足了嘴瘾 这会认输了。你们倒是比汉芯强多了 不用自己偷偷打磨 直接花钱买 让老外帮你磨好 贴个商标弄回来
      中科院官方发言人竟然说是“为了往国外销售 才买的专利权 ”当老外都是SB吗 买你这种白给都没人要烂货 老外有权利挥霍公款吗?
      又有5mao说了 “又不是你的钱 别跟我提纳税人 中国就没有纳税人” 不错 中国没有纳税人 那些钱是搜刮来的民脂民膏 是赖的老百姓养老和看病的钱。就拿来让这帮骗子天天骑着草X马 搂着小蜜 看国旗!


      郭德纲: 咦 这娃智力怎么比龙芯还差! 哦 原来是我们的砖家

[ Last edited by zzz19760225 on 2017-8-16 at 21:18 ]
作者: zzz19760225     时间: 2017-6-14 01:52
000000000000000000

[ Last edited by zzz19760225 on 2017-7-17 at 19:15 ]
作者: zzz19760225     时间: 2017-6-14 01:52
1
作者: zzz19760225     时间: 2017-6-14 01:52
1
作者: zzz19760225     时间: 2017-6-14 01:52
1
作者: zzz19760225     时间: 2017-6-14 01:52
1
作者: zzz19760225     时间: 2017-6-14 01:52
1
作者: zzz19760225     时间: 2017-6-14 01:52
1
作者: zzz19760225     时间: 2017-6-14 01:53
1
作者: zzz19760225     时间: 2017-6-14 01:53
1
作者: zzz19760225     时间: 2017-6-14 01:53
1
作者: zzz19760225     时间: 2017-6-14 01:53
1
作者: zzz19760225     时间: 2017-6-14 01:53
1
作者: zzz19760225     时间: 2017-6-14 01:53
IPv9 —— 又一个中国特色的大笑话
标签: 笑话网络制造化工互联网文档
2004-06-30 02:21 16554人阅读 评论(28) 收藏 举报
分类:
技术批判(40)

版权声明:本文为博主原创文章,未经博主允许不得转载。
最近看到一篇报道:中国新一代自研搜索络技术IPv9即将走的实验室

狗狗搜索ipv9的结果却令人啼笑皆非。凡中文的,翻来覆去就是那么几篇新闻稿,而且文字间高瞻远瞩的指出了美帝国主义的网上霸权,且誓要捍卫网上的“主权平等”。但是稍微详细一点的技术文档就全无踪影。而且ipv9虽然也像模像样,跟一些大学、专家、领导都贪上了关系,但列举的真实应用却多是上海长宁区的项 目……嘿嘿,就算不懂技术的人这就大概看出端倪了。

而技术发明人也是挺“有趣”的:上海通用化工技术研究所所长谢建平先生热爱发明,从90年代开始进行国际互联网技术的跟踪研究。至今他共申请了20多项专 利。发明专利有10项,其中如"数字域名"、隧道激光效应与应用、食品级抗菌防霉塑料添加剂、第五代锂离子电池等发明……

哇,这位化工技术研究所所长真是多才多艺,赶超爱迪生,比肩达芬奇。不过既然做了数字域名和ipv9这样的改变世界的重大发明,咋连一个研究所网站或个人主页都没有呢?嗯,我猜到了,也许他想自己发明一个“亿维网”……

话说回来,狗狗搜索IPv9,英文的倒是有。原来早有1994年的“RFC 1606  A Historical Perspective On The Usage Of IP Version 9”,嘿,还是RFC么!于是我以为也许是国人又偷拿了别人的淘汰技术来献宝,可看了之后却更是哭笑不得,部分摘录如下:

使用IP版本9的历史观
(RFC 1606  A Historical Perspective On The Usage Of IP Version 9)

摘要
本论文回顾了旧的IP版本协议的使用。探讨它的一些成功和失败。
1. 介绍
最近几年TCP/IPv9显著兴起。只有几百万台主机的时代已经过去,网络为人们所了解。再一次因为地址耗尽,IP版本9协议走向了有用生命的尽头,这里我们回顾一下本协议的一些成功之处。
3. 分配
IPv9协议的大量的号码空间也使得分配地址可以用一种直接的方式。典型的,大部分高级街道商业互联网提供者提供给每个房屋10亿个地址。……分配过程可以再通过结构化分区的方式进行,每一个主要的应用从他的控制器请求一块地址。通过这种方式,电灯泡从电灯开关请求一个地址,电灯开关从电气系统,电气系统从房间/地面控制器依次请求地址。由于地址空间很大地址冲突不会有特别的问题发生,这种方式是很成功的,同时还有很多没有分配空间的地址正在快速增长。别的太阳系的智能生命的发现以及超光速传送栈的同时发现是主要的原因。这样就可以和他们实时通信,世界范围的地址空间的分配就有必要了,可以分配在第三层路由结构。有一个全局的(空间)第二层星系范围的网络可以分配给这个星系,可是在外太空建立的永久空间站开始消耗这个资源。最紧迫的问题是平行宇宙的情况。当然,假设没有比平行宇宙更高级的外推是不完备的。。。
4. 应用
身体监视器的引入,作为IPv9可以取址的单元注入到血液流中,还没有作出结论。同时,在心脏,肾脏,大脑,等等中可以植入设备,在紧急情况下发送 SNMPv9捕捉消息,这已经是医生的一个有用的监视工具,把血流既当作一个传送带也当作一个信息高速公路存在一些问题。在血流中移动的信号的干扰和神经 的信号的近似,意味着病人同时承受着多个事件,可能导致猛烈的痉挛。这样,再加上早期的广播风暴导致病人血液沸腾的问题,导致人们对这个问题重新思考。同样,穿着愚蠢的碟形卫星天线帽的需要会使人觉得不好意思,当然除了在加尼福利亚,那儿这是最新的时髦。
IPv9取址商品包装的使用是讨论的热点。行销人视他为神赐之物,它能够反馈商品到底是如何使用的。同样,直接广播极大地改善了回收。“请所有纸板组成的 包装响应。”顾客对她是否是私生活的入侵并不在乎。猜物直接跳转器的引入(谣传IPv9要使用)发送直接的广播包到本地的食物包装网络,有效的重置网络掩码为全1,意思是你选择了这个食物。
IPv9杂志的出现受到普遍欢迎。能够询问一般杂志目录在那里是最有用的特性。如果和联网报纸/杂志架结合起来,就有发现你把登有关于外太空割草机的文章 的杂志放在那里的能力。最终会有自动下载阅读习惯到家庭控制器,然后告诉读者那里有同样主题的文章的能力。反对党成员所谓的信息查询,可以发现办公室内人们的“异常”行为,是所谓隐秘的运动鞋网络,鞋匠先驱的这个行动失败了。市场还没有准备接受发送详细分析脚臭到制造商那里的鞋子。
5.制造
当然,制造代价是设计IPv9时没有考虑的一个问题。它需要跳跃性的想象去相信有一天任何想要取址的东西都是IPv9可以取址的。他假设IPv9协议机随着芯片技术的进步价格会下降。很少有人预见到使用基因技术让病毒按指令建造纳米技术IPv9协议机的代价。同样,纳米机器人是否有地方放这些东西。
最新的研究是夸克-夸克转换器,可以让原子当开关使用。制造这些东西非常昂贵(可能10倍于IPv9协议栈),除非有非常特别的需要。
6.结论
不研究历史的人,注定要重复他。


玄妙吧?

回头一看,靠,4月1日发布的!!

外国人喜欢调侃,就是比较严肃的技术领域也经常出点愚人节笑话,可注意他的结论——“不研究历史的人,注定要重复他”,真是说得太对了。按说,“人家过得也不容易,不骗骗,饭都没得吃了”。不过我们的那些领导们看来就是注定要重复的出丑了(参见前信息产业部科技司司长徐顺成之《关于构建“新一代安全可控综合信息网络技术平台”的思考》 )。

至于刊登这些东西的媒体么,我们就不要要求太高了罢。

最后还是要给自己留点后路(咳,真是越大越没有志气了),要是这个IPv9真的是代表先进的生产力、生产关系,还变成了我国挑战美国网络霸权,维护世界和 平的法宝,那权当我是浩浩荡荡历史潮流中没有认清形势犯了认识错误吧,请先驱们、专家们、领导们千万不要把我当回事!




匿名用户

所谓IPv9完全是基于IPv4的,只不过就是在网络环境里开了一台服务器,服务器运行DNS和HTTP服务,然后呢,用这个传统DNS来解析所谓的IPv9“地址”,无论解析什么IPv9地址返回的都是服务器自身的IPv4地址,用户连接到http服务后根据header头部的十进制地址返回相应的网站域名做跳转最后还是按照现有方法该怎么样就怎么样。
总结:tm的就是个纯数字域名,根本算不上是个协议,只要他们的垃圾服务器炸了,IPv9地址立马报废,而且这玩意完全多此一举,谁他妈没事输个那么长串数字去访问一个网站,还不如域名来得快,用这东西等于绕圈,建议研发这垃圾东西的废物趁早把这东西改名成VIP9,因为IP是邪恶的美帝国主义的东西,必须与其撇清关系,只需要改一下字母顺序就能得到比自己亲妈升天还爽的快感,土豪爱国VIP地址,中国限定。
附上他们可笑的项目网站页面,一眼望去,又红又专,之前有人说这是用十几年前的FrontPage做的,全是表格。至于网站内容,要么就是响应上头的什么狗屁红色洗脑号召,要么就是说谁谁谁侵害名誉权,还造谣说什么互联网是被美国控制的要搞互联网猪权来迎合红卫兵的口味,真正的技术内容没几个,这玩意也没技术,随便找一个计算机系大学生都能做得出来,整个就一计算机界的民科,打着国产旗号骗吃骗喝(据说在澳门骗了不少钱,只是听说,拒绝快递),然后为你国微信朋友圈QQ空间制造爱国主义文章素材。

[ Last edited by zzz19760225 on 2017-7-17 at 19:15 ]
作者: zzz19760225     时间: 2017-6-14 01:54
http://blog.csdn.net/sdreamq/article/details/51044913

MIPS体系结构--指令集
标签: mips内核汇编
2016-04-02 18:36 1458人阅读 评论(0) 收藏 举报
分类: mips体系结构(5)  
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
mips体系结构下的汇编指令
指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有这些指令集,CPU就可以更高效地运行。

Mips汇编语言的风格
汇编语言指令格式

[标签:] 操作符 [操作数] [#注释]
标签: (可选)
标记内存地址, 必须跟冒号
通常在数据和代码段出现
操作符
定义操作 (比如 add, sub, 等)
操作数
指明操作需要的数据
操作数可以是寄存器,内存变量或常数
大多数指令有3个操作数
1
2
3
# this is a comment
entrypoint:         # that’s a label
add $1 , $2, $3  # (registers) $1 = $2 + $3
xxx:—— 定义代码的人口点和命名数据段的存储段

程序结构
汇编语言的程序结构,为数据声明+代码段+数据段(文件后缀为.s,或者.asm也行),数据声明在代码段之后(其实在其之前也没啥问题,也更符合高级程序设计的习惯)

数据声明

数据段以 .data为开始标志
声明变量后,即在主存(RAM)中分配空间。

1
2
3
4
5
6
7
Example:
var1:               
    .word        3         # 声明一个 word 类型的变量 var1, 同时给其赋值为 3
array1:               
    .byte         'a','b'         # 声明一个存储2个字符的数组 array1,并赋值 'a', 'b'
array2:               
    .space        40        # 为变量 array2 分配 40字节(bytes)未使用的连续空间,当然,对于这个变量
代码段:

代码段以 .text为开始标志
其实就是各项指令操作
程序入口为main:标志(这个都一样啦)
程序结束标志(详见下文)
其他:

.data //数据段
.text //代码段
.globl //全局符号声明
.align 0 //关闭所有的自动对齐
.asciiz //字符串(带终止符)
寄存器
32个通用寄存器:
MIPS的寄存器约定,一种32个寄存器

0 zero: 总返回0
1 at: (汇编暂存寄存器)为汇编保留
2-3 v0、v1:存放子函数调用返回结果,还可用于表达式求值
4-7 a0 - a3:存放向子函数传递的参数
8-15 t0- t7:存放临时运算结果,在发生函数调用时不必保存它们的内容
24,25 t8-t9:
16-23 s0 - s7:存放局部变量,在发生函数调用时一般要保存它们的内容
26,27 k0, k1:为中断/陷入处理保留,你也可以改变
28 gp:全局指针
29 sp: 栈(stack)指针
30 s8/fp: 帧(frame)指针
31 ra: 返回地址(用于过程调用
数据类型
MIPS CPU的一次操作可加载或存储1到8个字节的数据。
MIPS名称
大小(字节)

汇编器助记符

                  
dword        8        “d”代表ld
word        4        “w”代表lw
halfword        2        “h”代表lh
byte        1        “b”代表lb        `
操作指令
加载和存储(load、store)

Load

在一个内存地址加载word/halfword/byte的数据到一个寄存器

         
lw r, a        R<-a
lh r, a        无符号
lb r, a        无符号
lhu        有符号
lhbu        有符号
li r,c        加载立即数
Store

将寄存器中的数据存储到内存地址

         
Sw r, a        R->a
Sh r, a        Store low halfword
Sb r, a        Store low byte
Move:

寄存器之间数据的直接交换

         
move r , s        R<-s
逻辑运算

         
and r, s, t        R <-s . t
or r, s, t        R <-s + t
not r, s        R <-s取反
xor r, s, t        R <-s异或t
nor r, s, t        R <-(s+t)再取反
算数运算

         
add r, s, t        R->s + t
sub r, s, t        R->s – t
mul r, s, t        R->s*t
div r, s, t        R->s/t
hi和lo乘法器相关的寄存器规模结果接口,不能用于乘和除之外的操作。对于以上二者,不存在直接寻址;必须要通过mfhi(“move from hi”)以及mflo(“move from lo”)两条指令分别来进行访问对应的内容。
乘法——将两个整数的相乘结果分成两部分存储的指定的寄存器里。
除法——lo寄存器存储结果(商),hi寄存器存储余数。
移位操作

         
sll r, s, c        r ← shift s left c bits
srl r, s, c        r ← shift s right c bits
分支操作

通过条件判断,使程序跳转到tag

         
b tag        跳转->tag
beq r, s, tag        R=s ->tag
bne r, s, tag        R != s->tag
bgt r, s, tag        R > s->tag
bge r, s, tag        R >=s->tag
blt r, s, tag        R < s->tag
ble r, s, tag        R<=s->tag
比较指令

         
slt r, s, t        S < t
sle r, s, t        S <= t
sgt r, s, t        S >t
sge r, s, t        S >= t
seq r, s, t        S = t
sne r, s, t        S != t
FALSE r <- 0
TRUE r <- 1
寻址方式

直接寻址:
MIPS只有一种寻址方式。任何加载或存储机器指令可以写成

lw $1, offset($2)
你可以使用任何寄存器来作为目标和源寄存器。offset偏移量是一个有符号的16位
的数字(因此可以是在-32768与32767之间的任何一值)。用来加载的程序地址是源寄
存器与偏移量的和所构成的地址。
($t0) —— 默认从0地址偏移$t0字节
访问连续的内存空间:
根据程序的实际需要可能进行字符串等数据的访问。

.ascii s ASCII encoded characters of string s
.asciiz s l ike .ascii, null-terminated
.word w1, w2,… 32-bit words w1, w2, . . .
.half h 1, h 2, . . . 16-bit halfwords h 1, h 2, . . .
.byte b1, b2, . . . 8-bit bytes b1, b2, . . .
.float f1, f2, . . . 32-bit single precision floating point numbers f1, f2, . . .
.double d1, d2, . . . 64-bit double precision floating point numbers d1, d2, . . .
.space n n zero bytes
例如:
1
2
.data
str: .asciiz "hello word"
系统调用:syscall

MIPS 提供一条特殊的 syscall 指令,从操作系统获取服务
使用 syscall 系统服务
从 $v0寄存器中读取服务数
从 $a0, $a1, 等寄存器中读取参数值(如果有)
发送 syscall 指令
从结果寄存器中取回返回值(如果有)
$v0 中包含调用号(共12个):

         
Service        $v0        Arguments / Result
Print Integer        1        $a0 = integer value to print
Print Float        2        $f12 = float value to print
Print Double        3        $f12 = double vlaue to print
print String        4        $a0 = address of null-terminated string
Read Integer        5        $v0 = integer read
Read Float        6        $f0 = float read
Read Double        7        $f0 = double read
Read String        8        $a0 = address of input buffer$a1 = maximum number of characters to read
Exit Program        10         
Print Char        11        $a0 = character to print
Read Char        12        $a0 = character read
程序调用

         
jal a        (jump and link)将程序跳转到地址a并将下一条指令的地址存储在$ra寄存器中
j $ra        返回到程序跳转时的位置,无条件跳转

[ Last edited by zzz19760225 on 2017-6-15 at 23:33 ]
作者: zzz19760225     时间: 2017-6-14 01:54
1
作者: zzz19760225     时间: 2017-6-14 01:55
1
作者: zzz19760225     时间: 2017-6-14 01:55
1
作者: zzz19760225     时间: 2017-6-14 01:55
1
作者: zzz19760225     时间: 2017-6-14 01:55
1
作者: zzz19760225     时间: 2017-6-14 01:55
1
作者: zzz19760225     时间: 2017-6-14 01:55
1
作者: zzz19760225     时间: 2017-6-14 01:55
1
作者: zzz19760225     时间: 2017-6-14 01:56
1
作者: zzz19760225     时间: 2017-6-14 01:56
1
作者: zzz19760225     时间: 2017-6-14 01:56
1
作者: zzz19760225     时间: 2017-6-14 01:56
1
作者: zzz19760225     时间: 2017-6-14 01:56
1
作者: zzz19760225     时间: 2017-6-14 01:56
1
作者: zzz19760225     时间: 2017-6-14 01:56    标题: 看风景,好奇,寻找帮助,理解,熟悉,使用

http://www.loongson.cn/product/cpu/
龙芯开源社区(游击队的根据地?)
http://www.loongnix.org/index.php/%E9%A6%96%E9%A1%B5
龙芯论坛
http://bbs.lemote.com/forum.php
-------------------------------------------------------------------------------------
1,龙芯1A
http://www.loongson.cn/product/cpu/1/Loongson1A.html
龙芯 1A 处理器用户手册
http://www.loongson.cn/uploadfile/cpu/1A/Loongson1A_processor_user_manual_V2.1.pdf
-------------------------------------------------------------------------------------
2,龙芯1B
http://www.loongson.cn/product/cpu/1/Loongson1B.html
龙芯 1B 处理器用户手册
http://www.loongson.cn/uploadfile/cpu/1B/Loongson1B_processor_user_manual_V2.2.pdf
-------------------------------------------------------------------------------------
3,龙芯1C
http://www.loongson.cn/product/cpu/1/Loongson1C.html
龙芯 1C300 处理器用户手册1.4 版
http://www.loongson.cn/uploadfile/cpu/1C/Loongson_1C300_user.pdf
龙芯 1C300 处理器数据手册1.3 版
http://www.loongson.cn/uploadfile/cpu/1C/Loongson_1C300_data.pdf
--------------------------------------------------------------------------------------
4,龙芯1D
http://www.loongson.cn/product/cpu/1/103.html
--------------------------------------------------------------------------------------
5,龙芯2H
http://www.loongson.cn/product/cpu/2/Loongson2H.html
龙芯2H处理器用户手册V1.6
http://www.loongson.cn/product/cpu/2/Loongson2H.html
龙芯 2H 处理器数据手册V1.6
http://www.loongson.cn/uploadfile/cpu/2H/Loongson_2H_cpu_data.pdf
龙芯处理器应用常见问题解答(FAQ)
http://www.loongson.cn/uploadfile/cpumanual/loongsonseries_FAQ_V1.1.pdf
-------------------------------------------------------------------------------------
6,龙芯2F
http://www.loongson.cn/product/cpu/2/LOONGSON2F.html
龙芯 2F 处理器用户手册V1.5
http://www.loongson.cn/uploadfile/cpumanual/Loongson2F_UM_CN_V1.5.pdf
龙芯 2F 处理器数据手册V1.1
http://www.loongson.cn/uploadfile/cpumanual/Loongson2F_DS_CN_V1.1.pdf
-------------------------------------------------------------------------------------
7,龙芯3A2000/3B2000
http://www.loongson.cn/product/cpu/3/Loongson3A2000.html
龙芯 3A2000/3B2000 处理器用户手册上册多核处理器架构、寄存器描述与系统软件编程指南V1.7
http://www.loongson.cn/uploadfile/cpu/3A2000/Loongson3A2000_user1.pdf
龙芯 3A2000/3B2000 处理器用户手册下册GS464E 处理器核 V1.03
http://www.loongson.cn/uploadfile/cpu/3A2000/Loongson3A2000_user2.pdf
龙芯 3A2000/3B2000 处理器数据手册V1.4
http://www.loongson.cn/uploadfile/cpu/3A2000/Loongson3A2000%20processor%20datasheet.pdf
-------------------------------------------------------------------------------------
8,龙芯3A1000
http://www.loongson.cn/product/cpu/3/Loongson3A.html
龙芯 3A1000 处理器用户手册上册多核处理器架构、寄存器描述与系统软件编程指南V1.15
http://www.loongson.cn/uploadfile/cpu/3A1000/Loongson_3A1000_cpu_user_1.pdf
龙芯 3A1000 处理器用户手册下册GS464 处理器核 V1.4
http://www.loongson.cn/uploadfile/cpu/3A1000/Loongson_3A1000_cpu_user_2.pdf
龙芯 3A1000 处理器数据手册V1.7
http://www.loongson.cn/uploadfile/cpu/3A1000/Loongson_3A1000_cpu_data.pdf
龙芯处理器应用常见问题解答(FAQ)
http://www.loongson.cn/uploadfile/cpumanual/loongsonseries_FAQ_V1.1.pdf
--------------------------------------------------------------------------------------
9,龙芯3B1500
http://www.loongson.cn/product/cpu/3/Loongson3B1500.html
龙芯 3B1500 处理器用户手册上册 多核处理器架构与寄存器描述V1.7
http://www.loongson.cn/uploadfile/cpu/3B1500/Loongson_3B1500_cpu_user_1.pdf
龙芯 3B1500 处理器用户手册下册GS464 处理器核 V1.3
http://www.loongson.cn/uploadfile/cpu/3B1500/Loongson_3B1500_cpu_user_2.pdf
龙芯 3B1500 处理器数据手册
http://www.loongson.cn/uploadfile/cpu/3B1500/Loongson_3B1500_cpu_data.pdf
龙芯处理器应用常见问题解答(FAQ)
http://www.loongson.cn/uploadfile/cpumanual/loongsonseries_FAQ_V1.1.pdf
---------------------------------------------------------------------------------------
10,龙芯3A3000/3B3000
http://www.loongson.cn/product/cpu/3/496.html
龙芯3A3000/3B3000 处理器用户手册上册多核处理器架构、寄存器描述与系统软件编程指南V1.3
http://www.loongson.cn/uploadfile/cpu/3A3000/Loongson3A3000_3B3000user1.pdf
龙芯3A3000/3B3000 处理器用户手册下册GS464E 处理器核 V1.0
http://www.loongson.cn/uploadfile/cpu/3A3000/Loongson3A3000_3B3000user2.pdf
龙芯 3A3000/3B3000 处理器数据手册V1.2
http://www.loongson.cn/uploadfile/cpu/3A3000/Loongson3A3000_3B3000data.pdf
--------------------------------------------------------------------------------------

11,龙芯系列开发板
http://www.loongson.cn/product/system/
龙芯 CPU 开发系统 vxWorks BSP开发规范
http://www.loongson.cn/uploadfile/devsysmanual/LoongsonCPU_vxWorks%20BSP_1.02.pdf
龙芯 CPU 开发系统 PMON 固件开发规范
http://www.loongson.cn/uploadfile/devsysmanual/LoongsonCPU_PMON_V1.0.pdf
龙芯 CPU 开发系统固件与内核接口规范
http://www.loongson.cn/uploadfile/devsysmanual/loongson_devsys_firmware_kernel_interface_specification.pdf
龙芯开发系统 Linux 内核开发详细规范
http://www.loongson.cn/uploadfile/devsysmanual/loongson_devsys_linux_develop_specification.pdf
----------------------------------------------
12,龙芯3A_2H开发板
http://www.loongson.cn/product/system/61.html
龙芯2H处理器用户手册
http://www.loongson.cn/uploadfile/cpumanual/Loongson2H_Processor_User_Manual_v1.4.pdf
龙芯 2H 处理器数据手册V1.4
http://www.loongson.cn/uploadfile/cpumanual/Loongson2H_processor_data_sheet_v1.4.pdf
龙芯 3A+2H 开发板技术规格书
http://www.loongson.cn/uploadfile/devsysmanual/Loongson3A_2H_mother_board_user_guide.pdf
---------------------------------------------,
13,龙芯2HSoc开发板
http://www.loongson.cn/product/system/62.html
龙芯2H处理器用户手册
http://www.loongson.cn/uploadfile/cpumanual/Loongson2H_Processor_User_Manual_v1.4.pdf
龙芯 2H 处理器数据手册V1.4
http://www.loongson.cn/uploadfile/cpumanual/Loongson2H_processor_data_sheet_v1.4.pdf
龙芯 2H 开发板技术规格书
http://www.loongson.cn/uploadfile/devsysmanual/Loongson2HSoCTechnicalSpecification.pdf
--------------------------------------------
14,龙芯3B1500双路开发板
http://www.loongson.cn/product/system/57.html
龙芯 3B1500 处理器用户手册上册 多核处理器架构与寄存器描述V1.5
http://www.loongson.cn/uploadfile/cpumanual/Loongson3B1500_processor_user_manual_P1_v1.5.pdf
龙芯 3B1500 处理器用户手册下册 GS464V 处理器核V1.1
http://www.loongson.cn/uploadfile/cpumanual/Loongson3B1500_processor_user_manual_P2_V1.1.pdf
龙芯 3B1500 处理器数据手册V1.4
http://www.loongson.cn/uploadfile/cpumanual/Loongson3B1500_processor_data_sheet_V1.4.pdf
龙芯 3B05+RS780E 双路开发板技术规格书
http://www.loongson.cn/uploadfile/devsysmanual/LS3B05-d-technical_mother_board_specification.pdf
-----------------------------------------
15,龙芯3A780E单路开发板
http://www.loongson.cn/product/system/60.html
龙芯 3A1000 处理器用户手册上册多核处理器架构、寄存器描述与系统软件编程指南V1.14
http://www.loongson.cn/uploadfile/cpumanual/Loongson3A1000_processor_user_manual_P1_V1.14.pdf
龙芯 3A1000 处理器用户手册下册GS464 处理器核 V1.4
http://www.loongson.cn/uploadfile/cpumanual/Loongson3A_processor_user_manual_P2_V1.4.pdf
龙芯 3A1000 处理器数据手册V1.7
http://www.loongson.cn/uploadfile/cpumanual/Loongson3A1000_processor_data_sheet_V1.7.pdf
龙芯 3A+RS780E 单路开发板技术规格书
http://www.loongson.cn/uploadfile/devsysmanual/LS3A-RS780E-s-develop_board_user_manual.pdf
----------------------------------------
16,龙芯3A780E双路开发板
http://www.loongson.cn/product/system/59.html
龙芯 3A1000 处理器用户手册上册多核处理器架构、寄存器描述与系统软件编程指南V1.14
http://www.loongson.cn/uploadfile/cpumanual/Loongson3A1000_processor_user_manual_P1_V1.14.pdf
龙芯 3A1000 处理器用户手册下册GS464 处理器核 V1.4
http://www.loongson.cn/uploadfile/cpumanual/Loongson3A_processor_user_manual_P2_V1.4.pdf
龙芯 3A1000 处理器数据手册V1.7
http://www.loongson.cn/uploadfile/cpumanual/Loongson3A1000_processor_data_sheet_V1.7.pdf
龙芯 3A 双路处理器参考板用户手册
http://www.loongson.cn/uploadfile/devsysmanual/ls3a_2ways_mother_board_user_manual.pdf
龙芯 CPU DDR3 布线设计指导及软件调试说明
http://www.loongson.cn/uploadfile/devsysmanual/DDR3_desigin_guide_V1.3.pdf
--------------------------------------,
17,龙芯3B1500单路开发板
http://www.loongson.cn/product/system/58.html
龙芯 3B1500 处理器用户手册上册 多核处理器架构与寄存器描述V1.5
http://www.loongson.cn/uploadfile/cpumanual/Loongson3B1500_processor_user_manual_P1_v1.5.pdf
龙芯 3B1500 处理器用户手册下册 GS464V 处理器核V1.1
http://www.loongson.cn/uploadfile/cpumanual/Loongson3B1500_processor_user_manual_P2_V1.1.pdf
龙芯 3B1500 处理器数据手册V1.4
http://www.loongson.cn/uploadfile/cpumanual/Loongson3B1500_processor_data_sheet_V1.4.pdf
龙芯 3B05+RS780E 单路开发板技术规格书
http://www.loongson.cn/uploadfile/devsysmanual/LS3B05-s-technical_mother_board_specification.pdf
-------------------------------------------------------------------------------------

18,处理器相关手册
http://www.loongson.cn/product/dc/
--------------------------------------------------------------------------------------


ftp://ftp.loongnix.org
ftp://ftp.loongnix.org/doc/01user%20manual



http://jackslab.org/people/comcat
http://dev.lemote.com/files/document/loongson/SIMD指令使用手册v0.1.pdf



http://dev.lemote.com/cgit/linux-official.git/  ------------------------- ???
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?h=v4.12-rc1&qt=grep&q=lemote  -----------------------  ???      英文的


龙芯汇编语言程序设计                 ( 龙芯MIPS64汇编语言程序设计视频教程)
https://www.bilibili.com/video/av14809674/?from=search&seid=276946050511750579

index ---> 栏目 ---> tree ---> 栏目 ---> plain ---> 文件 ---> 代码。
index
   |---栏目1
   |---栏目2
           |---tree (树结构文件夹和文件)
                  |---栏目11
                  |---栏目12
                          |---plain (单文件夹或文件,简单?)
                                |---文件名
                                        |---代码

LOONGSON 3A
启动及操作系统安装说明
http://ftp.loongnix.org/ftp/os/usb_install/loongson3a780einstallguidev07.pdf

[ Last edited by zzz19760225 on 2018-1-17 at 00:43 ]
作者: zzz19760225     时间: 2017-6-14 01:56    标题: 操作系统

Loongnix操作系统
http://www.loongnix.org/index.php/Loongnix

VxWorks实时操作系统
http://www.loongnix.org/index.php/VxWorks

[ Last edited by zzz19760225 on 2017-6-17 at 13:03 ]
作者: zzz19760225     时间: 2017-6-14 01:57    标题: 基础软件

Pmon是一个兼有BIOS和boot loader功能的开放源码软件
http://www.loongnix.org/index.php/PMON


龙芯 CPU 开发系统 PMON 固件开发规范
http://www.loongson.cn/uploadfile/devsysmanual/LoongsonCPU_PMON_V1.0.pdf

内核
http://www.loongnix.org/index.php/内核

Gcc编译器
http://www.loongnix.org/index.php/GCC

[ Last edited by zzz19760225 on 2017-9-10 at 20:57 ]
作者: zzz19760225     时间: 2017-6-14 01:57    标题: API与平台软件

龙芯移植的OpenJDK版本,和PC机上的JDK 6/8完全兼容。
龙芯Java包括64位、32位两个版本,分别用于服务器、桌面操作系统。
http://www.loongnix.org/index.php/Java

Firefox火狐浏览器
http://www.loongnix.org/index.php/Firefox火狐浏览器

chrome浏览器
http://www.loongnix.org/index.php/Chrome浏览器

目前支持龙芯平台的图形操作系统主要有两类,一是Linux桌面和终端操作系统(如Fedora、中标麒麟、普华等),二是嵌入式操作系统(如reWorks、vxWorks等)。
http://www.loongnix.org/index.php/图形图像

龙芯平台目前已适配的媒体相关开源软件有:ffmpeg、mplayer、openh264、libvpx、smplayer、mpv、totem、gstreamer等,并基于LoongSIMD指令集对多媒体编解码库进行了优化。当前正在维护的软件有:ffmepg,mplayer,openh264,libvpx。希望广大开源软件爱好者积极参与进来,我们将提供编译开发平台、开发者社区账号等服务。
http://www.loongnix.org/index.php/媒体编解码

[ Last edited by zzz19760225 on 2017-6-17 at 13:11 ]
作者: zzz19760225     时间: 2017-6-14 01:57
龙芯问答(各种龙芯空间太分散了,失去互动焦点。有相关问题链接蛮好)
http://ask.loongnix.org/?/explore/

龙芯开源社区在线文档系统
http://doc.loongnix.org/

Pmon常用命令
http://www.loongnix.org/index.php/Pmon常用命令

PMON编译方法
http://www.loongnix.org/index.php/PMON编译方法


基于龙芯平台的实时操作系统图形开发框架发布
http://ask.loongnix.org/?/article/16


适配板卡一览表
http://www.loongnix.org/index.php/适配板卡一览表

http://www.loongnix.org/index.php/Loongnix外设适配列表

http://www.loongnix.org/index.php/PMON外设适配列表


在 QEMU 模拟运行龙芯操作系统
http://dev.lemote.com/wiki/index.php?title=在_QEMU_模拟运行龙芯操作系统

lemote1
亲,请使用这里的版本。
http://mirror.lemote.com/fedora/live/
jiangtao9999
我建议楼主试试这里面的 fedora 。
https://mipsdistros.imgtec.com/fedora/development/
贴源: http://ask.loongnix.org/?/question/147

lemote1
论4.4内核的正确使用姿势
http://mirror.lemote.com/fedora/core/normal/Packages/
帖源:http://ask.loongnix.org/?/question/145

MIPS_MIPS知识大汇集
http://www.eepw.com.cn/news/listbylabel/label/MIPS



http://doc.loongnix.org/index.php?s=/home/item/show/item_id/9

http://www.openloongson.org/

RT-Thread在龙芯1C上的移植
http://www.rt-thread.org/dynamic/16.html

SylixOS-LS3A2000 工控平台         (SylixOS-LS3A2000 验证平台硬件配置)
http://www.acoinfo.com/html/product_list/product08.html

[ Last edited by zzz19760225 on 2017-10-3 at 21:51 ]
作者: zzz19760225     时间: 2017-6-14 01:57
http://www.loongnix.org/cgit/

Name        Description        Owner        Idl                          名称描述所有者空闲链路
Automatic Test System                                              自动测试系统
LOONGAT        the LOONGAT repository        loongson        19 months        summarylogtree       loongat存储库龙芯19个月
Graphic                                                                  形象的
jpeg        the jpeg repository        loongson        14 months        summarylogtree               JPEG,JPEG存储库,14个月
libdrm        the libdrm repository        loongson        14 months        summarylogtree       libdrm存储库龙芯14个月
libpng        the libpng repository        loongson        14 months        summarylogtree       libpng存储库龙芯14个月
libxft        the libxft repository        loongson        14 months        summarylogtree             libxft存储库龙芯14个月
mesa        the mesa repository        loongson                summarylogtree                        mesa存储库基于龙芯
pixman        the pixman repository        loongson        14 months        summarylogtree          pixman存储库龙芯14个月
qt        the qt repository        loongson        14 months        summarylogtree                      Qt存储库龙芯14个月
qt5        the qt5 repository        loongson                summarylogtree                        qt5的qt5存储库龙芯summarylogtree
xorg        the xorg repository        loongson        14 months        summarylogtree                   xorg存储库龙芯14个月
xorg-ati        the xorg-ati repository        loongson        14 months        summarylogtree               xorg - ATI xorg -ATI存储库龙芯14个月
zlib        the zlib repository        loongson        14 months        summarylogtree                    zlib存储库“龙芯”14个月
browser                                                                 浏览器
chrome31        the chrome31 repository        loongson        19 months        summarylogtree        chrome31存储库龙芯19个月
chrome39        the chrome39 repository        loongson        24 months        summarylogtree         chrome39chrome39存储库龙芯24个月
chrome52        the chrome52 repository        loongson        8 weeks        summarylogtree            chrome52存储库龙芯8周
firefox-mips64        the firefox-mips64 repository        loongson        23 months        summarylogtree          Firefox - mips64 Firefox -mips64存储库,龙芯23个月
firefox24        the firefox24 repository        loongson        11 months        summarylogtree                                     firefox24firefox24存储库龙芯11个月
firefox40_Release        the firefox40_Release repository        loongson        19 months        summarylogtree         firefox40 _ release存储库龙芯19个月summarylogtree
firefox45        the firefox45_Release repository        loongson        8 weeks        summarylogtree              firefox45 _ release存储库龙芯8周summarylogtree
firefox52        the firefox52_Release repository        loongson        2 weeks        summarylogtree              firefox52 _ release存储库龙芯2周summarylogtree
compiler                                                                 编译程序  
CLANG        the CLANG repository        loongson        21 months        summarylogtree                                        克朗仓库21个月summarylogtree
LLVM        the LLVM repository        loongson        24 months        summarylogtree                                             llvm存储库构建24个月
binutils-2.24        the binutils-2.24 repository for loongnix        loongson        9 weeks        summarylogtree         binutils - 2.24 binutils - 2.24存储库,用于loongnix龙芯9周    summarylogtree      
gcc-4.4.7-centos64        the gcc-4.4.7 repository        loongson        20 months        summarylogtree            gcc - 4.4.7 - centos64 gcc - 4.4.7存储库的存储库20个月summarylogtree
gcc-4.8.3-fedora19        the gcc-4.8.3 repository        loongson        20 months        summarylogtree           gcc - 4.8.3 - fedora19 gcc - 4.8.3存储库的存储库20个月summarylogtree
gcc-4.9.3        the gcc-4.9.3 repository for loongnix        loongson        5 weeks        summarylogtree             gcc - 4.9.3为loongnix龙芯5周的gcc -4.9.3存储库
gcc4.4_loongson        the gcc4.4_loongson repository        loongson        20 months        summarylogtree           gcc4.4 _龙芯是gcc4.4_龙芯库,龙芯20个月
glibc-2.20        the glibc-2.20 repository for loongnix        loongson        6 weeks        summarylogtree             glibc - 2.20这个glibc -2.20存储库,用于loongnix龙芯6周
kernel                                                                   核心
linux-2.6.32-el6        the linux-2.6.32-el6 repository        loongson        4 months        summarylogtree           Linux - 2.6.32 - el6 Linux - 2.6.32 -el6存储库,龙芯4个月
linux-3.10        the linux-3.10 repository        loongson        4 days        summarylogtree                        Linux - 3.10 Linux -3.10存储库龙芯4天  
linux-3.10.84        the linux-3.10.84 repository        loongson        2 weeks        summarylogtree                    Linux - 3.10.84 Linux -3.10.84存储库龙芯2周
linux-4.4        the linux-4.4 repository        loongson        3 weeks        summarylogtree                               Linux - 4.4 Linux -4.4存储库龙芯3周
qemu-2.7.0        the linux-4.4 repository        loongson        5 weeks        summarylogtree                                QEMU - 2.7.0 Linux -4.4存储库龙芯5周
media                                                                   媒体
ffmpeg        the ffmpeg repository        loongson        10 months        summarylogtree                       ffmpeg存储库存储10个月
libav        the libav repository        loongson        10 months        summarylogtree                           libavlibav存储库龙芯10个月
libvpx        the libvpx repository        loongson        5 months        summarylogtree                           libvpxlibvpx存储库龙芯5个月
mplayer        the mplayer repository        loongson        17 months        summarylogtree                             播放器播放器库升级为17个月
openh264        the openh264 repository        loongson        10 months        summarylogtree                                   openh264openh264存储库龙芯10个月
pmon                                                                  ?
pmon-2HSoc        the pmon-2HSoc repository        loongson        17 months        summarylogtree                     pmon - 2hsoc的pmon -2hsoc存储库龙芯17个月
pmon-loongson3        the pmon-loongson3 repository        loongson        20 hours        summarylogtree                  pmon - loongson3 pmon - loongson3存储库龙芯20小时
uboot                  
u-boot-2016

[ Last edited by zzz19760225 on 2017-8-5 at 13:06 ]
作者: zzz19760225     时间: 2017-6-14 01:57
http://www.openloongson.org/forum.php?mod=forumdisplay&fid=69
简单平安   勤为本   
http://git.oschina.net/caogos/OpenLoongsonLib1c

[ Last edited by zzz19760225 on 2017-8-16 at 17:27 ]
作者: zzz19760225     时间: 2017-6-14 01:57    标题: 深度deepin字符集

YLmf OS 编译系统

一、YBS 是什么?

YBS 指的是 Ylmf OS 的打包系统 (Ylmf OS Build System)。这是一种用于从源代码编译软件的类  ports 系统。在 Ylmf OS 中,yget 专门管理二进制软件包,而 YBS 则专门负责把源代码编译,并打包成可安装的 ypk 软件包。Ports 是  FreeBSD 使用的一种系统,它对源码包进行下载、解压缩、打补丁、编译和安装等一系列操作。一个  port 包含一些文件来指导源码的下载和编译安装,系统会自动完成操作。

YBS 由一个目录树构成,位于 /var/ybs/pbslib,它包含许多子目录,每个子目录都属于某一类别,都以相应的可创建的软件包命名。此目录并不包含软件包或源代码,相对的它包含一个 pbs 文件和 files 目录。Package Build Script (简称  pbs)是一个脚本——文本文件(包含对编译和打包过程的指示、包含源码包的下载地址等),files 目录则存放额外的一些文件,例如补丁文件等。YBS 最重要的部分就是 pbs 文件。

1、获得 YBS 树
以 root 身份运行

01.#ybs --sync
复制代码可以从服务器同步 YBS 树,git 管理。有了  YBS 树,用户可以自己定制,从源代码编译打包软件。

YBS 包含以下结构和工具的完整工具箱:
YBS 目录树:       /var/ybs/pbslib,包含所有软件的  pbs 文件和相关文件
ybs 命令:           读取 pbs 文件,编译源代码并创建 ypk 包。
pbs 文件:           记录有创建软件包的指示和源代码地址。

2、YBS是用来做这些的:

从源代码编译  Ylmf OS 官方源里没有的软件,当然首先要编写  pbs 文件。
定制现有的软件包以满足你的特定需求,修改已存在的  pbs 文件,通常是开启或禁用相关配置选项
用其它编译器的 flags 重新构建整个系统 。
干净地编译安装你自己定制的内核,只需要修改内核的  pbs 文件。
当然,你也可以按照传统的方式  configure/make/make install 来安装软件,但是 ybs 可以使这个工作实现自动化。


3、全局编译环境   /etc/ybs.conf 指明环境变量和编译器的 flags。

01.$ cat /etc/ybs.conf

02.CC=gcc

03.CXX=g++

04.#CFLAGS="-march=native -mtune=native -O2 -fomit-frame-pointer -pipe"

05.CFLAGS="-march=i686 -mtune=i686 -O2 -pipe"          #

06.CXXFLAGS="$CFLAGS"

07.MAKEOPTS="-j6"                                      # make 的进程数

08.#YPINST_PREFIX="--prefix=/usr"

09.YPINST_PREFIX=        

10.ACCEPT_REPO="stable"                                # 分支

11.#YP_I18N="en zh_CN"                                 # 仅需要的语言,其它语言将会被丢掉

12.YPPATH_DIST_URI="http://pkg.ylmf.com/sources"       # 备用的源代码下载服务器

13.AUTO_INSTALL="yes"                                  # 编译打包成功后自动安装到系统

14.YPPATH_PACKAGE="/var/ypkg/packages"                 # 打包好的 ypk 包存放地址
复制代码二、  pbs 文件介绍:

1、pbs 文件的位置和命名规则是固定的。
以 leafpad 例, 运行:

01.# ybs -w leafpad

02./var/ybs/pbslib/app-editors/leafpad/leafpad_0.8.18.1.pbs
复制代码app-editors                 软件类别
leafpad                     软件名
leafpad_0.8.18.1.pbs        软件名_主版本号.pbs  
leafpad_0.8.18.1-ylmf1.pbs  软件名_主版本号-修正版本号.pbs

2、简单的 pbs 文件:
以 leafpad 例, 运行:

01.$ cat /var/ybs/pbslib/app-editors/leafpad/leafpad_0.8.18.1.pbs

02.#

03.# YLmf_OS package build script

04.#

05.

06.DESCRIPTION="GTK+ based simple text editor."

07.HOMEPAGE="http://tarot.freeshell.org/leafpad/"

08.LICENSE="GPL-2"

09.PACKAGER="<ylmfos@115.com>"

10.

11.SRC_URI="http://savannah.nongnu.org/download/"$N"/"$N-$V$R".tar.gz"

12.

13.RDEPEND="atk cairo expat fontconfig freetype gcc glib2 glibc gtk+ libpng libX11 libXau libxcb libXcomposite libXcursor libXdamage libXdmcp libXext libXfixes libXi libXrandr libXrender pango pixman zlib"

14.BDEPEND="libpng"

15.

16.pbs_unpack() {

17.    ypkg_unpack

18.}

19.

20.pbs_config() {

21.    ypkg_patch desktop-i18n.patch

22.    YPB_CONFIG+="--disable-print"

23.    ypkg_config

24.}

25.

26.pbs_build() {

27.    ypkg_make

28.}

29.

30.pbs_install() {

31.    ypkg_mkinstall

32.}
复制代码运行:

01.#ybs -s leafpad
复制代码就可以查询到

运行:

01.#ybs -i leafpad
复制代码开始编译和打包 leafpad  

2、ybs 可以使编译打包工作自动化,主要原因是  pbs 文件的编译规则。下面学习更为复杂的 pbs 文件。/var/ybs/pbslib/template.pbs 是一个模板,里面有详细的各个规则。

01.$ cat /var/ybs/pbslib/template.pbs
复制代码#

01.# YLmf_OS package build script

02.#
复制代码# 简单的描述,推荐用英文

01.DESCRIPTION=""         
复制代码# 软件主页

01.HOMEPAGE=""
复制代码# 软件分支,testing 或者 stable, 默认是 stable

01.REPO=""
复制代码#  许可协议

01.LICENSE="GPL"
复制代码# 优先级,设置为  required,则在软件中心无法删除

01.PRIORITY="required"
复制代码# 打包者,写上自己的名字和联系方式

01.PACKAGER="Ylmf OS Developers <ylmfos@115.com>"
复制代码#  源代码包下载地址。
# $N = 软件名,     例如 leafpad
# $V = 主版本号,  例如  0.8.1
# $R = 副版本号,例如  0.8.1-rc1 中的  -rc1  
支持以下 url:

01.SRC_URI="http://foo.bar.com/$N-$V.tar.bz2"

02.SRC_URI="http://foo.bar.com/$N.deb"

03.SRC_URI="http://foo.bar.com/$N.rpm"

04.SRC_URI="git://foo.bar.com/$N.git"

05.SRC_URI="git://foo.bar.com/$N"
复制代码如果已经源代码包是自己手动压缩的,复制到  $YPPATH_SOURCE(/var/ybs/sources), 则可以按照以下方式写:

01.SRC_URI=""

02.SRC_URI="$N-$V.tar.bz2"
复制代码#绝对路径

01.SRC_URI="$DIR/$N-$V.tar.bz2"  
复制代码# 依赖关系  
运行时依赖,ybs 会事先安装; yget install 处理二进制包时也会自动安装。

01.RDEPEND=""              
复制代码推荐依赖,ybs 不处理; yget install 处理二进制包时会自动安装。

01.RECOMMENDED=""           
复制代码编译依赖, ybs 会事先安装; yget install-dev 会安装,yget install 不处理

01.BDEPEND=""   
复制代码可选依赖,这里只是起到一个记录的作用。

01.OPTIONAL="a: support a   

02.          b: support b"
复制代码冲突依赖,ybs 会在编译安装成功之后自动删除冲突包,yget install 处理二进制包时也会自动删除

01.CONFLICT=""            
复制代码# 记录一些注意事项

01.NOTES=""
复制代码# 指定 desktop 和  icon 文件

01.DESKTOPFILE="glchess.desktop"   or  "/opt/test/test.desktop"

02.ICONFILE="test.png"   or  "/opt/test/test.png"
复制代码# 拆分包。注意开发包( -dev),包含头文件; 文档包( -doc) 是自动处理的。PROVIDE 支持定制的拆分包,规则由以下的   foo_install 函数来处理

01.PROVIDE="foo"
复制代码# 编译之前调用,例如某些软件需要创建用户等

01.pbs_init() {

02.    #ypkg_useradd -c "$C" -d "$D" -s "$S" -g "$G" "$N"

03.}
复制代码#  自动解压源代码包,并 cd 进入解压目录

01.pbs_unpack() {

02.    ypkg_unpack

03.}
复制代码# 配置编译选项

01.pbs_config() {
复制代码# 配置之前 打补丁。$FILES_PATH 是  pbs 文件所在的目录,补丁文件只要放到  $FILES_PATH/files/ 或者  $FILES_PATH/files/patches 会自动被找到。

01.    ypkg_patch *.patch
复制代码# 编译选项,默认的是:

01.    #YPB_CONFIG+=" --prefix=/usr

02.    #                --sysconfdir=/etc

03.    #                --localstatedir=/var

04.    #              --infodir=/usr/share/info

05.    #                --mandir=/usr/share/man

06.    #              --disable-static

07.    #                --enable-shared "
复制代码#需要额外的在这里加:

01.    YPB_CONFIG+=""

02.      ypkg_config

03.}
复制代码# 开始编译

01.pbs_build() {

02.    ypkg_make

03.}
复制代码# 测试,一般不需要

01.pbs_check() {

02.    make check

03.}
复制代码# 安装到指定目录  $YPPATH_DEST

01.pbs_install() {

02.    ypkg_mkinstall
复制代码#ybs 还提供了几个工具:
         # 复制 systemd 的 service 文件到  "$YPPATH_DEST"/lib/systemd/system  目录

01.    #ypkg_dounit "N".service                                 
复制代码# 复制  desktop 和 icon 文件到  "$YPPATH_DEST"/usr/share/applications 目录

01.#ypkg_dodesktop "*.desktop" "*.png"                        
复制代码# 复制文档文件到 "$YPPATH_DEST"/usr/share/doc/"$N" 目录

01.      #ypkg_dodoc AUTHORS ChangeLog COPYING INSTALL NEWS README  
复制代码# 复制时自动创建目标目录

01.#ypkg_docp "$FILES_PATH/files/XXXX" "dirname"            
复制代码

01.#ypkg_domv "$FILES_PATH/files/XXXX" "dirname"               

02.#ypkg_docp_rename "$1" "$2"                                #

03.#ypkg_domv_rename "$1" "$2"
复制代码# 链接时自动创建目标

01.#ypkg_doln "$1 "$2"      
复制代码# 复制 man 文件到指定目录

01.    #ypkg_doman a.1 b.2 c.3                                 
复制代码#当 SRC_URI 后缀是 deb 或者 rpm 包时,ybs 自动解压所有文件到 data/ 目录下,这个时候只要以下命令。

01.    #ypkg_docp data/*  "$YPPATH_DEST"
复制代码

01.}
复制代码# 拆分包,函数名必须和 PROVIDE 一致,这个时候的 $N,$YPPATH_DEST 变量已经变成 foo

01.foo_install() {

02.    ypkg_mkinstall

03.}
复制代码# 安装后执行:

01.pbs_postinst() {

02.    #gnome2_install_schema "$1"

03.    #gnome2_install_defaut_gconf "$1 $2 $3

04.    #gnome2_rarian_sk_update

05.    #gnome2_desktop_database_update

06.    #gnome2_icon_cache_update /usr/share/icons/titans|titans  $default is /usr/share/icons/hicolor

07.    #gnome2_gconfd_reload

08.    #gnome2_gtk_immodules_update

09.    #gnome2_mime_database_update

10.    #gnome2_gdk_pixbuf_loaders_update

11.    #ypkg_dofont /usr/share/fonts/truetype/ttf-dejavu

12.}
复制代码# 删除软件包之前执行

01.pbs_prerm() {

02.   

03.}
复制代码#删除软件之后执行

01.pbs_postrm() {

02.   

03.}
复制代码3、更多的例子请参考  /var/ybs/pbslib

三、ybs 常用命令介绍:

搜索:

01.$ ybs -s leafpad

02.* Searching for leafpad ...

03.[I] leafpad

04.    Installed: 0.8.18.1    2011-06-02,09:43:36

05.    Available: 0.8.17    | 0.8.18.1   

06.    Homepage: http://tarot.freeshell.org/leafpad/

07.    Description: GTK+ based simple text
复制代码[I] 表示已安装
s表示 stable 分支
t 表示测试分支

定位 pbs 文件,找到可用的最高版本的 pbs 文件

01.$ ybs -w leafpad

02./var/ybs/pbslib/app-editors/leafpad/leafpad_0.8.18.1.pbs
复制代码编译某个包,同时自动编译依赖包,加上 -p 参数,可以模拟执行:

01.# ybs -i -p leafpad

02.* Calculating dependencies...

03.[E] sys-libs/zlib_1.2.5

04.[E] dev-util/pkgconfig_0.23

05.[E] app-admin/gamin_0.1.10

06.[E] dev-libs/mpfr_2.4.2

07.[E] dev-libs/gmp_4.3.2

08.[E] x11-libs/xcb-util_0.3.6

09.[E] x11-libs/gtk+_2.20.1

10.[E] app-editors/leafpad_0.8.18.1
复制代码[E] 表示已安装,而且无须升级或者降级
[D] 表示此包需要降级
[U] 表示此包需要升级

已经安装的包,强制编译,加上 -F 参数,如果不加上 -p 参数会开始编译 leafpad:

01.# ybs -i -F -p leafpad

02.* Calculating dependencies...

03.[E] dev-util/pkgconfig_0.23

04.[E] app-admin/gamin_0.1.10

05.[U] sys-apps/linux-headers_2.6.37 ----> sys-apps/linux-headers_2.6.38.2

06.[E] dev-libs/mpfr_2.4.2

07.[E] dev-libs/gmp_4.3.2

08.[E] x11-libs/xcb-util_0.3.6

09.[E] x11-libs/gtk+_2.20.1

10.[EF] app-editors/leafpad_0.8.18.1
复制代码[EF] 表示已安装,但是还是强制编译

编译单个软件包,不自动编译依赖。这个方式是在已知依赖完全满足的前提下,如果不加上 -p 参数会立即开始编译 leafpad,不计算依赖。

01.# ybs -is -p leafpad

02.* Installing leafpad ...

03.[EF] app-editors/leafpad_0.8.18.1
复制代码更多选项请参考 ybs --help

四、
Ylmf OS 系统以及运行其上的软件,由无数软件包组成。而每个软件包的编译规则则由 pbs 文件控制,可以说 pbs 是 Ylmf OS 的灵魂。而 ybs 方式在某种程度上实现了自动化,同时,通过 pbs 文件,也保持了完全的透明度以及对编译安装流程的控制。

除了分享  ypk 包之外,欢迎大家提交  ybs 文件给我们,同时欢迎有能力的朋友加入开发组,我们将给你一个账户,与开发人员一起维护 ybs 树。请联系  ylmfos@115.com


--------------------------------------------------------------------------------------------------------


FHS标准使得众多的Linux发布包有了可以遵循的标准,使得软件和用户可以预测已经安装了的文件和目录的位置。它定义了如下的内容。
 定义了文件系统中每个区域的用途
 定义了所需要的最小构成的文件和目录
 给出了例外处理和矛盾的特殊例子

--文件名的含义

/bin, binary二进制文件,可执行的命令,非管理的命令

/sbin,管理类的命令,通常只有管理员才能使用

/lib,存放库文件

/etc,配置文件的存放位置

    /etc/sysconfig,服务额外配置文件,及网络设备相关配置文件   

    /etc/init.d 服务管理脚本

/usr,类似于windows的program file系统日常管理软件的安装路径

   /usr/include  头文件存放位置  

  /usr/local(安装第三方软件的路径)

  /usr/local/bin   

/boot,引导文件,系统启动,kernel,bootloader(grub)

/dev ,设备文件所在目录

/home,/root,用户主目录  

lost+found 系统意外关机 未保存的文件

/media(挂载便携性设备),/mnt,挂载点

/misc ,杂项

/opt,option,有些第三方软件,把此目录当作默认安装位置

/proc,内存中的内核相关信息的映射

/sys,像磁盘这样的存储设备或某些总线设备的驱动程序相关属性信息;

/srv,service,服务运行中中间的存放位置;

/tmp,存放临时文件的目录

/var,

    /var/log,日志文件

    /var/run,pid文件

    /var/mail,用户邮件的存放位置


zzz19760225@zzz19760225-PC:~$ locale -a
C
C.UTF-8
en_US.utf8
POSIX
zh_CN.utf8
zzz19760225@zzz19760225-PC:~$ locale -m
ANSI_X3.110-1983
ANSI_X3.4-1968
ARMSCII-8
ASMO_449
BIG5
BIG5-HKSCS
BRF
BS_4730
BS_VIEWDATA
CP10007
CP1125
CP1250
CP1251
CP1252
CP1253
CP1254
CP1255
CP1256
CP1257
CP1258
CP737
CP770
CP771
CP772
CP773
CP774
CP775
CP949
CSA_Z243.4-1985-1
CSA_Z243.4-1985-2
CSA_Z243.4-1985-GR
CSN_369103
CWI
DEC-MCS
DIN_66003
DS_2089
EBCDIC-AT-DE
EBCDIC-AT-DE-A
EBCDIC-CA-FR
EBCDIC-DK-NO
EBCDIC-DK-NO-A
EBCDIC-ES
EBCDIC-ES-A
EBCDIC-ES-S
EBCDIC-FI-SE
EBCDIC-FI-SE-A
EBCDIC-FR
EBCDIC-IS-FRISS
EBCDIC-IT
EBCDIC-PT
EBCDIC-UK
EBCDIC-US
ECMA-CYRILLIC
ES
ES2
EUC-JISX0213
EUC-JP
EUC-JP-MS
EUC-KR
EUC-TW
GB18030
GB2312
GBK
GB_1988-80
GEORGIAN-ACADEMY
GEORGIAN-PS
GOST_19768-74
GREEK-CCITT
GREEK7
GREEK7-OLD
HP-GREEK8
HP-ROMAN8
HP-ROMAN9
HP-THAI8
HP-TURKISH8
IBM037
IBM038
IBM1004
IBM1026
IBM1047
IBM1124
IBM1129
IBM1132
IBM1133
IBM1160
IBM1161
IBM1162
IBM1163
IBM1164
IBM256
IBM273
IBM274
IBM275
IBM277
IBM278
IBM280
IBM281
IBM284
IBM285
IBM290
IBM297
IBM420
IBM423
IBM424
IBM437
IBM500
IBM850
IBM851
IBM852
IBM855
IBM856
IBM857
IBM860
IBM861
IBM862
IBM863
IBM864
IBM865
IBM866
IBM866NAV
IBM868
IBM869
IBM870
IBM871
IBM874
IBM875
IBM880
IBM891
IBM903
IBM904
IBM905
IBM918
IBM922
IEC_P27-1
INIS
INIS-8
INIS-CYRILLIC
INVARIANT
ISIRI-3342
ISO-8859-1
ISO-8859-10
ISO-8859-11
ISO-8859-13
ISO-8859-14
ISO-8859-15
ISO-8859-16
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
ISO-8859-9E
ISO-IR-197
ISO-IR-209
ISO-IR-90
ISO_10367-BOX
ISO_10646
ISO_11548-1
ISO_2033-1983
ISO_5427
ISO_5427-EXT
ISO_5428
ISO_646.BASIC
ISO_646.IRV
ISO_6937
ISO_6937-2-25
ISO_6937-2-ADD
ISO_8859-1,GL
ISO_8859-SUPP
IT
JIS_C6220-1969-JP
JIS_C6220-1969-RO
JIS_C6229-1984-A
JIS_C6229-1984-B
JIS_C6229-1984-B-ADD
JIS_C6229-1984-HAND
JIS_C6229-1984-HAND-ADD
JIS_C6229-1984-KANA
JIS_X0201
JOHAB
JUS_I.B1.002
JUS_I.B1.003-MAC
JUS_I.B1.003-SERB
KOI-8
KOI8-R
KOI8-RU
KOI8-T
KOI8-U
KSC5636
LATIN-GREEK
LATIN-GREEK-1
MAC-CENTRALEUROPE
MAC-CYRILLIC
MAC-IS
MAC-SAMI
MAC-UK
MACINTOSH
MAC_CENTRALEUROPE
MIK
MSZ_7795.3
NATS-DANO
NATS-DANO-ADD
NATS-SEFI
NATS-SEFI-ADD
NC_NC00-10
NEXTSTEP
NF_Z_62-010
NF_Z_62-010_(1973)
NF_Z_62-010_1973
NS_4551-1
NS_4551-2
PT
PT154
PT2
RK1048
SAMI
SAMI-WS2
SEN_850200_B
SEN_850200_C
SHIFT_JIS
SHIFT_JISX0213
T.101-G2
T.61-7BIT
T.61-8BIT
TCVN5712-1
TIS-620
TSCII
UTF-8
VIDEOTEX-SUPPL
VISCII
WIN-SAMI-2
WINDOWS-31J
zzz19760225@zzz19760225-PC:

[ Last edited by zzz19760225 on 2017-11-11 at 18:11 ]
作者: zzz19760225     时间: 2017-6-14 01:57
1

[ Last edited by zzz19760225 on 2017-11-11 at 18:11 ]
作者: zzz19760225     时间: 2017-6-14 01:58
1
请问有没有模拟器/虚拟机可以跑龙芯的桌面系统?            :thaiqi
http://ask.loongnix.org/?/question/111
在 QEMU 模拟运行龙芯操作系统                                    : 龙芯梦兰WIKI
http://dev.lemote.com/wiki/index.php?title=在_QEMU_模拟运行龙芯操作系统
这里有一个使用qemu运行龙芯内核的课件。                    :iapcmloongson
http://ftp.loongnix.org/toolchain/qemu/
2
(精品)(Docker系列之一)龙芯Fedora21平台上解决docker 1.12.2退出问题   ------------------------   :loongnix
http://ask.loongnix.org/?/article/80
(精品)(Docker系列之二)龙芯Fedora21平台制作docker镜像,并且解决vi乱码问题  ---------------   :huangxg
http://ask.loongnix.org/?/article/81
(精品)(Docker系列之三)龙芯Fedora21平台制作feodra21-tools docker镜像  ------------------------  :huangxg
http://ask.loongnix.org/?/article/82
(精品)(Docker系列之四)龙芯Fedora21平台制作feodra21-apache-php-mysql docker镜像          :huangxg
http://ask.loongnix.org/?/article/85
(精品)(Docker系列之五)龙芯Fedora21平台制作feodra21-loongson-app docker镜像  ------------  :huangxg
http://ask.loongnix.org/?/article/86
(精品)(Docker系列之六)龙芯平台搭建容器管理工具dockerUI,并解决dockerUI启动容器的bug    :renyafei
http://ask.loongnix.org/?/article/84
(精品)(Docker系列之七)龙芯Fedora21平台上传docker镜像到docker hub  -------------------------   :huangxg
http://ask.loongnix.org/?/article/87      
(精品)(Docker系列之八)Fedora21部署Docker registry   --------------------------------------------------   :mangoooo
http://ask.loongnix.org/?/article/88
(精品)(Docker系列之九)龙芯Fedora21平台portainer部署方案   ----------------------------------------   :jiangxinshang
http://ask.loongnix.org/?/article/90
(精品)(Docker系列之十)搭建龙芯平台Docker Swarm集群    ---------------------------------------------  :mangoooo
http://ask.loongnix.org/?/article/91
(精品)(龙芯公有云系列之一)搭建分布式存储服务etcd     -------------------------------------------------  :renyafei
http://ask.loongnix.org/?/article/93
(精品)(Docker系列之十一)龙芯平台kubernetes集群编译及部署方案  ---------------------------------  :jiangxinshang
http://ask.loongnix.org/?/article/105

[ Last edited by zzz19760225 on 2017-12-25 at 11:16 ]
作者: zzz19760225     时间: 2017-6-14 01:58
十进制网络信息科技有限公司
http://www.em777.net/dnss.html
数字域名规范
http://www.em777.net/1.html

XV6教学系统
https://th0ar.gitbooks.io/xv6-chinese/content/content/chapter0.html

[ Last edited by zzz19760225 on 2017-10-12 at 06:19 ]
作者: zzz19760225     时间: 2017-6-14 01:58
1
作者: zzz19760225     时间: 2017-6-14 01:58
熊谱翔
RT-Thread实时嵌入式操作系统创始人
21 人赞同了该回答
好像有些人问到,我大体说下可能的方式。

首先一个,你学习的目的是什么?有学习最好是有实践,仅是学习没有最终的实践会很快就忘了的。所以总体的步骤是:学习,实践;实践中遇到问题,再回过头来究些细节;如此反复,终能够掌握/精通整个系统。

言归正传,说说如何有效学习RT-Thread。

0. 请预备好C语言基础知识;知道基础的C语言代码应该如何编写;写了代码,编译出错时知道如何进行修正;

1. 找一套开发板进行上手;因为考虑到代码调试的缘故,建议选择stm32或nxp lpc系列处理器的开发板。花些时间,基本上不用怎么修改代码的,把kernel + shell跑起来。<这个也是熟悉开发环境、建立工程的过程(也可以了解如何用命令行生成出Keil MDK/IAR等的工程文件)>

2. 能够把基本的kernel + shell跑起来,实际上已经进入了RT-Thread的门槛了,加个小代码,写个"Hello RT-thread\n"的打印应该是没问题了。在这个基础上,下一步就是实时操作系统学习的范畴了。经典的(实时)操作系统问题可以是两个:生产者消费者问题;哲学家问题。可以查找相应的问题描述,然后在开发板上都实现了(最好是能够以多种方式)。<通过使用RT-Thread提供的机制解决这些问题,应该基本上能够了解如何在RT-Thread中创建多任务,多任务之间同步,及任务间通信可以怎么进行等> 在这个过程中如果对操作系统一些基础知识还有不明白的地方,可以找一些书籍查看下。2017年,基于RT-Thread应该也会有一本这样的书出来,可以对照着阅读。

3. 解决了生产者/消费者、哲学家的问题,基本上应该说对RTOS已经入门了(这里可不仅仅是说RT-Thread哦)。那么接下去可以浏览熟悉、使用一些RT-Thread其他的部分,例如定时器,内存管理等,当然也有必要了解下RT-Thread的设备框架,最简单的:如何使用一个串口设备,也可以看看shell中是如何操作串口设备的。这里,那份《RT-Thread编程指南》是最重要的参考,可以好好读读,有问题大多也能在其中得到答案。<如果打算长期使用RT-Thread,其中的设备框架还是很有必要去了解(不一定说非常熟悉),因为RT-Thread的一个原则是能够以一个整体的方式来使用,相互之间能够融为一体;外围周边组件当要涉及到底层操作时都是基于RT-Thread的设备模型来进行,从而实现各个芯片平台的可移植性>

4. 了解RT-Thread的组件。RT-Thread的核心组件包括:实时内核;命令行shell;文件系统;TCP/IP网络协议栈等。再之后的,则是围绕着这些试图兼容POSIX的标准接口。按照这样的原则,针对文件系统、TCP/IP网络协议栈,RT-Thread(试图)提供的都是标准的接口,希望能够做到快速上手快速迁移,所以当使用这部分组件而不知道如何使用时,可以交叉着寻找些POSIX资料也是非常有帮助的。到了这步,实际上应该是和实践密切相关的了,没有实践,这部分也会非常快速忘掉。

学习RT-Thread的步骤基本上可以按照类似的方式来,到了第4步,则是进入到学习/使用的长期过程。前面的入门时间应该不长的,特别是有一定指导下,这个时间应该更短。以往我的经验是可以制定出一个个小任务的方式来进行,完成它快速获得实战经验。原来也编写过一份简短的《RT-Thread实验手册》,不过只有题目,没有答案,公开到网上大家多只是浏览浏览,缺少实际的动手环节。

https://www.zhihu.com/question/23147481#answer-50157520                知乎回答      怎样学习RT-Thread,感觉看起来一知半解!有什么推荐的学习方法!?

http://www.rt-thread.org       主页
http://www.rt-thread.org/book/book.html      手册
http://www.rt-thread.org/dokuwiki/doku.php?id=获取rt-thread源码                             
https://github.com/RT-Thread/rt-thread




RTLinux

[ Last edited by zzz19760225 on 2017-8-19 at 20:11 ]
作者: zzz19760225     时间: 2017-6-14 01:58
shawlee:
psp模拟器就是mips的,和龙芯类似。

[ Last edited by zzz19760225 on 2017-12-8 at 12:45 ]
作者: zzz19760225     时间: 2017-6-14 01:58
用户使用手册
直流可编程电子负载   型号 IT8510
版权归属于艾德克斯电子(南京)有限公司
Ver2.0/Jan, 2010/ IT8500-401
http://www.go-gddq.com/down/2012-02/12022908078144.pdf


全军武器装备采购信息网
http://www.weain.mil.cn/gfzl/

[ Last edited by zzz19760225 on 2017-8-21 at 12:49 ]
作者: zzz19760225     时间: 2017-6-14 01:59    标题: 专访用毛泽东思想创“芯”的胡伟武

专访用毛泽东思想创“芯”的胡伟武:CPU自主化要打持久战
分享到:02
2015-07-24 18:14:35字号:A- A A+来源:中国科学报
关键字: 龙芯胡伟武龙芯中科毛泽东思想龙芯CPU
胡伟武,昔日龙芯研制组的组长,如今龙芯中科的掌门人。因为龙芯,他近几年在媒体的曝光率比过去高很多。他给媒体留下最深刻的印象,是“用毛泽东思想创‘芯’”。事实上,胡伟武对毛主席十分崇拜:他的胸前总是别着一枚毛主席像章;2002年“龙芯一号”诞生之时,胡伟武和一群人打车去天安门,去毛主席纪念堂报告了成功的消息之后才回去睡觉。

胡伟武
龙芯CPU的诞生,实现的是“结束了用洋人的CPU造计算机的历史”,而随后要把龙芯CPU产业化、构建自己的生态体系,则需要这位“龙芯之父”打一场“持久战”,用他的话说,“就像长征”。
多年过去了,龙芯CPU现在处于何种发展水平?它的发展背后有哪些故事?掌门人胡伟武的“长征”走得如何?不久前,《中国科学报》记者在曙光2015创新技术大会、第三届中国指挥控制大会上两度专访了胡伟武,对这位龙芯掌门人的创业理念和心路历程有了进一步的认识。

实现CPU自主化要打持久战
《中国科学报》:此前在微处理器领域,向来是美国的Intel和英国的ARM独霸市场,全世界都在用这两款CPU。龙芯的研发和产业化是在何种背景下提上日程的?
胡伟武:咱们国家最早在制订“863”高技术计划的时候,考虑到集成电路太“费钱”,自主CPU并没有列入支持。直到“十五”时期,“863”计划开始支持自主CPU的研发,开始做样片、提高技术,按照“核高基”重大专项把“863”的CPU成果导入产业。
当时要求研发和产业进行结合,但是科技和产业“两张皮”的问题没有彻底解决,走过弯路,受过挫折。从“十二五”开始,有关部门在安全应用领域开展应用和试点,明确“以应用牵引”的路线,从国防装备到党政办公再到重要行业,正在经历从模仿到超越、从低端到高端的进程。在这种情况下,产生了龙芯。
《中国科学报》:我们自主的CPU起步晚、上下游产业链不成熟,那么龙芯在发展的策略是什么样的?
胡伟武:打持久战。应该清醒地看到发展自主可控的信息产业体系绝非易事,需要长时间的积累,无所作为的怀疑论和盲目乐观的速胜论都是错误的。我们要在战略上藐视它,在战术上重视它,这是我国发展自主知识产权微处理器和信息产业时应遵循的一个基本原则。
今年我们加入了中科曙光和神州数码共同发起“龙安联盟”。从龙芯的角度来看,这是一个市场行为的联盟。这个联盟让我们在自主产业生态中不用孤军奋战,我们希望通过联盟的方式,可以实现从单品到整个系统的好用,同时也希望和曙光这样的自主品牌企业一起搭建完整的生态环境,让我们国家整体的信息系统应用推广达到新的高度。
“我们的使命是在自由市场实现自主性”
《中国科学报》:“棱镜门”事件以来,现在信息产业到处都在提信息安全、自主可控。龙芯的事业就是做中国人自己的芯片,也是国家信息安全赋予的责任。你对这个问题怎么看?
胡伟武:我认为中国IT产业的根本出路在于建立自主体系。要改变目前中国IT产业受制于人的局面,光靠其中一两项核心技术或一两个产品的突破是不管用的,必须建立起自主可控的信息产业体系,就像“两弹一星”时代我们的先辈建立起自主可控的工业体系一样。
自主体系有利于自主创新和持续改进。建立自主可控的软件技术体系,就能基于该技术体系进行持续改进,形成螺旋上升,否则在别人的技术体系中跟着升级,永远没有超越的机会,只能永远落后。苹果iPad用的CPU性能比Intel的桌面CPU性能至少差一个数量级,但苹果公司坚持建立自主的软硬件体系,才有了今日的局面。
《中国科学报》:你一直在强调“应用牵引”,并提出“自主CPU应当在与应用结合的过程中,逐渐从自主软硬件的必然王国走向自由王国”。这句话应该怎样理解?
胡伟武:我们这一代人的使命是在市场化条件下实现自主性。自主软硬件的发展之路在我看来要分三步走,首先满足单一应用,现在自主软硬件满足基于嵌入式OS的单一应用如武器装备、工业控制等已经没问题,最开始的高性能计算机也是单一应用。
其次是满足固定应用,现阶段正在结合办公系统、指挥系统等复杂的固定应用开展适配优化工作,这些应用涉及OS、数据库、中间件、浏览器、办公软件、Flash、GIS等,虽然复杂,但有边界。再经过2~3年努力,自主软硬件可满足于国家安全及国民经济安全相关的固定应用。
最后是满足开放市场应用,只要自主软件在固定应用市场站住脚跟,整个市场占有超过5%,就能吸引大量的软件和应用主动加入自主软硬件生态系统,在开放市场形成自主的生态。
我们的方针要放在什么基点上?自力更生。判断技术是否先进的标准,不是看跟美国跟得紧不紧,而是看其跟应用结合得紧不紧。自主CPU应当在与应用结合的过程中,逐渐从自主软硬件的必然王国走向自由王国。
不做“跟班” 打造龙芯生态
《中国科学报》:CPU的产业链很长,从CPU到最终的消费者中间还有五六道关口,所以做CPU离不开生态系统。作为比较新的微处理器厂商,龙芯在打造产业生态环境方面有哪些努力?
胡伟武:我们去年年底的一项统计,龙芯下游,围绕龙芯做软硬件开发的工程人员已经达到了上万人,虽然还比较少,但是已经有一定的规模了。龙芯跟其他企业根本性不同就是,我们致力于基于已有的软硬件基础构建新的生态。
国际上现在两大集团:Windows+Intel和ARM+谷歌,中国的软硬件企业都是在这两个生态里面。我在前面提到未来中国的IT产业的根本出路就是要建立第三极,就是要建立自己的生态,如果我们是ARM阵营或者是因特尔阵营的,永远是一个跟班。现在龙芯国内联合了很多企业,另一方面,龙芯也在开源社区作了很多贡献,如果我的源代码贡献最多,软件就会跟我走,这个生态就跟我走。
《中国科学报》:你未来乐见的龙芯建立起的生态是什么样的?预计什么时候可以初见规模?
胡伟武:就是满足开放市场的开放应用。比如说要玩股票,现在做股票软件的有苹果版、安卓版,还要有个龙芯版,这才叫开放应用的生态。我们希望这个生态的建设是在“十三五”之后、“十四五”开始。
工信部有一个统计,当CPU的市场占有率超过5%时,企业就会主动适配。现在很多企业跟龙芯适配就是因为有市场。我们也看到了很好的苗头,“十一五”“十二五”初期的时候,龙芯的客户主要是“体制内”企业,现在有很多“体制外”企业,像研华工控——它在世界上工控领域的地位有点类似联想在PC领域的地位,并没有国家项目让它来做龙芯(工控板等),但他们自行投入做了龙芯的很多款产品,为什么?它也是面向很多市场的。我认为经过“十三五”的努力,2020年前后,在复杂的固定应用市场站住脚跟之后,就可以把自由市场吸引过来,这是我们目前的计划。
“现在喜欢和客户打交道”
《中国科学报》:你在主题发言中提到,龙芯目前已经实现了盈亏平衡。我们也关注到今年3月底我国发射了首枚使用“龙芯”的北斗卫星,更不必说龙芯拥有曙光这样的战略合作伙伴,有专门的服务器产品使用龙芯处理器。能否简介一下现在龙芯中科的发展处于一个怎样的阶段?
胡伟武:可以说经过多年的努力,龙芯中科公司正在从创业期进入高速增长期,走上了可持续发展道路。龙芯CPU近年来销售收入高速增长,2015年达到盈亏平衡。我刚才提到一个数字,目前基于龙芯CPU的软硬件研发人员达到上万人,经过特别是近三年的努力,龙芯中科公司在处理器设计和软件生态方面“补课”已基本完成,已经进入到自主发展的新阶段。
《中国科学报》:我们国家提倡对民族自主创新产业要“扶上马,送一程”,龙芯应该说是“扶上马,送一程”的典型代表。从“扶”和“送”到办企业闯市场,你有哪些深刻体会?
胡伟武:“扶上马”是对研发的支持,因为高科技产业需要技术的积累;“送一程”就是送到市场上去。我们CPU的发展从最初的“863”项目支撑,到核高基转向,可以说完成了技术指标,没有完成产业化指标。然后政府开始把支持的重心转向“用”,是对市场化初期的支持。
但是路是要靠自己走的,不能总靠送。政府是送一程,而不是送终身。企业要在这个过程中长出能力来,包括技术能力、市场能力和管理能力。
后来我们开始办企业,体会最深刻的是,刚开始觉得客户太难伺候了——龙芯这样的企业申请一个国家项目,要一两千万还是没问题的,但是到客户那儿五万十万都很难要;2014年开始,这种感觉变了。只要我们把产品做好了,客户真给你钱,没二话,甚至有时候我们觉得是卖方市场。所以后来心态就变了,现在喜欢跟客户打交道。
关联阅读:
龙芯首席设计师胡伟武:坚持毛泽东思想搞研发(摘选)
记者 齐介仑
记者:我在会议室看到了靠墙正中的毛泽东半身雕像,你崇拜毛泽东?
胡伟武:我是毛泽东的粉丝,你看我的毛泽东像章(胡伟武指着T恤上别着的像章说)。
记者:为了宣传,还是内心果真崇拜毛泽东?胡伟武:以前我在网络上写过一篇文章,讲毛泽东思想,我说的是,如果龙芯课题组不坚持这一点,我们就不可能立住足,只有坚持这条道路我们才会赢,炒作的事情我们是不干的。
学习毛泽东思想,主要学三个方面:第一,学他的精神。你看毛泽东,他一辈子碰到了无数的困难,但他从来没有被困难吓倒过,他克服了所有的困难。他碰到过无数的敌人,从来没有被敌人所吓倒,而是他吓倒了所有的敌人。就这一点,不单是他的那些同志们所承认,他的对手也是承认的,这需要一种精神,为什么我们中国人上百年来受屈辱,八国联军打到北京的时候,才188811人,竟然把圆明园给烧了,为什么却是那些不识字的农民被共产党组织起来、被毛泽东组织起来,就能把美帝打败呢?这需要一种精神。所以,以前看网上一篇文章说,我们不怕中国军队现代化,我们怕中国军队毛泽东化,美国人说的。
毛泽东化就是革命化,那叫战无不胜,这个精神也不是毛泽东的发明,这是中华民族几千年来尤其是汉唐以来自强不息的精神,只是后来,好像一块金子,表面上粘了一层土,不发光了,毛泽东和他的战友们把它擦开,擦亮了,让它重新发光。我们龙芯有多少困难?酸甜苦辣都有,没有这个精神是克服不了的。经常有人问我,说你才有多少多少人,人家国外研发经费有多少多少,人家研发团队有多好多好,你怎么能干得过呢?
我说,星星之火可以燎原,决定一个事情成败的,不在于它现在是否已经强大了。如果按照它的理论,共产党早就被国民党剿掉了,一次围剿就灭了。是不是符合历史发展规律,是不是得到广大人民群众的拥护,这一点很重要,中国人民不可能在西方国家获得暴利的情况下完成中国信息化的,这是由我们的国情决定的。我们要找到人民大众拥护的事情,所以我们要学习他的精神。
第二点,学方法。毛泽东一辈子做事情从来都是抓主要矛盾。最善于从实践中学习。他是军事天才,他没读过几本军事著作,他是在实践中学习,我们也需要,他带领全国人民完成了全国性的原始积累。你和印度比一比就知道了,建国初期,中国的钢材拥有量不足以让全国的妇女一人戴上一个发卡。
最重要的是要学毛泽东的立场。他永远都站在工人农民的一边,人民群众的一边,所以我经常说,龙芯的根本出路就是信息化为人民服务,真正让中国50%-60%的人享受到信息化带来的好处,而不是为了谋取利益,这是我们取胜的根本,是我们的核心价值观,不学这个东西是不行的。我们的团队极其稳定,最优秀的学生都留下来为龙芯服务了,这在中国的科研队伍中是极其罕见的。外企几倍的待遇,我们的核心成员没有说要走的。记者:听说你每天都在办公室睡?
胡伟武:毛主席早就说过了,我们还要务必保持谦虚谨慎的作风。你看我们国家,为什么是个大国?为什么人家承认我们是大国?有人说中华民族从来不缺汉奸,还有一句话说,中华民族从来不缺脊梁。你看上世纪初的时候,孙中山是脊梁,四五十年代的时候,毛泽东是脊梁,五十年代的时候,志愿军战士是脊梁,六七十年代,两弹一星的人是脊梁。而现在改革开放需要一批新的脊梁,科研人员应该承担起自己的责任,累点是没关系的,本来就得艰苦奋斗,人家比你先进那么多,你也跟他一样八小时上班,你又不比他聪明多少,条件你不如人家,凭什么你就比人家强啊,凭什么你就能赶上去啊?还是说要靠毛泽东的精神。我以前在文章中也写过,2001年-2005年,五个春节,五个“十一”,五个“五一”,我们只歇了两个春节,就是这样过来的嘛。
记者:你觉得这样走下去就是你的人生意义了吗?
胡伟武:我的导师夏培肃院士和李老师(李国杰——记者注)都是我的榜样。真的是这样,一个人只有把自己的前途和命运,跟国家、跟民族的命运结合在一起,他的前途才是最辉煌的,他的利益才是最大的。我刚毕业的时候,我的同学都在外企、在国外,都拿到很多钱,当时我的导师就老是教育我,要为国家做事情,现在反过来他们非常羡慕我,羡慕我有这样的条件,能够为国家做贡献。实际上,从某种意义上讲,我是很幸运的,碰到了很好的老师,碰到了很好的领导,并能够有这样一个机会,把自己的前途和命运与国家的前途、命运在某种程度上联系在了一起,对一个科研人员来说,对一个知识分子来说,这是他的最大出路。
不是有一个成语吗,道高一尺,魔高一丈,以前修道的人,道行增加一尺,心魔增加一丈,做学问也一样,你的水平提高一尺,你的欲望,包括名啊利啊、当官啊挣钱啊,会十倍速地增长,那你要克服这些东西。前一阵子有一个专家和我说,小胡啊,以前人家夸我能干,现在人家夸我能喝,你可千万不要成为我这样的人啊。这句话对我是有警示作用的。我希望自己永远都是一个连长,永远发出的命令是“跟我上”,而不是“给我上”,我希望成为那样的一个科研人员。你接受媒体采访多了,在社会上担任责任多了,给人的感觉是,唉,这个人是“忽悠”的一个人吧,我不愿意给人这样一个感觉,我也希望你们媒体不要太离谱。

[ Last edited by zzz19760225 on 2017-6-17 at 00:37 ]
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 01:59
1
作者: zzz19760225     时间: 2017-6-14 02:00
1
作者: zzz19760225     时间: 2017-6-14 02:00
1
作者: zzz19760225     时间: 2017-6-14 02:00
1
作者: zzz19760225     时间: 2017-6-14 02:00
1
作者: zzz19760225     时间: 2017-6-14 02:00
1
作者: zzz19760225     时间: 2017-6-14 02:00
十进制网络是什么?IPv9又是什么?
祝贺中国主权网络关键技术标准横空出世

中华人民共和国工业和信息化部公告2016年第3号,公告批准643项行业标准,包括电子行业标准132项、通信行业标准67项。在这一堆枯燥繁缛的编号和名称中,人们很难了解并注意到,公告附件所列序号529-532号标准SJ/T 11603-2016、SJ/T 11604-2016、SJ/T 11605-2016、SJ/T 11606-2016,竟然是“十进制网络与英特网两种网络互联互通”的技术要求、实施要求、解析架构和标识格式!

十进制网络是根据中国知名发明家谢建平为发明人和专利权人的《采用全数字码给上网的计算机分配地址的方法》,基于0-9十进制算法的IPV9协议,即主要由IPV9地址协议、报头协议、过渡期协议和数字域名规范等构成的十进制网络系统。

2001年9月11日,原国家信息产业部科学技术司信科函〔2001〕96号通知,“决定成立十进制网络标准工作组”,“是我国十进制网络应用领域负责标准制(修)订工作的技术组织,”授权联合社会各方面的力量,制定具有自主知识产权的IPV9报头、地址和基于IPV9协议的数字域名技术标准。谢建平为工作组长,中国电子技术标准化研究所、中国国家信息安全测评认证中心、中国科学技术大学、中国互联网信息中心、中国电信北京研究院、中广有线信息网络公司、航天信息股份公司、中兴通讯股份公司、上海市信息化办技术中心、总参和总装备部所属机构等30余家单位为工作组成员。追溯到上世纪谢建平等研发、申请专利的砥砺过程,真可谓“二十年磨一剑”!




http://www.haijiangzx.com/2017/0129/1616231.shtml

(原创)中国IPV9是治理美国IPV6顽疾的利器
来源:海疆在线 2017/01/29 11:12:01 作者:牟承晋
字号:AA+

导读: 为什么?为什么我国一定要追随美国的网络空间技术和战略?为什么?为什么我国迄今不能建设、发展自己的主权网络空间?为什么?为什么我国主导和拥有自主知识产权的IPV9/未来网络空间技术与指导理念得不到普遍的重视、推广和应用?

一、前言

网络空间已经成为人类现代和未来世界不可或缺的重要组成部分,成为融合、叠加、覆盖陆海空天疆域的全方位、多层次、多维度时空主权概念,成为国计民生重要的生产、生活与科技发展领域。

然而,1994年全面接入美国因特网、基于因特网IPV4技术构建的“中国互联网”,竟然是中国没有主权、从根本上完全受制于美国的网络空间。

2003年,美国国防部发表备忘录,提出在美国军方规划实施的“全球信息网格”(Global Information Grid,GIG)中全面部署因特网的“下一代技术”IPV6。2012年,白宫发布部署IPV6的决定,要求所有美国政府机构的服务器和类似于电子邮件与网站的服务升级到IPV6,并要求美国政府机构在2014财政年度之前升级使用服务器的内部应用程序,并且让企业网络兼容IPV6。

何其相似乃尔。2016年12月,我国新近发布的《“十三五”国家信息化规划》,要求到2018年大规模部署和商用IPV6,到2020年全面升级至IPV6。这几乎就是美国国防部和白宫部署、升级IPV6的直接翻版。

为什么?为什么我国一定要追随美国的网络空间技术和战略?为什么?为什么我国迄今不能建设、发展自己的主权网络空间?为什么?为什么我国主导和拥有自主知识产权的IPV9/未来网络空间技术与指导理念得不到普遍的重视、推广和应用?

20多年来,我国军民耗费大量人力物力财力和改革开放、韬光养晦的宝贵时光,抵制渗透,堵塞漏洞,克制木马,反击黑客,几乎穷尽网络安全努力,却始终不得要领。

国家互联网应急中心发布的报告显示,2015年,“中国互联网”发现10.5万余个“木马”和“僵尸”网络控制端,控制我国境内1978万余台主机,其中61%的控制端在境外;在约18万起假冒网站安全事件中,83%的攻击源来自境外。该中心最新发布的2016年12月19日-25日一周的网络安全信息动态周报显示,本周境内感染网络病毒的主机数量84.1万个,其中包括被“木马”或“僵尸”程序控制的主机61.8万以及境内感染飞客(conficker)蠕虫的主机约22.3万;境内被篡改网站3050个,其中政府网站70个;境内被植入后门网站1608个,其中政府网站50个;针对境内网站的仿冒页面1997;新增信息安全漏洞360个,其中高危漏洞137个。

为什么?为什么全面接入美国因特网的“中国互联网”如此脆弱不堪?为什么?为什么我国网络空间安全事件防不胜防、愈演愈烈?

建设、发展和维护不受制于人、不受制于美国和任何境外势力的中国主权网络空间,从根本上创造网络空间安全和全球互联网“共治、共管、共享”必不可少的先决条件,我们究竟还要等到什么时候?

中共中央领导核心、中国国家主席习近平2013年12月20日在沈昌祥、倪光南等院士的建议上批示:“计算机操作系统等信息化核心技术和信息基础设施的重要性显而易见。我国在关键技术和设备上受制于人的问题必须及早解决。”“集中优势力量协同攻关,实现突破进而以点到面,整体推进,为确保信息安全、国家安全提供有力保障。”

习近平2016年10月9日在主持中央政治局实施网络强国战略的学习时强调:“要理直气壮维护我国网络空间主权,明确宣示我们的主张。”

习近平2016年11月6日在“第三届世界互联网大会”视频讲话中再次郑重声明:“中国愿同国际社会一道,坚持以人类共同福祉为根本,坚持网络主权理念,推动全球互联网治理朝着更加公正合理的方向迈进,推动网络空间实现平等尊重、创新发展、开放共享、安全有序的目标。”

“主权在我,不受制于人”,是习主席指引中国军民建设、发展和维护我国主权网络空间的核心指导思想,是我国网络空间领域成千上万爱国专家、学者及从业人员敬业、奋斗的根本职责、最大动力、明确方向和事业目标。

二、IPV6和IPV9的技术定位

20世纪90年代初,ISO/IEC等国际组织、美国IETF“因特网工程任务组”,分别展开了对未来网络技术和下一代因特网技术的研究探索,其中包括IPV9和IPV6。

1、IPV6

1994年,美国因特网工程任务组提出IPV6演进解决IPV4地址域名不足的设想,并在1995年放弃对IPV9有组织的研究后重点转入IPV6。2006年,隶属美国因特网工程任务组的下一代过渡工作组(the Next Generation Transitions, the ngtrans)与6bone项目合作进行的IPV6测试结束。2007年开始,美国因特网工程任务组多次在国际会议上推荐IPV6为替代IPV4的下一代因特网协议。

1998年,中国教育与科研网CERNET第一次搭建IPV6试验床。2003年,国家发改委主导的“中国下一代互联网示范工程”(CNGI)成立,提出了2012年到2015年“中国互联网”整体跃入IPV6时代的意见。这与美国国防部提出在美国军方规划实施的“全球信息网格”中全面部署IPV6,时间点吻合。

2012年6月1日,中国工信部颁布的《基于IPV6的下一代互联网体系架构》标准开始实施。这与美国政府要求所有美国政府机构的服务器和类似于电子邮件与网站的服务升级到IPV6,时间点吻合。

IETF是美国因特网工程任务组(Internet Engineering Task Force)的简称,1985年底成立于美国,是一家专注由美国阿帕网演变而来的因特网技术规范研发的“民间协定标准组织”,其成员都是志愿人员,75%是美国相关人员,在全球发展会员。

IETF产生两种文件,一类是“因特网草案”(Internet Draft),另一类是“意见征求书”(RFC,Request For Comments)。

值得注意的是:

——美国政府长期以来“国货优先”的采购制度,包括与政府采购相关的约500部法律,最主要的有《武装部队采购法案》、《联邦财产及管理法案》、《联邦政府采购政策办公室法案》、《联邦采购合理化法案》、《购买美国产品法》等,其中明确将IETF和IEEE(美国电气和电子工程师学会简称,非盈利的专业科技交流组织)列为“民间协定标准组织”,纳入第三序列采购对象。

——IPV6是IETF正式推荐的下一代因特网标准,是为解决IPV4地址先天不足提出的演进版,与ISO/IEC和ITU及其倡导的“新一代互联网”技术体系无关。

中国下一代互联网(IPV6)示范工程专家委员会主要负责人宣称,IETF在新的RFC标准中,要求停止新设备和新扩展协议兼容IPV4,希望未来的新协议全部在IPV6基础上进行优化。他们一再呼吁,中国必须全面向IPV6过渡,加快下一代互联网的大规模商用。他们竭力撺掇中国政府、中国企业、中国用户大规模投资研发、制造和使用IPV6网络设备和基础设施。他们与美国到底有什么过从甚密、撕扯不开的关系?值得他们如此鹦鹉学舌、邯郸学步,不遗余力地兜售美国军方和美国政府专属、专注的IPV6?

2、IPV9

美国因特网工程任务组1992年在RFC1347号技术文献中首次提出IPV9构想,早于其提出IPV6两年,并曾成立专门机构TUBA研究IPV9。1994年10月,IETF在RFC1700号技术文献中,第一次分配了IPV9版本号。1995年5月22日,TUBA关闭,据称是美国政府的“星球大战计划”下马所致。IETF从此终止、放弃了有组织的IPV9研究活动。

1993年前后,中国专家谢建平等基于RFC1347号技术文献的提示,开始致力于中国IPV9研究。1998年以来,谢建平等基于IPV9研究的技术陆续获得中国、俄罗斯、南非、韩国、加拿大、澳大利亚以及香港、澳门等十多个国家和地区的专利证书。

2001年9月,原信息产业部科技司信科函〔2001〕96号通知,决定成立“十进制网络标准工作组”,“标准工作组组长由上海通用化工技术研究所所长谢建平同志担任”,“制定具有自主知识产权的IPV9协议中的IPV9报头和IPV9地址和基于IPV9协议的数字域名等技术标准”。这是中国深入进行IPV9研究的重大标志性事件,表明中国IPV9研究具有权威性、合法性。

十进制网络标准工作组最初的全权成员单位包括但不限于:中国电子技术标准化研究所、信息产业部信息化推进司信息化推进处、信息产业部电信管理局发展规划处、中国互联网信息中心、中国国家信息安全测评认证中心、中国科学技术大学、总参五十六所、总装备部技术基础管理中心、总装备部系统所科技处、航天信息股份有限公司、中广有线信息网络有限公司、上海市信息化办公室技术中心、中国电信集团上海市电信公司、中国国际电子商务中心上海代表处以及上海、北京、浙江、江苏、深圳等地的30多家企业、机构。以后陆续参与合作的单位包括但不限于:信息产业部电子科学研究院、中国科学院计算技术研究所、北京大学、浙江大学、南京大学、南京邮电大学、西安交通大学、华中科技大学、清华大学、中国联通等。上述名单表明,中国IPV9研究具有广泛性、代表性,从一开始就受到来自各方面中国军民的积极支持。

2002年7月,中国信息产业部公布实施基于IPV9的《数字域名规范》国家电子行业标准SJ/T 11271-2002。2007年,中国信息产业部在关于《数字域名规范》的文函概述中称,“十进制网络标准工作组(简称IPV9工作组),开展新一代互联网协议和体系架构的技术研究以及相关的标准研究与制定工作。”“目前《数字域名规范》国家标准已完成公示”。值得注意的是,中国官方正式将“新一代互联网协议和体系架构的技术研究”桂冠和定义赋予IPV9,明确区别于“基于IPV6的下一代互联网体系架构”。IPV9的“新一代”定义,与ISO/IEC国际组织的“新一代”定义和概念,无论内涵和外延都是相一致的。

2010年3月,中国商务部公布实施基于IPV9的《商务领域射频识别标签数据格式》商务部行业标准SB/T 10530-2009。这是IPV9应用于物联网的重要指导性技术标准文件。

2011年,美国联邦专利与商标局正式发布和授予谢建平等基于IPV9研究的“采用全数字编码为计算机分配地址的方法”专利证书。这表明,美国政府正式、公开、依法承认了中国IPV9的合法性、创造性与科学性,受到美国政府和法律的保护。

2014年,中国国家标准化管理委员会〔2014〕46号文件确认,ISO/IEC正式发布的基于IPV9研究引领未来网络国际标准发展理念和思路的指导性文件《命名与寻址》(ISO/IEC TR 29181-2)和《安全》(ISO/IEC TR 29181-5),是由中国专家主导,中国拥有核心知识产权。

2016年6月,中国工信部发布第3号公告,批准和公布了基于IPV9的“十进制网络与因特网互联互通”的4个国家电子行业标准,包括标识格式、技术要求、实施要求、解析架构,即:SJ/T 11603-2016、SJ/T 11604-2016、SJ/T 11605-2016、SJ/T 11606-2016。其中,SJ/T 11605-2016《基于射频技术的用于产品和服务域名规范》,向世界公布了中国十进制网络的根服务器:

2.6 根域名服务器root domain name server

主要用来管理因特网和十进制的主目录。

注:因特网的主目录,全世界只有15台。1台为母根服务器,1台为主根服务器,放置在美国。其余13个均为根域名服务器,其中10台放置在美国,欧洲2台,位于英国和瑞典,亚洲1台,位于日本。所有因特网根域名服务器均由美国政府授权的因特网域名与号码分配机构ICANN统一管理,负责全球因特网域名根服务器、域名体系和IP地址等的管理。十进制网络的主目录,对应因特网的主目录有15台,1台为母根服务器、1台为主根服务器,放置在中国,其余均为根域名服务器,由十进制网络工作组负责十进制网络根域名服务器、域名体系和IP地址等的管理。

3、权威国际组织的认同

ISO是国际标准化组织(International Organization for Standardization )的简称,1946年10月由包括联合国五个常任理事国的25个国家的64名代表正式表决通过成立。主要通过其2856个技术机构开展标准化活动。

IEC是国际电工委员会(International Electro technical Commission)的简称,成立于1906年,现在是联合国经社理事会ECOSOC的甲级咨询组织。

ISO与IEC在电工技术标准化方面长期密切合作。

2007年以来,ISO/IEC各国家成员体逐渐统一认识,确认IPV6明显存在网络设计目标和基本要求的缺陷、不足与局限性,不能作为“革命性全新框架的新一代未来网络”的技术基础。进而,在ISO/IEC的鼓励和支持下,中国专家谢建平等开展了基于IPV9架构的未来网络新命名和寻址机制(网络互连的核心底层机制)预研。

2013-14年期间,美国、俄罗斯、中国、韩国、加拿大等国家成员体接受了谢建平、刘亚东、张庆松等中国专家基于IPV9架构提出的论证与论据,经过PDTR和DTR两个规定议事流程阶段的审核批准,并征得国际电信联盟电信标准分局ITU-T大会同意,ISO/IEC于2014年正式发布了《未来网络问题陈述与要求》的第二部分《命名与寻址》(ISO/IEC TR 29181-2)和第五部分《安全》(ISO/IEC TR 29181-5)。

ISO/IEC TR 29181-2表明,中国专家提出的多长度地址、全数字域名、电路和分组交换三层四层混合架构、先验证后通讯、字符路由直接寻址等应用构想,都已经在中国得到实现、验证和使用的论证与论据,具有很强的说服力。

ISO/IEC TR 29181-5表明,中国专家明确宣示网络空间“国家主权和管理权”的主张,明确指出必须颠覆传统的被动安全防御机制,改变为主动安全管理机制,建立细胞级安全防护体系等。

ISO、IEC和ITU(国际电信联盟简称,联合国负责国际电信事务的专门机构)是美国政府列为第一优先采购序列的指定对象,无论国际权威性、国际信用等级和世界各国官方与科技界、工商界、金融界等的认同度,都是美国“民间协定标准组织”IETF等无法比肩而列、不可望其项背的。

4、小结

上述事实再清楚不过,IPV6是美国推崇的因特网的“下一代”专属技术架构,是为解决IPV4地址不足等缺陷提出的演进版改良技术,是美国政府和法律界定的民间协定标准范畴的技术,是最权威的国际标准组织ISO/IEC各国家成员体一致同意从“革命性全新框架的新一代未来网络”理念中剔除的技术。

中国研究的IPV9,是受到中国、美国、俄罗斯等世界主要国家和地区政府和法律保护的专利技术,是具有合法性、权威性、广泛代表性的国际先进适用技术,是ISO/IEC征得ITU-T同意正式发布的引领未来网络国际标准发展理念和思路的指导性文件的基础,是中国拥有完全自主知识产权、中国政府十多年来已经公布一系列推广应用标准的、适用于建设和发展中国主权网络空间领域的专属技术。

中国科技界和政府主管部门某些人,硬是要给IETF等美国政府和法律认定的“民间协定标准组织”贴上“国际互联网标准组织”的招牌和标签,招摇过市、哗众取宠,应该不会是不学无术、装傻充愣,恐怕深藏司马昭之心吧!

三、IPV6与IPV9主要特点比较

1、设计目标

IPV6采用十六进制算法,以0~9和A B C D E F表示用“;”作分隔符,不能兼容IPV4;IPV6未能解决IPV4应对重大政治事件、自然灾害能力不足的问题,911事件中网络失效是最好的证明。

IPV9采用十进制算法,以0~9阿拉伯数字表示用“[ ]”作分隔符,可以兼容IPV4和IPV6,预计可满足人类750年的网络空间应用需要;IPV9充分考虑了应对重大军事、政治、恐怖、动乱事件的有效防范和保护,确保重特大意外事件发生时网络仍然有效。

2、系统控制

IPV6所依靠的美国因特网母根、主(辅)根域名解析管理服务器主要设在美国,设在日本的亚太根和欧洲的2台根服务器,也都是美国管理控制,美国军方和政府情报安全部门拥有监控全球域名解析的几乎不受限制的特别权利。

IPV9域名解析服务器和IP硬连接服务器及根域名服务器,设计为各国可以自主控制的根域名服务器,允许各国平等合作、联合共管根服务器。

3、安全状况

IPV6声称相比IPV4安全性、可靠性更加完善,更加安全、可信。由于各国没有网络控制权、自主权、知识产权等,安全与否从根本上说决定于美国,各国难以掌控、不能自主,从根本上说就是没法控制。

IPV9完全可以自主决定安全等级、安全系数以及安全控制的权力分配和手段等,从根本上说就是“不受制于人”,不受制于美国、美国政府、美国军方和美国情报安全部门。

4、地址

IPV6的2128位地址为21段,单边压缩,不可循环使用,定长定位、开销大、效率受损,理论上可分配八分之一的地址给终端用户使用,实际地址分配率仅0.01-0.03%。

IPV9的2256位地址,最长可实现22048位地址,为42段,可两边压缩,可循环使用,已超越RFC1606、RFC1607的设想,可像电话系统一样定长不定位以减少和节省不必要的开销成本,增加效率。

5、效率

IPV6必须将RFID编码翻译成域名和地址,必须经过美国控制的交换和解析,人为增加能源消耗和开销,既不环保也不经济。

IPV9可以将RFID编码当成IP地址直接上网,可以就近在境内实现自主控制的交换与解析,节省了能源、开销,环保。

6、联网计算机规模

IPV6联网计算机规模限制在1012~1015 之间,不可用于宇宙通讯、纳米计算机、人体细胞或DNA计算机系统。

IPV9采用循环法,联网计算机规模可按需要设定远远超过IPV6受限规模,可用于宇宙通讯、纳米计算机、人体细胞或DNA计算机系统。

7、协议使用比较

以下比较可以看出,IPV9地址输入无论何种方法都较之IPV4、V6简单、方便、具唯一性,容易识别,有利追溯认证和确定证据。



8、小结

IPV9是我国拥有完全、自主知识产权的网络技术协议, 它具有最权威的国际标准组织公认的新一代未来网络必须具备的三个明显的基本条件:

第一,明显的主权网络基础技术特征;

第二,明显在网络安全、可靠性与可信度方面优于IPV6;

第三,明显在网络可控制性方面优于IPV6。

四、IPV9的重要创新应用

1、从现有IPV4、V6网络平滑过渡到IPV9。

经测试,IPV9已经可以无障碍地穿透现有基于IPV4技术的因特网系统,并可支持IPV6,即可以安全可靠地兼容、覆盖因特网实现IPV9协议的正常运行;因特网现有绝大部分应用功能都可以适应并平滑转移到IPV9网上继续使用,包括且不限于当前以安卓、Windows、Linux等为主的软件用户平台。

这意味着在不影响和改动现有终端IPV4的应用前提下,保持现有应用服务以及增加IPV9的大地址空间和未来网络地址加密、先验证后通讯等功能,就能够构建和逐步升级成为IPV9骨干网;意味着在现有基于IPV4、V6网络上改造、升级、同步建设与发展我国具有自主知识产权的IPV9主权网络,成本低、代价小、实现快、效率高,国内外的用户、商户和网民都容易接受。

2、自主控制管理网络,大大降低网络建设和运营成本。

我国现有网络运行路由,完全受美国控制。美国要求我国基于因特网的所有网站解析信息都要在美国、至少在境外建立镜像备份系统,所有网络信息的解析信息通讯路由指向首先必须去往美国或日本。IPV4如此,IPV6依然如此。经测试,上海到长春之间的信息交换要经过“13跳”,第一“跳”是美国,再“跳”回中国的成都等其他地方,辗转往复13“跳”才能在指定对方落地。

请特别注意,如果美国蓄意修改路由表,我们也只能束手无策、任其摆布,这是严重威胁我国网络空间安全的又一个极其重要的受制于人的因素。

目前,中国必须向美国方面支付的域名地址使用费、网络租用费、软硬件知识产权费以及受制于美国的路由被迫不得不消耗的“信息流通费”等等,约占我国实际信息消费总额的62.5%,同时造成大量国家税收流失。

IPV9可以有效避免路由指向、信令交换和网络镜像受制于美国,有效防止来自美国和境外不怀好意的监控和觊觎,大幅度减少因受制于人而流向美国和境外的信息消费额。预计网络建设和运营的总成本,比较IPV4、V6基础设施的投入规模和运营成本,至少可以降低30-40%。

3、有利于保护网络隐私、打击网络犯罪、制衡来自网络内外的侵扰。

现有基于IPV4、V6构建的因特网,无论技术缺陷导致或是人为制造的安全问题此起彼伏,防不胜防,日趋严重。

IPV9针对因特网协议标准的原创性研究,将改变我国深陷因特网所处的劣势。

IPV9可以赋予每位用户一个与他人不同的数字域名地址,一个可以同本人的出生证号码、身份证号码、银行账号、纳税号码、手机号码、社保号码、护照号码等趋同一致的数字域名号码,实现所有用户真正的实名制,——看不见本人姓名、查得到本人踪迹、用起来便捷可靠的数字“实名制”。用户可以基于个人的IP地址制作个人网页、FTP共享文件服务、IP网络电话和可视电话(计算机到计算机)等,以及广泛应用于身份证、税务发票、个人定制的物流码等。

可以想象,真正的数字“实名制”控制系统,对于政治、经济、社会、文化、教育、科研、生产活动及其管理带来的革命性促进,对于物联网时代打造智慧社会、智慧社区、智慧家庭、智慧服务带来的革命性促进,对于人类和地球奔向未来网际空间(包括但不限于有线无线网络、太空网络、量子通讯网络等)时代的网络空间和网际空间融合发展带来的革命性促进。

IPV9能够改变因特网网上抢注域名和假冒IP的混乱局面。在从设计和技术上切实防范与禁止任何匿名地址进入银行、政府、社会福利、商品流通等社会公共信用网络空间的前提下,不仅可以有条件地保护客户隐私权,还可以开辟一定数量的“匿名”地址供有特殊需求的合法客户使用。

那些企图上网作祟者更是要注意了,没有IPV9全数字域名地址是钻不进IPV9网络空间的,即便你“冒名”进来,任何蛛丝马迹都能够将可疑人的“实名”身份暴露无遗,证据确凿,捉拿归案严加处置罚个底掉没商量。这对于有效打击和防治电信诈骗,具有积极的意义。

由于我国有了自己有效管控、具有自主知识产权的根服务器,在国外切断根域名网络通道或停止顶层域名(TLD)的交换时,凡是采用IPV9数字域名地址和“.CHN”的用户将不受影响。一旦发生由国外干预或意外事故而切断因特网境外通道情况时,可以保证我国网络仍能保持正常运行,特别是中国境内并行运行英文域名和IPV9数字域名的用户,能够在网络出现来自国外和因特网根服务器的紧急恶劣情况下,安全、平稳运行。

需要特别提醒的是,IPV6所谓美国切断根通道“.CN”仍能够正常运行的说法,迄今没有得到可靠的验证。一辈子耕作于田间的老农民谁不知道,牛鼻子牵在人家手里,揪着尾巴能拽回牛来么?拽断了牛鼻子、牛尾巴,那牛还能听使唤耕田作业么?

4、有利于构建网络空间命运共同体。

IPV9有国家地理位置,每个国家都可以有自己的根域名系统,以确立和维护本国在全球网络互连中的主权国家地位和安全,顺应了网络互连的“主权平等”原则要求。

IPV9使每个国家都可以有自己的根域名系统,实现端到端的直接通信。就一个国家而言,国内信息只需在国内交换不用再出国交换,从而可以自主可控地有效保障本国陆、海、空、天疆域内的网络空间信息通信安全。

IPV9实际提供了一个各国都可以独立自主建设、发展和管理本国网络空间的技术体系,一种真正无中心的主权网络空间平等共治形成的网络空间框架结构模式。各国可以在此基础上,共商共举构建网络空间命运共同体,推动各国主权网络之间建立多边、民主、透明的全球互联网治理体系。从而摆脱美国因特网“一网独霸天下”的单一中心控制局面,“推动全球互联网治理朝着更加公正合理的方向迈进,推动网络空间实现平等尊重、创新发展、开放共享、安全有序的目标。”

5、基于IPV9的十进制网络的创新小结:

第一、在十进制网络互联中,除了计算机和网络之间的数据传送必须二进制外,其他都采用十进制;

第二、同一的(用0-9阿拉伯数字)数字组合,既可做IPV9地址、标识每个站点适配器的MAC地址,又能替代现有因特网上的英文字母或其它符号如中文等作域名;

第三、数字域名解析服务器兼容现有网络(IPV4和IPV6网络)的英文域名解析;

第四、基于个人IP地址可制作:个人主页、FTP共享文件服务、IP网络电话和可视电话(计算机到计算机)以及身份证、税务发票、物流码等的广泛应用,在物联网和智慧社会时代意义重大。

6、IPV9应用联想、探讨与建议

⑴ IPV9应用的必要前提

A,核心基础的自主知识产权

IPV9发明人和专利权人宣布,IPV9已经拥有完全自主知识产权的母根域名服务器、以英文N-Z字母命名的 13个主根域名服务器;母根域名服务器和主根域名服务器都设在中国,中国成为当今世界第二个拥有独立自主分配IP地址空间、“.CHN”国家顶级域名、“86”全数字域名、IP地址网络资源的国家;可以在中国拥有核心基础技术自主知识产权的前提下,与美国因特网平等存在、制衡运行。

B,法律支持

前些年,沈阳、方舟子等人在网上接连不断地诽谤IPV9及其发明人是“网络周老虎”、“愚人节的笑话”等,严重蒙蔽视听,影响极其恶劣。IPV9发明人谢建平因此向北京市人民法院提起维权诉讼。

2014年12月,北京市朝阳区人民法院(2014)朝民初字第06443号判决书一审认定,“被告之行为侵犯了原告的名誉权”,“被告应当就其侵权行为对原告进行赔礼道歉和赔偿精神损害抚慰金”,判决被告在判决生效后七日内删除发表于网络的所有侵权文章,并在网站显著位置登载致歉声明时间不少于一个月,要求被告支付原告精神损害抚慰金和公证费各一千元。

2015年7月20日,北京市第三中级人民法院(2015)三中民终字第08222号终审判决,“沈阳的上诉主张缺乏事实及法理依据,原审定事实及援引法律均无不当,应予维持。因此宣布,驳回上诉,维持原判。”

法律的正义,彻底击碎了某些人的胡言乱语,维护了拥有我国自主知识产权的优秀成果IPV9的清名。

C,商业推广的关键设备和软件

IPV9国内产业体系已能生产960G、100G、10G的IPV4/IPV9双栈骨干路由器、家庭用的小型路由器、工业控制的安全路由器等,并可以提供负15次方的北斗/GPS网络授时同步系统、IPV9网络管理、检测系统的支持。

经实际运行测试,基于IPV4/IPV6的硬件和软件都可以无缝应用于IPV9网络系统,现有的Windows、安卓手机的App也可以正常访问IPV9系统的“.CHN”大部份网站。

⑵ IPV9已经和正在实施的部分应用项目

A,上海市长宁区国家信息资源开发利用综合应用实验区数字域名系统应用工程,实现了长宁区电子政务网、成人教育网以及在VOIP上的应用。

上述工程项目是以IPV9协议为基础,在IPV9路由器组建的主干网上建立组网和功能服务应用。使用的设备包括:IPV9路由器、可识别IPV9地址的终端、IPV9的NAT/PT、支持IPV9的数字域名解析服务器等,实现了IPV9的地址分配、域名解析以及IPV9网与IPV4网的互连互通。

B,上海市金山电信局数字域名系统应用

安装了一套可支持300万户的数字域名解析系统,负责金山区涉及全国范围的数字域名解析,日解析次数达一千万次以上。

C,十进制税控系统

基于IPV9协议结合数字域名解析系统,为福建全省提供一个高效的税控系统平台,应用于税控金融POS机与网上报税系统,与有关单位共同制订税控金融POS机的全新统一标准。

该系统平台为每一台税控金融POS机分配地址和域名,做到“一机一号”,既保证了地址和域名数量的可用性和安全可靠性,也保证了整个税控系统信息流的安全可靠性。

D,十进制110报警系统

2002年研制完成并反复实验论证取得成功经验,上海市交通战备办公室推荐使用给予好评。在2003年4月抗击“非典”中,安装本监控报警系统,实时监查过往旅客和车辆,成效良好。

适合应用于结合物流码的盗抢报警、遗失报警、应急报警、危机报警等。

E,目前,上海、北京、杭州、长春、新疆、澳门、香港等地都已经启动IPV9实施项目,重庆、成都、广州、深圳、南京、洛阳等地也在积极行动中。

采用IPV9专线连接的北京邮电大学、商务部国际电子商务中心、丰台总部基地的IPV9服务器节点,自2016年3月以来运行情况保持良好。

https://gss0.baidu.com/-Po3dSag_ ... bf431adcaef84ae.jpg    ⑶ 若干应用探讨和建议

A,基于IPV9的地址和数字域名分配、管理和解析服务;

B,IPV9电子政务、电子警务等专网应用服务;

C,IPV9广播电视网络建设(改造)、运营和服务;

D,IPV9智慧社区、智慧家庭建设、运营和服务;

E,IPV9教育、科研、文化、体育、医疗卫生网络建设、运营和服务;

F,IPV9物联网(物流管理)开发、建设、运营和服务;

G,IPV9专用手机、电脑等终端研制、生产与销售;

H,IPV9民族语言专网开发、建设、运营和服务;

I,IPV9应对突发事件专网建设、运营和服务;等等。

其他,与我国优秀的民族自主知识产权结合,可以放手开发大量世界领先的科技应用,如支持“隐身衣”、机器人的大规模设计计算系统等等。

五、IPV9与IPV6的今生和未来

不言而喻,中国IPV9是治理IPV6致命缺陷的利器,是能够使中国网络空间领域摆脱受制于人局面的法宝。

梳理IPV9与IPV6、IPV4的过往今来深切感悟,透彻研究和了解因特网的先天不足与后天缺陷,有针对性地解决实践证明必须解决的问题,不拘泥因特网的传统思维,不囿于IPV6、IPV4的既定模式,不追随、不迷信美国人云亦云,坚持主权在我、不受制于人的原则勇于创新立说,是谢建平、刘亚东、张庆松等IPV9和未来网络发展理念发明人和创新研究者最可贵的地方。

请问,从本世纪开元起国家就投入巨资的IPV6,迄今拿到了什么民族自主知识产权或国际、国家标准?到底花了几十亿(IPV6追随者说中国下一代互联网示范工程CNGI投资近50亿元)、几百亿(IPV6追随者说这些年国家投入IPV6研发约300亿元)都干了些什么?国家有没有审计?能不能公布、公开审计结果? IPV6示范工程已经跨越了至少三个“五年计划”,事关我国网络空间主权与安全大局和长远战略,该不该向全党、全军和全国人民做一个真实情况交代?

请问,卖力鼓吹“全面引进、升级、部署IPV6”的中国院士、大佬、“公仆”们,到底是IPV6“优化中国互联网”?还是“中国互联网”在“优化IPV6”?究竟还要为美国因特网在中国的扩张和渗透挥霍多少中国的人力物力财力?非要将中国网络空间主权完全拱手相让、彻底卖光中国的家底才肯罢休吗?请你们扪心自问,还有多少中国人的良知?

IPV9也许不是尽善尽美的网络空间技术,也许只是向未来网际空间过渡的一种新型技术。但是,相比较IPV4和IPV6,IPV9显示出更强、更新、更加适应构建全球网络空间命运共同体的科学生命力,更有利于打造主权在我、不受制于人的我国主权公众网络,更能够激励中华民族在网络空间领域自立、向前、智慧、顽强的拼搏复兴。

任何人不可能只手遮天,永远掩盖IPV6、IPV9的来世真相,愚弄国人。任何人也不可能瞒天过海,试图阻挡过去、今天和未来中国亿万爱国军民捍卫网络空间主权百折不挠的决心、奋发图强的信心和旗帜鲜明的主张。

今年10月,中国中央电视台《我和我的祖国》系列报道,向海内外郑重介绍了92岁高龄的中国工程院院士、我国军事电子高新技术的开拓者、奠基者和领路人童志鹏先生。童先生曾经亲切教诲青年学者:“沿IPV9这条正确的路勇敢地坚定地走下去!”令国人肃然起敬!

感谢倪光南、周仲义、蔡吉人、沈昌祥、吾守尔、郑建华、魏正耀、丁文华、鄂维南,柴洪峰等赤心报国的中国工程院、中国科学院院士,长期关怀、支持我国主权网络空间的建设发展,你们令国人肃然起敬!

感谢中国移动通信联合会会长、原中共中央政策研究室副主任郑新立,工信部原副部长、中国移动通信集团原董事长奚国华以及徐顺成、张琪、韩俊、李富昌、洪京一、虞继光等忠诚党和国家的公务员,顶住体制内的压力长期关怀、支持我国主权网络空间的建设发展,你们令国人肃然起敬!

感谢中国科学院大学大学教授吕述望、董传仪,北京邮电大学教授李道本、楼培德,中国移动通信联合会常务副会长谢麟振、倪健中以及奚和泉、毛士兴、卢明欣、李长红、胡慧、李北伟等等天南海北众多执着爱国的专家、学者与各界人士,一以贯之、契而不舍地捍卫我国主权网络学说并勇于实践,为中国主权公众网络的振兴和图强进行了顽强不懈地抗争和努力,你们,令国人肃然起敬!

感谢谢建平、刘亚东、张庆松、王浩、赖家文、程晓卫等开创未来网络国际标准的中国专家,感谢20多年来为维护我国网络空间主权自力更生、艰苦奋斗、呕心沥血、百折不挠的所有中国网络空间业界的发明者、创造者、创新者、从业者,你们,令国人肃然起敬!

丢掉幻想,准备斗争。我们深信,2017年,新一代网络技术IPV9必将在与美国因特网下一代演进技术IPV6的坚决较量中,取得未来网络架构和关键技术的重大突破,为建设、发展和维护我国主权网络空间奠定坚实的基础。军民团结如一人,试看天下谁能敌?!

作者为中国移动通信联合会国际战略研究中心主任(修订整理于2017年1月12日)

[ Last edited by zzz19760225 on 2017-7-17 at 23:11 ]
作者: zzz19760225     时间: 2017-6-14 02:02    标题: PMON

PMON详解                                                           :专注嵌入式dustLiYang
http://blog.csdn.net/sdustliyang/article/details/7295803

http://xenyinzen.wikidot.com/loongson-about
+++++++++++++++++++++++++++++++++++++++++
PMON-V1.1 目录结构
+++++++++++++++++++++++++++++++++++++++++
pmon的目录结构大致如下(由linux工具tree生成)
.
|-- Targets            目标结构相关代码,每个新结构在该目录下有一个子目录
|   `-- Bonito            Bonito是我们的北桥代号,里面是一些关于北桥的代码
|       |-- Bonito
|       |-- compile
|       |   `-- zboot
|       |       |-- images
|       |       |-- pmon
|       |       `-- utils
|       |-- conf
|       |-- dev
|       |-- include
|       `-- pci
|-- conf                    源代码编译所依赖的配置文件所在目录
|-- doc                        说明文档
|-- examples                一看就知道是样例,但我还不知道只面究竟写的是什么
|-- fb                            在frambuffer上做文字和图形显示的代码   
|-- include                    系统头文件
|-- lib
|   |-- libc                C库
|   `-- libz                zip压缩库
|-- pic                    开机启动图片(压缩后的)存放目录
|-- pmon                pmon主体代码
|   |-- arch                    平台相关代码
|   |   `-- mips                处理器相关的代码,比如Flush_Cache等
|   |-- cmds                    pmon shell 命令代码
|   |-- common                    各模块共同依赖的代码
|   |-- custom                        ??这个目录不知道干什么用的
|   |-- dev                        一些基本设备的驱动,比如Flash
|   |-- fs                        文件系统支持代码
|   |-- loaders                        二进制文件加载器代码
|   `-- netio                        网络命令以及tftp的实现
|-- sys                            pmon的较低层的代码
|   |-- arch                        处理器相关代码一些定义
|   |   `-- mips                    
|   |       `-- include
|   |-- dev                        各种设备的驱动程序
|   |   |-- ata
|   |   |-- fd
|   |   |-- ic
|   |   |-- microcode
|   |   |   `-- siop
|   |   |-- mii
|   |   |-- pci
|   |   `-- usb
|   |-- kern                        主要是一些系统调用的实现,比如malloc,time, signal, socket
|   |-- linux
|   |-- net                        实现网络协议
|   |-- netinet                        实现网络协议
|   |-- scsi                            Scsi协议的实现
|   |-- sys                        这个大目录的头文件存放区
|   `-- vm                        ??虚拟内存相关实现
|-- tools                        一些工具
|   |-- bmp_logo                    把bmp图转换成C数据的工具
|   |-- bootelf
|   |-- mk
|   |-- pmoncfg                        源代码配置工具
|   |-- scripts
|   `-- srecord
|-- x86emu                        x86显卡模拟器,主要是运行显卡的BIOS,初始化显卡
|   `-- int10
|       `-- x86emu
|           |-- include
|           |   `-- x86emu
|           `-- src
|               `-- x86emu
|                   `-- x86emu
`-- zloader                        zip格式加载启动代码
Targets目录的组成
每个结构一个目录,我们拿Bonito来为例子,主要有下列文件:
start.S 位于Targets/Bonito/Bonito 目录下,是C环境建立之前的汇编代码,使整个BIOS运行的起点。
tgt_machdep.c位于Targets/Bonito/Bonito 目录下,一些板子相关的函数。
pci_machdep.c进行Targets/Bonito/pci 空间分配的一些函数
Targets/Bonito/dev 目录下一些板子特殊的设备的驱动。
Targets/Bonito/conf 目录下是一些编译环境建立需要的一些文件
参考说明
本文的撰写过程中,参考了诸多中科龙梦科技有限公司的内部资料(都是可以公开的),另外还有一些未署名的文档,无法一一列举,在此表示感谢。龙芯事业一定会在前仆后继的勇士所铺设的道路上日益壮大!



+++++++++++++++++++++++++++++++++++++++++
代码执行流程
+++++++++++++++++++++++++++++++++++++++++
当整个板子起电后,CPU将从 0xBFC00000 取指令开始执行,而ROM在系统中的地址就是从该地址开始的。所以,其中的第一条指令就是整个过程中 CPU 要执行的第一个指令。
初始化CPU内的寄存器,清TLB.
初始化一些北桥的基本配置,以确保uart能够正常工作.
初始化uart,主要是设置波特率.
初始化内存(主要通过I2C协议从内存的EEPROM读取内存参数来进行设置).
初始化cache.
拷贝pmon的代码到内存,然后通过
la      v0, initmips
jalr    v0
nop
从此代码便到内存中间去了,从这开始因为可以读写内存,所以有了栈,故可以用C的代码了,所以以后的程序便是C代码了

+++++++++++++++++++++++++++++++++++++++++
start.S详解
+++++++++++++++++++++++++++++++++++++++++

1
start.S文件在 /Targets/Bonito/Bonito 目录当中,是整个PMON代码的起点。我们首先研究它。
文件一开头是版权声明部分,然后是包括一些头文件,然后是一些宏定义,然后才是代码。
与CPU相关的一些宏定义有
/*
*   Register usage:
*
*    s0    link versus load offset, used to relocate absolute adresses.
*    s1    free
*    s2    memory size.
*    s3    free.
*    s4    Bonito base address.
*    s5    dbg.
*    s6    sdCfg.
*    s7    rasave.
*    s8    L3 Cache size.
*/

#define tmpsize        s1
#define msize        s2
#define bonito        s4
#define dbg            s5
#define sdCfg        s6
下面是程序的开头,不过并不生成实际的二进制数据,它告诉编译汇编器一些信息。
.set    noreorder
    .globl    _start
    .globl    start
    .globl    __main

_start:
start:
    .globl    stack
    stack = start - 0x4000         /* Place PMON stack below PMON start in RAM */

=====================
解释:
.set noreorder
是告诉汇编汇编器不要对后面的代码进行优化处理,比如重新排列执行代码。

.globl _start
.globl start
.globl __main
这里,定义了三个全局符号。可以PMON代码中的任何地方引用它。

_start:
start:
.globl stack
stack = start - 0x4000 /* Place PMON stack below PMON start in RAM */
在这里定义了子程序的名称 _start 和 start。并定义了堆栈的栈底 stack 值,在 start 以下 16K 处。
=====================
下面是程序执行的第一条语句
/* NOTE!! Not more that 16 instructions here!!! Right now it's FULL! */
    mtc0    zero, COP_0_STATUS_REG
    mtc0    zero, COP_0_CAUSE_REG
    li    t0, SR_BOOT_EXC_VEC        /* Exception to Boostrap Location */                                
    mtc0    t0, COP_0_STATUS_REG
                                /* SR's BEV bit is set so the CPU uses the ROM(kseg1) space exception entry point when reboot exception occurs
    la    sp, stack               
    la    gp, _gp               
=====================        
解释:
由于龙芯的地址空间决定,这里的代码不能超过 16 条指令,因为后面紧跟着的是中断向量的地址。(??)
接着,就把 CP0 的状态寄存器 COP_0_STATUS_REG 和 COP_0_CAUSE_REG 寄存器全部清空为0。
li t0, SR_BOOT_EXC_VEC
接着设置状态寄存器的BEV位,这样就是让 CP0 运行在没有 TLB 的模式,并且一旦发生异常,就进入ROM 的 bfc00000 位置重启。
后面两句主要设置引导程序的堆栈空间,
la sp, stack 是把栈底地址给 sp 寄存器,(现在有个疑问就是 pmon的栈是往上还是往下生长的??)
la gp, _gp 是把编译器中的 _gp 全局地址给 gp 寄存器,这样做法是让全局变量可以作相对寄存器寻址。
其中_gp是在连接脚本文件里定义的。
=====================
bal    uncached
nop
bal    locate
nop   
uncached:
or      ra, UNCACHED_MEMORY_ADDR
j    ra
nop
=====================        
解释:
这段程序先进行一个无条件跳转连接指令,这样做的目的很明确就是想清空预取指令和流水线的指令。
这样就跳到 uncached 这里运行。
先来看看bal指令会做些什么事情,
通常bal指令会算出跳转到的目的地址相对于PC寄存器的偏移量,
然后把PC+8指令地址放到ra寄存器里,也就是把bal locate指令地址放到RA寄存器,以便可以返回。
由于龙芯2E的加电时启动地址是 0xBFC0 0000,那么放在ra里的值就是 0xBFCO 0028(第8条指令)。
后面
or ra, UNCACHED_MEMORY_ADDR,这里进行是与0xA000 00000的或运算,
也就是说从ROM加载时,不会改变返回地址 ra 的值。
写这句的目的主要是保证要从ROM中运行后面的一段程序,而不是从其它地址(RAM中)运行。
所以接着就跳回来到 bal locate位置并执行 bal locate 指令,这样就跳到 locate 的位置执行程序了。
=====================
在MIPS中,异常处理入口有两套,通过 CP0 的 STATUS 寄存器位 BEV 来决定,当 BEV=1 时,异常的入口地址为 0xBFC00000 开始的地址。而 BEV=0,异常地址为 0x80000000 开始的地址,所以PMON程序段开始处是一些异常的调入口,需要跳过这段空间,程序就是通过这个 bal 指令跳到后面的

2
下面是那段被跳过去的异常代码
/*
*  Reboot vector usable from outside pmon.
*/
    /* started in aligned address by 2^8=256 Bytes, that is 0xbfc00000 + 0x100 = 0xbfc00100 */
    .align    8                        
ext_map_and_reboot:
    bal    CPU_TLBClear               
    nop
    li    a0, 0xc0000000
    li    a1, 0x40000000
    bal    CPU_TLBInit
    nop
    la    v0, tgt_reboot               
    la    v1, start                    
    subu    v0, v1                    
    lui    v1, 0xffc0                    
    addu    v0, v1
    jr    v0
    nop
/*
*  Exception vectors here for rom, before we are up and running. Catch
*  whatever comes up before we have a fully fledged exception handler.
*/
    /* TLB refill exception */
    /* bfc00200, this code address is 0xbfc00200, 2^9 = 512 Bytes, it is a exception process function */
    .align    9           
    move    k0, ra            /* save ra */
    la    a0, v200_msg
    bal    stringserial
    nop
    b    exc_common
    .align    7            /* bfc00280 */
    move    k0, ra    #save ra
    la    a0, v280_msg
    bal    stringserial
    nop
    b    exc_common        // print the CP0 register's infomation
/* Cache error handler */
    .align    8            /* bfc00300 */
    PRINTSTR("\r\nPANIC! Unexpected Cache Error exception! ")
    mfc0    a0, COP_0_CACHE_ERR
    bal    hexserial
    nop
    b    exc_common
/* General exception handler */
    .align    7            /* bfc00380 */
    move    k0, ra    #save ra
    la    a0, v380_msg
    bal    stringserial
    nop
    b    exc_common
    .align    8            /* bfc00400 */
    move    k0, ra    #save ra
    la    a0, v400_msg
    bal    stringserial
    nop
/* when the exception occurs, do this code to present the CP0 register's content */
exc_common:
    PRINTSTR("\r\nCAUSE=")
    mfc0    a0, COP_0_CAUSE_REG
    bal    hexserial
    nop
    PRINTSTR("\r\nSTATUS=")
    mfc0    a0, COP_0_STATUS_REG
    bal    hexserial
    nop
    PRINTSTR("\r\nERRORPC=")
    mfc0    a0, COP_0_ERROR_PC
    bal    hexserial
    nop
    PRINTSTR("\r\nEPC=")
    mfc0    a0, COP_0_EXC_PC
    bal    hexserial
    nop
    PRINTSTR("\r\nBADVADDR=")
    mfc0    a0, COP_0_BAD_VADDR
    bal    hexserial
    nop
    PRINTSTR("\r\nRA=")
    move    a0, k0
    bal    hexserial
    nop
//    b    ext_map_and_reboot
    nop
    /* control the distribution of the code, here we insert a bank 256 Bytes. */
    .align 8   
        nop
    /* handler name table */
    .align 8
    .word read
    .word write
    .word open
    .word close
    .word nullfunction
    .word printf
    .word vsprintf
    .word nullfunction
    .word nullfunction
    .word getenv
    .word nullfunction
    .word nullfunction
    .word nullfunction
    .word nullfunction
3
让我们看看 locate 标号之后的代码是些什么
/*
*  We get here from executing a bal to get the PC value of the current execute
*  location into ra. Check to see if we run from ROM or if this is ramloaded.
*/
locate:
    la        s0, start               
    subu    s0, ra, s0               
    and        s0, 0xffff0000           
    li        t0, SR_BOOT_EXC_VEC
    mtc0    t0, COP_0_STATUS_REG
    mtc0    zero, COP_0_CAUSE_REG   
    .set noreorder
    /* the varible bonito is register s4, BONITO_REG_BASE is 0x1fe00000 */
     li        bonito, PHYS_TO_UNCACHED(BONITO_REG_BASE)
    bal    1f   
    nop            /* now the value of ra is 0xbfc00xxx */
    /* bonito endianess */
    BONITO_BIC(BONITO_BONPONCFG, BONITO_BONPONCFG_CPUBIGEND)
    BONITO_BIC(BONITO_BONGENCFG, BONITO_BONGENCFG_BYTESWAP|BONITO_BONGENCFG_MSTRBYTESWAP)
    BONITO_BIS(BONITO_BONPONCFG, BONITO_BONPONCFG_IS_ARBITER)
    /*
     * In certain situations it is possible for the Bonito ASIC
     * to come up with the PCI registers uninitialised, so do them here
     */
    BONITO_INIT(BONITO_PCICLASS,(PCI_CLASS_BRIDGE << PCI_CLASS_SHIFT) | (PCI_SUBCLASS_BRIDGE_HOST << PCI_SUBCLASS_SHIFT))
    BONITO_INIT(BONITO_PCICMD, BONITO_PCICMD_PERR_CLR | BONITO_PCICMD_SERR_CLR | BONITO_PCICMD_MABORT_CLR | BONITO_PCICMD_MTABORT_CLR | BONITO_PCICMD_TABORT_CLR | BONITO_PCICMD_MPERR_CLR )
    //BONITO_INIT(BONITO_PCILTIMER, 0)
    BONITO_INIT(BONITO_PCILTIMER, 255)
    BONITO_INIT(BONITO_PCIBASE0, 0)
    BONITO_INIT(BONITO_PCIBASE1, 0)
    BONITO_INIT(BONITO_PCIBASE2, 0)
    BONITO_INIT(BONITO_PCIEXPRBASE, 0)
    BONITO_INIT(BONITO_PCIINT, 0)
    BONITO_BIS(BONITO_PCICMD, BONITO_PCICMD_PERRRESPEN)
    BONITO_BIS(BONITO_PCICMD, PCI_COMMAND_IO_ENABLE|PCI_COMMAND_MEM_ENABLE|PCI_COMMAND_MASTER_ENABLE)
    BONITO_BIC(BONITO_BONGENCFG, 0x80)  #???1iobc
    #BONITO_BIS(BONITO_BONGENCFG, BONITO_BONGENCFG_BUSERREN)
    /* Set debug mode */
    BONITO_BIS(BONITO_BONGENCFG, BONITO_BONGENCFG_DEBUGMODE)
    /******** added to init southbridge*/
#ifdef VGA_NOTEBOOK_V2
    ISA_BRMW_INIT(0,0x74,0xeb,0x0)
    ISA_BRMW_INIT(0,0x75,0xff,0x20)
    ISABWWR_INIT(4,0x48,0xb000)
    ISABBWR_INIT(4,0x41,0x80)
    RMW_INIT(MOD_W,(PCI_IO_SPACE+0xb04c),0xffffffdf,0x0)
#endif
    // SouthBridge settings
    /* Set the SMB base address */
    ISABWWR_INIT(4, SMBUS_IO_BASE_ADDR, SMBUS_IO_BASE_VALUE | 0x1)
    /* enable the host controller */
    ISABHWR_INIT(4, SMBUS_HOST_CONFIG_ADDR, SMBUS_HOST_CONFIG_ENABLE_BIT)
    /* enable the SMB IO ports */
    ISABBWR_INIT(4, PCI_COMMAND_STATUS_REG, PCI_COMMAND_IO_ENABLE)
    ISARD_INIT(CTC_PORT+PT_CONTROL)
    /* program i8254 ISA refresh counter */
    ISAWR_INIT(CTC_PORT+PT_CONTROL,PTCW_SC(PT_REFRESH)|PTCW_16B|PTCW_MODE(MODE_RG))
    ISAWR_INIT(CTC_PORT+PT_REFRESH, ISAREFRESH & 0xff)
    ISAWR_INIT(CTC_PORT+PT_REFRESH, ISAREFRESH >> 8)
    EXIT_INIT(0)
1:   
    move a0, ra            /* now the value of ra is 0xbfc00xxx */
reginit:            
    lw    t3, Init_Op(a0)
    lw    t0, Init_A0(a0)        /* Init_A0 is 4 */
    and    t4, t3, OP_MASK        /* OP_MASK is 0x000000fc, to keep 4 bytes aligned */
    /*
     * EXIT(STATUS)
     */
    bne    t4, OP_EXIT, 8f        /* OP_EXIT is 0x00000000 */
    nop
    move v0, t0                /* now v0 is the content of 4 bytes offset from 0xbfc000xx */
    b    .done
    nop
    /*
     * DELAY(CYCLES)
     */
8:    bne    t4, OP_DELAY, 8f    /* OP_DELAY is 0x00000008 */
    nop
1:    bnez    t0,1b            /* t0 不等于 0就在这死循环 */
    subu    t0,1
    b    .next
    nop   
    /*  
     * READ(ADDR)
     */
8:    bne    t4, OP_RD, 8f        /* OP_RD is 0x00000010 */
    nop
    and    t4, t3, MOD_MASK    /* MOD_MASK is 0x00000003 */
    bne    t4, MOD_B, 1f        /* MOD_B is 0x00000000 ??? why not 0x01 or 0x03 */
    nop
    lbu    t5, 0(t0)
    b    .next
    nop
1:    bne    t4, MOD_H, 1f        /* MOD_H is 0x00000001 ??? why not 0x02 */
    nop
    lhu    t5, 0(t0)
    b    .next
    nop
1:    bne    t4, MOD_W, 1f        /* MOD_H is 0x00000002 ??? why not 0x00 */
    nop
#if __mips64
    lwu    t5, 0(t0)
#else
    lw    t5, 0(t0)
#endif
    b    .next
    nop
1:   
#if __mips64
    lw    t5,0(t0)
    b    .next
    nop
#else
    b    .fatal
    nop
#endif
    /*
     * WRITE(ADDR,VAL)
     */
8:    bne    t4, OP_WR, 8f        /* OP_WR is 0x00000014 */
    nop
    lw    t1, Init_A1(a0)            /* Init_A1 is 8 */
    and    t4, t3, MOD_MASK    /* MOD_MASK is 0x00000003 */
    bne    t4, MOD_B, 1f
    nop
    sb    t1, 0(t0)
    b    .next
    nop
1:    bne    t4,MOD_H,1f
    nop
    sh    t1,0(t0)
    b    .next
    nop
1:    bne    t4,MOD_W,1f
    nop
    sw    t1,0(t0)
    b    .next
    nop
1:   
#if __mips64
    sd    t1,0(t0)
    b    .next
    nop
#else
    b    .fatal
    nop
#endif
    /*
     * RMW(ADDR,AND,OR)
     */
8:    bne    t4,OP_RMW,8f
    nop
    lw    t1,Init_A1(a0)
    lw    t2,Init_A2(a0)
    and    t4,t3,MOD_MASK
    bne    t4,MOD_B,1f
    nop
    lbu    t4,0(t0)
    and    t4,t1
    or    t4,t2
    sb    t4,0(t0)
    b    .next
    nop
1:    bne    t4,MOD_H,1f
    nop
    lhu    t4,0(t0)
    and    t4,t1
    or    t4,t2
    sh    t4,0(t0)
    b    .next
    nop
1:    bne    t4,MOD_W,1f
    nop
    lw    t4,0(t0)
    and    t4,t1
    or    t4,t2
    sw    t4,0(t0)
    b    .next
    nop
1:        
#if __mips64
    ld    t4,0(t0)
    and    t4,t1
    or    t4,t2
    sd    t4,0(t0)
    b    .next
    nop
#else   
    b    .fatal
    nop
#endif
    /*
     * WAIT(ADDR,MASK,VAL)
     */
8:    bne    t4,OP_WAIT,8f
    nop
    lw    t1,Init_A1(a0)
    lw    t2,Init_A2(a0)
    and    t4,t3,MOD_MASK
    bne    t4,MOD_B,1f
    nop
3:    lbu    t4,0(t0)
    and    t4,t1
    bne    t4,t2,3b
    nop
    b    .next
    nop
1:    bne    t4,MOD_H,1f
    nop
3:    lhu    t4,0(t0)
    and    t4,t1
    bne    t4,t2,3b
    nop
    b    .next
    nop
1:    bne    t4,MOD_W,1f
    nop
3:    lw    t4,0(t0)
    and    t4,t1
    bne    t4,t2,3b
    nop
    b    .next
    nop
1:        
#if __mips64
3:    ld    t4,0(t0)
    and    t4,t1
    bne    t4,t2,3b
    nop
    b    .next
    nop
#else   
    b    .fatal   
    nop
#endif
.next:   
    addu    a0, Init_Size        /* Init_Size is 16 */
    b    reginit                /* a big repeatation */
    nop   
8:
.fatal:   
    b .done
    nop
    bal stuck                /* these two sentences seem been ignored */
    nop
=====================        
解释:
locate:
    la        s0, start               
    subu    s0, ra, s0               
    and        s0, 0xffff0000        
此时,ra 中的地址值是前面 uncached 标号的地址,第二句作用是计算前面跳转时已运行过的代码的长度,最后一句把零头截掉。
这段代码是为了访问数据,因为这段汇编在Rom执行,而编译出来的数据段在 0x8002xxxx,
为了能够访问数据段的数据,需要进行一个地址的修正,s0 正是起到这种修正的目的。
    li        t0, SR_BOOT_EXC_VEC
    mtc0    t0, COP_0_STATUS_REG
    mtc0    zero, COP_0_CAUSE_REG   
为保险起见,再清理一遍配置寄存器
    .set noreorder
    /* the varible bonito is register s4, BONITO_REG_BASE is 0x1fe00000 */
     li        bonito, PHYS_TO_UNCACHED(BONITO_REG_BASE)
    bal    1f   
    nop            /* now the value of ra is 0xbfc00xxx */
将 BONITO_REG_BASE 的物理地址值保存到 s4 寄存器
(通过映射到未经缓存的地址空间里,龙芯 CPU 访问外部空间,只能用映射后的地址),
然后跳转到后面1标号处执行。
1:    move a0, ra        /* now the value of ra is 0xbfc00xxx */
reginit:            /* local name */
    lw    t3, Init_Op(a0)
    lw    t0, Init_A0(a0)        // Init_A0 is 4
    and    t4, t3, OP_MASK        // OP_MASK is 0x000000fc, to keep 4 bytes aligned
在1标号的地方,取跳转时压入的RA寄存器的值,然后通过寄存器相对寻址的方式,取得跳转指令后面保存的参数,并保存到t3, t0寄存器。
上句说的就是这些参数
    /* bonito endianess */
    BONITO_BIC(BONITO_BONPONCFG, BONITO_BONPONCFG_CPUBIGEND)
    BONITO_BIC(BONITO_BONGENCFG, BONITO_BONGENCFG_BYTESWAP|BONITO_BONGENCFG_MSTRBYTESWAP)
    BONITO_BIS(BONITO_BONPONCFG, BONITO_BONPONCFG_IS_ARBITER)
    /*
     * In certain situations it is possible for the Bonito ASIC
     * to come up with the PCI registers uninitialised, so do them here
     */
    BONITO_INIT(BONITO_PCICLASS,(PCI_CLASS_BRIDGE << PCI_CLASS_SHIFT) | (PCI_SUBCLASS_BRIDGE_HOST << PCI_SUBCLASS_SHIFT))
    BONITO_INIT(BONITO_PCICMD, BONITO_PCICMD_PERR_CLR | BONITO_PCICMD_SERR_CLR | BONITO_PCICMD_MABORT_CLR | BONITO_PCICMD_MTABORT_CLR | BONITO_PCICMD_TABORT_CLR | BONITO_PCICMD_MPERR_CLR )
    //BONITO_INIT(BONITO_PCILTIMER, 0)
    BONITO_INIT(BONITO_PCILTIMER, 255)
    BONITO_INIT(BONITO_PCIBASE0, 0)
    BONITO_INIT(BONITO_PCIBASE1, 0)
    BONITO_INIT(BONITO_PCIBASE2, 0)
    BONITO_INIT(BONITO_PCIEXPRBASE, 0)
    BONITO_INIT(BONITO_PCIINT, 0)
    BONITO_BIS(BONITO_PCICMD, BONITO_PCICMD_PERRRESPEN)
    BONITO_BIS(BONITO_PCICMD, PCI_COMMAND_IO_ENABLE|PCI_COMMAND_MEM_ENABLE|PCI_COMMAND_MASTER_ENABLE)
    BONITO_BIC(BONITO_BONGENCFG, 0x80)  #???1iobc
    #BONITO_BIS(BONITO_BONGENCFG, BONITO_BONGENCFG_BUSERREN)
    /* Set debug mode */
    BONITO_BIS(BONITO_BONGENCFG, BONITO_BONGENCFG_DEBUGMODE)
    /******** added to init southbridge*/
#ifdef VGA_NOTEBOOK_V2
    ISA_BRMW_INIT(0,0x74,0xeb,0x0)
    ISA_BRMW_INIT(0,0x75,0xff,0x20)
    ISABWWR_INIT(4,0x48,0xb000)
    ISABBWR_INIT(4,0x41,0x80)
    RMW_INIT(MOD_W,(PCI_IO_SPACE+0xb04c),0xffffffdf,0x0)
#endif
    // SouthBridge settings
    /* Set the SMB base address */
    ISABWWR_INIT(4, SMBUS_IO_BASE_ADDR, SMBUS_IO_BASE_VALUE | 0x1)
    /* enable the host controller */
    ISABHWR_INIT(4, SMBUS_HOST_CONFIG_ADDR, SMBUS_HOST_CONFIG_ENABLE_BIT)
    /* enable the SMB IO ports */
    ISABBWR_INIT(4, PCI_COMMAND_STATUS_REG, PCI_COMMAND_IO_ENABLE)
    ISARD_INIT(CTC_PORT+PT_CONTROL)
    /* program i8254 ISA refresh counter */
    ISAWR_INIT(CTC_PORT+PT_CONTROL,PTCW_SC(PT_REFRESH)|PTCW_16B|PTCW_MODE(MODE_RG))
    ISAWR_INIT(CTC_PORT+PT_REFRESH, ISAREFRESH & 0xff)
    ISAWR_INIT(CTC_PORT+PT_REFRESH, ISAREFRESH >> 8)
        EXIT_INIT(0)
这些宏实际上不是语句,看定义后就知道它们只是定义了一些数据参数,在ROM中占据了一定的长度。
    /*
     * EXIT(STATUS)
     */
    bne    t4, OP_EXIT, 8f        // OP_EXIT is 0x00000000
    nop
    move v0, t0                // now v0 is the content of 4 bytes offset from 0xbfc000xx
    b    .done
    nop
接着就运行
bne t4, OP_EXIT, 8f
这句了,在这里做是否初始化寄存器完成的判断,如果没有完成,就会跳到后面8标号处运行,然后经历一系列的设置(后面接着的那片代码)
DELAY(CYCLES)
READ(ADDR)
WRITE(ADDR,VAL) RMW(ADDR,AND,OR)
WAIT(ADDR,MASK,VAL)
后,直到 OP_EXIT 标志出现,才退出这个设置循环。看到前面有一行 EXIT_INIT(0),表示那个参数数据段结束了,它的宏定义如下:
#define EXIT_INIT(status) .word OP_EXIT, (status); .word 0,0
所以在最后一项的数据记录被读取后,总是能退出这个初始化循环的,接着就会跳到.done这个标号里运行。
不过,这段代码到底是要设置什么?由DELAY,READ,WRITE,RMW,WAIT 这些符号所标示的代码段实现其相应的功能没有?我还不清楚。
8
la    s0, start            
subu    s0, ra, s0
and    s0, 0xffff0000
这段代码是为了访问数据,因为这段汇编在Rom执行,而编译出来的数据段在0x8002xxxx,为了能够访问数据段的数据,需要进行一个地址的修正,s0这是起到这种修正的目的。
la      v0, initmips
jalr    v0
nop
从此代码便到内存中间去了,从这开始因为可以读写内存,所以有了栈,故可以用C的代码了,所以以后的程序便是C代码了.
4
接着看下面一段代码
.done:   
    bal superio_init        /* initialize the southbridge config register */
    nop
    bal    initserial            /* initialize the output of serial port, after this step */
    nop                        /* pmon can output some infomations from COM port*/
    PRINTSTR("\r\nPMON2000 MIPS Initializing. Standby...\r\n")
    /* begin to check some config registers on CP0 */
    PRINTSTR("ERRORPC=")
    mfc0    a0, COP_0_ERROR_PC
    bal    hexserial
    nop
    PRINTSTR(" CONFIG=")
    mfc0    a0, COP_0_CONFIG
    bal    hexserial
    nop
    PRINTSTR("\r\n")
    PRINTSTR(" PRID=")
    mfc0    a0, COP_0_PRID
    bal    hexserial
    nop
    PRINTSTR("\r\n")
=====================
解释:
在这段程序里,主要做了两件大事情,一是初始化南桥芯片VIA686B,一是初始化串口输出。
初始化VIA686B是调用子函数superio_init 实现的。初始化串口是调用子函数initserial实现的。
为了尽快地从串口输出调试信息,所以要先初始化VIA686B芯片,才能输出信息出来。
由于 VIA686B芯片包括所有外面接口的功能,比如串口, PS2,USB,并口,还有软盘等等。
只要能从串口输出字符,就已经是成功的第一步了。
在嵌入式的软件开发中,调试软件是最难的,只能根据芯片的管脚电平,或者串口发些调信息出来。
使用管脚调试,最简单的办法,就是加一个指示灯,这也叫“点灯大法”。
只要串口能输出字符串后,使用串口调试就成为基本的方法了。
后面,输出三个CP0寄存器的值,第一个寄存器是出错信息,第二个寄存器是CP0配置信息,第三个寄存器是CP0处理器的ID信息。
=====================
5
下面一段代码从内存条上的SPD(eeprom)中读取内存参数,并且初始化内存窗口。这段代码放到另一篇文章中专门讲解吧。这里就不多说了。
/*
     * Now determine DRAM configuration and size by
     * reading the I2C EEROM (SPD) on the DIMMS (DDR)
     */
    PRINTSTR("DIMM read\r\n")
    /* only one memory slot, slave address is 10100001b */
    li  a1, 0x0
1:
    li    a0, 0xa1    /* a0: slave address, a1: reg index to read */
    bal    i2cread
    nop
        /* save a1 */
    move t1, a1
    /* print */
    move a0, v0
    bal  hexserial
    nop
    PRINTSTR("\r\n")   
        /* restore a1 */
    move  a1,t1
    addiu a1,a1,1
    li   v0, 0x20
    bleu  a1, v0, 1b        /* repeat for 32 times */
    nop
    li    msize, 0            /* msize is register s2 */
    /* set some parameters for DDR333
        rank number and DDR type field will be filled later
        to check: fix TCAS?
    */
    li    sdCfg, 0x341043df        /* sdCfg is register s6 */
    /* read DIMM memory type (must be DDRAM) */
#if 0
    li    a0,0xa1
    li    a1,2
    bal    i2cread
    nop
    bne    v0,7,.nodimm
    nop
    PRINTSTR("read memory type\r\n")
#endif
    /* read DIMM number of rows */
    li    a0, 0xa1
    li    a1, 3
    bal    i2cread
    nop   
    move    a0, v0        // v0 is the return value register
    subu    v0, 12
    move    s1, v0        // save for later use
    bgtu    v0, 2, .nodimm        // if v0 > 2 then jump to .nodimm
    nop
    PRINTSTR("read number of rows\r\n")
2:    /* read DIMM number of cols */
    li    a0, 0xa1
    li    a1, 4
    bal    i2cread
    nop
    subu    v0, 8                // v0 saved the return value
    bgtu    v0, 4, .nodimm
    nop
    // read and check ddr type, the combination of t1 and v0 represents a ddr type
    move    t1, s1
    bne    t1, 0, 10f
    nop
    bne    v0, 2, 20f
    nop
    li    v0, 0
    b    .ddrtype
    nop
20:    bne    v0, 1, 21f
    nop
    li    v0, 1
    b    .ddrtype
    nop
21:    bne    v0, 0, 22f
    nop
    li    v0, 2
    b    .ddrtype
    nop
22:    bne    v0, 3, 33f
    nop
    li    v0, 3
    b    .ddrtype
    nop
10:    bne    t1, 1, 11f
    nop
    bne    v0, 3, 20f
    nop
    li    v0, 4
    b    .ddrtype
    nop
20:    bne    v0, 2, 21f
    nop
    li    v0, 5
    b    .ddrtype
    nop
21:    bne    v0, 1, 22f
    nop
    li    v0, 6
    b    .ddrtype
    nop
22:    bne    v0, 4, 33f
    nop
    li    v0, 7
    b    .ddrtype
    nop
11:    bne    t1, 2, 33f
    nop
    bne    v0, 4, 20f
    nop
    li    v0, 8
    b    .ddrtype
    nop
20:    bne    v0, 3, 21f
    nop
    li    v0, 9
    b    .ddrtype
    nop
21:    bne    v0, 2, 33f
    nop
    li    v0, 10
    b    .ddrtype
    nop
33:    PRINTSTR("DDR type not supported!\r\n");
34:    b    34b
    nop
.ddrtype:
    #bit 25:22 is DDR type field
    sll    v0, 22
    and    v0, 0x03c00000
    or    sdCfg, v0
    /* read DIMM memory size per side */
    li    a0, 0xa1
    li    a1, 31
    bal    i2cread
    nop
    beqz    v0,.nodimm
    nop
    sll    tmpsize,v0,22        # multiply by 4M
    PRINTSTR("read memory size per side\r\n")
2:    /* read DIMM number of blocks-per-ddrram */
    li    a1,17
    bal    i2cread
    nop
    beq    v0,2,2f
    nop
    bne    v0,4,.nodimm
    nop
    PRINTSTR("read blocks per ddrram\r\n")
2:    /* read DIMM number of sides (banks) */
    li    a1,5
    bal    i2cread
    nop
    beq    v0,1,2f
    nop
    bne    v0,2,.nodimm
    nop
    sll    tmpsize,1    # msize *= 2   
    or  sdCfg, 0x1<<27
    PRINTSTR("read number of sides\r\n")
2:    /* read DIMM width */
    li    a1,6
    bal    i2cread
    nop
    bleu    v0,36,2f
    nop
    bgtu    v0,72,.nodimm
    nop
    PRINTSTR("read width\r\n")
2:    addu    msize,tmpsize
    b    2f
    nop   
.nodimm:
    move    dbg,a0        // dbg is s5
    PRINTSTR ("\r\nNo DIMM in slot ")
    move    a0,dbg
    bal    hexserial
    nop
    PRINTSTR("\r\n")
    move    a0,dbg
    #li  msize,0x10000000
    #li    sdCfg,0x3d9043df    #~133MHz
    li  msize,0x20000000
    li    sdCfg,0x3d5043df     #~133MHz
2:
    PRINTSTR("DIMM SIZE=")
    move    a0,msize
    bal    hexserial
    nop
    PRINTSTR("\r\n")
    li    t0, 0xbff00008
    sd    sdCfg, 0(t0)
    nop
    nop
    /* (uint32_t *)0xbfe00040 = 0x80000000
     * means only address below 1G will be sent to CPU
     */
    lui    t0, 0xbfe0
    li    t1, 0x80000000
    sw    t1, 0x40(t0)
    nop
    #### gx 2006-03-17: mode ####
    #li    t1,0x20
    li    t1,0x28
    li    t0, 0xbff00000
    sd    t1,0(t0)
    nop
    li    t1,0x0
    li    t0, 0xbff00000
    sd    t1,0x30(t0)
    nop
    ##fixed base address reg##
    sd    zero, 0x10(t0)
    nop
    lui    t1,0x2000
    sd    t1,0x20(t0)
    nop
    li      t1, 0x10000000
        blt     msize, t1, 1f
    nop
    ####bigger than 256MB####
    sd    t1, 0x18(t0)
    nop
    move    a0, msize
    subu    a0, t1
    nop
    nop
    nop
    sd    a0, 0x28(t0)
    nop
    b    2f
1:
    nop
    nop
    sd    msize, 0x18(t0)
    nop
    nop
    nop
    sd    zero, 0x28(t0)
    nop
    nop
    nop
2:
    PRINTSTR("sdcfg=");
    move    a0,sdCfg
    bal    hexserial
    nop
    PRINTSTR("\r\n");
    PRINTSTR("msize=");
    move    a0,msize
    bal    hexserial
    nop
    PRINTSTR("\r\n")
skipdimm:
    li    t1,0        # accumulate pcimembasecfg settings
    /* set bar0 mask and translation to point to SDRAM */
    sub    t0,msize,1
    not    t0
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE0_MASK_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE0_MASK
    or    t1,t0
    li    t0,0x00000000
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE0_TRANS_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE0_TRANS
    or    t1,t0
    or    t1,BONITO_PCIMEMBASECFG_MEMBASE0_CACHED
    /* set bar1 to minimum size to conserve PCI space */
    li    t0, ~0
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE1_MASK_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE1_MASK
    or    t1,t0
    li    t0,0x00000000
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE1_TRANS_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE1_TRANS
    or    t1,t0
    or    t1,BONITO_PCIMEMBASECFG_MEMBASE1_CACHED
    sw    t1,BONITO_PCIMEMBASECFG(bonito)
    /* enable configuration cycles now */
    lw    t0,BONITO_BONPONCFG(bonito)
    and    t0,~BONITO_BONPONCFG_CONFIG_DIS
    sw    t0,BONITO_BONPONCFG(bonito)
    PRINTSTR("Init SDRAM Done!\r\n");
6
下面这段是缓存配置的代码
/*
*  Reset and initialize caches to a known state.
*/
#define IndexStoreTagI    0x08
#define IndexStoreTagD    0x09
#define IndexStoreTagS    0x0b
#define IndexStoreTagT    0x0a
#define FillI        0x14
/*
*  caches config register bits.
*/
#define CF_7_SE         (1 << 3)        /* Secondary cache enable */
#define CF_7_SC         (1 << 31)       /* Secondary cache not present */
#define CF_7_TE         (1 << 12)       /* Tertiary cache enable */
#define CF_7_TC         (1 << 17)       /* Tertiary cache not present */
#define CF_7_TS         (3 << 20)       /* Tertiary cache size */
#define CF_7_TS_AL      20              /* Shift to align */
#define NOP8 nop;nop;nop;nop;nop;nop;nop;nop
do_caches:
    TTYDBG("Sizing caches...\r\n");
    mfc0    t3, COP_0_CONFIG    /* t3 = original config */
    and    t3, 0xffffeff0        /* Make sure coherency is OK */
    and    t3, ~(CF_7_TE|CF_7_SE|CF_7_TC|CF_7_SC)  /* disable L2/L3 cache */
    mtc0    t3, COP_0_CONFIG
    li    t2, 4096
    srl    t1, t3, 9
    and    t1, 3
    sllv    s3, t2, t1        /* s3 = I cache size */
#ifdef CONFIG_CACHE_64K_4WAY
        sll     s3,2
#endif
    and    t1, t3, 0x20
    srl    t1, t1, 1
    addu    s4, t1, 16        /* s4 = I cache line size */
    srl    t1, t3, 6
    and    t1, 3
    sllv    s5, t2, t1        /* s5 = D cache size */
#ifdef CONFIG_CACHE_64K_4WAY
        sll     s5,2
#endif
    and    t1, t3, 0x10
    addu    s6, t1, 16        /* s6 = D cache line size */
    TTYDBG("Init caches...\r\n")
    li    s7, 0                   /* no L2 cache */
    li    s8, 0                   /* no L3 cache */
#if 0
        mfc0    a0, COP_0_PRID
        li      a1, 0x6301
        bne     a0,a1,1f
        nop
#endif
    TTYDBG("godson2 caches found\r\n")
        bal     godson2_cache_init
        nop
#####xuhua########open cp1
#if 1
        mfc0   t0,COP_0_STATUS_REG
          and    t0,0xdbffffff
         or     t0,t0,0x24000000
        mtc0   t0,COP_0_STATUS_REG
#endif
#################
    /* close L2 cache */
    li      a0, 0xbfe00164
        sw      zero, 0(a0);
        mfc0   a0,COP_0_CONFIG
        and    a0,a0,~((1<<12) | 3)
    or     a0,a0,2
        mtc0   a0,COP_0_CONFIG
#ifdef DEBUG_LOCORE
    TTYDBG("Init caches done, cfg = ")
    mfc0    a0, COP_0_CONFIG
    bal    hexserial
    nop
    TTYDBG("\r\n\r\n")
#endif
7
下面这段代码是把PMON自身从ROM中拷贝到RAM中去
// copy self code segment
    TTYDBG("Copy PMON to execute location...\r\n")
#ifdef DEBUG_LOCORE
    TTYDBG("  start = 0x")
    la    a0, start
    bal    hexserial
    nop
    TTYDBG("\r\n  s0 = 0x")
    move    a0, s0
    bal    hexserial
    nop
    TTYDBG("\r\n")
#endif
    la    a0, start
    li    a1, 0xbfc00000
    la    a2, _edata
        or      a0, 0xa0000000
        or      a2, 0xa0000000
    subu    t1, a2, a0
    srl    t1, t1, 2
    move    t0, a0
    move    t1, a1
    move    t2, a2
    /* copy text section */
1:    and    t3,t0,0x0000ffff
    bnez    t3,2f
    nop
    move    a0,t0
    bal    hexserial
    nop
    li    a0,'\r'
    bal     tgt_putchar
    nop
2:    lw    t3, 0(t1)
    nop
    sw    t3, 0(t0)
    addu    t0, 4
    addu    t1, 4
    bne    t2, t0, 1b
    nop
    PRINTSTR("\ncopy text section done.\r\n")
    /* Clear BSS */
    la    a0, _edata
    la    a2, _end
2:    sw    zero, 0(a0)
    bne    a2, a0, 2b
    addu    a0, 4
    TTYDBG("Copy PMON to execute location done.\r\n")
@@@
下面这段代码从汇编世界跳到C世界中去了。
TTYDBG("sp=");
    move a0, sp
    bal    hexserial
    nop
#if 1
        mfc0   a0,COP_0_CONFIG
        and    a0,a0,0xfffffff8
        or     a0,a0,0x3
        mtc0   a0,COP_0_CONFIG
#endif
    li    a0, 4096*1024
    sw    a0, CpuTertiaryCacheSize /* Set L3 cache size */
    move    a0,msize
    srl    a0,20
        /* pass pointer to kseg1 tgt_putchar */
        la  a1, tgt_putchar
    addu a1,a1,s0            // la    s0,start
                            // subu    s0,ra,s0            ??? ra is the returning address
                            // and    s0,0xffff0000        ??? now what does s0 mean?
        la  a2, stringserial
    addu a2,a2,s0
    la    v0, initmips        // further ENTRY of PMON
    jalr    v0
    nop
   
   
   
+++++++++++++++++++++++++++++++++++++++++++++++
start.S函数详解
+++++++++++++++++++++++++++++++++++++++++++++++
本文讲解那些在 "start.S 文件详解" 一文中没有讲到的各函数的内容,放在一边讲是为了方便读者与"start.S 文件详解" 一文比对着看,那篇文章实在太长了。
CPU_TLBClear
/*
*  Clear the TLB. Normally called from start.S.
*/
#if __mips64
#define MTC0 dmtc0
#else
#define MTC0 mtc0
#endif
LEAF(CPU_TLBClear)
    li    a3, 0            # First TLB index.
    li    a2, PG_SIZE_4K        // here it is 0x00000000
    MTC0   a2, COP_0_TLB_PG_MASK   // Pagemask's bits 24~13 are 0, then it represents 4K page
1:
    MTC0   zero, COP_0_TLB_HI    # Clear entry high.
    MTC0   zero, COP_0_TLB_LO0    # Clear entry low0.
    MTC0   zero, COP_0_TLB_LO1    # Clear entry low1.
    mtc0    a3, COP_0_TLB_INDEX    # Set the index.
    addiu    a3, 1
    li    a2, 64
    nop
    nop
    tlbwi                # Write the TLB at index
    bne    a3, a2, 1b        // do a repeat body, clear all TLB entries, that means it will execute 64 times
    nop
    jr    ra
    nop
END(CPU_TLBClear)
CPU_TLBInit
/*
*  Set up the TLB. Normally called from start.S.
*    All operation is due to the structure of EntryHi, EntryLo0, EntryLo1, so understand them first
*/
LEAF(CPU_TLBInit)
    li    a3, 0            # First TLB index.
    li    a2, PG_SIZE_16M                // here it is 0x01ffe000, its bits of 24~13 are all 1
    MTC0   a2, COP_0_TLB_PG_MASK   # All pages are 16Mb.
1:
    and    a2, a0, PG_SVPN                // PG_SVPN is 0xfffff000, a0's initial value is 0xc0000000
    MTC0   a2, COP_0_TLB_HI            // Set up entry high
    move    a2, a0
    srl    a2, a0, PG_SHIFT            // PG_SHIFT is 6. shift 6 bits right on a0
    and    a2, a2, PG_FRAME            // PG_FRAME is 0x3fffffc0, the most two bits are 0, because we only need 1G memory mapping
    ori    a2, PG_IOPAGE                // PG_IOPAGE is 0x00000017
    MTC0   a2, COP_0_TLB_LO0    # Set up entry low0.
    addu    a2, (0x01000000 >> PG_SHIFT) // 0x00020000, 128K interval???
    MTC0   a2, COP_0_TLB_LO1    # Set up entry low1.
    mtc0    a3, COP_0_TLB_INDEX    # Set the index.
    addiu    a3, 1
    li    a2, 0x02000000        // 32M
    subu    a1, a2                // a1's initial value is 0x40000000, that is 1G memory
    nop
    tlbwi                # Write the TLB
    bgtz    a1, 1b        // if a1>0 then goto 1b, totally it will execute 32 times
    addu    a0, a2        // Step address 32Mb.
                        // the first entry is EntryHi: 0xc0000000, EntryLo0: 0x03000017, EntryLo1: 0x03020017, maybe bug?
    jr    ra
    nop
END(CPU_TLBInit)
stringserial
LEAF(stringserial)
    move    a2, ra
    addu    a1, a0, s0    // a0 is the address of a string
    lbu    a0, 0(a1)        // load one byte by one byte
1:
    beqz    a0, 2f        // meet the char '\0', then go back
    nop
    bal    tgt_putchar
    addiu    a1, 1        // a1 is the pointer to one char in the string
    b    1b
    lbu    a0, 0(a1)
2:
    j    a2
    nop
END(stringserial)
outstring
LEAF(outstring)
    move    a2, ra
    move    a1, a0
    lbu    a0, 0(a1)
1:
    beqz    a0, 2f
    nop
    bal    tgt_putchar
    addiu    a1, 1
    b    1b
    lbu    a0, 0(a1)
2:
    j    a2
    nop
END(outstring)
hexserial
LEAF(hexserial)
    move    a2, ra
    move    a1, a0
    li    a3, 7
1:
    rol    a0, a1, 4
    move    a1, a0
    and    a0, 0xf
    la    v0, hexchar
    addu    v0, s0
    addu    v0, a0
    bal    tgt_putchar
    lbu    a0, 0(v0)
    bnez    a3, 1b
    addu    a3, -1
    j    a2
    nop
END(hexserial)
tgt_putchar
LEAF(tgt_putchar)
    la    v0, COM1_BASE_ADDR            // here it is 0xbfd003f8
1:
    lbu    v1, NSREG(NS16550_LSR)(v0)
    and    v1, LSR_TXRDY
    beqz    v1, 1b
    nop
    sb    a0, NSREG(NS16550_DATA)(v0)        // store byte, store the char wanted to print to the virtual address byte, then the serial device can process it correctly
#ifdef HAVE_NB_SERIAL
    move    v1, v0
    la    v0, COM3_BASE_ADDR
    bne    v0, v1, 1b
    nop
#endif
    j    ra
    nop   
END(tgt_putchar)
initserial
LEAF(initserial)
#ifdef HAVE_NB_SERIAL
    la    v0, COM3_BASE_ADDR
1:
    li    v1, FIFO_ENABLE|FIFO_RCV_RST|FIFO_XMT_RST|FIFO_TRIGGER_4
    sb    v1, NSREG(NS16550_FIFO)(v0)
    li    v1, CFCR_DLAB
    sb    v1, NSREG(NS16550_CFCR)(v0)
     li    v1, NS16550HZ/(16*CONS_BAUD)
    sb    v1, NSREG(NS16550_DATA)(v0)
    srl    v1, 8
    sb    v1, NSREG(NS16550_IER)(v0)
    li    v1, CFCR_8BITS
    sb    v1, NSREG(NS16550_CFCR)(v0)
    li    v1, MCR_DTR|MCR_RTS
    sb    v1, NSREG(NS16550_MCR)(v0)
    li    v1, 0x0
    sb    v1, NSREG(NS16550_IER)(v0)
#endif
    la    v0, COM1_BASE_ADDR
1:
    li    v1, FIFO_ENABLE|FIFO_RCV_RST|FIFO_XMT_RST|FIFO_TRIGGER_4
    sb    v1, NSREG(NS16550_FIFO)(v0)
    li    v1, CFCR_DLAB
    sb    v1, NSREG(NS16550_CFCR)(v0)
     li    v1, NS16550HZ/2/(16*CONS_BAUD)
    sb    v1, NSREG(NS16550_DATA)(v0)
    srl    v1, 8
    sb    v1, NSREG(NS16550_IER)(v0)
    li    v1, CFCR_8BITS
    sb    v1, NSREG(NS16550_CFCR)(v0)
    li    v1, MCR_DTR|MCR_RTS
    sb    v1, NSREG(NS16550_MCR)(v0)
    li    v1, 0x0
    sb    v1, NSREG(NS16550_IER)(v0)
    nop
    j    ra
    nop
END(initserial)
godson2_cache_init
LEAF(godson2_cache_init)
####part 2####
cache_detect_2way:
    mfc0    t4, CP0_CONFIG
    andi    t5, t4, 0x0e00
    srl    t5, t5, 9
    andi    t6, t4, 0x01c0
    srl    t6, t6, 6
    addiu    t6, t6, 11
    addiu    t5, t5, 11
    addiu    t4, $0, 1
    sllv    t6, t4, t6
    srl    t6,1
    sllv    t5, t4, t5
    srl    t5,1
    addiu    t7, $0, 2
####part 3####
    lui    a0, 0x8000
    addu    a1, $0, t5
    addu    a2, $0, t6
cache_init_d2way:
#a0=0x80000000, a1=icache_size, a2=dcache_size
#a3, v0 and v1 used as local registers
    mtc0    $0, CP0_TAGHI
    addu    v0, $0, a0
    addu    v1, a0, a2
1:    slt    a3, v0, v1
    beq    a3, $0, 1f
    nop
    mtc0    $0, CP0_TAGLO
    cache    Index_Store_Tag_D, 0x0(v0)
    mtc0    $0, CP0_TAGLO
    cache    Index_Store_Tag_D, 0x1(v0)
    mtc0    $0, CP0_TAGLO
    cache   Index_Store_Tag_D, 0x2(v0)
    mtc0    $0, CP0_TAGLO
    cache   Index_Store_Tag_D, 0x3(v0)
    beq    $0, $0, 1b
    addiu    v0, v0, 0x20
#if 1
1:
cache_init_l24way:
        mtc0    $0, CP0_TAGHI
        addu    v0, $0, a0
        addu    v1, a0, 128*1024
1:      slt     a3, v0, v1
        beq     a3, $0, 1f
        nop
        mtc0    $0, CP0_TAGLO
        cache   Index_Store_Tag_S, 0x0(v0)
        mtc0    $0, CP0_TAGLO
        cache   Index_Store_Tag_S, 0x1(v0)
        mtc0    $0, CP0_TAGLO
        cache   Index_Store_Tag_S, 0x2(v0)
        mtc0    $0, CP0_TAGLO
        cache   Index_Store_Tag_S, 0x3(v0)
        beq     $0, $0, 1b
        addiu   v0, v0, 0x20
1:
cache_flush_4way:
    addu    v0, $0, a0
    addu    v1, a0, 128*1024
1:    slt    a3, v0, v1
    beq    a3, $0, 1f
    nop
    cache    Index_Writeback_Inv_S, 0x0(v0)
    cache    Index_Writeback_Inv_S, 0x1(v0)
    cache    Index_Writeback_Inv_S, 0x2(v0)
    cache    Index_Writeback_Inv_S, 0x3(v0)
    beq    $0, $0, 1b
    addiu    v0, v0, 0x20
# endif
1:
cache_flush_i2way:
    addu    v0, $0, a0
    addu    v1, a0, a1
1:    slt    a3, v0, v1
    beq    a3, $0, 1f
    nop
    cache    Index_Invalidate_I, 0x0(v0)
#    cache    Index_Invalidate_I, 0x1(v0)
#    cache    Index_Invalidate_I, 0x2(v0)
#    cache    Index_Invalidate_I, 0x3(v0)
    beq    $0, $0, 1b
    addiu    v0, v0, 0x20
1:
cache_flush_d2way:
    addu    v0, $0, a0
    addu    v1, a0, a2
1:    slt    a3, v0, v1
    beq    a3, $0, 1f
    nop
    cache    Index_Writeback_Inv_D, 0x0(v0)
    cache    Index_Writeback_Inv_D, 0x1(v0)
    cache    Index_Writeback_Inv_D, 0x2(v0)
    cache    Index_Writeback_Inv_D, 0x3(v0)
    beq    $0, $0, 1b
    addiu    v0, v0, 0x20
1:
cache_init_finish:
    nop
    jr    ra
    nop
cache_init_panic:
    TTYDBG("cache init panic\r\n");
1:    b    1b
    nop
    .end    godson2_cache_init
superio_init
LEAF(superio_init)
    PCICONF_WRITEW(PCI_IDSEL_VIA686B,0,4,7);
    /*positive decode*/
    PCICONF_ORB(PCI_IDSEL_VIA686B,0,0x81,0x80);
    PCICONF_WRITEB(PCI_IDSEL_VIA686B,0,0x83,0x80|0x1| 0x8);
    PCICONF_WRITEB(PCI_IDSEL_VIA686B,0,0x85,3);
    /* enable RTC/PS2/KBC */
    PCICONF_WRITEB(PCI_IDSEL_VIA686B,0,0x5A,7);
    SUPERIO_WR(0xe2,E2_S2|E2_S1|E2_EPP|E2_FLOPPY) /*enable serial and floppy */
    SUPERIO_WR(0xe3,0x3f0>>2) /*floppy base address*/
    SUPERIO_WR(0xe6,0x378>>2) /*parallel port*/
    SUPERIO_WR(0xe7,0x3f8>>2) /*set serial port1 base addr 0x3f8*/
    SUPERIO_WR(0xe8,0x2f8>>2) /*set serial port2 base addr 0x2f8*/
    SUPERIO_WR(0xee,0xc0) /* both ports on high speed*/
    PCICONF_WRITEB(PCI_IDSEL_VIA686B,0,0x85,1)
    jr ra
    nop
END(superio_init)



+++++++++++++++++++++++++++++++++++++++++
PMON 中读取 DDR 内存 SPD 信息的代码
+++++++++++++++++++++++++++++++++++++++++
本文讲述用I2C协议从内存条上的SPD(eeprom)中读取内存参数。
SPD 信息简述
SPD(eeprom)中,定义了很多参数,这里给出一个简单的说明。
第0字节 表示厂商使用的字节数。
第1字节 表示EERPOM存储容量。
第2字节 表示内存类型。
第3字节 表示行地址位数。
第4字节 表示列地址位数。
第5字节 表示排数。
第6字节 表示数据宽度(低字节)。
第7字节 表示数据宽度(高字节)。
第8字节 表示信号电平。
第9字节 表示SDRAM最高时钟频率。
第10字节 表示SDRAM访问时间。
第11字节 表示配置类型。
第12字节 表示刷行率/类型。
第13字节 表示最小SDRAM颗粒数据宽度。
第16字节 表示支持突发传输长度。
第17字节 表示逻辑BANK数。
第18字节 表示CAS延时。
第23字节 表示SDRM时钟。是2的最大指数倍。
第24字节 表示SDRAM访问时间。
第34字节 表示输入数据建立时间。
第35字节 表示输入数据保持时间。
第62字节 表示SPD版本号。
其它的字节,就要参考SPD文档了。后面一大段程序就是实现了读取这些参数,然后根据这些参数来设置龙芯内存的SDRAM寄存器。
PMON 中对内存SPD读取及处理的方法
读取spd
● (offset 3)读取行地址数目
● (offset 4)读取列地址数目
● 根据行列地址数目判断ddrtype
● (offset 31)读取每个片选的容量
– 用该值初始化内存大小tmpsize
● (offset 17)读取芯片bank,一般为4
● (offset 5)读取片选数(相当于module数)
– 按照片选数,计算内存大小tmpsize
– 按照读出的片选数设置sdcfg寄存器
● (offset 6)读取位宽
● 其中sdcfg的初始值是按照ddr333设置的
(注释表明,没有详细验证)
初始化内存控制器
● 经过spd的读取过程我们获得sdcfg配置和
内存大小memsize
● 设置CPU内部sdcfg寄存器(0x1ff00008)
● 按照memsize设置内存窗口
● 1ff0 0000偏移开始的四个寄存器
– 0x10/0x20(mem window base)
– 0x18/0x28(mem window size)
– e.g. 128MB内存
● 0x10=0,0x18=128MB,0x20=512MB,0x28=0
– e.g. 512MB内存
● 0x10=0,0x18=256MB,0x20=512MB,0x28=256MB
– 有很多的nop,调试试验的结果
代码讲解
/*
     * Now determine DRAM configuration and size by
     * reading the I2C EEROM (SPD) on the DIMMS (DDR)
     */
    PRINTSTR("DIMM read\r\n")
    /* only one memory slot, slave address is 10100001b */
    li  a1, 0x0
1:
    li    a0, 0xa1    /* a0: slave address, a1: reg index to read */
    bal    i2cread
    nop
        /* save a1 */
    move t1, a1
    /* print */
    move a0, v0
    bal  hexserial
    nop
    PRINTSTR("\r\n")   
        /* restore a1 */
    move  a1,t1
    addiu a1,a1,1
    li   v0, 0x20
    bleu  a1, v0, 1b        /* repeat for 32 times */
    nop
    li    msize, 0            /* msize is register s2 */
    /* set some parameters for DDR333
        rank number and DDR type field will be filled later
        to check: fix TCAS?
    */
    li    sdCfg, 0x341043df        /* sdCfg is register s6 */
    /* read DIMM memory type (must be DDRAM) */
#if 0
    li    a0,0xa1
    li    a1,2
    bal    i2cread
    nop
    bne    v0,7,.nodimm
    nop
    PRINTSTR("read memory type\r\n")
#endif
    /* read DIMM number of rows */
    li    a0, 0xa1
    li    a1, 3
    bal    i2cread
    nop   
    move    a0, v0        // v0 is the return value register
    subu    v0, 12
    move    s1, v0        // save for later use
    bgtu    v0, 2, .nodimm        // if v0 > 2 then jump to .nodimm
    nop
    PRINTSTR("read number of rows\r\n")
2:    /* read DIMM number of cols */
    li    a0, 0xa1
    li    a1, 4
    bal    i2cread
    nop
    subu    v0, 8                // v0 saved the return value
    bgtu    v0, 4, .nodimm
    nop
    // read and check ddr type, the combination of t1 and v0 represents a ddr type
    move    t1, s1
    bne    t1, 0, 10f
    nop
    bne    v0, 2, 20f
    nop
    li    v0, 0
    b    .ddrtype
    nop
20:    bne    v0, 1, 21f
    nop
    li    v0, 1
    b    .ddrtype
    nop
21:    bne    v0, 0, 22f
    nop
    li    v0, 2
    b    .ddrtype
    nop
22:    bne    v0, 3, 33f
    nop
    li    v0, 3
    b    .ddrtype
    nop
10:    bne    t1, 1, 11f
    nop
    bne    v0, 3, 20f
    nop
    li    v0, 4
    b    .ddrtype
    nop
20:    bne    v0, 2, 21f
    nop
    li    v0, 5
    b    .ddrtype
    nop
21:    bne    v0, 1, 22f
    nop
    li    v0, 6
    b    .ddrtype
    nop
22:    bne    v0, 4, 33f
    nop
    li    v0, 7
    b    .ddrtype
    nop
11:    bne    t1, 2, 33f
    nop
    bne    v0, 4, 20f
    nop
    li    v0, 8
    b    .ddrtype
    nop
20:    bne    v0, 3, 21f
    nop
    li    v0, 9
    b    .ddrtype
    nop
21:    bne    v0, 2, 33f
    nop
    li    v0, 10
    b    .ddrtype
    nop
33:    PRINTSTR("DDR type not supported!\r\n");
34:    b    34b
    nop
.ddrtype:
    #bit 25:22 is DDR type field
    sll    v0, 22
    and    v0, 0x03c00000
    or    sdCfg, v0
    /* read DIMM memory size per side */
    li    a0, 0xa1
    li    a1, 31
    bal    i2cread
    nop
    beqz    v0,.nodimm
    nop
    sll    tmpsize,v0,22        # multiply by 4M
    PRINTSTR("read memory size per side\r\n")
2:    /* read DIMM number of blocks-per-ddrram */
    li    a1,17
    bal    i2cread
    nop
    beq    v0,2,2f
    nop
    bne    v0,4,.nodimm
    nop
    PRINTSTR("read blocks per ddrram\r\n")
2:    /* read DIMM number of sides (banks) */
    li    a1,5
    bal    i2cread
    nop
    beq    v0,1,2f
    nop
    bne    v0,2,.nodimm
    nop
    sll    tmpsize,1    # msize *= 2   
    or  sdCfg, 0x1<<27
    PRINTSTR("read number of sides\r\n")
2:    /* read DIMM width */
    li    a1,6
    bal    i2cread
    nop
    bleu    v0,36,2f
    nop
    bgtu    v0,72,.nodimm
    nop
    PRINTSTR("read width\r\n")
2:    addu    msize,tmpsize
    b    2f
    nop   
.nodimm:
    move    dbg,a0        // dbg is s5
    PRINTSTR ("\r\nNo DIMM in slot ")
    move    a0,dbg
    bal    hexserial
    nop
    PRINTSTR("\r\n")
    move    a0,dbg
    #li  msize,0x10000000
    #li    sdCfg,0x3d9043df    #~133MHz
    li  msize,0x20000000
    li    sdCfg,0x3d5043df     #~133MHz
2:
    PRINTSTR("DIMM SIZE=")
    move    a0,msize
    bal    hexserial
    nop
    PRINTSTR("\r\n")
    li    t0, 0xbff00008
    sd    sdCfg, 0(t0)
    nop
    nop
    /* (uint32_t *)0xbfe00040 = 0x80000000
     * means only address below 1G will be sent to CPU
     */
    lui    t0, 0xbfe0
    li    t1, 0x80000000
    sw    t1, 0x40(t0)
    nop
    #### gx 2006-03-17: mode ####
    #li    t1,0x20
    li    t1,0x28
    li    t0, 0xbff00000
    sd    t1,0(t0)
    nop
    li    t1,0x0
    li    t0, 0xbff00000
    sd    t1,0x30(t0)
    nop
    ##fixed base address reg##
    sd    zero, 0x10(t0)
    nop
    lui    t1,0x2000
    sd    t1,0x20(t0)
    nop
    li      t1, 0x10000000
        blt     msize, t1, 1f
    nop
    ####bigger than 256MB####
    sd    t1, 0x18(t0)
    nop
    move    a0, msize
    subu    a0, t1
    nop
    nop
    nop
    sd    a0, 0x28(t0)
    nop
    b    2f
1:
    nop
    nop
    sd    msize, 0x18(t0)
    nop
    nop
    nop
    sd    zero, 0x28(t0)
    nop
    nop
    nop
2:
    PRINTSTR("sdcfg=");
    move    a0,sdCfg
    bal    hexserial
    nop
    PRINTSTR("\r\n");
    PRINTSTR("msize=");
    move    a0,msize
    bal    hexserial
    nop
    PRINTSTR("\r\n")
skipdimm:
    li    t1,0        # accumulate pcimembasecfg settings
    /* set bar0 mask and translation to point to SDRAM */
    sub    t0,msize,1
    not    t0
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE0_MASK_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE0_MASK
    or    t1,t0
    li    t0,0x00000000
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE0_TRANS_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE0_TRANS
    or    t1,t0
    or    t1,BONITO_PCIMEMBASECFG_MEMBASE0_CACHED
    /* set bar1 to minimum size to conserve PCI space */
    li    t0, ~0
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE1_MASK_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE1_MASK
    or    t1,t0
    li    t0,0x00000000
    srl    t0,BONITO_PCIMEMBASECFG_ASHIFT-BONITO_PCIMEMBASECFG_MEMBASE1_TRANS_SHIFT
    and    t0,BONITO_PCIMEMBASECFG_MEMBASE1_TRANS
    or    t1,t0
    or    t1,BONITO_PCIMEMBASECFG_MEMBASE1_CACHED
    sw    t1,BONITO_PCIMEMBASECFG(bonito)
    /* enable configuration cycles now */
    lw    t0,BONITO_BONPONCFG(bonito)
    and    t0,~BONITO_BONPONCFG_CONFIG_DIS
    sw    t0,BONITO_BONPONCFG(bonito)
    PRINTSTR("Init SDRAM Done!\r\n");
=====================
解释:
    /* only one memory slot, slave address is 10100001b */
    li  a1, 0x0
1:
    li    a0, 0xa1    /* a0: slave address, a1: reg index to read */
    bal    i2cread
    nop
上面这段代码,把 0 设置给 a1,然后把 0xa1 设置给 a0,然后就调用 I2C 的子函数来读取数据。a0 和 a1 寄存器是 i2cread 这个函数的两个参数。
i2cread 函数的实现
下面来看 i2cread 函数的内容
/* a0: slave address
   a1: reg off
*/
LEAF(i2cread)
    /* set device address */
        li  v0, 0xbfd00000 + SMBUS_HOST_ADDRESS
    li  a0, 0xa1
    sb  a0, 0(v0);
    /* store register offset */
        li  v0, 0xbfd00000 + SMBUS_HOST_COMMAND
    sb  a1, 0(v0);
    /* read byte data protocol */
    li  v0, 0x08
    li  v1, 0xbfd00000 + SMBUS_HOST_CONTROL
    sb  v0, 0(v1);
    /* make sure SMB host ready to start, important!--zfx */
    li  v1, 0xbfd00000 + SMBUS_HOST_STATUS
    lbu v0, 0(v1)
    andi v0,v0, 0x1f
    beqz  v0,1f
    nop
    sb  v0, 0(v1)
    lbu v0, 0(v1)   #flush the write
1:
    /* start */
    li  v1, 0xbfd00000 + SMBUS_HOST_CONTROL
    lbu v0, 0(v1)
    ori v0, v0, 0x40
    sb  v0, 0(v1);
    /* wait */
    li  v1, 0xbfd00000 + SMBUS_HOST_STATUS
    li  a1, 0x1000
1:
#if 1
    /* delay */
    li a0, 0x1000   
2:            
    bnez    a0,2b
    addiu    a0, -1
#endif
    addiu    a1, -1
    beqz    a1, 1f
    nop
    lbu  v0, 0(v1)
    andi v0, SMBUS_HOST_STATUS_BUSY
    bnez  v0, 1b  #IDEL ?
    nop
1:
    li  v1, 0xbfd00000 + SMBUS_HOST_STATUS
    lbu v0, 0(v1)
    andi v0,v0, 0x1f
    beqz  v0,1f
    nop
    sb  v0, 0(v1)   #reset
    lbu v0, 0(v1)   #flush the write
1:
    li  v1, 0xbfd00000 + SMBUS_HOST_DATA0
    lbu  v0, 0(v1)
    jr    ra
    nop
END(i2cread)   
=====================
解释:
    /* set device address */
        li  v0, 0xbfd00000 + SMBUS_HOST_ADDRESS
    li  a0, 0xa1
    sb  a0, 0(v0);
上面代码是输出从设备的地址。
    /* store register offset */
        li  v0, 0xbfd00000 + SMBUS_HOST_COMMAND
    sb  a1, 0(v0);
上面代码是输出从设备的寄存器偏移量。
    /* read byte data protocol */
    li  v0, 0x08
    li  v1, 0xbfd00000 + SMBUS_HOST_CONTROL
    sb  v0, 0(v1);
    /* make sure SMB host ready to start, important!--zfx */
    li  v1, 0xbfd00000 + SMBUS_HOST_STATUS
    lbu v0, 0(v1)
    andi v0,v0, 0x1f
    beqz  v0,1f
    nop
    sb  v0, 0(v1)
    lbu v0, 0(v1)   #flush the write
上面代码是查看数据总线是否准备好数据。
1:
    /* start */
    li  v1, 0xbfd00000 + SMBUS_HOST_CONTROL
    lbu v0, 0(v1)
    ori v0, v0, 0x40
    sb  v0, 0(v1);
    /* wait */
    li  v1, 0xbfd00000 + SMBUS_HOST_STATUS
    li  a1, 0x1000
1:
#if 1
    /* delay */
    li a0, 0x1000   
2:            
    bnez    a0,2b
    addiu    a0, -1
#endif
    addiu    a1, -1
    beqz    a1, 1f
    nop
    lbu  v0, 0(v1)
    andi v0, SMBUS_HOST_STATUS_BUSY
    bnez  v0, 1b  #IDEL ?
    nop
上面代码是查看总线是否在忙状态。
1:
    li  v1, 0xbfd00000 + SMBUS_HOST_STATUS
    lbu v0, 0(v1)
    andi v0,v0, 0x1f
    beqz  v0,1f
    nop
    sb  v0, 0(v1)   #reset
    lbu v0, 0(v1)   #flush the write
1:
    li  v1, 0xbfd00000 + SMBUS_HOST_DATA0
    lbu  v0, 0(v1)
    jr    ra
    nop
上面代码是已经把命令成功发送出去,然后成功地读取回来数据,保存在v0寄存里。
通过上面的子函数,就可以通过I2C总线去读取内存条上的EEPROM参数,以便后面进行内存初始化。
在这里第一次读取是第一个字节。


+++++++++++++++++++++++++++++++++++++++++
end
+++++++++++++++++++++++++++++++++++++++++

[ Last edited by zzz19760225 on 2017-11-2 at 00:21 ]
作者: zzz19760225     时间: 2017-10-2 12:44
1
作者: zzz19760225     时间: 2017-10-2 12:44
1
作者: zzz19760225     时间: 2017-10-2 12:45
1
作者: zzz19760225     时间: 2017-10-2 12:46
1
作者: zzz19760225     时间: 2017-10-2 12:46
1
作者: zzz19760225     时间: 2017-10-2 12:46
1
作者: zzz19760225     时间: 2017-10-2 12:46
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
http://blog.csdn.net/SdustLiYang/article/category/923899/2


mips寄存器约定                                     :专注嵌入式dustLiYang                                       
http://blog.csdn.net/sdustliyang/article/details/46558849

对于在一个CPU上进行开发,掌握其工作的CPU的寄存器约定是非常重要的。


MIPS体系结构提供了32个GPR(GENERAL PURPOSE REGISTER)。这32个寄存器的用法大致如下:


REGISTER   NAME          USAGE
$0                   $zero           常量0(constant value 0)
$2-$3             $v0-$v1        函数调用返回值(values for results and expression evaluation)
$4-$7             $a0-$a3        函数调用的前几个参数(arguments)
$8-$15           $t0-$t7          临时变量。子程序使用时无需保存,从上层函数来看,函数调用前后,寄存器的值可能会发生变化。
$16-$23         $s0-$s7       需要保存的变量。子程序使用时,必须保存原始值,并在返回前恢复,从上层函数来看,这些寄存器的值没有变化。
$24-$25        $t8-$t9           临时变量
$26-$27        $k0-$k1         保留给中断或自陷处理程序使用;因而值可能随时发生变化   
$28                $gp                全局指针(Global Pointer) 。利用gp做基址,对于gp指针前后32K范围的数据存取,只需要一条指令就可以完成。通常的做法是将一些小的全局数据(static extern)等,放在一起,用gp作指针。
$29                $sp                 堆栈指针(Stack Pointer) 。MIPS通常只在多重调用时,子程序出口和入口才调整堆栈指针,这个过程由子程序负责完成。
$30                $fp                  帧指针(Frame Pointer) (BNN:fp is stale acutally, and can be simply used as $t8)
$31                $ra                  返回地址(return address)


对一个CPU的寄存器约定的正确用法是非常重要的。当然对C语言开发者不需要关心,因为COMPILER会TAKE CARE。但对于KERNEL的开发或DRIVER开发的人就**必须**清楚。


一般来讲,你通过objdump -d可以清醒的看到寄存器的用法。


下面通过我刚才写的一个简单例子来讲解:


~/ vi Hello.c
"Hello.c" [New file]
/* Example to illustrate mips register convention
* -Author: BNN
* 11/29/2001
*/


int addFunc(int,int);
int subFunc(int);


void main()
{


int x,y,z;
x= 1;
y=2;
z = addFunc(x,y);
}




int addFunc(int x,int y)
{
int value1 = 5;
int value2;


value2 = subFunc(value1);
return (x+y+value2);


}


int subFunc(int value)
{
return value--;
}


上面是一个C程序,main()函数调用一个加法的子函数。让我们来看看编译器是如何产生代码的。


~/bnn:74> /bin/mips-elf-gcc -c Hello.o Hello.c -mips3 -mcpu=r4000 -mgp32 -mfp32 -O1


~/bnn:75> /bin/mips64-elf-objdump -d Hello.o
Hello.o: file format elf32-bigmips
Disassembly of section .text:


/* main Function */
0000000000000000 :
/*create a stack frame by moving the stack pointer 8
*bytes down and meantime update the sp value
*/
0: 27bdfff8 addiu $sp,$sp,-8
/* Save the return address to the current sp position.*/
4: afbf0000 sw $ra,0($sp)
8: 0c000000 jal 0
/* nop is for the delay slot */
c: 00000000 nop
/* Fill the argument a0 with the value 1 */
10: 24040001 li $a0,1
/* Jump the addFunc */
14: 0c00000a jal 28
/* NOTE HERE: Why we fill the second argument
*behind the addFunc function call?
* This is all about the "-O1" compilation optimizaiton.
* With mips architecture, the instruciton after jump
* will also be fetched into the pipline and get
* exectuted. Therefore, we can promise that the
* second argument will be filled with the value of
* integer 2.
*/
18: 24050002 li $a1,2
/*Load the return address from the stack pointer
* Note here that the result v0 contains the result of
* addFunc function call
*/
1c: 8fbf0000 lw $ra,0($sp)
/* Return */
20: 03e00008 jr $ra
/* Restore the stack frame */
24: 27bd0008 addiu $sp,$sp,8


/* addFunc Function */
0000000000000028 :
/* Create a stack frame by allocating 16 bytes or 4
* words size
*/
28: 27bdfff0 addiu $sp,$sp,-16
/* Save the return address into the stack with 8 bytes
* offset. Please note that compiler does not save the
* ra to 0($sp).
*Think of why, in contrast of the previous PowerPC
* EABI convention
*/
2c: afbf0008 sw $ra,8($sp)
/* We save the s1 reg. value into the stack
* because we will use s1 in this function
* Note that the 4,5,6,7($sp) positions will then
* be occupied by this 32 bits size register
*/
30: afb10004 sw $s1,4($sp)
/* Withe same reason, save s0 reg. */
34: afb00000 sw $s0,0($sp)
/* Retrieve the argument 0 into s0 reg. */
38: 0080802d move $s0,$a0
/* Retrieve the argument 1 into s1 reg. */
3c: 00a0882d move $s1,$a1
/* Call the subFunc with a0 with 5 */
40: 0c000019 jal 64
/* In the delay slot, we load the 5 into argument a0 reg
*for subFunc call.
*/
44: 24040005 li $a0,5
/* s0 = s0+s1; note that s0 and s1 holds the values of
* x,y, respectively
*/
48: 02118021 addu $s0,$s0,$s1
/* v0 = s0+v0; v0 holds the return results of subFunc
*call; And we let v0 hold the final results
*/
4c: 02021021 addu $v0,$s0,$v0
/*Retrieve the ra value from stack */
50: 8fbf0008 lw $ra,8($sp)
/*!!!!restore the s1 reg. value */
54: 8fb10004 lw $s1,4($sp)
/*!!!! restore the s0 reg. value */
58: 8fb00000 lw $s0,0($sp)
/* Return back to main func */
5c: 03e00008 jr $ra
/* Update/restore the stack pointer/frame */
60: 27bd0010 addiu $sp,$sp,16


/* subFunc Function */
0000000000000064 :
/* return back to addFunc function */
64: 03e00008 jr $ra
/* Taking advantage of the mips delay slot, filling the
* result reg v0 by simply assigning the v0 as the value
*of a0. This is a bug from my c source
* codes--"value--". I should write my codes
* like "--value", instead.
68: 0080102d move $v0,$a0




希望大家静下心来把上面的代码看懂。一定要注意编译器为什么在使用s0和s1之前要先把她们SAVE起来,然后再RESTORE,虽然在这个例子中虽然main 函数没用s0和s1。




另外的一点是:由于我们加了“-O1”优化,编译器利用了“delay slot"来执行那些必须执行的指令,而不是简单的塞一个”nop"指令在那里。非常的漂亮。


最后,考大家一个问题,为了使得大家更加理解寄存器的用法:


*在写一个核心调度context switch()例程时,我们需要SAVE/RESTORE$t0-$t7吗?如果不,为什么?


*在写一个时钟中断处理例程时,我们需要SAVE/RESTORE$t0-$t7吗?如果是,为什么?




本文来自CSDN网志,转载请标明出处:http://blog.csdn.net/yoursy/archive/2008/05/06/2399721.aspx

[ Last edited by zzz19760225 on 2017-11-2 at 00:38 ]
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:47
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48    标题: 龙芯3A片内集成四个GS464处理器核

龙芯3A3000/3B3000 处理器

用户手册上册

多核处理器架构、寄存器描述与系统软件编程指南V1.3

http://www.loongson.cn/uploadfile/cpu/3A3000/Loongson3A3000_3B3000user1.pdf

[ Last edited by zzz19760225 on 2017-11-21 at 08:00 ]
作者: zzz19760225     时间: 2017-10-2 12:48
目 录

1 概述..........................................................................................................................11
1.1 龙芯系列处理器介绍..................................................................................... 11
1.2 龙芯 3A3000/3B3000 简介............................................................................. 12

2 系统配置与控制......................................................................................................15
2.1 芯片工作模式................................................................................................. 15
2.2 控制引脚说明................................................................................................. 15
2.3 Cache 一致性.................................................................................................. 17
2.4 系统节点级的物理地址空间分布................................................................. 17
2.5 地址路由分布与配置..................................................................................... 19
2.6 芯片配置及采样寄存器................................................................................. 25

3 GS464e 处理器核.....................................................................................................30

4 共享 Cache(SCache)...........................................................................................32

5 矩阵处理加速器......................................................................................................34

6 处理器核间中断与通信..........................................................................................37

7 I/O 中断...................................................................................................................40

8 温度传感器..............................................................................................................43
8.1 实时温度采样................................................................................................. 43
8.2 高低温中断触发............................................................................................. 43
8.3 高温自动降频设置......................................................................................... 44

9 DDR2/3 SDRAM 控制器配置.....................................................................................46
9.1 DDR2/3 SDRAM 控制器功能概述.................................................................... 46
9.2 DDR2/3 SDRAM 读操作协议............................................................................ 46
9.3 DDR2/3 SDRAM 写操作协议............................................................................ 47
9.4 DDR2/3 SDRAM 参数配置格式........................................................................ 47

9.5 软件编程指南................................................................................................. 51
9.5.1 初始化操作............................................................................................ 51
9.5.2 复位引脚的控制.................................................................................... 51
9.5.3 Leveling................................................................................................ 53
9.5.3.1 Write Leveling..............................................................................53
9.5.3.2 Gate Leveling................................................................................54
9.5.4 单独发起 MRS 命令................................................................................ 55
9.5.5 任意操作控制总线................................................................................ 56
9.5.6 自循环测试模式控制............................................................................ 56
9.5.7 ECC 功能使用控制................................................................................. 57

10 HyperTransport 控制器.......................................................................................58
10.1 HyperTransport 硬件设置及初始化.......................................................... 58
10.2 HyperTransport 协议支持.......................................................................... 61
10.3 HyperTransport 中断支持.......................................................................... 62
10.4 HyperTransport 地址窗口.......................................................................... 62
10.4.1 HyperTransport 空间......................................................................... 62
10.4.2 HyperTransport 控制器内部窗口配置............................................. 63

10.5 配置寄存器................................................................................................... 64
10.5.1 Bridge Control.................................................................................. 66
10.5.2 Capability Registers...................................................................... 66
10.5.3 自定义寄存器...................................................................................... 69
10.5.4 接收诊断寄存器.................................................................................. 71
10.5.5 中断路由方式选择寄存器.................................................................. 71
10.5.6 接收缓冲区初始寄存器...................................................................... 71
10.5.7 接收地址窗口配置寄存器.................................................................. 72
10.5.8 中断向量寄存器.................................................................................. 75
10.5.9 中断使能寄存器.................................................................................. 78
10.5.10 Interrupt Discovery & Configuration...................................... 81
10.5.11 POST 地址窗口配置寄存器............................................................... 82
10.5.12 可预取地址窗口配置寄存器............................................................ 83
10.5.13 UNCACHE 地址窗口配置寄存器......................................................... 84
10.5.14 P2P 地址窗口配置寄存器................................................................. 87
10.5.15 命令发送缓存大小寄存器................................................................ 89
10.5.16 数据发送缓存大小寄存器................................................................ 89
10.5.17 发送缓存调试寄存器........................................................................ 89
10.5.18 PHY 阻抗匹配控制寄存器................................................................. 90
10.5.19 Revision ID 寄存器........................................................................ 91
10.5.20 Error Retry 控制寄存器................................................................ 91
10.5.21 Retry Count 寄存器........................................................................ 92
10.5.22 Link Train 寄存器.......................................................................... 92
10.5.23 Training 0 超时短计时寄存器...................................................... 93
10.5.24 Training 0 超时长计时寄存器...................................................... 94
10.5.25 Training 1 计数寄存器.................................................................. 94
10.5.26 Training 2 计数寄存器.................................................................. 94
10.5.27 Training 3 计数寄存器.................................................................. 94
10.5.28 软件频率配置寄存器........................................................................ 95
10.5.29 PHY 配置寄存器................................................................................ 96
10.5.30 链路初始化调试寄存器.................................................................... 97
10.5.31 LDT 调试寄存器................................................................................. 97
10.6 HyperTransport 总线配置空间的访问方法.............................................. 98
10.7 HyperTransport 多处理器支持.................................................................. 98

11 低速 IO 控制器配置............................................................................................101
11.1 PCI 控制器.................................................................................................. 101
11.2 LPC 控制器.................................................................................................. 106
11.3 UART 控制器................................................................................................ 107
11.3.1 数据寄存器(DAT)...........................................................................108
11.3.2 中断使能寄存器(IER).................................................................... 108
11.3.3 中断标识寄存器(IIR)..................................................................... 108
11.3.4 FIFO 控制寄存器(FCR).................................................................. 109
11.3.5 线路控制寄存器(LCR)...................................................................109
11.3.6 MODEM 控制寄存器(MCR)...........................................................111
11.3.7 线路状态寄存器(LSR)................................................................... 111
11.3.8 MODEM 状态寄存器 (MSR).........................................................113
11.3.9 分频锁存器...........................................................................................113
11.4 SPI 控制器.................................................................................................. 114
11.4.1 控制寄存器(SPCR).........................................................................114
11.4.2 状态寄存器(SPSR)......................................................................... 115
11.4.3 数据寄存器(TxFIFO)......................................................................115
11.4.4 外部寄存器(SPER)......................................................................... 115
11.4.5 参数控制寄存器(SFC_PARAM)....................................................116
11.4.6 片选控制寄存器(SFC_SOFTCS)...................................................116
11.4.7 时序控制寄存器(SFC_TIMING)................................................... 117
11.5 IO 控制器配置............................................................................................ 118

12 芯片配置寄存器列表..........................................................................................122

13 软硬件设计指南..................................................................................................162
13.1 硬件改动指南............................................................................................. 162
13.2 频率设置说明............................................................................................. 163
13.3 PMON 改动指南............................................................................................ 163
13.4 内核改动指南............................................................................................. 164

图 目 录
图 1- 1 龙芯 3 号系统结构..........................................................................................11
图 1- 2 龙芯 3 号节点结构..........................................................................................12
图 1- 3 龙芯 3A3000/3B3000 芯片结构..................................................................... 13
图 3- 1 GS464e 结构图................................................................................................31
图 7- 1 龙芯 3A3000/3B3000 处理器中断路由示意图............................................. 40
图 9- 1 DDR2 SDRAM 读操作协议........................................................................... 47
图 9- 2 DDR2 SDRAM 写操作协议........................................................................... 47
图 10- 1 龙芯 3A3000/3B3000 中 HT 协议的配置访问...........................................98
图 10- 2 四片龙芯 3 号互联结构................................................................................99
图 10- 3 两片龙芯 3 号 8 位互联结构......................................................................100
图 10- 4 两片龙芯 3 号 16 位互联结构....................................................................100
图 11- 1 配置读写总线地址生成.............................................................................105

表 目 录
表 2- 1 控制引脚说明.................................................................................................15
表 2- 2 节点级的系统全局地址分布.........................................................................17
表 2- 3 节点内的地址分布.........................................................................................18
表 2- 4 节点内的地址分布.........................................................................................18
表 2- 5 MMAP 字段对应的该空间访问属性.............................................................19
表 2- 6 一级交叉开关地址窗口寄存器表.................................................................19
表 2- 7 二级 XBAR 处,从设备号与所述模块的对应关系....................................22
表 2- 8 MMAP 字段对应的该空间访问属性.............................................................22
表 2- 9 二级 XBAR 地址窗口转换寄存器表.............................................................22
表 2- 10 二级 XBAR 缺省地址配置...........................................................................25
表 2- 11 芯片配置寄存器(物理地址 0x1fe00180)...............................................25
表 2- 12 芯片采样寄存器(物理地址 0x1fe00190)...............................................25
表 2- 13 芯片结点和处理器核软件倍频设置寄存器(物理地址 0x1fe001b0)...27
表 2- 14 芯片内存和 HT 时钟软件倍频设置寄存器(物理地址 0x1fe001c0)....28
表 2- 15 芯片处理器核软件分频设置寄存器(物理地址 0x1fe001d0)...............28

表 4- 1 共享 Cache 锁窗口寄存器配置.....................................................................33
表 5- 1 矩阵处理编程接口说明.................................................................................34
表 5- 2 矩阵处理寄存器地址说明.............................................................................35
表 5- 3 trans_ctrl 寄存器说明......................................................................................35
表 5- 4 trans_status 寄存器说明..................................................................................36
表 6- 1 处理器核间中断相关的寄存器及其功能描述..............................................37
表 6- 2 0 号处理器核核间中断与通信寄存器列表...................................................37
表 6- 3 1 号处理器核的核间中断与通信寄存器列表...............................................38
表 6- 4 2 号处理器核的核间中断与通信寄存器列表...............................................38
表 6- 5 3 号处理器核的核间中断与通信寄存器列表...............................................38
表 7- 1 中断控制寄存器..............................................................................................41
表 7- 2 IO 控制寄存器地址.........................................................................................41
表 7- 3 中断路由寄存器的说明..................................................................................42
表 7- 4 中断路由寄存器地址......................................................................................42
表 8- 1 温度采样寄存器说明......................................................................................43
表 8- 2 高低温中断寄存器说明..................................................................................44
表 8- 3 高温降频控制寄存器说明..............................................................................45

表 10- 1 HyperTransport 总线相关引脚信号............................................................. 58
表 10- 2 HyperTransport 接收端可接收的命令......................................................... 61
表 10- 3 两种模式下会向外发送的命令...................................................................61
表 10- 4 默认的 4 个 HyperTransport 接口的地址窗口分布................................... 62
表 10- 5 龙芯 3 号处理器 HyperTransport 接口内部的地址窗口分布................... 63
表 10- 6 龙芯 3A3000/3B3000 处理器 HyperTransport 接口中提供的地址窗口...63
表 10- 7 软件可见寄存器列表...................................................................................64
表 10- 8 Bus Reset Control 寄存器定义..................................................................... 66
表 10- 9 Command,Capabilities Pointer,Capability ID 寄存器定义.....................66
表 10- 10 Link Config,Link Control 寄存器定义.................................................... 67
表 10- 11 Revision ID,Link Freq,Link Error,Link Freq Cap 寄存器定义......... 68
表 10- 12 Feature Capability 寄存器定义................................................................... 69
表 10- 13 MISC 寄存器定义....................................................................................... 69
表 10- 14 接收诊断寄存器..........................................................................................71
表 10- 15 中断路由方式选择寄存器..........................................................................71
表 10- 16 接收缓冲区初始寄存器..............................................................................71

表 10- 17 HT 总线接收地址窗口 0 使能(外部访问)寄存器定义....................... 72
表 10- 18 HT 总线接收地址窗口 0 基址(外部访问)寄存器定义....................... 72
表 10- 19 HT 总线接收地址窗口 1 使能(外部访问)寄存器定义....................... 73
表 10- 20 HT 总线接收地址窗口 1 基址(外部访问)寄存器定义....................... 73
表 10- 21 HT 总线接收地址窗口 2 使能(外部访问)寄存器定义....................... 73
表 10- 22 HT 总线接收地址窗口 2 基址(外部访问)寄存器定义....................... 74
表 10- 23 HT 总线接收地址窗口 3 使能(外部访问)寄存器定义....................... 74
表 10- 24 HT 总线接收地址窗口 3 基址(外部访问)寄存器定义....................... 74
表 10- 25 HT 总线接收地址窗口 4 使能(外部访问)寄存器定义....................... 75
表 10- 26 HT 总线接收地址窗口 4 基址(外部访问)寄存器定义....................... 75

表 10- 27 HT 总线中断向量寄存器定义(1)......................................................... 76
表 10- 28 HT 总线中断向量寄存器定义(2)......................................................... 76
表 10- 29 HT 总线中断向量寄存器定义(3)......................................................... 77
表 10- 30 HT 总线中断向量寄存器定义(4)......................................................... 77
表 10- 31 HT 总线中断向量寄存器定义(6)......................................................... 77
表 10- 32 HT 总线中断向量寄存器定义(7)......................................................... 77
表 10- 33 HT 总线中断向量寄存器定义(8)......................................................... 78
表 10- 34 HT 总线中断使能寄存器定义(1)......................................................... 79
表 10- 35 HT 总线中断使能寄存器定义(2)......................................................... 79
表 10- 36 HT 总线中断使能寄存器定义(3)......................................................... 79
表 10- 37 HT 总线中断使能寄存器定义(4)......................................................... 79
表 10- 38 HT 总线中断使能寄存器定义(5)......................................................... 80
表 10- 39 HT 总线中断使能寄存器定义(6)......................................................... 80
表 10- 40 HT 总线中断使能寄存器定义(7)......................................................... 80
表 10- 41 HT 总线中断使能寄存器定义(8)......................................................... 80

表 10- 42 Interrupt Capability 寄存器定义................................................................. 81
表 10- 43 Dataport 寄存器定义...................................................................................81
表 10- 44 IntrInfo 寄存器定义(1).......................................................................... 81
表 10- 45 IntrInfo 寄存器定义(2).......................................................................... 81
表 10- 46 HT 总线 POST 地址窗口 0 使能(内部访问)........................................82
表 10- 47 HT 总线 POST 地址窗口 0 基址(内部访问)........................................82
表 10- 48 HT 总线 POST 地址窗口 1 使能(内部访问)........................................83
表 10- 49 HT 总线 POST 地址窗口 1 基址(内部访问)........................................83
表 10- 50 HT 总线可预取地址窗口 0 使能(内部访问)....................................... 83
表 10- 51 HT 总线可预取地址窗口 0 基址(内部访问)....................................... 84
表 10- 52 HT 总线可预取地址窗口 1 使能(内部访问)....................................... 84
表 10- 53 HT 总线可预取地址窗口 1 基址(内部访问)....................................... 84
表 10- 54 HT 总线 Uncache 地址窗口 0 使能(内部访问)................................... 85
表 10- 55 HT 总线 Uncache 地址窗口 0 基址(内部访问)................................... 85
表 10- 56 HT 总线 Uncache 地址窗口 1 使能(内部访问)................................... 85
表 10- 57 HT 总线 Uncache 地址窗口 1 基址(内部访问)................................... 86
表 10- 58 HT 总线 Uncache 地址窗口 2 使能(内部访问)................................... 86
表 10- 59 HT 总线 Uncache 地址窗口 2 基址(内部访问)................................... 86
表 10- 60 HT 总线 Uncache 地址窗口 3 使能(内部访问)................................... 87
表 10- 61 HT 总线 Uncache 地址窗口 3 基址(内部访问)................................... 87
表 10- 62 HT 总线 P2P 地址窗口 0 使能(外部访问)寄存器定义....................... 87
表 10- 63 HT 总线 P2P 地址窗口 0 基址(外部访问)寄存器定义....................... 88
表 10- 64 HT 总线 P2P 地址窗口 1 使能(外部访问)寄存器定义....................... 88
表 10- 65 HT 总线 P2P 地址窗口 1 基址(外部访问)寄存器定义....................... 88

表 10- 66 命令发送缓存大小寄存器.........................................................................89
表 10- 67 数据发送缓存大小寄存器.........................................................................89
表 10- 68 发送缓存调试寄存器..................................................................................90
表 10- 69 阻抗匹配控制寄存器.................................................................................91
表 10- 70 Revision ID 寄存器..................................................................................... 91
表 10- 71 Error Retry 控制寄存器............................................................................. 91
表 10- 72 Retry Count 寄存器..................................................................................... 92
表 10- 73 Link Train 寄存器........................................................................................92
表 10- 74 Training 0 超时短计时寄存器................................................................... 93
表 10- 75 Training 0 超时长计数寄存器................................................................... 94
表 10- 76 Training 1 计数寄存器............................................................................... 94
表 10- 77 Training 2 计数寄存器............................................................................... 94
表 10- 78 Training 3 计数寄存器............................................................................... 95
表 10- 79 软件频率配置寄存器.................................................................................95
表 10- 80 PHY 配置寄存器........................................................................................96
表 10- 81 链路初始化调试寄存器.............................................................................97
表 10- 82 LDT 调试寄存器......................................................................................... 98
表 11- 1 PCI 控制器配置头.......................................................................................101
表 11- 2 PCI 控制寄存器...........................................................................................102
表 11- 3 PCI/PCIX 总线请求与应答线分配............................................................ 105
表 11- 4 LPC 控制器地址空间分布..........................................................................106
表 11- 5 LPC 配置寄存器含义..................................................................................106
表 11- 6 SPI 控制器地址空间分布........................................................................... 114
表 11- 7 IO 控制寄存器.............................................................................................118
表 11- 8 寄存器详细描述.......................................................................................... 119

[ Last edited by zzz19760225 on 2017-11-21 at 07:57 ]
作者: zzz19760225     时间: 2017-10-2 12:48
概述,介绍分类,列图,列表。


3 GS464e 处理器核.....................................................................................................30

12 芯片配置寄存器列表..........................................................................................122

13 软硬件设计指南..................................................................................................162
13.1 硬件改动指南............................................................................................. 162

[ Last edited by zzz19760225 on 2017-11-21 at 08:01 ]
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:48
龙芯 1A 具有以下关键特性:
• 集成一个 LS232 双发射龙芯处理器核,指令和数据 L1 Cache 各 16KB
• 集成 2D GPU
• 集成两路 DC 控制器,最大分辨率可支持到 1920*1080@60Hz/24bit
• 集成 2 个 10M/100M/1000M 自适应 GMAC
• 集成 2 个 SATA2
• 集成 32 位 PCI,支持主从模式
• 集成 1 个 32 位/16 位 DDR2 控制器
• 集成 4 个 USB HOST 接口,兼容 USB2.0 和 USB1.1
• 集成 1 个 8 位 NAND FLASH 控制器,支持 4 个片选
• 集成中断控制器,支持灵活的中断设置
• 集成 2 个 SPI 控制器,支持主模式,SPI0 支持系统启动
• 集成 AC97 控制器
• 集成 1 个 LPC 控制器
• 集成 4 路 UART 串口
• 集成 1 路 PS/2(键盘和鼠标)
• 集成 3 路 I2C 控制器,兼容 SMBUS
• 集成 2 路 CAN 总线控制器
• 集成 88 路 GPIO 端口
• 集成 1 路 RTC 接口
• 集成 4 路 PWM 控制器
• 集成 ACPI
• 集成看门狗

[ Last edited by zzz19760225 on 2017-12-25 at 13:51 ]
作者: zzz19760225     时间: 2017-10-2 12:48
1
作者: zzz19760225     时间: 2017-10-2 12:49
zhengruohuang:
toddler C 语言操作系统
https://github.com/zhengruohuang/toddler




如何从零开始写一个简单的操作系统?
https://www.zhihu.com/question/25628124

[ Last edited by zzz19760225 on 2017-12-7 at 15:21 ]
作者: zzz19760225     时间: 2017-10-2 12:49
loongson2f_龙芯灵珑9S2A一体机尝试usb和硬盘两种方式安装debian6成功篇                      :linkasm
http://blog.csdn.net/v80/article/details/78595967

[ Last edited by zzz19760225 on 2017-11-23 at 15:30 ]
作者: zzz19760225     时间: 2017-10-2 12:49    标题: 龙芯源码

社区开放源码库
社区项目源码库,存放着社区开放的所有项目源码。
使用者:所有用户,提供匿名下载。
http://www.loongnix.org/cgit


指数    关于       

        名字  Name                 描述   Description                 老板   Owner                      闲置    Idle                             链接   Links

1  自动测试系统    Automatic Test System
1.1,LOONGAT                   LOONGAT存储库                 人民网                               22个月                                   总结日志树

2  图形   Graphic
2.1, jpeg                          jpeg库                               人民网                               17个月                                    总结日志树
2.2, libdrm                        libdrm存储库                       人民网                               17个月                                    总结日志树
2.3, libpng                        libpng存储库                       人民网                               17个月                                    总结日志树
2.4, libxft                          libxft存储库                        人民网                               17个月                                    总结日志树
2.5, mesa                         mesa的存储库                     人民网                                     口                                    总结日志树
2.6, pixman                       pixman存储库                     人民网                               17个月                                    总结日志树
2.7, qt                             qt库                                  人民网                               17个月                                    总结日志树                    
2.8, qt5                           qt5存储库                           人民网                                     口                                    总结日志树
2.9, xorg                          xorg库                                人民网                              17个月                                    总结日志树
2.10,xorg-ati                     xorg-ati存储库                     人民网                               17个月                                    总结日志树
2.11,zlib                           zlib库                                  人民网                               17个月                                    总结日志树

3  浏览器   browser
3.1,  chrome31                 chrome31存储库                 人民网                                22个月                                    总结日志树
3.2,  chrome39                 chrome39存储库                 人民网                                2年                                         总结日志树
3.3,  chrome52                 chrome52存储库                 人民网                                5个月                                      总结日志树
3.4,  chrome60                 chrome60存储库                 人民网                                8周                                         总结日志树
3.5,  firefox-mips64            firefox-mips64存储库            人民网                                2年                                         总结日志树
3.6,  firefox24                   firefox24存储库                   人民网                                14个月                                    总结日志树
3.7,  firefox40_Release       firefox40_Release存储库       人民网                                22个月                                    总结日志树
3.8,  firefox45                   firefox45_Release存储库       人民网                                5个月                                      总结日志树
3.9,  firefox52                   firefox52_Release存储库       人民网                                6天                                         总结日志树
3.10,mozilla-esr52              mozilla-esr52_Release存储库  人民网                                 3天                                         总结日志树

4  编译器   compiler
4.1,  CLANG                       CLANG库                            人民网                                2年                                         总结日志树
4.2,  LLVM                         LLVM存储库                        人民网                                2年                                        总结日志树
4.3,  binutils - 2.24              loongnix binutils - 2.24库      人民网                                5个月                                      总结日志树
4.4,  gcc-4.4.7-centos64      gcc-4.4.7存储库                 人民网                                23个月                                     总结日志树
4.5,  gcc-4.8.3-fedora19       gcc-4.8.3存储库                 人民网                                23个月                                    总结日志树
4.6,  gcc-4.9.3   loongnix      gcc-4.9.3库                       人民网                                4个月                                      总结日志树
4.7,  gcc4.4_loongson          gcc4.4_loongson存储库       人民网                                23个月                                    总结日志树
4.8,  glibc - 2.20                  loongnix glibc库- 2.20          人民网                                4个月                                      总结日志树

5  内核    kernel
5.1,   linux-2.6.32-el6           linux-2.6.32-el6存储库         人民网                                7个月                                      总结日志树
5.2,   linux - 3.10                 linux - 3.10库                     人民网                                10天                                      总结日志树
5.3,   linux-3.10.84               linux-3.10.84存储库            人民网                                4个月                                     总结日志树
5.4,   linux - 4.4                   linux - 4.4库                       人民网                                4个月                                     总结日志树
5.5,   qemu-2.7.0                 linux - 4.4库                      人民网                                 4个月                                     总结日志树

6  媒体   media
6.1,   ffmpeg                      ffmpeg存储库                      人民网                               3周                                        总结日志树
6.2,   libav                          libav存储库                          人民网                               13个月                                    总结日志树
6.3,   libvpx                        libvpx存储库                        人民网                                3周                                        总结日志树
6.4,   媒体播放器  mplayer    mplayer 媒体播放器的存储库  人民网                                20个月                                   总结日志树
6.5,   openh264                 openh264存储库                  人民网                                13个月                                   总结日志树

7  pmon
7.1,   pmon-2HSoc                pmon-2HSoc存储库             人民网                                20个月                                   总结日志树
7.2,   pmon-loongson3           pmon-loongson3存储库        人民网                                2天                                       总结日志树

8  uboot
8.1,   u - boot - 2016            u-boot存储库                       人民网                                16个月                                  总结日志树

[ Last edited by zzz19760225 on 2017-11-5 at 20:25 ]