0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用Python语言在FPGA上实现定点平方根算法的硬件系统协同设计

电子设计 作者:电子设计 2018-11-14 08:02 次阅读

引言

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)所示:

采用Python语言在FPGA上实现定点平方根算法的硬件系统协同设计

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

采用Python语言在FPGA上实现定点平方根算法的硬件系统协同设计

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

采用Python语言在FPGA上实现定点平方根算法的硬件系统协同设计

1.3 Python软硬件协同设计

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

采用Python语言在FPGA上实现定点平方根算法的硬件系统协同设计

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所示。

采用Python语言在FPGA上实现定点平方根算法的硬件系统协同设计

采用Python语言在FPGA上实现定点平方根算法的硬件系统协同设计

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的软硬件协同设计方法将会有更加广阔的应用前景。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1600

    文章

    21281

    浏览量

    592852
  • 可编程
    +关注

    关注

    2

    文章

    756

    浏览量

    39093
  • 编程语言
    +关注

    关注

    9

    文章

    1877

    浏览量

    33011
收藏 人收藏

    评论

    相关推荐

    如何打印浮动阀以及平方根平方根函数?

    如何打印浮动阀以及平方根平方根函数。是否有任何库来实现这些功能。
    发表于 09-20 12:45

    MCU裸系统下快速平方根实现相关资料推荐

    个快速平方根。以下是一个典型的逼近法实现的快速平方根函数,只用了整数乘法就可以做到32位范围内的整数平方根计算,并且计算中边界值始终按照二分法定位可以显著缩短查找逼近时间,
    发表于 12-08 08:26

    硬件求解平方根运算的IP核,AHDL语言源代码

    硬件求解平方根的IP# 进行平方根运算的IP核,由AHDL语言写成,可在MaxplusII和QuartusII中使用,源代码加密。# 使用方法# 1.将以下FEATURE行添加到Max
    发表于 06-14 09:36 28次下载

    平方根电路

    平方根电路
    发表于 02-23 21:56 1442次阅读
    <b class='flag-5'>平方根</b>电路

    宽动态范围的平方根电路

    宽动态范围的平方根电路
    发表于 04-09 10:26 433次阅读
    宽动态范围的<b class='flag-5'>平方根</b>电路

    平方根运算电路

    平方根运算电路
    发表于 04-09 10:33 1611次阅读
    <b class='flag-5'>平方根</b>运算电路

    采用ICL8013的平方根运算电路图

    采用ICL8013的平方根运算电路图
    发表于 07-17 11:23 1079次阅读
    <b class='flag-5'>采用</b>ICL8013的<b class='flag-5'>平方根</b>运算电路图

    平方根运算电路图

    平方根运算电路图
    发表于 07-17 11:32 508次阅读
    <b class='flag-5'>平方根</b>运算电路图

    采用ICL8013的平方根运算电路图

    采用ICL8013的平方根运算电路图
    发表于 07-20 12:07 875次阅读
    <b class='flag-5'>采用</b>ICL8013的<b class='flag-5'>平方根</b>运算电路图

    平方根运算电路图

    平方根运算电路图
    发表于 07-20 12:15 1953次阅读
    <b class='flag-5'>平方根</b>运算电路图

    基于强跟踪的平方根UKF的卫星姿态确定算法_王松艳

    基于强跟踪的平方根UKF的卫星姿态确定算法_王松艳
    发表于 01-07 15:17 1次下载

    单片机C语言的求平方根怎么实现

    C语言中要求平方根,可以在头文件中加入#include .然后调用sqrt(n);函数即可。但在单片机中调用此函数无疑会耗费大量资源和时间,是极不合适的。
    发表于 07-13 09:36 3243次阅读
    单片机C<b class='flag-5'>语言</b>的求<b class='flag-5'>平方根</b>怎么<b class='flag-5'>实现</b>

    采用MOSFET器件实现模拟平方根计算装置的设计

    在仪表和测量系统中广泛使用了平方根计算电路,例如:用于计算任意波形rms (均方根)等任务。因此,设计师需要有一种高效的模拟平方根计算装置。由于制造商常
    发表于 08-12 14:35 1208次阅读
    <b class='flag-5'>采用</b>MOSFET器件<b class='flag-5'>实现</b>模拟<b class='flag-5'>平方根</b>计算装置的设计

    MCU裸系统下快速平方根实现

    一个快速平方根。以下是一个典型的逼近法实现的快速平方根函数,只用了整数乘法就可以做到32位范围内的整数平方根计算,并且计算中边界值始终按照二分法定位可以显著缩短查找逼近时间,
    发表于 11-25 19:06 8次下载
    MCU裸<b class='flag-5'>系统</b>下快速<b class='flag-5'>平方根</b><b class='flag-5'>实现</b>

    如何使用Java来求解平方根

    在编程时,会遇到求平方根的问题,本次问题讲到如何使用Java来求解平方根
    的头像 发表于 03-03 09:39 884次阅读
    如何使用Java来求解<b class='flag-5'>平方根</b>