Vivado_Cordic IP核使用详解

news2024/12/25 13:14:53

本文介绍Vivado中CORDIC V6.0的使用方法。
参考资料:pg105

文章目录

  • IP核配置
  • CORDIC算法
  • Vector Rotation
    • Polar to Rectangular
  • Vector translation
  • Sin and Cos
  • Sinh and Cosh
  • ArcTan
  • ArcTanh
  • Square Root

IP核配置

Configuration Options选项卡在这里插入图片描述
Configuration Parameters:
Functional Selection:功能选择
在这里插入图片描述
Cordic IP核一共可以实现7种运算操作,上表分别是7种操作所对应的输入和输出端口,1表示该通道的子字段存在,0表示该子字段不存在。各通道的数据结构分别如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Architectural Configuration:体系结构配置
Parallel:并行,单周期数据吞吐量。
Word Serial:串行,多周期吞吐量。

Pipelining Mode:流水线模式
None:无流水线。
Optimal:最优,采用尽可能多的流水线阶段实现,而不使用任何额外的LUT。
Maximum:最大,在每次子迭代后使用流水线来实现。

Data Format:数据格式
SignedFraction:有符号小数,X和Y的输入输出默认表示为具有2位整数宽度的定点二进制补码。
UnsignedFraction:无符号小数,X和Y的输入输出表示为具有1位整数宽度的无符号定点数。仅适用于平方根功能配置。

Phase Format:相位格式
Radians:弧度,表示为一个整数宽度为3位的二进制补码,单位为弧度。
Scaled Radians:归一化弧度,表示为一个整数宽度为3位的二进制补码,单位为 π \pi π弧度。
XQN格式的数字是一个1+X+N位二进制补码;符号位后接X个整数位和N位小数位,表示范围为 − 2 X -2^X 2X 2 X − 2 ( − N ) 2^X-2^{(-N)} 2X2(N)
对于Radians,PHASE_IN的范围是 [ − π , π ] [-\pi,\pi] [π,π],例如使用Fix11_8格式时,有
01100100100 = > 011.00100100 = > + 3.14 10011011100 = > 100.11011100 = > − 3.14 \begin{array}{l} 01100100100=>011.00100100=>+3.14\\ 10011011100=>100.11011100=>-3.14 \end{array} 01100100100=>011.00100100=>+3.1410011011100=>100.11011100=>3.14
对于Scaled Radians,PHASE_IN的范围是 [ − 1 , 1 ] [-1,1] [1,1],例如使用Fix10_7格式时,有
0010000000 = > 001.0000000 = > + 1.0 1110000000 = > 111.0000000 = > − 1.0 \begin{array}{l} 0010000000=>001.0000000=>+1.0\\ 1110000000=>111.0000000=>-1.0 \end{array} 0010000000=>001.0000000=>+1.01110000000=>111.0000000=>1.0

