您的当前位置:首页正文

ISEIP核使用说明

来源:九壹网


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 配置

因篇幅问题不能全部显示,请点此查看更多更全内容

Top