自定义指令集扩展
ZStudio 中内置了自定义指令工具 ZIGen, 方便用户使用图形界面添加自定义指令并生成动态库。ZIGen 可以配合 ZStudio 中其他工具一起使用进行高效快速的架构探索。关于创建并使用自定义指令并的示例项目,请参考 add 示例项目。
创建自定义指令集
ZIGen 视图侧栏中列出了内置的 RISC-V 基本整数指令和标准扩展,用户可以创建新的指令集以扩展 RISC-V 基础的指令集架构来满足更高的要求。
在主菜单中,点击"视图" > "ZIGen"打开指令生成工具,开始创建自定义指令:
-
新建指令集
点击
(新建指令集) 创建一个全新的空指令集。指令集命名仅支持使用大小写英文字母。
-
新建指令
右键指令集节点,在上下文菜单中选择"新建指令",为新建指令命名然后点击"创建"。也可以选中某个指令集,然后点击 ZIGen 侧栏右上角
(新建指令) 进行指令创建,指令命名仅支持使用大小写英文字母,数字和下划线。注意必须先创建指令集,然后再指令集中新建指令。
-
进入指令编辑页面,并为自定义指令指定配置选项。
-
功能单元:选择自定义指令需要的专用硬件资源(VPU, IntAlu 等)。用户在虚拟开发板模型 CPU 层级的 EXU 组件中指定与自定义指令相同的功能单元即可在该功能单元中使用自定义指令。 参考 CPU 组件微架构和以下功能单元支持表。
功能单元支持表 Function Unit Description IntAlu 整数运算单元 IntBru 整数分支单元 IntMult 整数乘法单元 IntDiv 整数除法单元 FloatAdd 浮点加法单元 FloatCmp 浮点比较单元 FloatCvt 浮点转换单元 FloatMult 浮点乘法单元 FloatMultAcc 浮点乘累加单元 FloatDiv 浮点除法单元 FloatMisc 浮点杂项单元 FloatSqrt 浮点平方根单元 MemRead 内存读取单元 MemWrite 内存写入单元 FloatMemRead 浮点内存读取单元 FloatMemWrite 浮点内存写入单元 VPU 向量处理单元 SIMD 单指令多数据 Builtin 包含除 Cus 以外以上所有类型 Cus0/Cus1/Cus2/Cus3/Cus4 预留给用户进行自定义 -
长度:选择自定义指令的长度(16 位/32 位)。
-
架构:选择自定义指令适用的处理器架构(RV32/RV64)。
-
汇编语言:自定义指令的汇编语言表示,即自定义指令的助记符,将根据用户定义的指令格式自动生成。
-
-
添加自定义指令编码
通过编辑编码字段定义指令的格式。点击
(添加) 并在弹窗中分配可用的编码空间,分段的立即数类型的字段支持一次性添加完。
ZStudio 提供了内置的 16/32 位指令格式模板,用户可以点击
(导入模板) 选择一个模板应用于当前编码字段,也可以点击
(导出为模板) 将定义好的指令格式保存为模板进行复用。所用指令模板都可以通过模板管理进行查看和编辑。
- 起始索引 & 字段位宽: 控制编码具体位数和位置。
- 字段类型 &