Day4-下午任务
首先呢是把上午的成果复制一下
然后在新的程序里面,打开Block Design,搜索加入IP
分别是AXI4-Stream to Video Out和Utility Vector Logic
然后配置


OK这俩结束
加入ZYNQ模块,然后如下配置

输出40MHz和200Mhz时钟

这里是K128M16 JT-125

添加VDMA IP(AXI Video Direct Memory Access),并如下配置

删除几个模块,最后成果如下
注意要再加入一个constant模块IP(不用配置),要不然图中黄线连不起来


如果想断开“一对多”中的单条连线,就去那个“多”方的接口,右键Disconnect

OK啊,稍微一连吧,也没法弄太整齐了倒是
点run block automation,自动生成一些端口




em这里必须是一个smart+一个inter,要不然得自己手填
还有高手



看着连吧反正,连完就查一下错

出问题就这样查


修改约束文件,将CLK相关的去掉,因为我们block design已经没有这个端口了

中嘞,跑比特流去吧
还是对应好名称啊,几次报错都是名称的问题
这样这个弄完之后,没反应是正常的,还有任务
再去对接vitis

加上比特流

这样就有了一个.xsa的文件了

然后要建一个vitis文件夹,要不然就会变成好几个圈里的那种散乱东西

再去vivado的Tool里面Lauch Vitis,
选择这个vitis文件夹后建项目就行
直到这一步,这里要+一下

加上xsa那个文件
然后这次选这个空文档就行

新建一下


这样就可以写代码了
#include <stdio.h> #include "xil_io.h" #include "xparameters.h" #include "xil_types.h" #include "xil_cache.h" #define VDMA_BASEADDR XPAR_AXI_VDMA_0_BASEADDR #define VDMA_FRAME0 0x01000000 //视频帧缓冲区使用的内存起始地址 #define STRIDE 800 #define HSIZE 800 #define VSIZE 600 int main() { Xil_Out32(VDMA_BASEADDR, 0x1); //开启VDMA Xil_Out32(VDMA_BASEADDR+0x5c, VDMA_FRAME0); // 帧缓冲区基地址 Xil_Out32(VDMA_BASEADDR+0x58, STRIDE*2); // 步长(字节数,16位像素=2字节/像素) Xil_Out32(VDMA_BASEADDR+0x54, HSIZE*2); // 水平尺寸(字节数) Xil_Out32(VDMA_BASEADDR+0x50, VSIZE); // 垂直尺寸(行数) u16 *mem_addr = VDMA_FRAME0; // 帧缓冲区指针 for(int row=0; row<VSIZE; row++) { for(int col=0; col<HSIZE; col++) { if(col<266) *mem_addr = 0xF800; else if(col<532) *mem_addr = 0x07E0; else *mem_addr = 0x001F; mem_addr++; // 指针递增(指向下一个像素) } } Xil_DCacheFlush(); // 刷新缓存,确保数据写入内存 return 0; }
摁Ctrl+B跑一下
没问题就Run As

这样选完+配置

OK啊就成功了


浙公网安备 33010602011771号