【经验】如何在FPGA上实现低成本开根号运算?

2020-07-22 智多晶
FPGA,西安智多晶 FPGA,西安智多晶 FPGA,西安智多晶 FPGA,西安智多晶

开根号运算是科学计算和工程应用中基本而重要的运算之一,在QuartusII和ISE开发软件中,都集成了开根号的ip核,这些底层源码对于用户来说是不可见的,那么如何在西安智多晶FPGA中实现开根号运算,是本文要探讨的课题。


开根号运算介绍

开根号运算属于非线性运算,无法用解析的方程来求解,常利用迭代法来逐次逼近求解,常用的开方算法有牛顿-莱福森算法、逐次逼近算法和非冗余开方算法等。这几种算法,单纯从FPGA应用的角度来看,逐次逼近算法是最适合在FPGA上实现。利用FPGA的流水线结构,可以实现全并行数据吞吐的开方运算,其资源开销较大。然而在很多应用场合,开方运算并不需要实时的吞吐,有些应用仅仅需要在某一个时刻对一个数值进行开根号,取其结果用在另一个物理量上的运算。因此这里我们将实现一种非实时数据吞吐的开根号运算,在输入有效使能拉高后,数据进入开根号模块,若干周期后,输出使能拉高,并输出开方运算结果,资源占用率低,适合大多数应用场景。


逐次逼近算法原理

逐次逼近算法简单些讲,就是假定一个输出暂存值,先取MSB为‘1’,其余为‘0’。用其平方值与被开方数比较,如果前者大于后者,则把MSB置零,取次高位为‘1’,再进行比较;若前者小于后者,则次高位不变,次次高位再取‘1’,再进行比较。以此类推,直到最后LSB也判别完毕。这样对于一个n bit输入的数据,理论需要判断n/2次。这里我们进行了改进,首先把输入数据的符号位去除,再进行迭代,这样可以缩短迭代次数。但是有一点需要注意,平方运算需要用到一个乘法器,为了让系统时钟能跑高,乘法运算总的打3级流水。因此迭代次数要算上乘法带来的延迟,对于非实时吞吐的应用,迭代次数的额外开销不会对整体应用带来多大的影响。迭代流程如下图所示:

程序Modelsim仿真

根据上述迭代过程,编写sqrt_serial.v程序,设计输入待开方数据为36bit位宽,输出数据18bit位宽,余数19bit:

接下来先在Modelsim里进行仿真,先编写相应的testbench,部分测试程序:

//--------------------------------------------------------------------------------

 

         sqrt_serial  sqrt_serial

         (

                   .clk             (        clk                        ),

                   .rst             (        rst                        ),

                   .i_vaild       (        i_vaild                 ),

                   .i_data                 (        i_data                  ),

                   .o_vaild      (        o_vaild                ),

                   .o_data                (        o_data                 ),

                  .r_data                (        r_data                 )

         );

//--------------------------------------------------------------------------------

         initial begin

                   // Initialize Inputs

                   clk = 0;

                   rst = 1;

                   // Wait 100 ns for global reset to finish

                   #100;

        rst = 0;                 

 

         end

   

         always #5 clk  = ~ clk ;        

         reg    [7:0]  cnt ; 

         reg x;

//--------------------------------------------------------------------------------

         always@(posedge       clk or posedge     rst)

                   begin

                            if(rst)

                                     begin

                                               i_vaild <= 0;

                                               i_data <= 0;

                                               cnt <= 0;

                                               x <= 1'b0;

                                     end

                            else if(!x)

                                     begin

                                               i_vaild <= 1;

                                               i_data <= i_data + 1'b1;

                                               cnt <= 0;

                                               x <= 1'b1;

                                     end

                            else if(x)

                                     begin

                                               if (o_vaild)

                                                        begin x <= 1'b0; end

                                               i_vaild <= 0;                                             

                                               cnt <= cnt + 1'b1;

                                     end

                   end

//--------------------------------------------------------------------------------

在testbench里,让i_data从1开始,sqrt计算完毕就让i_data加1再输入,观察开方运算的结果,仿真之后验证了设计的可行性:

资源消耗

在海麟软件里编译,其资源消耗小,不过需要额外消耗一个乘法器:


授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 8

本文由天安云谷门面担当转载自智多晶,原文标题为:如何在FPGA上实现低成本开根号运算,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

评论

   |   

提交评论

