您当前的位置:五五电子网电子知识电工技术电工文摘SOP中自定义外设和自定义指令性能分析 正文
SOP中自定义外设和自定义指令性能分析

SOP中自定义外设和自定义指令性能分析

点击数:7535 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   电工文摘

SOPC中自定义外设和自定义指令性能分析

NiosII是一个建立在FPGA上的嵌入式软核处理器,灵活性很强。作为体现NiosII灵活性精髓的两个最主要方面,自定义外设和自定义指令的性能开始受到越来越多开发者的关注。本文在对NiosII自定义外设和自定义指令进行深入研究后,采用实验的方法,通过实例CRC32对比了在实现相同功能的情况下,自定义外设和自定义指令的性能差异,并从自定义外设和自定义指令的实现机理上给予说明。分析结果表明: 在SOPC系统中,如果系统的实时性要求非常高,那么采取自定义外设来实现系统中关键处理模块无疑是最佳选择。

关键词 自定义外设 自定义指令 CRC校验 性能分析 SOPC

引言

  NiosII是一个嵌入式软核处理器,除了可以根据需要任意添加已经提供的各种外设以外,用户还可以通过定制自定义外设和自定义指令的方式来满足各种应用需求。定制用户外设和用户指令是使用NiosII嵌入式软核处理器的重要特征。定制的用户外设能够以“硬件加速器”的形式实现各种各样用户要求的功能;同时定制的用户指令,可以把一个复杂的标准指令序列简化为一条用硬件实现的单个指令,以增强对实时软件算法的处理能力。近来,随着国内SOPC开发的逐步深入,这两者的性能开始成为一个关注的焦点。本文通过CRC32对SOPC系统中的自定义外设和自定义指令的实现以及对性能差异所作的详细分析,给广大SOPC开发人员提供参考。

1  CRC自定义外设的实现

1.1  SOPC系统中自定义外设的组成和结构

  自定义外设作为NiosII软核处理器超强灵活性的体现,其开发遵循一定的规律。一个用户自定义外设必须进行硬件设计,也就是说,必须用硬件描述语言来描述出硬件的逻辑组成。一般来说,一个自定义外设主要由下列部分组成:

  ①  描述自定义外设逻辑的硬件描述文件部分(主要是HDL程序)。
  ②  软件文件,一个用来定义外设寄存器的C语言头文件,以及让程序员控制这个元件的软件驱动程序。
  ③  元件的描述文件(class.ptf)。该文件定义了元件的架构,提供了SOPC Builder将该元件集成到一个系统的各种信息。该文件由元件编辑器根据用户提供的硬件和软件文件以及在图形用户界面中设置的各个选项和参数自动生成。图1给出了带Avalon从端口的自定义外设组成框图。

按此在新窗口浏览图片
图1  带Avalon从端口的自定义外设组成框图

  从图中可以看出,一个典型的自定义外设主要由下列功能模块组成:

  ①  任务逻辑。任务逻辑实现外设的基本功能,是必不可少的组成部分。
  ②  寄存器文件。寄存器文件部分提供任务逻辑和外界交换信息的桥梁。有了寄存器文件,用户就可以通过Avalon接口采用“基地址+地址偏移量”的方法来访问外设内部的各个寄存器。
  ③  Avalon接口。Avalon接口为寄存器文件提供了一个标准的Avalon前端。该模块使用Avalon规定的信号来访问寄存器文件,并且支持任务逻辑的传输类型。

1.2  CRC32自定义外设的实现

  CRC32校验可以由软件或硬件来实现。现多采用超大规模集成电路芯片以硬件方式实现。例如:

按此在新窗口浏览图片

其硬件实现原理如图2所示。

按此在新窗口浏览图片
图2  CRC硬件实现原理

  编码运算过程如下:

  开关关闭,k位数据移入寄存器,同时送到外部。当k位信息全部送到外部时,除法运算也正好进行完毕,寄存器中的r位数据就构成了余项的系数序列,即形成了校验码。然后切断除法反馈电路,将移位寄存器的每一位逐次输出到信道中。这些校验码与原来的数据位一起构成了完整的码字。

  采用HDL语言来描述出CRC32的硬件实现,命名为crc.v。在SOPC Builder元件编辑器中加入该元件,其中自定义外设的接口信号和Avalon信号类型的一一对应关系如表1所列。

