CORDIC IP (SIN AND COS功能详解)

目录

一:Parallel or Serial Architecture

二:输入输出数据格式(fix16_13;fix16_14讲解)

三:XQN format与fix16_15/14等format转换

四:ip核设置及详细讲解


!:内容全部来自XILINX官方文档PG105_CORDIC以及自己的理解

一:Parallel or Serial Architecture

概括来说就是Parallel 运行速度快,占用资源多(一个周期即可完成数据吞吐),word serial运行速度慢,占用资源少(多个周期完成数据吞吐)详细内容参阅下图: 

二:输入输出数据格式(fix16_13;fix16_14讲解)

输入输出数据模式,输入输出总是用定点数(固定为3位整数位)二进制补码形式表示,也就是说不管输入数据位宽是多少,高三位一定是整数位,剩余低位全部用来表示小数。这就需要数据在进入cordic ip 核之前要经过精度处理

当PHASE FORMAT选择为Radians时,输入数据范围要在-pi~pi之间,否则会导致不被定义的结果(就是会出错)。

当PHASE FORMAT 选择位Scaled Radians时,输入数据范围在-1~1之间即可,ip核会在内部对输入数据进行乘pi处理。

知道了这个方法,我们在进行乘pi操作时,可以考虑用这种方法来代替查找表乘pi法。当然仅限于乘pi后结果需要进行正余弦操作。

当时我怀疑-3.14的二进制是不是计算错误了,想了一会儿给了自己一巴掌(文档里是正确的,动笔算一下就知道了)

三:XQN format与fix16_15/14等format转换

XQN中的X代表几个整数位,N代表几个小数位,XQN格式可以表示-2^X~2^X-2^(-N) ,

!:例子:

        有符号数:1000:-8(最小值)  0111:7(最大值)

        3Q0-8~7

        3Q3: -8~7.875(8-0.125)

为什么文档里说Q15 format 与Fix16_15的表示结果是一样的呢,刚开始百思不得其解,看懂XQN格式之后再来看就恍然大悟了,Q15表示1符号位,0整数位,15小数位 = Fix16_15;人家文档还生怕我们读者看不懂,写了两个例子,1Q15表示1符号位,1整数位,15小数位 = Fix17_15

接下来再看下图中的两个表格就能够很轻松的看懂了

四:ip核设置及详细讲解

 Functional Selection:选择sin and cos(通常,X_IN,X_OUT,Y_IN,Y_OUT位1QN格式,PHASE_IN和PHASE_OUT为2QN格式)

Architectural configuration:选择并行parallel(上文有介绍区别)

Pipelining mode: 随意选

Data format:固定为signed fraction(看文档可知选择signed fraction后X,Y输入以及所有输出均为2整数位,我认为这是因为正余弦处理后取值范围为-1~1,所以两位整数位即可表示)

Phase Format:(上文以介绍)

Input/Output Options: 根据自己实际情况写,这里均为16

Round Mode:我们选择的sin and cos输出为PHASE_OUT,根据官方文档介绍我们应该选择Truncate

iterations:0(根据文档介绍,设置为0时,迭代次数由输出所需精度控制,不需要我们操心)

Precision:0(根据文档介绍,设置为0时,由输出所需精度和迭代次数控制,同样不需要我们操心)

Coarse rotation:勾选(如果不勾选Coarse Rotation,那么输入输出数据范围只能在第一象限(-pi/4~pi/4),这里我不理解,为什么第一象限不是0~pi/2.)

