1. PS写入BRAM数据,PL读出BRAM数据 第一步:PL部分 我们只需要点击对应的VIO进行读即可 第二步:PS部分 上电后自动执行psWriteBram函数,便可完成PS写入BRAM前8个32位数据 voidpsWriteBram(){printf("This is psWriteBram function\r\n");// 向BRAM的前8个32位地址,分别写入11,12,13,14,15,16,17,18int...
//XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR是axi_bram_ctrl_1的地址,Xil_In32 通过控制axi_bram_ctrl_0,把blk_mem_gen_0里的数据读出来 //PS和PL可以在blk_mem_gen_0里共享数据 for( num=0; num<15; num++ ) { rev = Xil_In32(XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR + num*4); xil_prin...
BRAM(Block RAM)是 PL 端的存储器阵列,PL 可通过输出时钟、地址、读写控制等信号来对其进行读写操作,在 PS 端,处理器则可通过 AXI BRAM 控制器来实现对 BRAM 的读写,这样可以很方便的实现 PS 与 PL 之间的数据交互。 实验目的 PS 端随机写入一些数据到 BRAM PS 端读取写入的数据并输出到串口 控制PL 端...
//XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR是axi_bram_ctrl_1的地址,Xil_In32 通过控制axi_bram_ctrl_0,把blk_mem_gen_0里的数据读出来 //PS和PL可以在blk_mem_gen_0里共享数据 for( num=0; num<15; num++ ) { rev = Xil_In32(XPAR_BRAM_0_BASEADDR + num*4); xil_printf( "The data a...
PS端通过AXI BRAM Controller读取BRAM数据,CPU仅配置自定义的PL BRAM Controller的寄存器,不通过它读写数据。 PL端写数据进入BRAM,等待写入完成后产生一个GPIO中断通知PL端可以通过AXI BRAM Controller读写BRAM。 BRAM Controller设置 由于AXI4总线为字节询址,BRAM数据宽度设置也是32位,同样都是32位数据宽度,因此在映射...
1. BRAM介绍 BRAM 就是Block Memory,是Zynq的PL端的存储RAM单元,可以配置为双口RAM,用于实现Zynq中PS端到PL端的数据交互和共享,类似为Linux中的内存共享,也就是将数据写入共同可访问的数据空间,PS和PL端各自访问来达到信息交流的目的。 在这里我们有这样一种比较好的思维推荐:可以在一个BRAM中将一部分地址空间用...
本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果打印输出到串口终端显示。 涉及到AXI BRAM Controller 和 Block Memery Generator等IP的使用。
工程功能设计为PS 将串口接收到的数据写入 BRAM,然后从 BRAM 中读出数据,并通过串口打印出来;与此同时, PL 从 BRAM 中同样读出数据,并通过 ILA 来观察读出的数据与串口打印的数据是否一致。 系统框图如下: 硬件平台搭建 新建工程,创建 block design。
我们将使用Vivado工具创建一个IP,该IP将在PL中实现一个简单的数据处理逻辑,并将来自PS的数据写入BRAM。 以下是实现该功能的步骤: 1. 打开Vivado工具,并创建一个新的工程。选择“Create Project”选项,然后按照向导的指导完成工程的创建。 2. 在工程中创建一个新的Block Design,这将是我们用于设计IP的容器。 3....
Block RAM是PL部分的存储器阵列,为了与DRAM(分布式RAM)区分开,所以叫块RAM。 ZYNQ的每一个BRAM 36KB,7020的BRAM有140个(4.9M),7030有265个(9.3M),7045有545个(19.2M)。 每一个BRAM都有两个共享数据的独立端口,当然是可以配置的,可用于片内数据缓存、FIFO缓冲。