前言
2015年底的智能硬件展上,和FPGA原厂的两位大学计划经理闲聊的当儿,被问及对于诸如Xilinx Microblaze与Altera Nios Ⅱ这样的FPGA内嵌软核处理器的看法时,笔者的第一反应便是“它的实用价值可能并不大,但是非常具有教学价值”。此话一出,大家也一定很好奇,且听笔者娓娓道来。
笔者以为,软核处理器哪怕是在今天的Zynq或SoC FPGA(内嵌多个硬核ARM Cortex-A9处理器的FPGA器件)还未面世之时,它的实用性其实就一直颇具争议。硬核处理器经过优化设计,已经流片成型,用户拿到手以后,一般也无法再更改处理器本身的性能参数,其使用量通常也非常大,可靠性、稳定性都会做得很好;而反观FPGA中内嵌的软核处理器,其本身就不是针对任何一个特定器件型号的FPGA定制的,而是FPGA器件的一个“通用”软核,因此,它在FPGA器件上跑起来势必在性能上也会大打折扣,与此对应的,其可靠性、稳定性恐怕也欠佳。当然,并不是说在FPGA器件上跑起来的软核处理器就一定差强人意,笔者并没有一棍子打死的意思,并不排除某些发烧级FPGA设计者能够从时序设计和底层布局布线上将软核处理器的性能发挥到极致的情况,只是一般比较来看,硬核处理器确实在性能、成本、可靠性等方面相对于软核处理器都有更明显的优势。因此,放眼望去,很难找到有多少电子产品中用上了软核处理器,但与此相反的是硬核处理器则无处不在。
话说回来,FPGA器件中内嵌的软核处理器也并非一无是处,否则它就没有存在的意义了,话说“存在即是合理”。一点不假,FPGA器件中的软核处理器是可定制的,它的性能水平通常有多个可选项供设计者“编程”设定,并且其周边的外设也可以完全“定制化”,从这点来看它比硬核处理器要灵活很多。某些特别需要这种“灵活定制”的场合通过软核处理器还真是“门当户对”了,只是要玩转这样一个灵活的嵌入式处理器系统也并非易事,它涉及纯粹的软、硬件设计以及FPGA等多方面的知识,一个能真正玩转软核处理器“灵活性”的FPGA设计者,一定对处理器及其外设架构了然于心。换句话说,如果大家都还记得当年大学里面那门纯理论的“微机原理”课程,那么玩转软核处理器的过程就是“活生生”的实践版“微机原理”课程的再现。
说到这,或许读者有些明白了,没有错,之所以说FPGA器件的软核处理器具有很高的教学价值,就是基于它的实践过程中能够帮助读者对整个处理器的架构有更清楚的了解和认知。比如笔者在学习Nios Ⅱ处理器的过程中,需要将处理器的数据总线、指令总线和外设进行连接;需要分配地址;需要连接中断;需要自己编写外设连接到总线上;需要揣摩外设的寻址方式、读和写时序,甚至一些常见通信接口的时序……的确,掌握了这些东西,很大程度上就能帮助学习者对嵌入式系统的整个架构有了一个更全面的认知,这些体验是传统理论书本给不了的。除此以外,它也是很多正式产品开发调试过程中的好帮手,例如在很多产品的原型开发或测试验证阶段,恰巧需要一个简单的CPU干点活,这时软核处理器也就派上用场了。
以笔者自身的经历来说,也正是通过软核处理器的“磨练”,才对软硬件的认知有了很大的提升,虽然这些年多从事偏于硬件设计方面的工作(包括一些FPGA设计工作),但是在很多的调试过程中,尤其是需要软硬件协同调试的过程中,往往能够快速地区分和定位问题是出于软件还是硬件,甚至还能够协助软件工程师解决一些具体的问题。笔者以为,软核处理器的教学意义在于,它能够帮助学习者深入了解处理器系统设计的架构。而在如今的电子产品设计中,软硬件分工越来越细,很难在实际的开发过程中跨越“鸿沟”,但是具备这样系统性设计思维的工程师,必定是“人见人爱”的。
基于以上这些考量,笔者在第一本Nios Ⅱ图书《爱上FPGA开发——特权和你一起学Nios Ⅱ》出版五年后(由于书中的平台较旧,考虑到市场因素,第一次印刷售罄后就没有复印),决定重新梳理这方面的知识,在Quartus Ⅱ的Qsys平台上大干一场,同时借助Altera Cyclone IV FPGA入门平台“勇敢的芯”(可访问淘宝网店了解该FPGA平台详情:https://myfpga.taobao.com/),和大家一起重拾玩转Nios Ⅱ嵌入式处理器的激情。
作者
2016年1月于上海