FFT HDL Optimized模块HDL综合代码生成及与Xilinx xfft IP MEX接口精度详细比较
Parameters:
具体步骤:
Simulink 整体框图例如图所示:(for example)
subsys 子系统框图如图所示:

其中 valid 给高电平,输入有效,而 data 通过 Sine Wave 模块进行输入,其中 fft_input_s、fft_hdl_in、fft_hdl_out 均为 To Workspace 模块(Savemode 选择 array),convert 模块转换输入的数据形式:32 位 1D array of complex data 浮点->32 为 fixdt(1,32,14),To Sample 模块改变输出信号的采样模式。重要模块的参数设置如图:
Sine Wave 模块

FFT HDL Optimized 模块


(8)在 HDL Workflow Advisor 窗口中,在 Set Target > Set Target Device and Synthesis Tool step, for Synthesis tool, select Xilinx Vivado and click Run This Task;

(19)打开 MATLAB,在 MATLAB 命令窗口跳转到xfft_v9_1_bitacc_cmodel_nt64.zip 压缩包解压文件目录下;
1 generics.C_NFFT_MAX = 13; %fft length = 8192
2 generics.C_ARCH = 2; %Burst Radix 2
3 generics.C_HAS_NFFT = 0;
4 generics.C_USE_FLT_PT = 1; %浮点
5 generics.C_INPUT_WIDTH = 32; % Must be 32 if C_USE_FLT_PT = 1
6 generics.C_TWIDDLE_WIDTH = 24; % Must be 24 or 25 if C_USE_FLT_PT =1
7 generics.C_HAS_SCALING = 0; % Set to 0 if C_USE_FLT_PT = 1
8 generics.C_HAS_BFP = 0; % Set to 0 if C_USE_FLT_PT = 1
9 generics.C_HAS_ROUNDING = 0; % Set to 0 if C_USE_FLT_PT = 1
1 % % Check xk_re and xk_im data: Only xk_re[0] should be non-zero
2 % if output(1) ~= expected_xk_re_0
3 % if channels > 1
4 % error('ERROR: Channel %d xk_re[0] is incorrect:
5 expected %f + j%f, actual %f +
6 j%f\n',channel,real(expected_xk_re_0),imag(expected_xk_re_0),real(out
7 put(1)),imag(output(1)))
8 % else
9 % error('ERROR: xk_re[0] is incorrect: expected %f + j%f,
10 actual %f +
11 j%f\n',real(expected_xk_re_0),imag(expected_xk_re_0),real(output(1)),
12 imag(output(1)))
13 % end
14 % end
15 %
16 % % Check all other sample values are zero
17 % for n = 2:samples
18 % if output(n) ~= 0 + 0j
19 % if channel > 1
20 % error('ERROR: Channel %d output sample %d is incorrect:
21 expected %f +j%f, actual %f +
22 j%f\n',channel,n,0.0,0.0,real(output(1)),imag(output(1)))
23 % else
24 % error('ERROR: output sample %d is incorrect: expected %f
25 +j%f, actual %f + j%f\n',n,0.0,0.0,real(output(1)),imag(output(1)))
26 % end
27 % end
28 % end
测试说明:

测试一


测试二

测试三

测试四

测试五

Xilinx FFT MEX 函数的接口的运算方式设置为浮点测试, fixdt(1,32,23),与 IEEE-754 single-precision 格式一致,小数部分为 23 位二进制精度,

Xilinx FFT MEX 函 数 的 接 口 的 运 算 方 式 设 置 为 浮 点 测 试 ,fixdt(1,32,23),与 IEEE-754 single-precision 格式一致,小数部分为 23位二进制精度,结构改为 Streaming Radix 2^2 ,此为测试五第三个 8192点

Xilinx FFT MEX 函 数 的 接 口 的 运 算 方 式 设 置 为 定 点 测 试 ,fixdt(1,32,23),与 IEEE-754 single-precision 格式一致,小数部分为 23位二进制精度,且 run_xfft_v9_1_mex.m 文件中 generics.C_TWIDDLE_WIDTH设置为 26;结构改为 Streaming Radix 2^2 ,此为测试五第三个 8192 点

测试六



测试七



测试八



测试结果说明:
(1)测试一

通过测试一结果图可以看出其运算误差有点大,经过后面测试可以发现其主要原因是因为convert模块的fixdt(1,32,x)中x的影响,测试二及以后的测试均与 IEEE-754 single-precision 格式一致,小数部分为23位二进制精度,即fixdt(1,32,23)。
(2)测试二与测试三

在修改前面的浮点转定点参数后,FFT HDL Optimized 模块的运算结果变得精确了,误差较小,差值大概在±2×10-4,diff/reference 大概在 10-5 左右,而为什么选择 0.9 幅值,是因为在做定点运算的时候,Sine 模块幅值 1.0 在输入至 Xilinx FFT MEX Function 在运算中会产生溢出,经测试,1.0 与 0.9 产生的结果基本一致。
(3)测试四

测试四是与测试三对应的,除了修改了 MEX 定点参数,其他均没有变化,进行定点测试。在定点测试结果中,差值大概在±8×10-6,diff/reference 大概在 10-7左右,从结果说明在定点测试中,FFT HDL Optimized 模块计算误差小。
(4)测试五

测试五相比测试一至测试四,最大差别是修改了 FFT HDL Optimized 模块的内部结构即 Streaming Radix 2^2,因为在 Burst Radix 2 结构中,运行时间慢,且在进行第一个 8192 点之后处理之后,后续的 8192 点间隔很大,难以对 FFT HDL Optimized模块与 MEX 进行不同情况下进行测试(两种结构详细区别需看 doc 文档)。在测试五Streaming 情况下,选定了后续三个 8192 点进行测试对比,来说明精度情况。在三轮结果测试中,差值大概均在±2×10-4,diff/reference 大概在 10-5 左右,误差较小。

在三个 8192 的定点测试中,差值大概在±8×10-6,diff/reference 大概在 10-7左右,误差小。
(5)测试六

测试六过程中,Sine 模块直接输出定点 fixdt(1,32,23)数据,MEX 进行定点测试。在测试六 Streaming 情况下,选定了后续三个 8192 点进行测试对比,进一步说明定点精度。定点测试结果中,差值大概在±8×10-6,diff/reference 大概在 10-7 左右,从结果说明在定点测试中,FFT HDL Optimized 模块计算误差小。
(6)测试七

测试七过程中,与测试六相比,改了 FFT HDL Optimized 模块的 data type 模式,即 Rounding Method = Ceiling 模式,Sine 模块直接输出定点 fixdt(1,32,23)数据,MEX 进行定点测试。在测试七 Streaming 情况下,也选定了后续三个 8192 点进行测试对比,来说明 FFT HDL Optimized 模块的不同 data type 模式下的精度区别。定点测试结果中,差值大概在±8×10-6,diff/reference 大概在 10-7 左右,从结果说明在定点测试中, FFT HDL Optimized 模块的不同 data type 模式下的精度区别不大。
(7)测试八

相比测试五而言,在FFT HDL Optimized模块输出加了定点转浮点convert模块。在测试八Streaming情况下,选定了后续三个8192点进行测试对比,来说明精度情况。在三轮结果测试中,差值大概均在±2×10-4,diff/reference大概在10-5左右,误差较小,与测试五结果基本一致,也说明输出后加的convert定点转浮点模块造成的误差影响较小。
FFT HDL Optimized模块HDL综合代码生成及与Xilinx xfft IP MEX接口精度详细比较的更多相关文章
- HDL代码风格建议(1)使用示例和IP
Recommended HDL Coding Styles HDL coding styles can have a significant effect on the quality of resu ...
- paper:基于verilog HDL 的高速可综合FSM设计
1.寄存器输出型状态机 VS 组合逻辑输出型状态机 2.状态编码方法 这块讲的不好,也比较少. 3.系统设计中模块划分的指导性原则
- 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解
源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一.介绍 各种* _by_lua,* _by_lua_block和* _by_lua_file配置指令用 ...
- Spring py登陆模块(包含 记录登陆时间,记录ip,增加积分)
嘛基于最近的复习准备写个关于spring登陆模块的小程序 虽然小但是五脏俱全呐 话不多说让我来介绍一下今天的登陆程序. 这些是 基于Spring JDBC 的持久层实现 基于Spring 声明事物的业 ...
- Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解
源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一.介绍 各种* _by_lua,* _by_lua_block和* _by_lua_file配置指令用 ...
- 第6课:datetime模块、操作数据库、__name__、redis、mock接口
1. datetime模块 import datetime print(datetime.datetime.today()) # 当前时间 2018-01-23 17:22:35.739667 pr ...
- 2020年,最新NGINX的ngx_http_geoip2模块以精准禁止特定国家或者地区IP访问
1.0 geoip2核心识别库 安装geoip2 lib步骤: cd /usr/local/src .tar.gz wget https://github.com/maxmind/libmaxmind ...
- 代码生成java连接数据库的所需代码(超详细)
开始学习: round 1:(一开始学习当然还是要一步一步学习的啦,哪有什么一步登天!!!) a.准备工作:1.eclipse,mysql(这两个软件肯定要的啦,不然学什么把它们连接起来) 2.加载驱 ...
- 使用requests模块进行封装,帮你如何处理restful类型的接口
import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) c ...
随机推荐
- Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle(数学/双指针)
题目链接:https://codeforces.com/contest/1366/problem/B 题意 大小为 $n$ 的数组 $a$,除了 $a_x = 1$,其余 $a_i = 0$,依次给出 ...
- 【hdu 3579】Hello Kiki(数论--拓展欧几里德 求解同余方程组)
题意:Kiki 有 X 个硬币,已知 N 组这样的信息:X%x=Ai , X/x=Mi (x未知).问满足这些条件的最小的硬币数,也就是最小的正整数 X. 解法:转化一下题意就是 拓展欧几里德求解同余 ...
- Codeforces Round #345 (Div. 1) C. Table Compression (并查集)
Little Petya is now fond of data compression algorithms. He has already studied gz, bz, zip algorith ...
- Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence (数学,差分)
题意:有一长度为\(n\)的数组,求一子序列,要求子序列中两两差的绝对值最大,并且子序列尽可能短. 题解:将数组看成坐标轴上的点,其实就是求每个单调区间的端点,用差分数组来判断单调性. 代码: #in ...
- Redis-sentinel 哨兵(HA)
Sentinel 介绍 Redis-Sentinel 是 Redis 官方推荐的高可用性(HA)解决方案,当用 Redis 做 Master-slave 的高可用方案时,假如Master 宕机了,Re ...
- Kubernets二进制安装(5)之私有仓库harbor搭建
在IP地址为192.168.80.50,机器名为mfyxw50上搭建私有仓库harbor harbor下载地址: harbor下载连接地址:https://github.com/goharbor/ha ...
- 【非原创】codeforces 1070C Cloud Computing 【线段树&树状数组】
题目:戳这里 学习博客:戳这里 题意:有很多个活动,每个活动有持续天数,每个活动会在每天提供C个CPU每个CPU价格为P,问需要工作N天,每天需要K个CPU的最少花费. 解题思路:遍历每一天,维护当前 ...
- 图解算法——KMP算法
KMP算法 解决的是包,含问题. Str1中是否包含str2,如果包含,则返回子串开始位置.否则返回-1. 示例1: Str1:abcd123def Str2:123d 暴力法: 从str1的第一个字 ...
- c# App.xaml
随着wpf自动创建的,是项目的起始点..Net先再App里找,找到了window然后开启window,项目真正的起始点是在App里. 这两个 (App 的xaml和cs文件)和MainWindow 的 ...
- Ubuntu pppoeconf失败
之前是通过sudo pppoeconf一路yes就可以连通有线网络(dsl和ethernet)的, 系统再次瘫痪后终于进入图形界面, 有线网络丢失, sudo pppoeconf也fail了, 其实加 ...