ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 龙芯LS232用户手册芯片资料介绍

龙芯LS232用户手册芯片资料介绍

Linux操作系统 作者:SZX511 时间:2019-05-17 16:10:03 0 删除 编辑

龙芯LS232核是一款实现 MIPS32兼容且支持DSP扩展和EJTAG调试的双发射处理器,通过采用转移预测、寄存器重命名、乱序发射、路预测的指令CACHE、非阻塞的数据CACHE、写合并收集等技术来提高流水线的效率,形成了一款具有突出的性能价格比及性能功耗比的32位嵌入式处理器IP 。


整体结构概述:

LS232核是一款实现 MIPS32兼容且支持 DSP 扩展和 EJTAG调试的双发射处理器,通过采用转移预测、寄存器重命名、乱序发射、路预测的指令CACHE、非阻塞的数据CACHE、写合并收集等技术来提高流水线的效率。


LS232核还可实现微体系结构的灵活配置,包括是否需要浮点功能部件,是否需要 TLB 和 CACHE部件,以及指令 CACHE和数据 CACHE分别的4KB 、 8KB 、 16KB大小配置。 LS232核的微体系结构如图 1-1所示,各部分参数说明如表 1-1。处理器采用 5 级流水线实现,下面按照流水线的顺序介绍 LS232核的处理过程及各个部件的功能。


LS232 核微体系结构图:

LS232 微体系结构参数:


1) 取指流水级

LS232核的指令执行从取指开始,每拍可以同时取两条指令。根据 PC的值,访问 ITLB 将虚地址转换成物理地址,如果发生 ITLB 查找不命中,则需要 1 拍的延迟从 JTLB中选择相应项填充 ITLB 。同时根据路预测的结果访问指令 CACHE,读取相应 CACHE行的所有 TAG 和相应预测的路的指令,将 TAG 和转换后的物理地址高位比较,如果路预测正确,则将指令送往译码部件,否则需要 1 拍延迟读取正确的路的指令,同时修正路预测。如果发生 CACHE不命中,则发出内存访问请求。取指流水线还检查 PC 的合法性,例如核心态、用户态、地址错等,还有是否是 EJTAG 所设的指令断点,以及TLB 例外等。


2) 译码流水级

取来的指令经过译码部件,翻译成 32 位 LS232核的内部操作。这主要是将原先不完全相同格式的指令,翻译成完全相同的规整格式的内部操作,方便内部的各个部分识别处理相应的操作。译码好的内部操作将送往操作队列QUEUE,在进入操作队列的同时,查找之前的操作是否与当前操作存在数据相关,如果存在数据相关,则将原操作数指向操作队列中对应的操作,并记录相应信息,此过程是为了将来的乱序执行的重命名。


译码流水线还进行转移预测处理。当译码时遇到条件转移指令,LS232核采用 Gshare 算法通过 BHT 进行转移预测,并且计算出跳转的目标地址,修改 PC 的值。动态转移预测还可以进行配置,通过控制寄存器 config6可配置不同的转移预测策略,包括总是跳转、总是不跳转、总是向前跳转、总是向后跳转、转移历史表( BHT )动态预测、 Gshare动态预测等六种策略,默认的是 Gshare。对于 likely的条件转移,LS232中总是预测 taken。当译码时遇到 BLINK 类指令(此为函数调用指令),则把 PC + 8 压入地址返回栈 RAS 中。当译码时遇到 JR31指令(此为函数返回指令),则将RAS 栈顶的值弹出用于预测该指令的跳转目标地址。


译码后的指令进入 QUEUE时,如果是一个基本块的开始,则需要同时占用 BRQ 的一项,并且记录该指令的 PC 。如果是一条转移指令,则与转移预测相关的信息记录到对应基本块的 BRQ 中,并且记录转移指令相对基本块的开始指令的偏移。


3) 发射流水级

