Zynq UltraScale+ ZCU102入门教程02-BRAM的读写

0.前言

上一章介绍了GPIO点亮了ZCU上的8个流水灯,今天介绍BRAM的读写。BRAM 是Block RAM的缩写,它的作用主要是作为数据的缓存,用于IP和内存之间的少量数据交互,CPU提前将数据存入BRAM,当IP需要BRAM中的数据时,可直接从BRAM里面读取。
上一章利用的是官方例程,细心的人可看到其实上一章已经生成了BRAM,所以这一章我们仍然基于上一章的工程来做。
掌握内容:

  1. 单口BRAM的读写;
  2. 内存数据的查看;
  3. ILA逻辑分析仪观测BRAM端口数据;

1.硬件工程的搭建

step1. 打开上一章的工程,双击Block Memory Generator 这个IP,可以看到这个IP的一些基本配置信息,这个BRAM配置是单口RAM,也即输入输出共用一个接口。
在这里插入图片描述
step2.对于硬件工程,可不做任何修改,在这里为了观察BRAM端口的数据,我们只用添加一个ILA:选中BRAM_PORTA和BRAM_PORTA之间的连线,右键点击Debug。
在这里插入图片描述

step3. 点击Run Connection Automation,vivado会帮我们自动例化一个ILA并连线:
在这里插入图片描述

step4. 连线图如下:
在这里插入图片描述

step5. 打开Sources目录 ,选中BD并右键,依次执行1、2、3:
在这里插入图片描述

step6. 完成后直接点击生成bit流文件;
step7. 生成bit流文件之后,和上一篇一样,导入到SDK中,然后加载SDK;

2.软件工程

step1. 新建一个新工程,然后建一个main.c文件,将下面代码复制到main.c文件中:

#include "xparameters.h"
#include "xgpio.h"
#include "xil_printf.h"
#include "sleep.h"
#include "xil_types.h"
#include "xil_io.h"
#include <stdio.h>

#define BRAM_ADDR	XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR

int main()
{
	u32 data;

	for(u32 i=0; i<1024; i++){
		Xil_Out32(BRAM_ADDR+i*4, i);
	}

	for(u32 j=0; j<1024; j++){
		data = Xil_In32(BRAM_ADDR+j*4);
		xil_printf("地址%x的数据是%d\n", BRAM_ADDR+j*4, data);
	}
}

代码虽然比较简单,但这里还是说明一下。首先第一个for循环是将0、1、2、3…1023一共1024个数据写入BRAM中,第二个for循环是将BRAM中的1024个数据读出来并通过串口打印。

step2. 选中SDK中的SDK Terminal ,然后点击“+”,这里是配置串口,打印的数据信息是通过串口从开发板上发送到电脑的,SDK Terminal类似一个串口调试软件,可接受串口信息。在这里注意要将开发板上的串口线连到电脑上。
在这里插入图片描述

step3. 设置端口号以及波特率等信息,然后点击OK;
在这里插入图片描述

step4. 完成之后,SDK Terminal 窗口显示连接成功信息:
在这里插入图片描述

step5. 接下来右键工程进行Debug,上一篇是直接Run,这一篇需要Debug:
在这里插入图片描述
step6. 双击最后一个,产生新的该工程Debug器:
在这里插入图片描述

step7. 勾选完下面选项后,点击Apply、Debug:
在这里插入图片描述
step8. 接下来等待程序烧写到板子上:
在这里插入图片描述

step9. 然后点击vivado工程中的Open Target,点击Auto Connect。
在这里插入图片描述

step10. 自动连接板子后,点击该窗口中的加号,把所以信号都添加窗口中:
在这里插入图片描述

step11. 然后点击下面窗口中的加号,这里我们只用添加一个BRAM使能信号作为触发信号即可:
在这里插入图片描述

step12. 添加完成后,我们选择触发值,把Value的值改为1即可。这个值得作用是当ILA等待触发信号时,只要该信号的值变为1就开始进行采样。
在这里插入图片描述

step13. 点击波形窗口上面的触发按钮,开始等待触发:
在这里插入图片描述

step14. 回到SDK中,选中Cortex-A53 #0这一项,因为这个是包含我们主程序的,然后点击运行按钮:
在这里插入图片描述

step15. 点击SDk Terminal 窗口,我们可以看到数据打印出来了:
在这里插入图片描述

step16. 接下我们看看内存中的数据。BRAM在内存中映射的首地址为0xB0000000,点击右下角Memory中的加号:
在这里插入图片描述

step17. 然后输入该地址,点击OK:
在这里插入图片描述

step18. 可以看到数据确实如此:
在这里插入图片描述

step19. 然后看vivado工程中的波形:
在这里插入图片描述

step20. 每当en使能信号有效时,进行数据写入,具体波形读者自行分析:
在这里插入图片描述

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值