参数化可配置技术是指在集成开发环境下,利用设计中的可配置资源,根据需求重新配置一个运算系统,以实现兼顾高性能硬件设计和可配置特征的系统,即成为参数化可配置运算系统。参数化可配置系统的原理是:通过对参数可配置元件的利用,将硬件系统由专门的电路设计转变成为功能模块的组装,因此具有灵活、高效、低耗、易于开发与升级等特性。
在混沌电路、信号及图像处理中有大量的浮点数加、减、乘、除操作,浮点数本身的复杂性决定其需要专用的硬件来实现[1]。传统硬件电路的实现依靠手工搭建,过程复杂,存在电路参数分布性大、元器件老化、易受温度影响及通用性差等问题,尤其是对网格状多涡卷混沌吸引子的电路设计和调试需要花费更多时间。此外,要求电路设计者要有较高的技巧和经验[2]。基于IP核模块的设计方法是采用IP核模块而不是采用基本逻辑或电路单元作为基础单元,是以功能组装代替功能设计,用户只需通过设置参数即可方便地按需要定制自己的宏功能模块。使用户可以将精力集中于系统顶层及关键功能模块的设计上,致力于提高产品整体性能和个性化特性,加快了芯片设计速度,提高了芯片设计能力。
此外,IP核通常要经过严格的测试和优化,并且已经封装完毕,利用IP核进行电路设计可以在FPGA等可编程逻辑器件中达到最优的性能和最低的逻辑资源使用率,以保证电路的性能和质量。基于参数可配置IP核的浮点运算器的设计可大大提高混沌电路及其他电路设计者的电路设计能力,有力推动了混沌电路在相关领域的应用。
1 参数化IP核
IP核的本质特征之一是可重用性,在不同的应用场合对IP核功能、性能、面积及功耗等要求也不同,这就要求IP核具有较好的可伸缩性和灵活性。为了使IP核在使用中具有更好的灵活性和可配置性,IP核应该被设置为参数化可配置的。根据参数配置时机的不同,参数化IP核的配置参数可分为静态参数和动态参数[3]。
(1)静态参数:静态参数是指在系统运行前,一次性将参数化IP核的参数配置为系统所需的某个或数个功能,这些配置好的功能,在系统运行期间不会改变,直到系统完成任务后,参数化IP核才配置成为其他功能去完成其他任务。也就是说,当硬件要重新配置参数时,系统必须先停止运行,待参数配置完成后系统才能继续运行。
(2)动态参数:动态参数是在系统运行过程中,可随时重新配置参数化IP核的功能,参数配置与系统运行是同时的。因此,在设计IP核的动态参数时,必须先把参数配置所需的电路模块包含在其中,并将可配置的参数保存在寄存器中,这样在系统运行时才能随时配置参数调用所需的功能。图1为动态参数的控制结构。
(3)动态参数与静态参数的比较:动态参数的使用大大提升了IP核的运行灵活性,但其缺点也很明显。因为动态参数属于“运行时配置”的参数。采用动态参数设计的IP核,在设计时已经将所有的功能模块包含在电路中,通过参数寄存器来实时选择IP核的功能,因此,电路设计功能越多、参数越复杂,其芯片面积的占用和功耗也越大。而静态参数属于“编译时配置”的参数[4],它在流片之前就已经将IP核的参数确定好,因而在实现过程中不会产生冗余电路,减小了设计成本。
2 参数化浮点运算器IP核设计
在参数化浮点运算器IP核的设计中,由于浮点减法器与浮点除法器都可通过参数化浮点加法器和参数化浮点乘法器实现,故本设计只重点探讨参数化浮点加法器和参数化乘法器的优化算法和设计技术。
2.1参数化浮点加法器设计
浮点加/减法在浮点运算中占有很大的比例,在浮点加法器的设计中,尾数的计算是影响浮点运算性能的关键,而其中进位运算对尾数计算速度影响最大。因此,围绕如何提高浮点运算器的进位产生速度,科研人员在传统串行的行波进位加法器的基础上,提出了一些并行快速产生进位的方法,如:超前进位加法器CLA(Carry Look-ahead Adder)、条件进位选择CCS(Conditional Carry-Selection)加法器等。本文采用的是对超前进位加法器改进后的、适用于参数化浮点运算器设计的分块超前进位加法器BCLA(BLOCk Carry Look-ahead Adder)。
2.1.1 分块超前进位加法器算法
图2是一个 4 bit超前进位加法器模块,通过将数个CLA分成相同大小分组级联,组间采用行波进位的方式连接,以加强加法器件的模块性。
依据式(1),组间产生和传递的进位,可以采用相类似的方式产生,通过增加一个组间CLA以组合方式设计成为分块超前进位加法器组合电路。图3为采用BCLA以及CLA组合设计的16 bit加法器逻辑图。对于n位操作数的加法,可将其分为n/4个分组,每4 bit一个CLA的模块完成一次超前进位运算需要2ΔG的时间(假设每个门电路延迟为ΔG)。其中需要1ΔG的时间产生Pi和Gi,2ΔG的时间来产生本位输出,因此,整个电路的总运算时间为:
从式(2)可以看出,与完全的行波进位加法器的延迟2nΔG相比,采用BCLA方法设计的加法器的延迟理论上只有其1/4,性能得到了很大的提升。
2.1.2 分块超前进位加法器设计
根据IEEE-754标准的浮点加/减法的基本原理[5],对于两个浮点数的加/减法,可将其分解为8个步骤:符号运算、指数运算、尾数移位、尾数运算、规格化、指数调整、舍入、封装。然后根据这8个步骤,对浮点加/减法进行运算的细化。在细化流程的基础上,把尾数对位划分为对阶和移位,在符号运算电路中加入加减法操作的信号,根据IEEE-754标准的浮点格式的限制及异常处理,划分浮点数的加/减法运算电路的功能模块。图4为分块超前进位加法器的功能模块。
为了使基于VHDL设计的参数化IP核开发流程明确、设计目标清晰,需要在进行VHDL描述之前对浮点加法器的参数的提取进行研究,分析出可提取参数和可实现的参数。在浮点运算器中对参数的配置主要要求是:
(1) 各参数之间的耦合度应该比较小;
(2) 可进行参数配置的模块,能够显著改变浮点运算器的性能、面积、功耗等;
(3) 参数化应该比较容易实现。
2.2参数化浮点乘法器设计
浮点乘法在浮点运算器中的使用比例仅次于浮点加/减法,因此也是非常关键的浮点运算部件之一。按照IEEE-754标准,浮点运算被分为符号位运算、指数运算、尾数相乘三个步骤,从20世纪60年代至今,已经提出了许多种定点乘法运算单元的实现方法。各种乘法器运算方式都是先将乘法转换为加法,再通过快速求和的方法来得到最终的计算结果。本文采用的是适用于参数化浮点运算器设计的Booth算法。
(1)为解决有符号数乘法运算中复杂的符号修正问题,Booth提出了一种针对乘数进行编码的Booth编码。Booth编码在乘数最低位增加一个零值,在循环求部分积时,每次取乘数的相邻两位(基-4)进行判断,依据这两位的值,判断其部分积是被乘数的一倍或是两倍[6]。
Booth编码乘法运算可分三步进行:①产生部分积;②加法阵列累加部分积;③应用加法器求得最终结果。
采用Booth编码设计的乘法器原理如图5所示。