赛灵思官方提供了cordic(coordinate rotational digital computer) ip核实现直角坐标极坐标变化,三角函数的操作。我介绍下它进行反正切求解的使用:
新建个简单工程:bd如下
进行ip设置,选择运算位反正切后,ip端口回自动变为上图,再引出2个总线和时钟,xilinx的ip核不少是基于AXI4-Stream总线,这里使用并不复杂,默认只有2个信号,一个数据线tdata,一个握手信号tvalid,tvalid拉高时数据信号有效。
确定了输入输出位宽后,系统会自动求解出需要的延时latency。这里说一句,AXI-Stream总线收发基于byte的,无论输入什么位宽最后都是8的整数倍。所以需要参照UG,放置好有效输入位和分解输出位。
如果输入输出位宽恰好不是8的倍数,那么tdata位宽是大于设定的值的。所以需要上图提到进行填充(PAD),比如我输入20位,x和y加起来40位,那么输入S_AXIS的位宽是48,我要在0-19放x,20-23放填充数据(随意,我用0),24-43放y,44-47放填充数据。必须保证0-19和24-25分别是我的x和y。
atan=y/x&#x