资 源 简 介
Cordic 算法,并用该算法实现 sin 和 cos 函数。
在这个 cordic 算法顶层下,有 4 个模块。分别为按钮脉冲检测 btnPulse,角度输入 ang,板卡显 示 disp,算法核心 cordic。
BtnPulse 按分频后的时钟间隔检测对应按钮位置,当检测到连续三次的结果依次为 0、1、1 时 发送一次按钮脉冲 pulse。pulse 被作为 ang 模块的时钟,在每个 ang 的上升沿,根据按钮的对 应位置将相应的数据进行增加或减少。
显示模块 disp 将进行运算后的对应的三角函数值对应到数码管上。其中,实现象限的功能是根 据在第二第四象限的 sin,cos 结果的绝对值与在第一象限相比是将 sin 值和 cos 值交换。而第三 象限的绝对值保持不变。因此,该程序实质上仅计算第一象限的三角函数值,位于其他象限的 在 disp 模块中改变了显示值。正负是通过判断哪种三角函数位于某个象限,通过少量组合逻辑 即可得到。
在 cordic 算法模块中,为了增加计算的精度,选择了进行 28 次迭代。而为了方便移位运算,将 角度数据长度拓展至 32 位,将 cordicPipeline 模块中的数据长度变为 52,由于在其他模块中使 用了 IEEE.STD_LOGIC_UNSIGNED,为了防止冲突,选择手动计算符号位。由于大部分运算均是 重复,因此只要在 cordic 模块中反复调用 cordicPipeline 模块即可,仅需为 cordicPipeline 模块添 加一个使能输入,当计数到 28 时使能失效,停止运算。