当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]采用Nios定制指令的嵌入式系统优化设计

摘要:Altera公司的Nios软核处理器以其低成本,设计灵活等特点,在嵌入式应用领域得到广泛的应用。采用Nios处理器的定制指令,可以把用户自定义的功能直接添加到Nios CPU的算术逻辑单元中,加快专项任务的执行,以达到优化目的。本文在阐述Nios定制指令设计的基础上,给出相应的设计例子说明。

    关键词:Nios软核 定制指令 嵌入式处理器MP3

引言

Nios处理器是Altera公司推出的一个32/16位精简指令信处理器软核。在Altera公司推出的软件SOPC中加载Nios核 和相应的外围接口以及与定义相应的自定义指令,然后对设计进行综合,下载到FPGA中就可以方便地一个具有特定功能的嵌入式处理器。这种设计思路增加了系统设计的灵活性,加快系统运行速度,缩短产品研发和上市时间。

由硬件实现复杂的算法通常比软件实现更高效。利用Altera的Niso嵌入式处理器的定制指令,可以把用户自定义的功能直接添加到Niso CPU的算术逻辑单元(ALU)中(见图1),来加快专项任务的执行,从而达到系统优化的目的。因此,设计者可以针对关键的内部循环和耗时算法,创建Nios嵌入式处理器的定制指令,把复杂的顺序指令简化为硬件实现的单指令,这样就能够大大提高系统性能。例如,Nios CPU执行浮点乘法运算要2800多个时钟周期;而浮点乘法的定制指令采用了浮点单元(FPU),执行只需19个时钟周期。

1 定制指令

定制指令为Nios处理器的算术逻辑单元增加了定制逻辑,设计者通过定制指令,用快速高效的定制逻辑块替代复杂耗时的软件程序。在一个CPU中,可以运行多达五个组合或时序定制模块,还可以访问Nios系统模块外的存储器和/或逻辑。定制逻辑模块在两个寄存器Ra和Rb内容的基础上执行用户定义的操作,结果存放在寄存器Ra中。这些定制逻辑模块的功能只受限于器件内逻辑单元(LE)和设计得的想象力。

定制硬件模块能够通过Nios嵌入式处理器指令集中的五个用户定义操作码来访问。SOPC Builder在生成系统期间会为任何定制指令创建宏,通过这些自动产生的C和汇编语言宏就可以方便地访问自定义指令操作码。

2 实现定制指令

以Altera的Nios2.0版嵌入式处理器为例实现定制指令,同时点击Custom Instructions标签创建或编辑Nios CPU,如图2。

Custom Instruction标签是系统设计都 连接定制逻辑和Nios CPU的ALU的界面。首先,选择定制指令的操作码,有USR0~USR4五个操作码可供使用。然后,导入和扫描作为定制指令的HDL文件。Design Import Wizard扫描顶层模块的端口,进行合适连接。Design Import Wizard可以接受以下类型的文件:VerilogHDL/VHDL/EDIF/VQM以接受以下类型的文件:Verilog HDL、VHDL、EDIF、VQM和Altera QuartusII原理图。导入设计文件之后,分配定制指令所需的CPU时钟周期数目和定制指令名。

在系统生成期间,SOPC Builder工具用作ALU一部分的定制逻辑来创建Nios CPU,受所选的操作码控制软件开发包用定制指令名创建在C/C++和汇编语言中使用的软件宏。这些在定制软件开发包ince下。

图2 定制指令设计界面

    设计者通过创建的软件宏访问定制指令。在C/C++中,宏就像函数调用一样使用。如果使用前缀端口,就要用前缀创建不同的宏。例如,为浮点单元(FPU)创建两个C/C++宏。例如,为浮点单元(FPU)创建两个C/C++宏是:

result=nm_fpu(data,datb); //不使用前缀

result=nm_fpu_pfx(prefix,data,data); //使用前缀

