龙芯2F介绍(面向程序员)

龙芯2F

龙芯2F 是一款64 位、四发射、乱序执行的RISC 处理器,实现MIPS III 指令集。该处理器采用先进的乱序执行技术(如寄存器重命名、转移预测和动态调度)和Cache技术(如非阻塞Cache、load 猜测、动态内存相关和写合并技术),并集成片上二级Cache、DDR2 内存控制器和IO 控制器,来提高流水线效率和IO 能力。

存储访问与存储管理

龙芯2F 存储子系统对提高处理器的流水线效率起着重要作用。龙芯2F 一级指令和数据Cache 大小均为64KB,二级Cache 大小为512KB,均采用四路组相联结构;龙芯2F 片内集成了DDR 内存控制器接口;龙芯2F 的TLB 共有64 项,为全相联结构,每项映射一个奇数页和一个偶数页;龙芯2F 通过一个24 项的访存队列和一个8 项的失效队列来动态解决存储相关,实现访存指令乱序执行、非阻塞Cache、load 猜测执行和写合并等。

龙芯2F 访存流水线分为4 级。发射流水级把访存请求发射到地址运算部件后,第一拍通过地址运算部件计算虚地址并把访存请求送到TLB 和Cache;第二拍在TLB 把虚地址转换为物理地址的同时访问Cache;第三拍根据TLB 和Cache 的访问结果确定Cache是否命中并送到访存队列;第四拍把访问结果写回。

龙芯2F 的存储系统使用40 位虚地址和40 位物理地址,并通过一个全相联的TLB进行虚实地址转换。该TLB 包含一个CAM 部分进行虚地址的全相联查找以及一个RAM部分存储物理页号和页的保护位。龙芯2F 的TLB 有64 项,采用全相联结构,每项可以映射一个奇页和一个偶页。龙芯2F 的TLB 的一个重要特点是它的页执行保护功能,它是通过在TLB 的每一项增加一个执行保护位来实现的。该位可以由软件进行设置,表示相应的页是否可以被执行。硬件在取指过程中访问TLB 时,除了做常规的权限检查外还进行可执行检查,如果取指时相应的页被置为不可执行,就会发生地址错例外。在操作系统中,只要利用上述方法对堆栈所在地址空间进行取指保护,就可以有效防范大多数利用缓冲区溢出技术进行的非法攻击。

龙芯2F 的一级数据Cache 有64KB,为四路组相联结构,块大小为32 字节,采用随机替换算法。该Cache 采用虚地址Index 以及物理地址Tag 以进行并行的Cache 和TLB查找。由于Cache 的每一路包含16K 字节(是最小虚页的4 倍),虚地址Index 的两位(13:12)可能与物理地址Tag 的相应位不相等,操作系统需要通过页着色(Page Coloring)或增加页的大小(每页16KB 以上)来解决虚地址Index 引起的不一致问题。龙芯2F Cache的数据和标志部分都采用单端口RAM。为了降低Cache 访问冲突,龙芯2F 把大小为512*256 位的的每一路Cache 分为四个512*64 位的体,并允许对不同体的读和写同时进行以降低Cache 访问冲突。在Cache 失效时的回填操作refill、地址运算后访问Cache、以及存数操作提交后的写回三种操作访问Cache 端口冲突时,refill 具有最高的优先级,存数操作的写回具有最低的优先级。

访存队列是龙芯2F 存储子系统的核心部件。它记录最多24 个未执行完的load 或store操作。虽然load 和store 操作乱序进入队列,但在访存队列中按它们程序中出现的次序排列。访存队列允许Cache 失效的访存操作后面的多个Cache 失效或命中的访存操作继续进行。龙芯2F 在Cache 失效或访存相关时不重新进行访存,访存队列通过物理地址的全相联比较动态解决访存操作间的相关。取数操作进入队列时,通过地址比较按字节接收它前面的最近一个对同一地址的存数操作的值;存数操作进入队列时,通过地址比较按字节把所存的值传递给它后面对同一地址的取数操作,直到下一个对同一地址的存数操作。

一级Cache 失效的取指或访存操作或被送入失效队列(Miss Queue)。失效队列处于指令Cache、数据Cache、二级Cache、DDR 内存控制器接口、以及SysAD 系统总线接口之间。该队列接收一级Cache 失效的取指或访存操作并访问二级Cache,并把相应的访问结果通过回填总线送回一级Cache;在二级Cache 访问失效时访问下一级存储器或系统总线接口,并把相应的访问结果送回二级以及一级Cache。龙芯2F 的失效队列还支持失效写合并(Store Fill Buffer)优化,即可以把多个对同一Cache 块的写请求合并在一起组成完整的Cache 块,避免了没必要的存储器访问。

龙芯2F 集成了片上二级Cache,二级Cache 的块大小为32 字节,容量512KB,采用四路组相联结构。龙芯2F 的512KB 二级Cache 由64 个1024*64 位的RAM 块组成,每次访问二级Cache 时,只要打开相应RAM 块的片选使能以降低功耗。龙芯2F内部集成的内存控制器的设计遵守DDR2 SDRAM的行业标准(JESD79-2B),支持最大4 个物理内存bank(由4 个DDR2 SDRAM 片选信号实现),一共含有15 位的地址总线13 位行列地址总线和2 位逻辑bank 总线)。龙芯2F 内部集成的内存控制器实现了一种动态的page 管理策略,针对一次访存操作,内存控制器对Open Page 策略/ClosePage 策略的选择是由硬件电路来实现的,无需软件设计人员来干预。

地址空间

虚拟地址空间

物理地址空间

虚实地址转换

用户地址空间

管理地址空间

内核地址空间

Cache 系统

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License