《UltraFast 嵌入式设计方法指南》(3)——软件级

作者:高视, FPGA2嵌入式

大多数FPGA设计者从逻辑设计做起,对软件级设计接触不多,但目前的项目中都少不了处理器软件C的设计,下面接着看下《UltraFast 嵌入式设计方法指南》中关于软件设计方面的内容,主要分3部分:软件设计需要考虑的事项、设计流程及调试等。

1. 软件设计考虑事项
软件设计时,需要先搭建一个处理器到系统中,处理器可以是硬核(如ZYNQ的ARM),也可以是软核(如NIOS II),所有的内容均围绕处理器方面设计展开:处理器配置,操作系统选择,库和中间件,启动加载器,软件开发工具(SDK)。

  • 处理器配置:配置核心频率、多处理单元协调和数据程序存储空间分配、中断等;
  • 操作系统选择:选择操作系统活着裸跑;
  • 库和中间件:方便设计者高效的使用底层硬件的过渡层接口;
  • 启动加载器:方便操作系统的BOOT设计;
  • 软件开发工具:C开发环境,类似NIOS IDE开发环境。
  • 当我们自己在逻辑部分设计了一个底层逻辑后通过接口(一般是总线接口)连接到处理器后,也可以自定义自己的操作接口,通过SDK来操作底层逻辑。如三角函数处理器运算太慢,可以在逻辑中设计一个三角函数后SDK中只需将运算的数据写入对应reg中后得到运算结果,这就实现了硬软件协调处理功能。

    2. 软件设计流程
    软件设计流程如下图:


    其中:

  • 板启动开发工作包括开发低级固件、设置启动次序、针对接口和外设的基本测试,划分了下列阶段:PS 初始化 ,PL 配置 ,储存器和外设测试,软件和硬件调试;
  • 驱动开发为 SoC 和板载外设开发软件驱动,用于为OS或裸机应用等更高软件层建立接口;
  • 针对裸机或 Linux 或 FreeRTOS 等操作系统开发出了相关可运行应用。
  • 设计中要注重层次,多学习C++等高级语言设计技巧,这样可以保证设计的简洁和可维护性,一般FPGA对C设计接触比较少从业者写的C代码一团乱麻。

    3. 调试
    系统调试中,PL部分就是我们常用的Modelsim仿真+在线逻辑分析仪等,PS部分就是断点、单步,查看内存等。关于调试的经验技巧下次搞篇文章分享。

    软件调试中,需要在处理器配置配置合适的的选项,SDK中灵活使用,同时需要注意:调试完成得到最终发行版本时,记得去掉在线逻辑分析仪和处理器JTAG配置,因为这样会省掉不少资源,时序和功耗当然会更好。

    4. 其它
    理解启动加载器的流程对理解软硬件协同+Linux有很大帮助:

    在为SoC 加电时,启动过程从BootROM 开始。启动过程先从片上储存器 (OCM) 加载然后启动执行第一阶段启动加载器 (FSBL)。FSBL负责配置具体的初始化。

    然后根据软件架构,第二阶段启动加载器,如使用嵌入式 Linux 时的 U-Boot 进行初始化并执行。 FSBL 和/或 SSBL 启动 RTOS 或嵌入式 Linux 以及应用代码。 如果没有操作系统,则是裸跑,好多步都没有。简单说裸跑就是51单片机C程序开发,而跑系统则是ARM高端应用程序开发,原理性相差不大,可以自己查阅资料了解,不需要马上都懂,因为随着时间和经验的积累,这些你会慢慢要了解并使用巩固。

    5. 总结
    FPGA大多是逻辑开发者,但只做逻辑的话局限性太大,而且现在的趋势也是FPGA软件话了,SDSOC就是证明。所以,我们应该提前扩充知识面,而且你会发现复杂软件设计和操作系统经验上有很多技巧也可以借鉴,更好地借鉴能帮助我们软+硬+系统结合,设计出更有成就感的架构应用于项目中。

    文章转载自: FPGA2嵌入式