ForwardCom——一个开放的向前兼容的指令集架构

本文介绍了ForwardCom架构如何通过融合RISC和CISC的优点,实现变长指令和向前兼容性。其设计允许灵活的寻址模式和操作数类型,同时支持硬件实现,如FPGA软核,以适应不同CPU模型和向量长度变化,降低软件重编需求。
摘要由CSDN通过智能技术生成

何谓向前兼容?

ForwardCom的向前兼容指的是之后基于ForwardCom指令集开发的软硬件,随着不断地更新都是可以兼容之前的。但是如今基于RISC、CISC开发的软硬件,是不能兼容的。

指令模板

展示一部分

Instr.length:说明指令是32位、64位还是128位

mode:说明使用哪个模板、什么类型的寄存器(通用还是矢量)、寻址模式等

operation:指令类型,加减乘除等

dest.regist.:目的寄存器

operand type:操作数类型,8bit、16bit、32bit、64bit整型,半精度、单精度、双精度浮点型等

source.regist.:源寄存器

mask:掩码,针对向量寄存器的时候用处比较大

data:立即数(整数、浮点均可)or相对地址,能自动压缩(在有效位较少的情况下)

option bits:指定变体

少的指令,多的变体

RISC受限于指令固定长度,CISC受限于解码的复杂性。鉴于该问题,ForwardCom整合两者的优点,避免两者的缺点——变长指令,指令的前两位指示指令长度。这样既可以实现在需要32bit、64bit数据时可以通过一条指令实现,又可以通过前两位指示指令长度而减少解码的复杂性。

 ForwardCom的汇编程序也会自动地以尽可能小的形式表示常量,最小化编码长度。

指令中还有其它的field,这些field中有operand type、mode、option bits,它们便可以指定同一指令的不同变体。例如可能需要浮点,也可能需要整数,也可能需要寻址模式1,也可能需要寻址模式2,这样的组合很多,如果使每条指令都有许多变体,便可以使编码变得更简单,可以在同一条指令中使用几乎任何操作数类型、寻址模式、整数大小、浮点精度、向量长度等的组合。注意,变体的设计要适合现有模板和流水线结构,这样解码才能保持简单,要不跟CISC还有什么区别呢?

指令中额外功能添加需要考虑延迟和吞吐量,如果增加了延迟或降低了吞吐量,就不应该添加。

以上的设计原则使得RISC架构的快速解码和流水线设计同CISC架构的单指令完成更多的工作的结合成为可能。

 变长矢量寄存器

这里的变长,也使得ForwardCom有了一定的向前兼容性。目前市面上的使用的都是固定长度的矢量寄存器,那么一旦CPU模型翻新有更长的矢量寄存器后,软件就不得不基于最新的指令架构重新编译以便支持新的矢量长度,同时为了兼容之前的还要保留原版本软件。但是ForwardCom由于使用的变长矢量寄存器,就不存在这种问题了。

循环案例

考虑如下代码:

float my_array[10];
for (int i = 0; i < 10; i++) {
    do_something(my_array[i]);
}

传统系统中的向量实现是这样的:假设向量长度为4,那么每一次迭代就会加载4个元素到vector寄存器中,那么针对该案例,便会迭代2次。最后剩余的2个元素还需要在迭代外进行额外的编码从而单独处理。

在ForwardCom系统中,从数组末尾反向索引。因为10个元素,我们请求10个元素的向量寄存器,但是假设目前的CPU只能支持4长度,那么我们在第一次迭代中会获得4长度向量寄存器(如果我们要求一个比CPU支持的更长的向量,那么我们将自动获得CPU支持的最大向量长度),第二次依旧是4长度向量寄存器,第三次是2长度向量寄存器。这种方式不需要迭代外的额外处理,而且它会自动调整到它正在运行的CPU的最大向量长度,这意味着后期CPU模型更新,支持的最大向量长度增大,那ForwardCom系统不需要重新编译,可直接使用。并且之前旧版CPU模型也可以继续运行目前的ForwardCom系统版本,这就是所谓的向前兼容。

硬件实现

目前 ForwardCom CPU 可以作为FPGA软核使用,当前版本只支持整数指令。想尝试使用的小伙伴们可以参考以下链接:
https://github.com/ForwardCom/softcoreA/raw/main/manual/softcore_A.pdficon-default.png?t=N7T8https://github.com/ForwardCom/softcoreA/raw/main/manual/softcore_A.pdf以上是本人利用闲暇时间阅读学习之后的笔记。如有纰漏,还望指正。

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值