LS232核采用乱序发射策略,将操作数准备好的指令送往功能部件,其中访存指令间仍维持原有的顺序发射执行。每拍可以同时发射两条指令,不过这两条指令中包含的定点( /DSP )乘除法指令、访存指令、浮点指令只能有一条。发射的指令从 GR 和 FR 中读取相应的源操作数,送往各个功能部件的 BUFFER,等待执行。发射策略是, issue_bus0优先发射准备好的访存指令, issue_bus1 优先发射准备好的第一条 alu 指令(包括转移),另外再找一条准备好的浮点指令,选择空闲的总线发射,最后找一条准备好的乘法类( acc)指令或第二条 alu 指令(不包括转移),选择空闲的总线发射。其中的访存指令和乘法类指令都是顺序发射,乘法类指令包括乘除指令和所有访问 hi/lo寄存器的指令。LS232中还将一些指令定义为 wait issue指令和s t a l l i s s u e 指 令 , w a i t i s s u e指 令需要 等到队 列头才能 发 射 , s t a l l i s s u e指令将阻塞其后的所有指令的发射。


4) 执行流水级

各个功能部件根据指令执行相应的操作并且把结果写回操作队列。定点( /DSP )加减、移位、逻辑运算、转移指令一拍即执行写回,乘法指令需要 3 拍执行写回,除法指令 3 - 35 拍。访问 hi/lo 寄存器的指令也走乘法流水线,也要 3 拍写回。


浮点指令乘法 4 拍,除法单精度 24 拍、双精度 56 拍,加减 3 拍,定浮点转换 3 拍,单双精度转换 2 拍,分支 2 拍,取负、绝对值等 2 拍。


访存指令执行写回需要 3 拍。第一拍通过 ADDR 模块计算虚地址。第二拍,访问 DTLB将虚地址转换成物理地址,如果发生 DTLB查找不命中,则需要从 JTLB 中选择相应项填充 DTLB。这级流水线也检查各种例外,还有EJTAG的数据断点。同时访问数据 CACHE,读取相应 CACHE行的 TAG和数据,将 TAG 和转换后的物理地址高位比较,选择正确的数据送往LOAD/STORE 队列。第三拍,如果在数据 CACHE中命中,则 LOAD 结果写回 QUEUE, STORE操作写入数据 CACHE。如果发生数据CACHE不命中,则物理地址送往 MISS队列,访问内存,填充数据 CACHE。 


LS232核还支持写合并的收集技术,即当 STORE操作发生数据 CACHE不命中后,STORE操作进入 MISS队列时,不会立即发起访存,会在 MISS队列中继续收集相同 CACHE行的 STORE操作,如果可以收集满完整的 CACHE行,则不需要访问内存,直接将这行收集好的数据填充数据 CACHE,以此节约访存带宽。 LS232的写合并只要一项会在 MISS队列中等待合并,当发生两项写miss ,则较早的那项将结束等待,开始发起内存请求。通过以上技术和各个访存队列, LS232核最多可以容忍 5 条不同 CACHE行的 STORE指令不命中(相同 CACHE行的 STORE指令不论多少条都能接收)和 4 条在 3 个CACHE行内的 LOAD 指令不命中。


LS232的功能部件,除了有结果总线 resbus ,还有 forward总线来表示下一拍写回的指令。这样,在发射时,选择准备好的指令,可以通过上一拍的forward总线来确定本拍要写回的指令,这种指令也可以发射。


乘法类指令、存数指令、 mtc0 类指令由于都是在执行时修改寄存器或内存,所以这些指令的执行需要确保不会被取消,即这些指令前没有未执行的转移指令、会引起例外的指令等。因此这些指令的执行都需要等待一个store_ok ,或 acc_write_ok等这样的信号。


转移指令经过功能部件计算后,先写回 brq,由 brq进行预测错的转移取消后,再写回 queue中。转移指令的target地址存在 queue的 imm 域中,而转移指令的地址则根据基本块的起始地址和转移指令相对基本块的偏移计算所得,或者根据 queue第一条指令的 pc 和转移指令相对queue_head的偏移计算所得。


5) 提交流水级

指令提交就是将操作队列中已经执行完的指令的运算结果写入到定点寄存器堆中,同时将相应的操作队列项释放,每拍可以提交两条指令。如果指令发生异常,则置异常信号,取消处理器中所有指令的执行,并且到相应的异常入口地址取指执行。如果发生转移预测错误,同样取消后续指令的执行,重新开始取指。


2 指令集概述

MIPS公司开发的 MIPS体系结构( ISA)已经发展了 6 个版本,依次分别为 MIPS I, MIPS II, MIPS III, MIPS IV , MIPS V和 MIPS32/64,版本之间向前兼容。目前最新的是 MIPS 32/64体系结构的 Release2版本,其中, MIPS32体系结构基于 MIPSII体系结构的指令集,并补充了MIPS III , IV 和 V中的部分指令增强其生成代码和移动数据的效率;MIPS64体系结构基于 MIPS V体系结构的指令集,兼容 MIPS 32 体系结构。