全部评论(8

  • 伟大大 Lv5. 技术专家 2020-11-18
    学习
  • 人生浮云 Lv6. 高级专家 2020-11-05
    学习了
  • 本尼 Lv7. 资深专家 2020-09-17
    不错,学习
  • 用户43004597 Lv7. 资深专家 2020-09-16
    谢谢分享
  • Jackie0078 Lv8. 研究员 2020-09-14
    谢谢分享
  • 男儿当自强 Lv8. 研究员 2020-09-12
    学习
  • 用户56369433 Lv5. 技术专家 2020-09-11
    分享
  • maomao Lv8. 研究员 2020-07-22
    分享了~~~
没有更多评论了

相关推荐

【经验】西安智多晶5000系列FPGA内嵌MCU调试测试指南

西安智多晶推出的Seal 5000 FPGA SA5Z-30系列内部合封Cortex M3硬核,最高主频可达200Mhz,32KB数据RAM和128KB指令RAM。本文针对FPGA内嵌M3硬核的使用做简洁的开发过程。

设计经验    发布时间 : 2022-10-10

【经验】智多晶FPGA上实现LTE削峰算法PC-CFR

CFR算法是一种直接在数字域上面处理的方法,对于超出设定门限值的信号,直接在数字域上进行处理和消除。目前CFR算法有PW-CFR、NS-CFR和PC-CFR,常用的还是PC-CFR,其削峰能力最佳,本文就针对PC-CFR算法,在智多晶AD9365射频开发板上进行测试和实现。

设计经验    发布时间 : 2020-09-19

【经验】解析智多晶合封系列FPGA中DDR2的应用

合封系列FPGA可以应用在需要大量缓存数据的场合,比如工业数据采集卡、视频处理应用以及无线通信中的数据采集板,如果各位读者朋友们有需要用到FPGA+DDR2架构的,可以联系智多晶,智多晶会提供完整的DDR2 Control IP,甚至亲手为用户写好应用层部分的程序,并为用户调试好。

设计经验    发布时间 : 2021-05-26

【选型】西安智多晶(XIST)FPGA/CPLD可编程逻辑器件选型指南

目录- Seagull1000/Sealion2000/Sealion合封系列   

型号- SL2D-25E,SEALION2000,SL2E-5E,SEAGULL1064C,SEAGULL1000,SG1128V,SEAGULL1256C,SEAGULL1064V,SG1064V,SEAL 5000,SG1256V,SEAGULL1256V,SL2-12E,SL2S-25E,SEAGULL 1000,SG1128C,SG1064C,SL2-25E,SL2S-12E,SL2-7E,SL2-5E,SEAGULL1128C,SL2E-7V,SEALION 2000,SG1256C,SEAGULL1128V

选型指南  -  智多晶 PDF 中文 下载

【选型】国产FPGA SL2-25E-8U324替代XC6SLX16 CSG324用于工业伺服控制器,有效应对交期问题

客户在工业伺服控制器中用到一款Xilinx FPGA,但因为交期问题需要国产化替代,使用型号是XC6SLX25-CSG324,主要用于做逻辑控制和与MCU交互数据、进行数据处理,给客户推荐了西安智多晶SL2-25E-8U324,可以兼容替代。

器件选型    发布时间 : 2021-09-01

“2024年智多晶FPGA技术研讨会.深圳站”圆满结束,智多晶展示多款FPGA芯片新产品、多项新应用方案

8月28日,“2024年智多晶FPGA技术研讨会.深圳站”圆满收官。智多晶的产品团队对公司的最新产品进行了全面介绍,且首次公开其最新研SA5T-366、SA5T-200、SA5T-100、SA5Z-30等FPGA产品,以及产品在通信、汽车电子、消费电子等多个领域的创新应用解决方案,展示了智多晶在微电子领域的研发实力和产品优势。

厂牌及品类    发布时间 : 2024-09-13

西安智多晶发布软件无线电评估板,基于28nm FPGA芯片SA5Z-30并搭载ECR8661 RF收发器助力研发

​为了让无线通信客户更方便评估智多晶FPGA芯片以及国产RF Transceiver,西安智多晶联合智锐星科技为客户打造了一个专业的软件无线电(SDR)评估板,可用于客户前期的项目预研。评估板的核心器件是28nm FPGA芯片SA5Z-30。

厂牌及品类    发布时间 : 2021-11-08

SL2-12E FPGA 配置用户指南

型号- SL2S-12E 系列,SL2S-12E,SL2S-12-8EA176C,SL2-12E,SL2-12,SL2-12E 系列

用户指南  -  智多晶  - Version 1.1  - 20220112 PDF 中文 下载

【应用】国产海狮系列FPGA SL2E-5E用于扩展外设接口,集成flash,工作频率高达300MHz

西安智多晶的SL2E-5E是一款集成了5K逻辑单元的小规模FPGA,但是比CPLD容量更大,能实现更多的逻辑设计,同时该FPGA内部集成了Flash,不需要再外接配置用的Flash,简化了电路设计。

应用方案    发布时间 : 2022-03-08

SL2-12E FPGA 器件概述

型号- SL2E-12E-N96,SL2-12E-N96,SL2E-12E-F256,SL2-12V,SL2-12E,SL2-12E-F256,SL2S-12E-8F256C

商品及供应商介绍  -  智多晶  - Version 1.5  - 20240130 PDF 中文 下载

Seal(海豹)SA5Z-30 FPGA 产品手册

型号- 海豹5000系列,SA5Z-30-D2,SA5Z-30-ES,SA5Z-30-D0-UBGA324,SA5Z-30-D0,SA5Z-30-D1,SA5Z-30-D1-UBGA213,SA5Z-30-D2-8U213C5,SA5Z-30,SA5Z-30-D1-8U213C4,SA5Z-30-D2-8U213C6,SA5Z-30-D2-UBGA213,SEAL 5000系列,SA5Z-100-D1-8U324C,SA5Z-30-D0-8U324C6,SA5Z-30 系列,SA5Z-30-D1-8U213C,SA5Z-30-D2-8U213C

数据手册  -  智多晶  - 版本1.2  - 2021/07 PDF 中文 下载 查看更多版本

SA5Z-30 FPGA 器件概述

型号- SA5Z-30,SA5Z-30-D1-UBGA213,SA5Z-100-D0-8U324C,SA5Z-30 系列,SA5Z-30-D2-UBGA256,SA5Z-30-D2,SA5Z-30-D0-UBGA324,SA5Z-30-D0,SA5Z-30-D1

商品及供应商介绍  -  智多晶  - Version 1.11  - 20240131 PDF 中文 下载

Sealion(海狮)SL2E-7E/V FPGA产品手册

型号- SL2E-7V-UBGA400,SEALION 2000 系列,SL2E-7V,SEALION 2000,SL2E-7V-E144,SL2,SL2E-7E,SEALION SL2E-7E,SEALION SL2E-7V,SL2S-12E-8F256C,SL2E-7V-U256

数据手册  -  智多晶  - 版本1.1  - 2021.11 PDF 中文 下载 查看更多版本

【IC】智多晶28nm FPGA家族SEAL5000系列新发SA5Z-100,采用低功耗28nm@LUT6工艺

2022年的下半年,西安智多晶28nm SEAL5000家族系列喜迎重量级新成员SA5Z-100,采用先进低功耗的28nm@LUT6工艺,集成高达8个通道13.1Gbps的高速SerDes,支持PCIe2.0 x4以及HDMI2.1等接口协议。

新产品    发布时间 : 2022-12-19

展开更多

电子商城

查看更多

只看有货

品牌:智多晶

品类:FPGA

价格:¥72.0000

现货: 5,192

品牌:智多晶

品类:FPGA

价格:¥64.0000

现货: 5,005

品牌:智多晶

品类:FPGA

价格:¥48.0000

现货: 5,001

品牌:智多晶

品类:FPGA

价格:

现货: 5,000

品牌:智多晶

品类:FPGA

价格:¥118.0000

现货: 3,018

品牌:智多晶

品类:FPGA

价格:¥184.0000

现货: 3,005

品牌:智多晶

品类:FPGA

价格:¥118.0000

现货: 3,000

品牌:智多晶

品类:FPGA

价格:¥164.0000

现货: 3,000

品牌:智多晶

品类:FPGA

价格:¥240.0000

现货: 3,000

品牌:智多晶

品类:FPGA

价格:¥52.0000

现货: 2,331

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:LATTICE

品类:嵌入式-FPGA(现场科编程门阵列)

价格:¥15.0000

现货:420,988

品牌:LATTICE

品类:可编辑逻辑集成电路

价格:¥25.0000

现货:13,385

品牌:XILINX

品类:FPGA芯片

价格:¥109.3800

现货:6,594

品牌:TI

品类:集成电路

价格:¥1.2674

现货:1,960

品牌:Actel

品类:FPGA

价格:¥162.0262

现货:650

品牌:Altera

品类:可编程逻辑器件(CPLD/FPGA)

价格:¥560.0000

现货:360

品牌:高云

品类:FPGA芯片

价格:¥45.0000

现货:200

品牌:INTEL

品类:ASIC

价格:¥1,265.2800

现货:130

品牌:Actel

品类:FPGA

价格:¥22.0356

现货:116

品牌:Actel

品类:FPGA

价格:¥84.9018

现货:95

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面