vivado hls的应用(带ddr读取的ip)
【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】前面我们也写了两个ip一个是直接显示led的另外一个是带axi总线。某种意义上说这已经是大部分场景下ip的使用方法。但那只是满足非接口类ip需求算法类ip的话就还需要了一部分内容那就是如何从ddr读取数据。1、设计一个统计类的ip这个ip的功能非常简单就是设置好ddr地址、设置好数据的数量之后然后ip就开始计数。等到所有计数结束之后就可以触发一个中断给cpu。这就是ip的全部功能。和之前ip相比较它最大的不同就是它可以访问内存也就是ddr。就zynq而言所有访问ddr的操作都是通过hp0接口完成的。2、准备代码代码部分其实是比较容易完成的。这里先不考虑ip的效率暂时只实现功能。所以说要实现这一点只要对interface做一些改变就可以了。#include ap_cint.h uint32 result; uint32 _average_int(uint32* array, int num) { uint32 sum 0; int i; for(i 0; i num; i) { sum array[i]; } return sum / num; } uint32 led_control(uint32* array, int num) { #pragma HLS INTERFACE s_axilite portreturn #pragma HLS INTERFACE s_axilite portnum #pragma HLS INTERFACE m_axi depth1024 offsetslave portarray result _average_int(array, num); return result; }大家可以观察一下这里面最大的区别就是array的设置。首先它的类型是m_axi其次最大depth是1024最后访问类型是slave这些都代表说它要访问ddr的。3、综合、导出rtl综合是为了确认语法有没有问题导出rtl则是为了确认c可以转变成verilog。4、准备vivado工程这里的vivado工程就是准备一个cpu准备一个gpio其他都使用默认连线就可以了这就保证了整个最小系统至少是可以运行起来的。5、导入ip开始连线vivado工程都准备好了之后就可以导入之前生成的ip。当然ip选择soc类型的时候要和vivado里面的类型保持一致不然哪怕是路径都设对了在添加ip的时候也会找不到的。添加ip之后一般还需要补充一个axi smart connectip通过smart connect直连zynq的hp0。ip的中断也要提前设置好。剩下的部分就采用默认的方式就可以。不出意外你就可以看到这样的框图6、调整和确认连线什么都设置好之后这个时候通常还要double check下看看有没有连线出错的有没有没有连上线的。都没有问题之后就可以继续综合、生成bitfile、生成sdk代码了。