MIPS32是 MIPS公司为了统一 MIPS指令系统的不同版本,在 MIPS II的基础上进行扩充,并对系统态的指令进行规范而定义的。 MIPS32指令系统的用户态指令融合了不同指令系统的优点,系统态指令也更加规范。


LS232处理器兼容 MIPS32的 Release2体系结构。 MIPS32主要包括I S A( I n s t r u c t i o n S e t A r c h i t e c t u r e ) 、 P R A( P r i v i l e g e d R e s o u r c e A r c h i t e c t u r e ) 、 A S E s ( A p p l i c a t i o n S p e c i f i c

Extensions)和 UDI ( User Defined Instructions)四个部分, LS232处理器实现了 ISA、 PRA ,以及 DSP ASE。并且 LS232还实现了龙芯多媒体扩展。


本章从 CPU , PRA 两个方面描述LS232指令结构系统,并分别给出指令列表,以及LS232实现的 CP0 寄存器的定义,关于 DSP 、浮点和多媒体部分可以参见 LS232 DSP 扩展手册、 LS232浮点扩展手册、LS232多媒体扩展手册等。 LS232与 MIPS32 Release2兼容,具体的指令说明以及寄存器描述可以参见 MIPS32用户手册。

http://bbs.16rd.com/thread-472524-1-1.html

2.1 CPU 寄存器

MIPS32体系结构定义了如下 CPU 寄存器:

( 1 ) 32 个 32 位的通用寄存器。 GPRs( general purpose registers)。其中有两个被赋予了特殊含义: R0 , 0 号通用寄存器,值永 远 为 0 ; R 3 1, 3 1 号 通 用 寄 存 器 , 被JAL, BLTZAL , BLTZALL, BGEZAL ,和 BGEZALL指令隐式的用作目标寄存器,存放返回地址。


( 2 )一对用于保存乘法、除法和乘加操作的结果的特殊寄存器。 HI和 LO 。 HI 寄存器用于存放乘或者除运算结果的高位; LO 寄存器用于存放乘或者除运算结果的低位。


( 3 )一个特殊的程序计数器( PC )。这个寄存器程序不可直接访问。


2.2 CPU 指令集

MIPS32体系结构的定义把 CPU 指令集按照功能划分为以下几组:存取、计算、跳转分支、协处理器和杂项指令。

① Load 和 Store 访存指令在主存和通用寄存器之间移动数据。访存指令都是立即数指令( I 型),因为该指令模式所支持的唯一访存模式就是基址寄存器加上 16 位的对齐的偏移量。

② Computational 计算型指令完成寄存器值的算术、逻辑、移位、乘法和除法操作。计算型指令包含了寄存器指令格式( R型,操作数和运算结果均保存在寄存器中)和立即数指令格式( I 型,其中一个操作数为一个 16 位的立即数)。

③ Jump and Branch 跳转和分支指令改变程序的控制流。绝对地址跳转被称为“ Jump(跳转)”( J 型或者 R型), PC (指令计数器)相关的跳转 指 令被称为“ B r a n c h( 分 支 )”( I 型 ) 。

④ C opr o c e s s o r协处理器指令完成协处理器内部的操作。协处理器的访存操作是 I 型指令。在MIPS32定义了 0 号协处理器(系统处理器)和 1 号协处理器(浮点协处理器),用户可以自定义 2 号协处理器的功能。

⑤ Special 特殊指令完成系统调用和断点操作。这些指令通常是 R型的。

⑥ Exception 异常指令引起跳转,根据异常号比较结果跳转到通用异常处理向量。这些指令包括 R型和 I型指令格式。


LS232 IP 虽然与 MIPS32 Release2版本兼容,从功能上实现了 MIPS32体系结构规定的所有 CPU 指令,但是有些指令在实现了有细微的并不影响兼容性的差别,以下值得编程人员注意。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529038/viewspace-2644768/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
一牛网论坛囊括了MTK、高通、射频、PCB、嵌入式、全志、海思等技术,欢迎大家前来学习、讨论

注册时间:2018-03-29

  • 博文量
    213
  • 访问量
    186263