FPGA/ASIC技术
我们在此提供详细信息,说明Missing Link电子公司的工程师是如何为我们的示例设计生成必要文件的,以及如何使用这些文件在Xilinx ML507评估平台(其中包含一个Xilinx Virtex-5 XC5VFX70T器件)上复制结果。我们还说明如何以此设计为起点来完成您自己的APU增强型FPGA设计。
第 1 步:构建协处理器
从理论上讲,您几乎可以构建任何协处理器,只要能将其装入您的FPGA即可。但请记住,一条用户定义指令 (UDI) 每周期可以传输两条32位的运算元和一条 32 位的结果。我们的复数乘法协处理器是在文件src/cmplxmul.vhd中实现的。
第 2 步:构建FCM封装
为了节省面积,您的协处理器可能需要具有与我们的协处理器相似的多周期运行方式。因此,您将需要用状态机在协处理器和辅助处理单元 (APU) 之间实现简单的握手协议。在我们的示例中,我们是在封装“fcmcmul”内做到了这一点,此
封装是在文件src/fcmcmul.vhd中实现的。
在封装fcmcmul内,我们对复数乘法硬件模块cmplxmul进行了实例化,该模块成为结构协处理模块 (FCM)。这样,fcmcmul即可提供我们将其连接到 APU 所需的接口。您可以在 赛灵思公司的技术文档UG200(从第188页开始)中找到关于这些接口信号的详细描述。重要的细节是第216页上所示“先确认连续非自主指令”的时序图,其中显示了APU 与FCM之间的协议。
第 3 步:FCM与APU连接
一般而言,您可以通过两种方式将FCM连接到APU:通过使用Xilinx Platform Studio (XPS) 的图形用户界面,或者通过修改.mhs文件。我们发现,当将现有设计的一部分剪贴到新设计中时,最易于修改 .mhs 文件。对于本示例也是如此,我们在文 syn/apu/system.mhs中连接FCM/封装和APU。
我们建议您如法进行。只要从我们的示例中将“BEGIN fcmcmul”到“END”的一段粘贴到您的 .mhs 文件中即可。要使其在 XPS 中正常工作,您还必须按预定义的文件/目录结构提供一套文件。在我们的示例中,我们调用了封装模块fcmcmul,所以文件/目录结构如下所示:
syn/apu/pcores/fcmcmul/data/fcmcmul_v2_1_0.mpd
syn/apu/pcores/fcmcmul/data/fcmcmul_v2_1_0.pao
syn/apu/pcores/fcmcmul/hdl/vhdl/fcmcmul.vhd
syn/apu/pcores/fcmcmul/hdl/vhdl/cmplxmul.vhd
.mpd文件包含FCM的端口说明。.pao文件提供与FCM关联的模块和文件的名称,而XPS则在hdl/vhdl目录中查找协处理器和封装的VHDL源文件。
您应该根据自己的APU增强型FPGA设计的需要复制和调整此树状结构。
第 4 步:硬件仿真
我们提供了用ModelSim测试APU示例所需的必要文件。作为先决条件,您必须生成并编译 赛灵思公司 仿真库,但仅当您未曾进行此操作时才这样做。您可以从XPS菜单“XPS→仿真→编译仿真库”完成此操作。然后,从XPS菜单“XPS→仿真→生成仿真”为整个设计生成所有 RTL 仿真文件。下一步是运行RTL仿真,以验证您的APU设计,尤其是验证APU、封装和协处理器之间的握手协议。
仿真显示APU在一个或两个周期内传送运算元的两种可能性(如技术文档UG200中第 216 页上所述)。请注意 FCMAPUDONE和FCMAPURESULTVALID两个信号。
第 5 步:软件测试
对于复数乘法运算,我们编写了一个独立的小程序 (syn/apu/aputest/aputest.c) 从软件角度演示 APU 和协处理器的用法。此程序配置APU并定义UDI,然后,用我们的硬件协处理器运行一个进行复数乘法运算的循环,将其与仅软件复数乘法运算的结果进行比较,并且提供性能分析。
您必须先配置PowerPC的APU,它才能正常工作。有两种配置方法:您可以在 XPS 中点击,然后为APU的某些控制寄存器输入初始化值;也可以从使用APU的软件程序中直接配置APU。我们感觉后一种方法较为明确可靠。
在我们的C源代码文件中,您可以找到正确初始化APU所需的描述性C宏和函数调用。请根据需要将其复制粘贴到您的程序中。
在该循环中,我们首先使用UDI进行复数乘法运算,然后使用软件宏ComplexMult进行同样的运算。我们使用例程Start_Time和Stop_Time进行性能分析。三个调用UDI1FCM_GPR_GPR_GPR实现三个周期的硬件复数乘法运算。我们在Xilinx EDK生成的文件syn/apu/ppc440_0/include/xpseudo_asm_gcc.h中定义C宏UDI1FCM_GPR_GPR_GPR。我们通过汇编器助记符udi1fcm实现C宏UDI1FCM_GPR_GPR_GPR 因为赛灵思公司 为汇编器打了补丁,所以此udi1fcm助记符(尽管显然不是原PowerPC 440处理器指令集的组成部分)已经是APU可以处理的正确指令。
在我们的测试用例中,aputest是XPS的软件项目,我们对其进行了编译、汇编和链接,然后将其下载到Virtex-5 FXT的Block RAM中供PowerPC处理器执行。
第 6 步:生成FPGA配置
您可以从XPS菜单“XPS→硬件→生成比特流”生成FPGA配置的位文件。为了让您节省些时间,我们包括了一个针对Xilinx ML507开发平台的位文件。您可以在中找到此文件。
第 7 步:运行示例设计
下载FPGA配置的位文件,启动XPS调试器XMD(UART设置是115200-8-N-1),然后观察示例设计。
调试器报告的运行时间,对于仅软件的设计是4,717个周期,对于UDI硬件加速的复数乘法运算是1,936个周期。可见,未经时序优化,在50 MHz下运行,通过复数乘法运算测得的加速度约为2.4倍。当然,如果我们要使用流水线并提高并行度,协处理器运行会快得多,可以将整体加速度提高到五至十倍。
全部0条评论
快来发表一下你的评论吧 !