在汇编语言中,宏调用USR操作码,按标准汇指令一样使用。如果使用前缀,那么在宏之前必须有一个PFX指令。有关用户定义操作码(USR0~USR4)的详细资料可参Nios Software Development Reference Manual。

3 MP3播放器的定制指令设计

以MP3播放器设计为例,采用定制指令对设计进行优化。该设计通过增加两条定制指令,就能使系统执行性能提高大约3倍。图为该MP3系统设计框图。

(1)MP3解码器

在大多数MP3播放器中,处理器是用来管理函数和传输数据的。专用MP3解码器ASIC可用于执行密集计算量的解码和传数据给音频器件。本例中,Altera的Nios处理器用于完成处理控制信号,传输数据和进行MP3解码。通常,MP3解码器流程如下:

①通过IDE接口从CF(CompactFlash controler)中读取MP3数据;

②将MP3数据存入SPAM中缓存;

③对MP3数据解码;

④将MP3边带合成到脉冲编码调制(PCM)数据;

⑤把PCM数据传给脉宽调制器PWM。

此外,播放器采用MPEG Audio Decoder(MAD)进行MP3解码,是基于以下方面:

①100%定点(整数)计算;

②网上有可利用的源码;

③在GNU Ceneral Public License(GPL)下发布。

(2)定制指令

    我们知道在执行MP3解码的过程中,大量时间花费在边带的合成上。因此,优化Altera MP3的重点就落在函数mad_synth_frame上。我们可通过使用定制指令f_mul和DCT32来优化该函数。

F_mul

F_mul和mad_f_mul是MAD使用的宏,用整数乘法来模拟浮点乘法。定义如下:

#define mad_f_mul(x,y)

((((x)+0x00002000L)>>14)×(((y)+0x00002000L))>>14)

#define f_mul(x,y)

(((x)|0x0001FFFFL) ((y)|0x0001FFFFL))

这些函数完成的功能是一组易被硬件实现的操作,包括移位、加法、乘法和逻辑或运算。在Altera MP3的优化设计中,用硬件定制指令f_mul执行原先用软件宏;还可利用前缀选项,把两个宏合为一个单定制指令。以下就是用Altera的定制指令定义(f_mul和mad_f_mul):

#define f_mul(x,y)nm_fmul((x),(y));

#define mad_f_mul(x,y)nm_fmul_pfx(1,(x),(y));

DCT32

在MP3解码中,DCT32完成离散余弦变换。MAD软件用优化过的DVT来增强性能。从软件角度来看,该优化算法比起一般DCT对提高性能具有重大意义。因为标准DCT需要1024个乘法,而用优化后的DCT只需80个乘法。

图4 DCT32与mad_synth_frame软件流程

    DCT32定制指令所用硬件由Celoxica提供,它是可重配置计算方案提供商,采用了基于HandelC的设计工具。Altera的DCT32定制指令按以下特点设计:

|①可以存储32位输入和32位输出;

②在DCT计算时,能独立于CPU工作;

③用前缀指令接受命令

——装入/卸载

——启动DCT计算

——轮询是否完成。

因为定制指令可以轮询,在DCT输出前其它代码可以并行运行。当需要DCT输出时,定制指令被查询,看是否已完成计算。如果完成,Nios处理器卸载输出数据,同时装入下组输入数据。图4给出了DCT32定制指令及mad_synth_frame的流程图。

(3)优化前后比较

表1给出了三种情况下完成mad_synth_frame函数的比较结果。三种情况分别是只用硬件乘法指令,单用定制指令f_mul及f_mul和DCT32共用。

从表1中可以看出,f_mul是最有效的定制指令,系统规模仅仅增加3%,却减少了77%的循环数目。规模增加很小是因为f_mul定制指令无需专用的硬件乘法器。

表1 三种情况比较

所用硬件 循环数目 逻辑元件(IE) 内存位
只用硬件乘法 1 279 000 3 542 26 624
f_mul 293 000 3 642 26 624
f_mul和DCT32并行 231 600 4 331 30 528

