从Intel做了个RISC-V处理器谈起

前言
近日从Intel传来消息 , Intel FPGA上将推出新一代的Nios软核处理器Nios V 。该软核处理器采用目前被广泛关注的RISC-V开源指令集 , 将在Quartus Prime Pro Edition 21.3版本中出现 。
从Intel做了个RISC-V处理器谈起
文章图片

文章图片
那什么是软核处理器?在FPGA中为什么需要使用软核处理器?软核处理器在FPGA中历经了怎样的发展历程?为什么后来Intel(Altera)和Xilinx都推出了基于Arm硬核处理器的SoC-FPGA?现在的FPGA中软核处理器是否还有用武之地?Intel此时推出使用RISC-V指令集的软核有何用意?对RISC-V指令集的前景有何影响?
本篇文章将尝试回答以上问题 , 由于时间仓促加上作者水平有限 , 部分信息来源自网络新闻 。如有遗漏或错误 , 欢迎大家留言指正 。
1.客从何处来——FPGA中软核处理器的发展史
FPGA中使用软核的历史已经很长时间了 , 2000年开始Altera和Xilinx就分别推出了Nios和MicroBlaze这两种软核 。到了2004年Altera推出了32位全新架构的Nios-II , 而Xilinx也进一步推出了8位的PicoBlaze 。至此 , 软核处理器及其开发工具作为FPGA产品中一个重要的谱系登上了历史舞台 。
那么为什么FPGA中需要使用软核处理器呢?其实这是由两方面因素共同决定的 。首要的因素还说要归结于摩尔定律的作用导致FPGA容量的持续提升 。到2000年左右 , FPGA已经由早期只能做简单逻辑的粘合器件发展为可以承载某个关键子系统的大规模逻辑器件 。FPGA容量的增加使得在FPGA中利用查找表等可编程逻辑实现一个处理器不再是一件非常奢侈的事情 。另外一方面的因素还是处理器本身所具备使用简单、操作灵活、易于开发的优势 , 让处理器在实现控制、决策类任务时有非常大的优势 。
【从Intel做了个RISC-V处理器谈起】如果我们不在FPGA中使用软核处理器 , 那么对于这些控制、决策类任务要么需要自主构建一个复杂状态机来完成 , 要么需要额外在FPGA外部“外挂”一个小单片机来完成 。这一类任务的特点是使用并不频繁 , 但流程、步骤较为繁琐 。例如对于很多IP核在工作之前要对其进行一些初始化配置 , 又比如与FPGA配合的外围模拟、存储器等芯片的参数在某些时候需要简单的调节 , FPGA实现运算过程中有部分操作需要取舍等等 。
状态机无疑是数字系统中最关键也最难设计的子模块 。复杂状态机的设计不但难还容易出错 , 一旦出现设计缺陷要及时纠正也是非常困难的 。而处理器则不一样 , 处理器是一种经过多次验证确保正确的子系统 , 而且有非常成熟的Debug方式 。使用处理器来实现对逻辑电路的初始化和状态控制 , 其难度要远远小于设计多个复杂状态机 。因此 , 当FPGA的容量支持在实现了核心功能以外再增加一个处理器来作为辅助的时候 , 在FPGA中去嵌入一个处理器就变得非常的自然 。
但在此后无论是Nios-II还是MicroBlaze发展的并不顺利 , 广大工程师们对软核处理器的抱怨并一直不断 。这其中的详细问题我们可以在下一节具体分析 。随着Xilinx在2010年发布Zynq系列以Arm硬核构造的新一代SoC-FPGA , FPGA与处理器融合风头被嵌入Arm高端硬核处理器所抢走并长期占据人们的视线 , 而软核仿佛被遗忘到了角落里 。
但事实上软核并非没有进一步的发展 。Altera以及后来的Intel一直不断的在对Nios II进行升级改造 , 在后来甚至融入了多核、片上网络等高端处理器才具备的特性 。而Xilinx则在不断的丰富软核的生态 , 把一些MCU级别的处理器不断的构造成软核 。其最新的一次“重要”进展是与Arm Design Start计划合作 , 将Arm的Cortex-M1核Cotex-M3版本的处理器核深度的整合到自己的工具链中 。而随着Nios V的发布 , 表明软核处理器依然有着它独特的作用和强大的生命力 。