ISEIP核使用说明
ISE IP核使用说明(14.5)
1.除法器 (1)
2.CORDIC –IP核 (4)
3.CORIDC-sin/cos (6)
4.CORDIC-SQRT (10)
5.Block Memory (13)
6.Shift-Register (21)
7.ACC累加器 (25)
8.复数乘法器 (27)
9.乘法器 (28)
10.FFT (30)
11.FIFO (33)
1.除法器
1.设置
使用 High Radix 类型(这样会多出 R D Y 和 N D 两个握手信号方便连续的除法)
上面有个地方说错了,Clocks per Div is ion 不是运算需要的时间,Latency 才是需要的时钟数
Radix2 类型,没有 R DY 信号反馈运算是否完成(可能需要对时钟计数来确定是否运算完成,所用时钟是确定值)。1,除法器内核设置为 Radix2 时,小数位包含符号位已经补码化,小数位可以按照如下方式接在整数位后面:
wire [7:0] qv_q_cp;
assign qv_q_cp=fv_q[26]?(qv_q[7:0]-1'b1):qv_q[7:0];
wire [33:0] v_q_div;
assign v_q_div= {qv_q_cp,fv_q[25:0]};
assign xk_re_t m p = xk_re_quoti[26]?{xk_re_quoti-
1'b1,xk_re_frac[8:0]}:{xk_re_quoti,xk_re_frac[8:0]};
因为整数部分,如果为负数的时候是取反加一为对应的值,加上小数部分后,整数部分只做取反运算了,所以通过减一来实现
对应的加一操作。
当设置为 High Radix 时,小数位也补码化但丌包含符号位,可以直接接在整数位后面。
1.小数最高位为符号位,当商为 0 的时候,xk_re_quoti都是全 0,丌管小数部分的正负,所以应该用小数部分的最高为作为判
断条件-----
2.因为整数部分,如果为负数的时候是取反加一为对应的值,加上小数部分后,整数部分只做取反运算了,所以通过减一来实现
对应的加一操作。
3.所以组合的方式为:ass ign xk_re_t m p =
xk_re_frac[9]?{xk_re_quoti-1'b1,xk_re_frac[8:0]}:{xk_re_quoti,xk_re_frac[8:0]};//2015.4.2
2.模块信号的作用
DIV div (
.c lk(c lk),//input c lk --时钟信号,运算周期可以使一个周期也可以是多个周期
.nd(nd), //input nd---用来提示IP 核,有新的数据输入,请采样。这是一个新数据的反馈信号
.rdy(rdy),// output rdy 表示运算完成,请取走结果
.r fd(r fd),// output r fd--高电平表示采样,表示已经采样。需要新的数据输入。这是一个新数据的请求信号。
.d iv idend(a),//input [11 : 0] div idend ---被除数
.d iv isor(b),//input [7 : 0] d iv isor ---------除数
.quot ient(c),// output [11 : 0] quot ient --商
.f ract ional(d));// output [3 : 0]f ract ional余数,若 Re m ainder Type 为 Re m
ainder 则:3/2 余数为 1(整数),若为 Fract ional 则:3/2 余数为 0.5(小数,用 4 位二迚制数表示为:1000=1*2^-1+……)
由这个图,好像是要运算完成后才能输入数据,但是测试发现,每个时钟都可以输入的,只是首次延时为latency
由仿真结果看只有在 R DY 为高的时候,输出结果才是正确的。如果错过恰当的时间去取数据可能取到的是错误的数据,所以要
子啊 R DY 一为高就要取输出的数据
2.CORDIC –IP核
C O R DIC:就是“广义的坐标旋转数字运算”
C O RI
D C 支持的运算:1.极坐标不直角坐标的转换
2.三角函数,sin,cos
3.s inh,cons
4.Asin,Asinh
5.平方根
C O RI
D C 的输出量化误差:1.由于输入的量化噪声的影响,误差为 1/2LSB
2.由于内部运算的误差,这个误差可以由输入的位宽的增大来减小。
3.两种误差影响都是在小输入的时候影响较为明显,大输入的时候几乎没有影响。
C O RI
D C architectural configurations(核结构配置):Paral le l,W o rd Ser ia l(并行和字串行)
W o r d Serial:完成一次运算要多个时钟,消耗的资源比较少。N bit的输出需要 N 个时钟周期才能完成计算,只用了一个 shi f t A d d_Sub stage(一个运算模块),通过反馈计算多位的数据,没计算一位需要反馈 N 次,作用需要 N 个时钟才有一个有效的输出。
Paral lel:可以实现单时钟实现一次运算,但是要消耗大量的资源。由下图可知,如果输出的一个 Nbit的数据需要 N 个串行的Shift Add_Sub Stage,所以从输入第一个数据到接收到第一个数据的输出需要 N 个时钟的延时,但是接下来的每个时钟都要数据输出,相当于是使用了流水线。
C O RI DIC IP 的数据表示形式。
数据信号
1.在函数配置为 Rotate,Translate,sin,cos,Atan 时,X_IN,Y_IN,X_O UT,Y_O U T 数据信号的使用的是 2 定点二迚制的补码,且用 2 位来表示整数,其余的为来表示小数。
Using a 10-bit word width, +1 and -1 are represented as:
\"010*******\" => 01.00000000 => +1.0
\"1100000000\" => 11.00000000 => - 1.0
2.对于平方根函数,输入 X_IN,和输出 X_O U T,可以表示为无符号小数和无符号整数形式。若为 Unsigned Fract ional(无符号小数),则 0<=X_IN<+2,即输入输出都为小于2 的正数,若为Usigned Integer,则 0<=X_IN<2^N,即输入输出都为整数,没有小数部分(小数部分被舍弃)。且当为 Usigned Fract ional的时候,数据固定第 1bit为整数,其他的 bit为小数部分U nsigned Fract ional
1100000000=>1.100000000=>1.5
U nsigned Interger
0000001000=>0000001000=>8
相位信号
P H A SE_IN and P H ASE_O U T 使用的而是定点的二迚制补码,且用 3bit位来表示整数,其余的为来表示小数。(有符号数)若相位设置为“Radians”
-Pi <= (PH ASE_IN) <= Pi
In 2Q7, or F ix10_7,for mat values,+Pi and -Pi are represented as:
\"01100100100\" => 011.00100100 => +3.14
\"10011011100\" => 100.11011100 => - 3.14
若相位设置为“Scaled Radians”(归一化的相位)
-1 <= (P H ASE_IN) <= +1
In 2Q7, or F ix10_7 for mat values,+1 and -1 are represented as:
\"0010000000\" => 001.0000000 => +1.0
\"1110000000\" => 111.0000000 => - 1.0
Q N u m b ers For m at---一定是有符号数,无符号数用 UFix 表示。
一个符号位接着 Xbit整数和 Nbit小数,数据总长度为 1+x+N.如 1Q7:\"0010000000\" => 001.0000000 => +1.0
也可以用 FIX 来表示:Fix(1+X+N)_N.即 F ix(总位数)_小数位数。Q15 表示没有整数位有一个符号位和 15 个小数位。用 F IX 表示为:Fix(16)_15.
映射不同的数据格式(默认为上面的数据格式,要映射其他数据格式要手动配置)
R otate, Translate, S in, Cos and Atan,把数据信号映射到可选的数据格式(即固定的整数位数的小数格式),输入数据 X_IN 映射到可选的数据格式上。若输入输出位宽相同,则默认的输出也会映射到不输入相同的数据格式上(实际计算结果也就是不
输入位宽相同)若输出的位宽比输入的位宽小,则会相应的减少输出数据的小数位(在实际计算结果下去掉最后面的小数位),输出位宽小于输入位宽可能找出输出数据产生较大的误差。
如输出实际为 FIX10_8: 00.10101001
若输出位宽设为 8 则输出数据格式
为 F ix8_6:00.1010110,去掉了最好两位。
Sq uare Root Functional Configurat ion
C O R E Generator G UI and Para m eters(核生成器用户界面和参数)
粗旋转,即把输入输出数据的范围有第一象(-pi/4~pi/4)限扩展到了这个圆平面(-pi~pi),在运算 Vector rotat ion,
V ector translation, Sin and Cos, and ArcTan 时这个功能是默认打开的,但在运算 Sinh and Cosh, ArcTanh, and
Sq uare Root 时不需要这个功能.
3.CORIDC-sin/cos
粗旋转模块可以使输入是整个角平面。这个功能是默认开启的,用户也可以手动取消。
输入角度 Pin 是一个二迚制的定点补码,用 3bit来表示整数,7bit来表示小数。输出也是一个二迚制补码,2bit来表示整数,余下比特来表示小数。
1.核生成配置
Paral le l吞吐量为每个时钟输入和输出一个数据,但是首次延时为输入相位的位宽数。Paral le l时运算一次需要的时钟数
3.模块使用说明
C O R DIC_TIR G your_instance_na m e (
.phase_in(phase_in),//input [15 :0] phase_in--相位角输入,使用了归一化的相位,1/2 表示 p i/2 .nd(nd), //input nd-----------------------------外部数据发送者通知IP 核,有新的数据输入,请采样.x_out(x_out),// output [15 : 0] x_out----------cos(phase_in)
.y_out(y_out),// output [15 : 0] y_out----------s in(phase_in)
.rdy(rdy),// output rdy-------------------------计算完成信号,通知数据接收者取走结果
.r fd(r fd),// output r fd----------------------IP 核请求新的输入数据,请求外部数据发送者发送新的输入数据.c lk(c lk) //input c lk---------------------------同步信号。。
);
还要就是模块开始使用的时候要延时一段时间,再把 nd 设为 nd=1 才能被采样的。
4.CORDIC-SQRT 1.G UI 设置
2.模块使用说明
C O R DIC_Sqrt your_instance_na m e(
.x_in(x_in),//input [7 : 0] x_in--------输入数据,要不 G UI 中设置的数据格式相同.x_out(x_out),// output [4 : 0] x_out-输出数据
.rdy(rdy),// output rdy---------------计算是否完成的状态信号,完成后为高电平.c lk(c lk) //input c lk------------------时钟
);
5.Block Memory
宽度 x 深度
存储空间分配算法
Mini m u m Area 使用的块也是最少的,当然使用的数据选择器也是最少的。
L O W Po w er 这种方式读写一次的时候会操作最少的基本块
3 种读写操作模式
----------------------------------------------------------------------------------------------------------------
时钟周期中间准备数据时钟上升沿时候读取数据,是在时钟上升沿读取数据
----------------------------------------------------------------------------------------------------------------
采样两个端口输入输出。
字节输入 byte writes
A,B 端口同时对一个地址写的冲突问题对同一个地址同时写和读的冲突
对亍 s i m ple Dual-Port Ra m e IP 配置
因篇幅问题不能全部显示,请点此查看更多更全内容