DCT32指令运行在并行模式下,比起f_mul又减少了21%的循环数目,LE资源也只增加了18.9%。

把定制指令所需的额外资源和性能增加情况与只用硬件乘法的基准系统比较。用定制指令能减少执行mad_synth_frame函数时所需的80%循环数目而只增加系统22.3%的规模。该MP3是在Nios开发面板上设计并运行的,频率为33MHz。在不增加时钟频率的情况下,所有性能符合指标。如果需进一步提高性能,还可通过增大时钟频率,加大内存,增加指令和数据缓存等方法来实现。

4 结论

采用Nios定制指令,系统设计得能够把一系列顺序执行的指令简化为通过硬件执行的单个指令,从而简化系统软件设计并且 加快系统运行速度。同时充分利用了可编程逻辑器件通过硬件执行速度快的优点,和用于控制的Nios处理器进行了完美的结合。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

【2024年3月25日,德国慕尼黑和瑞典瓦尔贝格讯】不同汽车的独特性给汽车零部件供应商和OEM厂商等带来了挑战,因为每辆车的驾驶方式、驾驶地点、驾驶者、设计、用途以及道路和交通状况都是独一无二的。为保证每辆汽车都能正常运...

关键字: AI 机器学习 嵌入式系统

GD32F303作为一款先进的微控制器,在嵌入式系统领域有着广泛的应用。本文旨在深入探究GD32F303的发布时间,并分析其背后的技术背景和市场环境。通过对相关资料的梳理和分析,本文揭示了GD32F303发布的历史背景、...

关键字: GD32F303 微控制器 嵌入式系统

物联网控制模块作为连接物理世界与数字世界的桥梁,在现代科技领域扮演着至关重要的角色。本文将详细探讨物联网控制模块的定义、功能、应用领域以及未来发展趋势,旨在为读者提供全面而深入的了解,并展望其在未来物联网产业中的广阔前景...

关键字: 物联网 控制模块 嵌入式系统

以下内容中,小编将对嵌入式开发的相关内容进行着重介绍和阐述,希望本文能帮您增进对嵌入式开发的了解,和小编一起来看看吧。

关键字: 嵌入式 嵌入式开发 嵌入式系统

众多周知,TI Sitara系列在近10多年间推出了很多优秀的处理器,其中最具代表性的AM335x系列处理器,引领工业市场从MCU向MPU演进,帮助产业界从ARM9迅速迁移至高性能Cortex-A8处理器,成为一代经典!...

关键字: 处理器 工业4.0 嵌入式系统

串口通信(Serial Communication)是一种常用的数据传输方式,它通过串行数据线逐位传输数据,具有成本低、简单易用、可靠性高等优点。在工业控制、通信设备、嵌入式系统等领域得到广泛应用。

关键字: 串口通信 嵌入式系统

在智能手机市场上,操作系统的选择对于用户体验和设备性能至关重要。目前,市场上主流的操作系统主要有安卓系统和鸿蒙系统。那么,这两个系统究竟哪个更好呢?本文将从以下几个方面对鸿蒙系统和安卓系统进行详细的比较。

关键字: 鸿蒙系统 安卓系统 嵌入式系统

嵌入式控制器是一种集成了微处理器、存储器、输入输出接口以及其他外设的微型计算机系统,广泛应用于各种场合。本文将为您详细介绍嵌入式控制器的应用场合。

关键字: 嵌入式系统 嵌入式控制器 微处理器

嵌入式处理器是一种特殊的计算机处理器,它被设计用于嵌入到各种设备和系统中,以实现特定的功能。由于其低功耗、高性能和可靠性等特点,嵌入式处理器在许多领域都有广泛的应用,如汽车电子、工业控制、医疗设备等。本文将对嵌入式处理器...

关键字: 嵌入式处理器 嵌入式系统

为增进大家对嵌入式的认识,本文将对嵌入式、嵌入式的行业前景予以介绍。

关键字: 嵌入式 指数 嵌入式系统
关闭
关闭