Input/Output Options:
Input Width:输入数据宽度,范围8-48。
Output Width:输出数据宽度,范围8-48。
Round Mode:一共四种,分别是Truncate截断、Positive Infinity向上取整(相当于 floor ( x + 0.5 ) \text{floor}(x+0.5) floor(x+0.5)、Pos Neg Infinity四舍五入(相当于 round ( x ) \text{round}(x) round(x)、Nearest Even最接近偶数取整。

Advanced Configuration Parameters:
Iterations: 迭代次数。当Iterations设置为零时,执行的迭代次数由输出所需的精度决定。默认情况下,设置为零,因此迭代次数将自动确定。在这种情况下,对于除平方根以外的所有运算,设置的基本迭代次数是输出宽度。
Precision: 精度。当Precision设置为零时,内部精度将根据输出所需的精度和内部迭代次数自动确定。默认情况下,设置为零,因此会自动确定内部精度。
当Precision设置为(Input_Width+Output_Width+log2(Output_Width))时,无论输入幅度如何,输出相位都精确到全输出宽度。
Coarse Rotation: 粗略旋转。如果禁用了Coarse Rotation,则输入/输出范围仅限于第一象限(-Pi/4到+Pi/4)。标准CORDIC算法在第一象限上运行。粗略旋转通过将输入样本旋转到第一象限并将输出样本反向旋转回适当象限,将CORDIC操作范围扩展到完整的圆。
Compensation Scaling: 补充缩放。CORDIC幅度缩放影响矢量旋转和矢量平移功能配置。它不影响Sin、Cos、Sinh、Cosh、ArcTan、ArcTanh和平方根函数配置。对于后一种配置,补充缩放设置为No Scale Compensation。一共有四种设置,分别是No Scale Compensation(输出X和Y不进行补偿,而是按比例 Z i Z_i Zi生成)、LUT Based(输出X和Y使用基于LUT的恒定系数乘法器进行补偿)、BRAM(输出X和Y使用基于块RAM的恒定系数乘法器进行补偿)、Embedded Multiplier(输出X和Y使用DSP Slice进行补偿)。

AXI4-Stream Options:

该选项卡用于配置AXI4接口,不再详细介绍。
在这里插入图片描述

CORDIC算法

CORDIC算法将矢量旋转通过一系列连续的较小旋转来执行,每次执行的角度为 atan ( 2 − i ) \text {atan}(2^{-i}) atan(2i),第 i i i次迭代的表达式为
x i + 1 = x i − α i ⋅ y i ⋅ 2 − i y i + 1 = y i + α i ⋅ x i ⋅ 2 − i θ i + 1 = θ i + α i ⋅ atan ⁡ ( 2 − i ) \begin{array}{l} x_{i+1}=x_{i}-\alpha_{i} \cdot y_{i} \cdot 2^{-i} \\ y_{i+1}=y_{i}+\alpha_{i} \cdot x_{i} \cdot 2^{-i}\\ \theta_{i+1}=\theta_{i}+\alpha_{i} \cdot \operatorname{atan}\left(2^{-i}\right) \end{array} xi+1=xiαiyi2iyi+1=yi+αixi2iθi+1=θi+αiatan(2i)
其中, α i = ( + or − ) 1 \alpha_i = (+ \text{or} -)1 αi=(+or)1,为旋转方向。

Vector Rotation

矢量旋转使矢量 ( X , Y ) (X,Y) (X,Y)旋转一个角度,产生一个新的矢量 ( X ′ , Y ′ ) (X^{'},Y^{'}) (X,Y)
在这里插入图片描述
输入输出信号如下表。
在这里插入图片描述
X ′ = Z i × ( cos ⁡ ( θ ) × X − sin ⁡ ( θ ) × Y ) Y ′ = Z i × ( cos ⁡ ( θ ) × Y + sin ⁡ ( θ ) × X ) \begin{array}{l} X^{\prime}=Z_{i} \times(\cos (\theta) \times X-\sin (\theta) \times Y) \\ Y^{\prime}=Z_{i} \times(\cos (\theta) \times Y+\sin (\theta) \times X) \end{array} X=Zi×(cos(θ)×Xsin(θ)×Y)Y=Zi×(cos(θ)×Y+sin(θ)×X)
该功能配置下,IP核默认设置粗略旋转和选择补偿缩放模块。
在这里插入图片描述

Polar to Rectangular

使用该功能实现极坐标到直角坐标的转换,此时输入矢量为 ( X 2 + Y 2 , 0 ) (\sqrt{X^2+Y^2},0) (X2+Y2 ,0),输入角度为 θ \theta θ。如输入 ( 1 , 0 ) 和 π 4 (1,0)和\frac{\pi}{4} (1,0)4π,则输出应为 ( 0.707 , 0.707 ) (0.707, 0.707) (0.707,0.707)。输入输出数据位宽设置为10bits时,仿真结果如下。
在这里插入图片描述

Vector translation

该功能配置下,使用CIRDIC算法旋转输入矢量 ( X , Y ) (X,Y) (X,Y),直到Y分量为零。输出幅值 Z i ∗ Mag ( X , Y ) Z_i * \text{Mag}(X,Y) ZiMag(X,Y)和输出相位 Atan ( X / Y ) \text{Atan}(X/Y) Atan(X/Y),即可完成直角坐标到极坐标的转换。
在这里插入图片描述
在这里插入图片描述
如输入 ( 0.707 , 0.25 ) (0.707,0.25) (0.707,0.25)时,输出幅值为0.75和相位为0.336,使用也需注意粗略旋转和补偿缩放。
在这里插入图片描述

Sin and Cos

该函数功能的输入输出信号如下表。
在这里插入图片描述
当设置粗略旋转时,输入PHASE_IN的范围 ( − π , π ) (-\pi,\pi) (π,π)。超出此范围的输入会产生不可预测的结果。如果未设置选项,则必须将输入约束为位于第一象限,即 ( − π 4 , π 4 ) (-\frac{\pi}{4},\frac{\pi}{4}) (4π,4π)
设置输入数据单位为Radians,设置输入/输出宽度为10位,则输入数据为fix10_7格式,输出数据为fix10_8格式。
若不设置粗略旋转,当输入角度数据 θ \theta θ为1.78125 rad,输出数据 s i n ( θ ) sin(\theta) sin(θ)为0.81640和 c o s ( θ ) cos(\theta) cos(θ)为0.57421。
在这里插入图片描述
正确输出数据为
在这里插入图片描述
此时勾选粗略旋转功能后,重新仿真,得到如下正确输出数据接。
在这里插入图片描述

Sinh and Cosh

对于该函数配置,粗略旋转模块被禁用,因为它不适用于双曲变换。

在这里插入图片描述
在这里插入图片描述

ArcTan

在这里插入图片描述

ArcTanh

在这里插入图片描述
在这里插入图片描述

Square Root

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银河麒麟服务器v10 sp1 安装 redis

1、下载redis安装包 https://download.redis.io/releases/ 本文下载redis-7.0.11.tar.gz包,请按照自己需求下载相应文件。 2、将下载后的.tar.gz压缩包上传到到服务器自定义文件夹下 本人上传为系统的下载文件夹下,可以直接上传至指定目录下&#xff…

Linux发行版Gentoo被发现有漏洞,在SQL注入方面存在安全风险

近日有消息表明,Gentoo Linux发行版中存在漏洞CVE-2023-28424,并且极有可能被黑客利用该漏洞进行SQL注入攻击。 据悉,研究人员从 GentooLinux的Soko搜索组件中找到了这个漏洞,并且该漏洞的CVSS风险评分为 9.1,属于特别…

两数相加问题

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

Linux 进程虚拟地址空间与虚拟内存

Linux 进程虚拟地址空间与虚拟内存 本文主要介绍Linux进程虚拟地址空间和虚拟内存的概念,学习可用物理内存中的页帧与所有的进程虚拟地址空间中的页之间的关联: 逆向映射(reverse mapping) 技术有助于从虚拟内存页追踪到对应的物…

ASS字幕 中的阴影 如何去除,三秒解决

有些外挂的ass字幕,总是自带一层浓浓的 阴影,看着就很不舒服,如下截图 解决方法: 鼠标右键,用记事本打开ass字幕文件,然后搜索关键字 ScaledBorderAndShadow,将其后面的 yes 改为 no&#xff0…

JSP在线小说系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 在线小说系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用ja…

C. Insert Zero and Invert Prefix - 构造+思维

分析: 数组b的最后一个元素永远不可能使1,因为即使在最后一个位置操作,也只会把前n-1个元素反转,最后一个元素只能为0.然后可以发现只要a[i]0就可以直接输出0,当a[i]1时一连串的1只需要最后一个1的位置改变成1的字串长…

微信小程序基础语法

微信小程序 文章目录 微信小程序[toc]一、初识微信小程序1.什么是微信小程序2.小程序可以做什么3.小程序与普通网页开发的区别 二、开发准备1.注册小程序开发账号2.安装开发者工具3.登陆我们的开发者工具 三、小程序构成1.小程序的基本组成结构2.小程序的页面组成结构3.小程序组…

OSI(开放系统互连参考模型)知识点详细介绍!!

开放系统互连参考模型分七层,从低到高是物理层,数据链路层,网络层,传输层,会话层,表示层和应用层 一.物理层(Physical Layer) 物理层位于 OSI/RM 参考模型的最底层,为数…

6.18、Java初级异常

1. 异常概述 1.1 什么是生活的异常 男主角小明每天开车上班,正常车程 1 小时。但是,可能会出现意外,出现意外,即为异常情况。我们会做相应的处理。如果不处理,到不了公司。 处理完了,就可以正常开车去公司…

浪涌保护器的标准和应用领域综合方案

浪涌保护器是一种用于防止电力系统或电子设备受到雷击或其他暂态过电压的损坏的装置。根据国家标准GB/T 18802.11-20201,低压电涌保护器 (SPD) 应符合IEC 61643-11:2011的性能要求和试验方法。浪涌保护器的产品参数包括:额定工作电压、最大连续工作电压、…

【kubernetes系列】kubernetes之kube-proxy的工作模式

概述 从kubernetes最早开始,kube-proxy到现在总共支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,iptables 模式从 v1.2 版本开始引入并作为kube-proxy 默认的操作模式。在kubernetes 1.8之后引入了ipvs模式&#xff…

!!!已解决: Linux操作系统登录,输入正确账号密码显示却显示:Sorry, that didn‘t work. Please try again.

!!!已解决: Linux操作系统登录,明明输入密码正确却显示:Sorry, that didn’t work. Please try again. 先给大家复现一下我的问题: 为什么出现这个问题??? …

知识梳理for CDGA/CDGP——第九章 ​文件和内容管理

第九章在CDGA分值占比较少,CDGP不考核,主要考点包括:定义、目标、原则、活动、工具、度量指标等基本概念、记住精心管理档案特点、GARP原则等。因此本章建议不需要花大量时间研究,熟悉历史真题,聚焦关键考点即可&#…

Leetcode-每日一题【1290. 二进制链表转整数】

题目 给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1: 输入:head [1,0,1]输出:5解释:二进制数 (101) 转化为…

没有BuildConfig

Android Gradle 插件8.0.0(2023年4月) 刚刚发现,新创建的一个Android项目,成功运行到手机上了,然后在代码中想使用一下BuildConfig这个类,发现没有,按以前的经验,项目刚创建时Build…

优雅码住!ChatGPT的五大开源替代方案

自去年11月发布以来,ChatGPT吸引了全球各行业人士的注意力和想象力。人们将它用于各种任务和应用程序,而且它有可能改变流行的应用程序并创建新的应用程序。 但ChatGPT也引发了微软和谷歌等科技巨头之间的人工智能竞赛,使得该行业在大型语言模…

Docker服务编排之Docker Compose的使用

Docker服务编排 概念:按照一定的业务规则批量的管理容器 微服务架构的应用系统中一般包含很多微服务,一个微服务中又包含很多的实例,每个微服务都要手动管理,维护的工作量很大。 拉去镜像,创建多个容器,分…

使用YOLOv5实现实时目标检测结果保存

本文将分享保存实时目标检测结果的方法,包括将目标信息逐帧保存到.txt文件中、逐帧输出检测结果图片、以及如何保存所有检测图片(包括视野中无目标的帧)。 目录 0.准备 1.目标信息保存 2.检测图片保存 3.保存所有帧 0.准备 本文以单摄像…

基于卷积变分自动编码器的3D数据处理与重建【CVAE】

在这个项目中,我们将学习如何使用卷积变分自动编码器 (CVAE) 来处理和重建 3D 湍流数据。 我们使用计算流体动力学 (CFD) 方法生成 3D 湍流立方体,每个 3D 立方体沿着三个速度分量携带物理信息(与图像数据类似,被视为单独的通道&…