表1  CRC接口信号和Avalon信号类型的对应关系
按此在新窗口浏览图片

  当把自定义外设加入到SOPC系统中时,系统自动生成一个system.h文件。在system.h中生成的CRC自定义外设的相关信息如下:

  #defineCRC_NAME "/dev/crc"
  #defineCRC_TYPE "avalon_crc"
  #defineCRC_BASE 0x06210880

  根据system.h中的信息,可以建立名称为altera_avalon_crc_regs.h的寄存器头文件。在这个C头文件中,用清晰的宏符号描述出设备的寄存器集合,并且给出其访问方法。

  #ifndef __ALTERA_AVALON_CRC_REGS_H__
  #define __ALTERA_AVALON_CRC_REGS_H__
  #include <io.h>
  #defineCRC_INIT_REG0
  #defineCRC_WRITE_REG4
  #defineCRC_READ_REG016
  #defineCRC_READ_REG120
  #defineCRC_READ_REG224
  #defineCRC_READ_REG328
  #defineCRC_INITIALIZATION(base)
  IOWR_32DIRECT(base, CRC_INIT_REG, 0)
  #defineCRC_WRITEDATA_8(base,data)
  IOWR_8DIRECT(base, CRC_WRITE_REG, data)
  #defineCRC_WRITEDATA_16(base,data)
  IOWR_16DIRECT(base, CRC_WRITE_REG, data)
  #defineCRC_WRITEDATA_32(base,data)
   IOWR_32DIRECT(base, CRC_WRITE_REG, data)
  #defineCRC_READRESULT_32(base)
  IORD_32DIRECT(base, CRC_READ_REG0)
  #defineCRC_READRESULT_64(base)
  IORD_32DIRECT(base, CRC_READ_REG1)
  #defineCRC_READRESULT_96(base)
  IORD_32DIRECT(base, CRC_READ_REG2)
  #defineCRC_READRESULT_128(base)
  IORD_32DIRECT(base, CRC_READ_REG3)
  #endif  //__ALTERA_AVALON_CRC_REGS_H__

  该头文件定义了CRC IP核的寄存器访问宏。用户可以通过Avalon接口采用“基地址+地址偏移量”的方法来访问外设内部的各个寄存器,以实现NiosII CPU对CRC IP核的控制。

2  CRC32自定义指令的实现

2.1  自定义指令的原理和开发

  自定义指令是基于NiosII处理器的SOPC系统的一个重要特征。NiosII处理器自定义指令不仅扩展了CPU的指令集,还能提高对时间要求严格的软件运行速度,因此提高了系统的整体性能。采用自定义指令,用户可以实现传统处理器无法达到的最佳性能。在对数据处理速度要求比较高的场合,把由标准指令序列实现的核心功能变成由一条用户定制的指令来实现,这样可以明显提高软件的执行效率。基于硬件处理模块的自定义指令可通过单个时钟周期或多个时钟周期的硬件算法操作完成原本十分复杂的处理任务。NiosII处理器最多支持256条定制指令,加速通常由软件实现的复杂数学运算。

  自定义用户指令实质上就是让软核处理器实现由硬件逻辑实现的某种功能,这个硬件逻辑连接到NiosII处理器的算术逻辑单元上。对于NiosII的标准指令,NiosII使用ALU来完成相应的算术逻辑操作;对于自定义指令,则采用用户自己建立的硬件逻辑来完成运算。

2.2  CRC32定制指令的实现

  在前面开发的CRC自定义外设的基础上,按照定制指令所要求的设计方式,把前面开发的自定义外设改写成一条指令。本设计中,CRC自定义指令是作为多周期指令来实现的,在多周期指令要求中必须包括信号clk、clk_en、reset,其他的信号不是必需的。

  由于在SOPC系统中自定义外设的接口类型与自定义指令的接口类型要求不一样,因此要求在自定义外设的基础上必须加上一个接口文件。这个接口文件的作用是为了与多周期指令的端口信号类型对应。接口文件端口信号和自定义外设端口的对应关系如表2所列。

表2  自定义指令与自定义外设端口对应关系
按此在新窗口浏览图片

  开发完成后,把自定义指令加到NiosII CPU中。生成系统后,在生成的system.h文件中,关于CRC自定义指令的宏如下:

  #define   ALT_CI_CRC_CUSTOM_INSTRUCTION_N 0x00000000
  #define ALT_CI_CRC_CUSTOM_INSTRUCTION(A,B)__
  builtin_custom_inii
  (ALT_CI_CRC_CUSTOM_INSTRUCTION_N,(A),(B))

  其中,“ALT_”是宏定义的前缀,表示为Altera公司;CI是用户定制指令的意思;CI_CRC_CUSTOM_INSTRUCTION是用户指令的逻辑模块名称;N表示指令操作码。

3  自定义外设和自定义指令在SOPC系统中的运行和验证

  前面已经分别用自定义外设和自定义指令的方式实现了CRC32。那么自定义外设和自定义指令执行性能如何?在实现相同功能的情况下,何种方式在执行过程中更有优势?它们之间的差异有多大?在这一部分将通过测试给予充足的验证。

[1] [2]  下一页


本文关键字:外设  电工文摘电工技术 - 电工文摘

《SOP中自定义外设和自定义指令性能分析》相关文章>>>