龙芯1号处理器结构设计详解
龙芯1号处理器结构设计详解
龙芯1号处理器是中国自主研发的第一款通用CPU,其设计思路和技术实现具有重要的参考价值。本文将详细介绍龙芯1号的技术路线、体系结构设计、指令流水线、系统安全设计以及测试方法等内容。
技术路线
- 高起点:从高性能通用处理器入手,跨越式发展,通过优化结构设计提高性能。
- 兼容性设计:兼容主流处理器指令系统(MIPS),简化软件开发,降低成本。
- 稳扎稳打:分阶段进行结构设计、逻辑设计和物理设计,重视模拟和验证,确保设计正确性。
- 在结构设计阶段:重视C模拟器的设计并把C模拟器作为结构设计的最终结果和文档;
- 在逻辑设计阶段:重视FPGA验证;
- 在物理设计阶段:重视走通网表投片、标准单元投片、定制宏单元投片和全定制投片的每一个过程
体系结构设计
指令流水线
- 动态超流水线:实现指令级并行,提高指令执行效率。
- 基于操作队列复用的寄存器重命名:解决数据相关性,支持乱序执行。
- Tomasulo算法:实现动态调度,提高资源利用率。
- 静态转移猜测:减少控制相关性,提高流水线效率。
- 精确例外处理:保证例外发生时处理器状态的正确性。
存储管理
- 与MIPS R4000系列处理器32位模式兼容。
- 8KB指令Cache和8KB数据Cache,采用两路组相联结构。
- 实现MIPS系统状态和访问权限控制,保证系统安全。
系统安全设计
- 针对缓冲区溢出攻击,限制堆栈段的取指操作,提高系统安全性。
指令级并行技术
处理器的结构上的并行性体现在三个层次,即指令级并行性、数据级并行性以及线程级并行性。
- 指令级并行性:
- 通过高效的流水线技术实现时间重叠;
- 通过多发射技术实现空间重复;
- 通过乱序执行技术提高并行效率。
数据并行性:一条指令对不同数据进行多个相同的运算,现代处理器中的媒体处理部件多用SIMD技术实现数据并行。
线程级并行性:包括在单处理器中支持多线程的快速切换以及在单片上实现多个处理器的紧密耦合。
基于操作队列复用的指令流水线
指令流水线分成取指、译码、重命名、发射、执行、写回、完成等阶段。其中执行阶段可能需要多拍。
取指:根据当前PC的内容取指令到指令寄存器IR。下一条指令的PC值由多个因素决定,如IR中的指令是否为转移指令、例外以及前面的转移预测失败等。在正常的情况下,下一条指令的PC值为当前指令的PC+4。
译码:根据IR中的当前指令进行译码形成统一的内部格式并存入操作队列。如果操作队列已满,则等待,流水线暂停。
重命名:把该操作的源寄存器与操作队列中的每一个操作进行相联比较,得出操作队列中最近一个写该寄存器的操作所在的位置,即该寄存器被重定向到最近一个写它的操作在操作队列的位置。
发射:从操作队列中取出一个操作并发射到相应的保留站。在这一阶段需要判断运算所需的源寄存器值是否已经可用。如果可用,直接读源寄存器的值;如果不可用,需要告诉保留站最近一个写该寄存器的操作,目标寄存器被重定向为该操作在操作队列中的位置编号。
执行:执行部件从保留站中取出所有源操作数都已经准备好的操作,根据操作的类型进行运算,并把结果值以及该操作在操作队列中的位置编号送 到结果寄存器。
写回:把结果寄存器的值以及相应操作在操作队列中的位置编号放在结果总线上。保留站和操作队列侦听结果总线的信息,并修改相应的内容和状态。值得注意的是运算结果并不直接写回寄存器,而是写到操作队列的相应项。
结束:如果操作队列中的第一个操作已经完成,则结束(commit)该操作并进行寄存器的最终写回,即把操作队列中的结果写回到该操作的目标寄存器。如果操作队列中的第一个操作在操作过程中引起过例外,则进行例外处理。
测试、联调与性能分析
- 测试方法:使用C模拟器、FPGA验证和测试台测试,确保设计正确性和可靠性。
- 性能测试:测试定点和浮点运算能力、访存带宽、SPEC CPU2000基准测试等。
- 结果分析:龙芯1号定点和浮点运算能力较强,Cache较小,SPEC CPU2000性能有待提高。
参考文献
[1] 胡伟武,唐志敏.龙芯1号处理器结构设计[J].计算机学报,2003,(04):385-396.