资源描述:
《使用Vivado HLS创建一个EDK PCore.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、使用VivadoHLS创建一个EDKPCore 这篇文章是用来熟悉Xilinx的VivadoHLS(2012.2version)工具的使用的。 由于Zedboard是ARM+FGPA的架构,所以在使用的时候经常会涉及到关于FPGA设计方面的知识,对于像我这样对FPGA一窍不通的人来说,这是一个不可逾越的障碍(至少目前是)。有心想去了解学习一下,然后这一块的知识体系也是异常庞大的,不是短时间可以理的清楚的。要是有一个工具,能够将软件代码直接转换成硬件(HDL语言),而无需学习传统的硬件设计技术,那该多好了!这里,VivadoHLS就是这样一个工具。 这里将一段C代码转
2、换成XilinxEDK工具能够直接使用的IPcore,实现一个简单的8bitadder. #include“basic.h”#include“ap_interfaces.h”//definesomemacrosforaxibus voidbasic(chara,charb,char*c){AP_INTERFACE_REG_AXI4_LITE(a,BUS_A,ap_none); AP_INTERFACE_REG_AXI4_LITE(b,BUS_A,ap_none); AP_INTERFACE_REG_AXI4_LITE(c,BUS_A,ap_none); AP_C
3、ONTROL_BUS_AXI(BUS_A);//APcontrolsignaltobeaccessedthroughAXI-Liteif *c=a+b;} (1)IOPort 函数中有3个变量:a,b,c。前面两个变量a,b是输入变量,所以它们作为IPcore的输入端口;c变量是输出变量,所以作为IPcore的输出端口。它们会被映射到核中的3个寄存器中。 (2)Handshakesignal 在这个例子中,至少需要3个控制信号:AP_START,AP_IDEL,AP_DONE。这些信号都也会被映射到核的寄存器中,用来控制核的基本操作及状态。AP_START信号用
4、来控制Pcore的开始,AP_DONE信号用来表示操作完成,而AP_DONE用来表示设备空闲状态。 (3)中断控制 与中断相关的寄存器。IER(intrenablereg)、ISR(intrstatusreg) (4)IPIFandIPIC 这里,通过调用ap_interface.h中的宏来实现AXI-LITE接口。 //ap_interface.h--thisfilecontainsmacrodeclaraTIonsforAutoESLinterfacedirecTIves //enumofavailableinterfacestypeinAUTOESL
5、enumAP_AUTO_INTERFACES{ AP_NONE,AP_ACK,AP_VLD,AP_OVLD,AP_HS,AP_CTRL_NONE,AP_CTRL_HS,AP_MEM,AP_FIFO,AP_BUS }; //GCCpre-processordirecTIvetoinsertpragmasfrommacrocode #defineSTR(x)#x #definePRAGMA_L1(x)_Pragma(#x) #definePRAGMA(x)PRAGMA_L1(x) #defineAP_INTERFACE(var_name,interface_ty
6、pe){ PRAGMA(APinterfaceinterface_typeport=var_name); } #defienAP_INTERFACE_REG(var_name,interface_type){ PRAGMA(APinterfaceinterface_typeport=var_nameregister); } //CreateanAXI4Liteinterfaceatthesystemlevellayer #defineAP_BUS_AXI4_LITE(var_name,bus_name){ PRAGMA(APresourcecor
7、e=AXI_SLAVEvariable=var_namemetadata=STR(-bus_bundlebus_name)); } //CreatestandardXilinxbusinterfaces #defineAP_INTERFACE_REG_AXI4_LITE(var_name,bus_name,interface_type){ AP_INTERFACE_REG(var_name,interface_type);//IPIC AP_BUS_AXI4_LITE(var_name,bus_name);/