FPGA Notes

一个基于FSL的“伪”双精度FPU

0
阅读(3078)

背景:在Xilinx EDK系统上如果要使用FPU,现在的选择是MicroBlaze自带的单精度FPU,给PPC405用的单精度FPU和给PPC440用的双精度FPU。也就是说,在PPC405和MicroBlaze上暂时还没有双精度FPU。

于是最近做了一个基于MicroBlaze FSL总线的“伪”双精度FPU。

FAQ:

Q1: 为什么这是一个“伪”FPU?
A1: 因为这不是一个集成的FPU,不能直接使用C语言的加减乘除直接来运算,编译器不直接支持,而是使用自带的driver来传递信息。

Q2: 它能跑多快的速度?
A2: 这不是一个最优化的FPU(速度、资源),而仅仅达到“可用”的程度。在Spartan3E上的测试结果是45MHz左右, 在Virtex4上测试结果是90MHz左右。它调用了CoreGen IP - Floating Point。IP Core已经配置为节省面积且重复使用资源。用户可以使用CoreGen自己设定Floating Point IPCore 的参数并将生成的网表替换netlists目录中的相应文件。

Q3: 我该怎样使用它?
A3: Pesudo_FPU_DP_v1_00 有两种工作模式,分别是FSL的同步时钟模式和异步时钟模式。
使用时,首先需要将pcores和drivers目录中的文件copy到工程文件夹的相应目录。
- 在同步时钟模式时,只需要使用Hardware --> Configure Co-processor,在弹出菜单将IP添加到左边空格即可。此时,pesudo_fpu_dp core 工作在sys_clk_s的时钟频率下。
- 在异步时钟模式时,用户需要
1. 手动创建一个合适的时钟(通过Clock Generator或从外部引入)
2. 将它连接到pesudo_fpu_dp的async_clk端口和microblaze_0_to_pesudo_fpu_dp_0的FSL_S_CLK 和 pesudo_fpu_dp_0_to_microblaze_0的FSL_S_CLK端口
3. 连接microblaze_0_to_pesudo_fpu_dp_0的FSL_S_CLK 和 pesudo_fpu_dp_0_to_microblaze_0的FSL_S_CLK端口到系统时钟sys_clk_s
4. 设置pesudo_fpu_dp_0、microblaze_0_to_pesudo_fpu_dp_0 和 pesudo_fpu_dp_0_to_microblaze_0的属性C_ASYNC_CLKS = 1
5. 设置microblaze_0_to_pesudo_fpu_dp_0的属性C_READ_CLOCK_PERIOD为ASYNC_CLK的周期(单位:ps) 和 pesudo_fpu_dp_0_to_microblaze_0的属性C_READ_CLOCK_PERIOD为sys_clk_s的周期(单位:ps)

Q4: 软件中该怎样使用它?
A4: pesudo_fpu_dp是一个“伪”FPU,它不提供编译器的支持。因此使用这个IP时,需要使用它自定的driver函数。他们是:

void pesudo_fpu_sqrt(double* source, double* result);
void pesudo_fpu_add(double* source1, double* source2, double* result);
void pesudo_fpu_sub(double* source1, double* source2, double* result);
void pesudo_fpu_mult(double* source1, double* source2, double* result);
void pesudo_fpu_div(double* source1, double* source2, double* result);

所有操作数均使用指针传递数据。
软件例程可以参考drivers\pesudo_fpu_dp_v1_00_a\examples\pesudo_fpu_dp_v2_1_0_app.c

Q5: 我可以免费使用它吗?
是的。这个IP可以免费使用、修改和分发。但是请保留原文件中所有的版权声明。本人将不提供后续技术支持。本人对使用本IP所产生的影响不负任何责任。

Q6: 哪里可以下载?

下载文件 (已下载 77 次)
点击这里下载文件: pesudo_fpu_dp_v1_00_a.zip

2009.4.7 zip已更新,加入了xco文件。

Q7: 如果我不想要双精度FPU,它可以用来做啥?
A7: 这个IP还可以用来作为学习写FSL IP的起点和模板,也可以用来学习怎样使用bbd文件。

Baidu
map