官方文档介绍:

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Cordic IP核是一种用于计算正弦和余弦函数的数学运算IP核。在进行Cordic IP核的sin/cos测试之前,我们需要编写一个测试台(testbench)来进行测试。 测试台的设计目标是在输入一组角度值后,计算出对应的正弦和余弦值,并与预期值进行对比,以确保Cordic IP核的功能正确性。 首先,我们需要确定测试的角度值范围。我们可以选择一个角度的正弦和余弦值是已知的,并以这个角度为中心,测试一定范围内的角度值。例如,我们可以选择0°到360°之间的某个角度值进行测试。 测试台的流程如下: 1. 定义输入信号和预期输出信号。 2. 将输入信号传递给Cordic IP核,并接收其计算得到的结果。 3. 将Cordic IP核计算的结果与预期输出进行对比,检查它们之间的误差是否在可接受范围内。 4. 如果误差在可接受范围内,则测试通过,输出测试结果。 5. 如果误差不在可接受范围内,则测试失败,输出测试结果。 在测试台中,我们可以通过生成随机角度值的方法,对Cordic IP核进行多组测试,以覆盖更广泛的角度范围。 测试台设计中需要考虑的几个重要因素包括输入输出数据的精度、测试角度的覆盖范围和测试结果的判定标准。通过合理设置这些参数,我们可以编写一个有效的Cordic IPsin/cos测试台,以确保IP核的正确性。 ### 回答2: Cordic IP核是一种用于计算三角函数的硬件核心,通过使用迭代方法来实现高效的计算。为了测试Cordic IP核的sin/cos功能,我们可以编写一个Testbench。 Testbench的目的是验证Cordic IP核的输出结果是否正确。在Testbench中,我们首先需要生成一系列的输入值作为测试用例,这些输入值可以按照一定的步长递增或随机生成。然后,将这些输入值送入Cordic IP核进行计算,得到对应的sincos值。 接下来,我们需要知道这些测试用例的预期输出值。我们可以使用软件或数学库函数计算标准的sincos值作为参考。然后,将Cordic IP核的输出结果与预期输出值进行比较。如果两者非常接近,即可认为Cordic IP核的sin/cos功能正确。 在Testbench中,我们可以使用assert语句对比Cordic IP核的输出结果和预期输出值。如果两者不匹配,assert语句会给出错误提示。此外,我们还可以输出测试结果是否通过的信息,以便于判断Cordic IP核的性能和准确性。 最后,在Testbench中我们还可以记录测试的运行时间以及任何其他有用的信息,以便于分析和评估Cordic IP核的性能。 总结起来,通过编写一个完善的Testbench,我们可以对Cordic IP核的sin/cos功能进行全面的测试和评估,确保其在实际应用中的正确性和可靠性。 ### 回答3: Cordic是一种数字算法,通常用于计算三角函数(如sincos函数)。Cordic IP核是一种可以在FPGA中实现Cordic算法的IP核。 进行Cordic IP核的sin/cos测试需要编写一个测试平台,也就是所谓的testbench。测试平台主要用于验证Cordic IP核的正确性和性能。 测试平台的第一步是生成输入信号,即角度(或弧度)的值。可以使用随机数生成器来生成不同的角度输入。然后将这些角度值提供给Cordic IP核进行计算。 下一步是为Cordic IP核建立期望输出。可以使用系统级建模(System-Level Modeling)来计算期望的sincos值。使用已知的数学公式,将输入的角度值代入,计算出对应的sincos值。 然后,将输入信号提供给Cordic IP核,将计算结果与期望输出进行比较。可以使用assert语句来进行比较。如果计算结果与期望输出相差很小,可以认为测试通过。否则,可能需要检查IP核的实现是否存在问题。 在测试过程中,还可以记录每个输入角度和对应的计算结果,以便后续分析和调试。可以将这些记录在一个文件中,或者将其显示在仿真工具的波形窗口中。 测试完所有的输入角度后,可以进行一些统计分析,如计算平均误差、最大误差等。这些分析可以用于评估Cordic IP核的性能和准确性。 总之,Cordic IP核的sin/cos测试需要编写一个测试平台,生成输入信号,计算期望输出,并将计算结果与期望输出进行比较。通过分析比较结果,可以评估IP核的性能和准确性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值