勇敢的芯伴你玩转Nios II(电子设计与嵌入式开发实践丛书)
上QQ阅读APP看书,第一时间看更新

1.3 基于Nios Ⅱ处理器的FPGA开发流程

图1.4 SOPC系统开发流程

基于Nios Ⅱ处理器的开发流程如图1.4所示。Qsys是Quartus Ⅱ中集成的一个工具,在Qsys中搭建Nios Ⅱ处理器系统,并添加和配置各种外设。随后在Quartus Ⅱ和EDS开发工具中分别进行FPGA和嵌入式软件设计。FPGA设计包括设计输入(Verilog/VHDL代码编写等)、设计约束(引脚约束、时序约束等)、编译(综合、布局布线)和生成配置文件。嵌入式软件开发则包括C源码创建、编写、编译和最终的调试运行(前提是FPGA生成的配置文件已经预先烧录到目标器件中)。

Qsys生成系统后,会自动产生所有外设相关的驱动,包括在system.h中定义系统各个外设的基址,自动编译各种可供调用的函数。衔接软硬件的这部分就是HAL,中文名叫硬件抽象层。在软件应用开发人员看来,他们只要弄明白HAL提供的所有可用函数的用法就可以玩转整个系统了。

按照笔者的理解,其实完全可以抛开图1.4。对于通常相对简单的Nios Ⅱ处理器开发项目而言,如图1.5所示,用脑图总结出来的一些基本步骤就足以代表在整个项目中所涉及的主要方面。

关于图1.5本身就不过多进行分析了,这里只是罗列一些步骤供读者参考。当然了,它要和前面的图1.4相比就显得有些“不规范”和“不官方”了,姑且可以称之为“草根流程”。在很多场合下,其实也是没有条件和办法去完完全全“规范化”开发流程的,但这并不妨碍对流程的正确理解和有条件地执行。总之,设计者要记住一件事:所有规范和流程的制定,都是为了更好的服务于产品开发。

图1.5 基于Nios Ⅱ处理器的FPGA项目开发步骤

另外,FPGA开发设计的迭代性特点决定了基于Nios Ⅱ处理器的软硬件开发同样存在着这个特点,也许这一点在图1.4和图1.5中都没法很好地表现出来。所谓迭代性,就是重复性,当开发到某一个环节时如果出现问题了,很多时候问题不会仅仅停留在当前环节,设计者会考虑往流程的上游找问题,大多数时候问题是在前面的某一个环节中解决了,然后从那里重新开始继续往下走。

图1.6 设计迭代性示意图

迭代性如图1.6所示,假设一个流程中有4个主要的步骤,正常情况下从步骤1执行到步骤4,如果不出问题就结束了。但这么顺利的过程在电子产品(特别是FPGA的开发流程)中是非常罕见的,有时甚至每个步骤都有出问题的可能。在日常生活中,人们做事的各个环节经常是互不相干的,哪个步骤要是出现问题就在哪个步骤解决,不会牵涉到别的步骤中,而FPGA的开发则大不相同,例如步骤1执行完进入步骤2,如果在步骤2出了问题,也许在步骤2本身解决不了,那么就得回到步骤1找问题,如果步骤1解决了问题,那么此时整个流程就从步骤1开始重新执行。同样的,如图1.6所示,当进入步骤4的时候,如果有了问题,解决问题可能需要回到前面3个步骤的任意一个步骤重新开始执行。试想想,一个开发过程通常不会只有4个步骤,有时要经历几十个甚至上百个大大小小的步骤,那么出了问题就麻烦了。这是FPGA设计独有的特点,也是难点和重点。希望读者能够在实践中好好感受这个折磨人的特点,也多总结出一些经验和办法来应对。当然,笔者所能够想到和做到的就是在设计中认真认真再认真;然后多分模块,分解这些大迭代为小迭代,尽可能地降低设计之间的相互依赖性,降低问题定位难度,从而减少工作量。