当前位置:首页 > 电源 > 数字电源
[导读]针对当前系统设计中软硬件设计者分别采用不同的设计语言存在的问题,采用基于Python的软硬件协同设计方法,以信号处理和图像处理中常用的平方根算法为例,在FPGA上实现了定点平方根算法。实验结果表明Python可以有效地将软件算法快速地转换为硬件设计,并能大幅度提高系统设计,仿真和校验的效率,使得这种方法设计的产品能更快地进入市场。

  0 引言

  FPGA 作为可编程的逻辑器件,它具有功耗低、便于修改、调试等特点,并能在上面实时完成大量的算法,平方根运算作为信号和图像处理中的常见算法,目前在FPGA上有许多实现,但是这些实现方法通常采用目前硬件设计中普遍采用的Verilog和VHDL语言进行硬件设计,这种设计方法存在着仿真和校验效率低,对于复杂的算法和软件设计者之间的沟通较为困难等问题。

  Python是一种简单易学并且功能强大的编程语言,并具有强大的软硬件描述能力,MyHDL采用Python扩展包的形式使其能支持硬件设计和仿真并在仿真结果符合要求后可将软件算法自动转换为相应的Verilog 或VHDL硬件描述。

  本文试图采用这种新的基于Python的软硬件设计方法在FPGA上实现定点平方根。

  1 方法

  1.1 定点数表示

  通常在FPGA 上的运算可以采用定点和浮点两种方式来实现,定点运算和浮点运算相比尽管数表示的范围较小,设计较为复杂,但是速度较快,占用FPGA资源较小,本设计采用定点来完成。平方根的输入为非负数,包括符号位为定点32位输入,其中高16位为整数部分,低15位为小数部分,可以直接计算的平方根范围为(65 536,0],结果采用32位输出,最高位为符号位,接着的高8位为整数部分,低23位为小数部分。

  1.2 平方根实现

  平方根的FPGA实现方法很多,有的算法为了减少片上资源的使用,逻辑实现上尽量避免使用乘法,比如CORDIC,逐位计算,non-restoring 等,现在FPGA上通常都有硬件乘法器,可采用迭代法和泰勒级数展开,本文采用泰勒级数展开的方法,级数采用5级,系数采用3.15的定点表示形式,小数部分15位,整数部分2位为了保证后续计算结果不溢出,整个位宽为18位,计算公式如式(1)所示:

  

 

  对于输入x 位于(65 536,0]之间,由于数的范围较大,通常进行归一化处理,采用的方法通过左移运算去掉二进制定点数的所有前导零,将输入的数转换为定点小数[0.5,1)之间,在完成平方根运算之后,然后根据前导零个数的奇、偶性不同分别进行去归一化处理,原理如式(2)所示,将输入数y 分为sx,s=2n,n 即为y 的二进制前导零的个数。

  

 

  整个过程的设计模块如图1所示。

  

 

  1.3 Python软硬件协同设计

  基于Python 的软硬件协同设计的过程如图2 所示,由于本设计最终要在硬件上实现,在设计时Python的硬件设计部分采用MyHDL 可综合子集,最后使用MyHDL的toVerilog()函数将MyHDL设计自动转换为相应的Verilog 代码,由于MyHDL 支持与Verilog 混合仿真,设计时的测试平台可以重用,仿真速度和设计效率大大提高。在完成基于Python软硬件设计并仿真正确之后,就可以回到进行传统的FPGA 设计流程,进行后续的下载,综合和测试工作。

  

[!--empirenews.page--]

 

  2 结果

  2.1 实验环境

  采用MyHDL 0.8,采用GTKWAVE 查看仿真波形,FPGA 器件采用Altera公司CycloneⅡ 2C35F672C6,编译综合采用Quartus 12.1sp1 webpack.

  2.2 仿真波形

  在设计过程中生成的VCD仿真波形可以随时采用GTKWAVE 查看,可以便于校验设计是否正确,最终完成的仿真波形如图3所示。

  

 

  2.3 测试数据,精度及误差

  由于整个过程采用Python设计,Python存在大量的软件包可以使用,平方根完成的测试数据结果如表1所示,采用基于Python 的绘图包matplotlib 绘制的当x 在[0.5,1.0]之间时的平方根误差如图4所示。

  

 

  

 

  2.4 综合结果

  在上面仿真校验符合设计要求后,将Python自动转换为Verilog描述,采用Quartus编译综合,并使用Model-sim仿真的波形如图5所示,与图3的Python环境下仿真波形相似,由此可见采用Python的软硬件协同设计方法能有效地进行FPGA 设计。综合后FPGA 资源使用情况:LE共1 506个,寄存器64个,嵌入式9位硬件乘法器10个。

  

 

  3 结论

  本文采用基于Python的扩展包MyHDL的软硬件协同设计方法,在FPGA 上完成了定点平方根算法,设计仿真过程仅使用Python语言,所以仿真校验和传统的设计方法相比效率更高,仿真速度也更快,另外此方法还可以方便,有效地将一个软件算法快速地转换为其相应的硬件实现,从而完成软硬件系统协同设计。

  现代系统的算法越来越复杂,传统的软硬件设计方法越来越不适应市场对设计的要求,采用Python进行系统设计,仿真和校验的速度会大大地提高,也能够自动将算法转换为对应的硬件实现,所以采用Python来进行软硬件协同设计的产品能更快地进入市场,并且随着设计复杂性的进一步增强和这种设计方法本身的发展和完善,基于Python的软硬件协同设计方法将会有更加广阔的应用前景。

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