美文网首页
龙芯LS232处理器用户手册

龙芯LS232处理器用户手册

作者: 体感互动 | 来源:发表于2019-05-17 15:19 被阅读0次

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

    LS232处理器 IP 具有如下主要特点:

    MIPS32兼容的 32 位处理器,包含可配置的 DSP 部件和 64 位浮点部件( FPU )。

    高效的双发射 +五级流水结构(取指、译码、发射、执行并写回、提交)

    支持寄存器重命名、动态调度、转移预测等乱序发射、乱序执行技术。其中包含 6 项的转移队列、 16 项重命名队列,采用 Gshare转移猜测, BHT 为 256项。

    包含两个定点、一个浮点、一个访存四个功能部件。

    定点部件支持 DSP 扩展指令的运算。

    浮点部件支持全流水的 64 位浮点加法和浮点乘法运算,硬件实现浮点除法运算。

    专门的 SIMD型多媒体加速指令。

    32 项全相联 JTLB,每项映射两页,页大小可变,并具有可执行位设置以防止缓冲区溢出攻击。

    4 项的指令 TLB 和 8 项的数据 TLB ,每项映射一页,页大小可变。

    分离的一级指令 Cache 和数据 Cache ,可配置为 1 路 /2路 /4路组相联,每路大小各为 4KB 。

    支持非阻塞的 Cache 访问技术, 4 项 load 队列、 2 项 store队列、 3 项 miss 队列,最多容忍 5 条 store 指令 Cache 不命中和4 条 load 指令 Cache 不命中。

    支持 cached store 指令的写合并和 uncache 写加速技术。

    支持 cache lock 技术和预取指令。

    软 IP 级可配置:是否包含 DSP 指令支持、浮点部件、指令和数据 Cache 的大小( 4KB/8KB/16KB)、定点乘法规模(半规模 /

    全规模 / 串行)等可配置以满足不同应用的要求。

    支持向量中断、中断优先级,软件可设置实时中断响应模式,此时最多 8 个时钟周期进入中断处理程序。

    标准的 EJTAG调试标准, 6 个指令断点, 2 个数据断点,支持快速下载,方便软硬件调试。

    标准的 32 位 AMBA AHB接口和 32/64 位 AMBA AXI 接口。

    上述特点使得LS232处理器 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的偏移计算所得。

    文章来自“http://bbs.16rd.com/thread-472524-1-1.html”

    转载请注明出处

    相关文章

      网友评论

          本文标题:龙芯LS232处理器用户手册

          本文链接:https://www.haomeiwen.com/subject/hxloaqtx.html