如何基于 risc-v cpu 集成一个 risc-v soc 呢?(上)-爱代码爱编程
如何基于 RISC-V CPU 集成一个 RISC-V SoC 呢?(上)
引言
这里以玄铁 E907 CPU 来作为一个简单的专题,指导数字 IC 集成工程师如何基于 RISC-V CPU 集成一个 RISC-V SoC!!!
简单介绍一下,E907 是嵌入式领域的 RISC-V 兼容的 32 位高性能微处理器,采用了 RV32IMAFDCP ISA 指令集架构,主要应用于通用的高性能微处理器、音频处理、工业控制等领域中。
🌏 一、RISC-V CPU RTL 生成
首先,我们需要根据平头哥提供的玄铁 E907的数据包,来生成 RTL 代码。当然,如果你想自己设计一个 RISC-V CPU 我也是不会阻止你的。这里的 E907 CPU 可以配置具有各种各样的功能和模式,例如:是否配置浮点单元、是否配置 DSP 单元、配置的 ICache/DCache 的大小、配置 AXI 总线的工作场景、是否配置 BHT/BTB 模块、配置中断数量、配置检测单元或者调试资源等等。
如果你未来想成为一名 RISC-V CPU 设计工程师,或者对于 CPU 的内部设计比较感兴趣的话,可以熟悉一下它的仿真环境和测试用例,非常有助于 E907 的功能实现、使用方法和 SoC 集成工作等等。此外,这里还提供了 E907 的标准集成的参考设计、SDC 约束、Lint 流程、Waive 文件等等,这些都在平头哥提供的玄铁 E907 的 SMART 平台包里面。
🌏 二、MEMORY && ICG 替换
接着,E907 RTL 代码生成完毕之后,就需要替换如下的一些 ASIC 单元。
MEMORY 的替换:由于 ASIC 是基于特定的工艺器件来设计和制造的,此时就会遇到 E907 内部的存储单元和你本地的存储单元的不匹配现象。例如 E907 的存储单元 LIB 是基于 22 纳米的,然而你的存储单元 LIB 是基于 18 纳米的,这就需要替换了,或者说,E907 的存储单元 LIB 是基于 2048X32 大小的,然而你的存储单元 LIB 是基于 1024X16 大小的,这也就需要拼接了。如果你的存储单元 LIB 的端口数量、端口位宽、电平极性等等也不一样的话,就还要额外进行一些特殊的连接设计了。
ICG 的替换:同样的,工艺库提供了基于特定工艺的 ICG,即 Clock Gating,这也是需要替换的,值得注意的是,需要选择和 E907 提供的 ICG 一样的真值表和沿触发的工艺库。此外,可以增加一个宏定义,令 ICG 在 FPGA 实现中可以直接绕过(Bypass)。
🌏 三、集成准备工作
通常情况下,为了保证一定的稳定性以及便于用户的升级更新,平头哥的 CPU 接口的大部分信号总是差不多的,当然,这因人而异,有时候可能差那么若干根信号,就需要额外花费很大的精力去设计和集成了。对于 E907,大致划分了时钟信号、复位信号、DFT 信号、中断信号、调试信号、AXI 总线信号、AHB 总线信号、运行观测信号、低功耗系统信号等等,对于以上常见的信号分组,在 SoC 中充当什么角色呢?如何去集成呢?集成的时候需要注意什么呢?详见下文《如何基于 RISC-V CPU 集成一个 RISC-V SoC 呢?(下)》。