【经验】如何在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再输入,观察开方运算的结果,仿真之后验证了设计的可行性:
资源消耗
在海麟软件里编译,其资源消耗小,不过需要额外消耗一个乘法器:
- |
- +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硬核的使用做简洁的开发过程。
【经验】智多晶FPGA上实现LTE削峰算法PC-CFR
CFR算法是一种直接在数字域上面处理的方法,对于超出设定门限值的信号,直接在数字域上进行处理和消除。目前CFR算法有PW-CFR、NS-CFR和PC-CFR,常用的还是PC-CFR,其削峰能力最佳,本文就针对PC-CFR算法,在智多晶AD9365射频开发板上进行测试和实现。
【经验】解析智多晶合封系列FPGA中DDR2的应用
合封系列FPGA可以应用在需要大量缓存数据的场合,比如工业数据采集卡、视频处理应用以及无线通信中的数据采集板,如果各位读者朋友们有需要用到FPGA+DDR2架构的,可以联系智多晶,智多晶会提供完整的DDR2 Control IP,甚至亲手为用户写好应用层部分的程序,并为用户调试好。
【选型】国产FPGA SL2-25E-8U324替代XC6SLX16 CSG324用于工业伺服控制器,有效应对交期问题
客户在工业伺服控制器中用到一款Xilinx FPGA,但因为交期问题需要国产化替代,使用型号是XC6SLX25-CSG324,主要用于做逻辑控制和与MCU交互数据、进行数据处理,给客户推荐了西安智多晶SL2-25E-8U324,可以兼容替代。
【应用】国产海狮系列FPGA SL2E-5E用于扩展外设接口,集成flash,工作频率高达300MHz
西安智多晶的SL2E-5E是一款集成了5K逻辑单元的小规模FPGA,但是比CPLD容量更大,能实现更多的逻辑设计,同时该FPGA内部集成了Flash,不需要再外接配置用的Flash,简化了电路设计。
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
SA5Z-30 FPGA 器件概述
型号- SA5Z-30-D3-U256,SA5Z-30,SA5Z-30-D0-U324,SA5Z-30-D1-U213,SA5Z-30-D0-U324C,SA5Z-30-D2-U256,SA5Z-30 系列,SA5Z-30-D2,SA5Z-30-D3,SA5Z-30-D0,SA5Z-30-D1
【IC】智多晶28nm FPGA家族SEAL5000系列新发SA5Z-100,采用低功耗28nm@LUT6工艺
2022年的下半年,西安智多晶28nm SEAL5000家族系列喜迎重量级新成员SA5Z-100,采用先进低功耗的28nm@LUT6工艺,集成高达8个通道13.1Gbps的高速SerDes,支持PCIe2.0 x4以及HDMI2.1等接口协议。
【应用】基于智多晶Sealion 2000系列FPGA的工业控制解决方案,具有低功耗优势
智多晶Sealion 2000系列FPGA基于低功耗工艺设计,旨在满足低成本高性价比客户的需求,使系统设计师在降低成本的同时又能够满足不断增长的应用要求,在低成本、低功耗FPGA市场处于领导地位。
SA5Z-50 FPGA 器件概述
型号- SA5Z-50-D0-7F484,SA5Z-50,SA5Z-50-D0-U324,SA5Z-50-D0-F484,SA5Z-50-D0-7U196,SA5Z-50-D0-U196,SA5Z-50-D0-8U324C,SA5Z-50-D0,SA5Z-50 系列,SA5Z-50-D1
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
电子商城
现货市场
登录 | 立即注册
提交评论