Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据

  • 一,Xilinx BRAM介绍
    • 二,BRAM对应的IP核调用和使用
      • 1,BRAM对应的IP核介绍
      • 2,BMG例化IP核的调用

一,Xilinx BRAM介绍

BRAM 就是Block Memory,是Zynq的PL端的存储RAM单元。可以利用BRAM,在PS和PL之间进行数据的交换。Zynq中还有一类存储器,称为分布式随机访问存储器(DRAM)。由于BRAM可以在PS和PL之间传递数据,而利用PS,ZYNQ可以从外部接收数据,考虑到未来的实时传输的需求,从BRAM开始学起。

二,BRAM对应的IP核调用和使用

1,BRAM对应的IP核介绍

Vivado软件中包含有三种类型的 IP核,包括数据处理类IP核、驱动类IP核、存储类IP核。与BRAM对应的存储型IP核是Block Memory Generator(BMG),可以在IP Catalog中找到,在建立好工程的基础上寻找并打开BMG核,如下:

1.1,Basic窗口功能介绍
(1)在component name后的框里输入将要定制的BMG IP核的名称;
(2)在Memory Type选框中有四种选项:单口RAM、单双口RAM、真双口RAM、单口ROM、双口ROM。


图1 单口 RAM

图2 简化双口 RAM A 口写入数据,B 口读数据


图3 真双口 RAM A,B 任意一个口都可以读写数据,可从 A 写入,B 读数据

这里选择单口RAM即可。
(3)Interface Type表示BMG IP核的接口类型,如果用PL调用BRAM,选择Native。如果用PS通过PL来调用BRAM,则选择AXI4。这里选择Native。
(4)ECC Options表示纠错编码选项,主要调整BMG支持的软错误纠正控制(软ECC)模块的实现和使用,一般不会使用,除非对系统可靠性要求很高的场景中才会考虑使用。这里不进行调整。
(5)写使能和算法选项同样不做任何修改。
1.2,Port A Options窗口介绍

(1)写宽度和读宽度表示每一个存储地址中存储数据的大小,写深度和读深度表示存储地址的数目。这要根据需要预先存入的数据的大小来设定
(2)操作模式选框要选“读优先”,这是因为打算以.coe文件来初始化BRAM,程序中不再需要对BRAM进行写,只进行读。
(3)使能端口类型选框,其作用是选择是否加入ENA引脚,该引脚可看做是BMG的开关信号的输入引脚。为了方便,选择“总是使能”,这样,BMG就会一直处于工作状态。
1.3,其他选项窗口介绍

![(https://img-blog.csdnimg.cn/20190521151657631.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTUyNQ==,size_16,color_FFFFFF,t_70)
(1)RAM内存空间的初始化可以通过装载.coe文件,文件的内容如下:
MEMORY_INITIALIZATION_RADIX=16; //表示数据的进制类型
MEMORY_INITIALIZATION_VECTOR= //表示存储的数据
7ADB,BDB2,5646,88D5,74E9,D990,481D,69A9,2DA4,E097,…
由于存储的数据共有3191个,所以Port A Options窗口中的数据深度设为3191。
.coe文件可以借助matlab来得到。部分关键代码如下:

r = dec2hex(x2);
fid = fopen('text.coe','w');
fprintf(fid,'MEMORY_INITIALIZATION_RADIX=16;\n');
fprintf(fid,'MEMORY_INITIALIZATION_VECTOR=\n');
for i = 1:3191fprintf(fid,r(i,:));if i==3191fprintf(fid,';');elsefprintf(fid,',');endif mod(i,15)==0fprintf(fid,'\n');end
end

(2)其余部分不需要进行修改。
最后点击OK,完成BMG的设置。接着会出现Generate Output Products对话框:

**综合选项要选成全局型的。**然后点击“生成”按钮。

2,BMG例化IP核的调用

(1)在IP Sources文件夹中找到.veo文件,打开;

(2)复制BRAM0的例化verilog代码(下图选中区域);

(3)在工程中新建仿真文件,即testbench文件;

(4)读懂BRAM“写优先模式”的时序图,并编写testbench。

,testbench代码如下:

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date:
// Design Name:
// Module Name:
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module Bram_test();
//Testbench时钟信号
parameter size = 100;
reg clka = 0;
reg wea = 0;
reg [11:0] addra = 12'h000;
wire [15:0] douta; //输出信号设置为wire垿
always #10 clka <= ~clka;
initialbegin#45 wea = 1;repeat(size)begin#20 addra=addra+1;endwea = 0;end           BRAM0 My_Bram (.clka(clka),    // input wire clka.wea(wea),      // input wire [0 : 0] wea.addra(addra),  // input wire [11 : 0] addra.douta(douta),  // output wire [15 : 0] douta.dina());
endmodule

(5)将testbench文件设为顶层文件,并进行行为仿真;

(6)波形仿真结果如下

Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据相关推荐

  1. zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM

    本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果 ...

  2. zynqpl端时钟_第十二章 ZYNQ-MIZ702 PS读写PL端BRAM

    本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果 ...

  3. ZYNQ-基于BRAM的PS和PL数据交互

    学习内容 本文介绍关于AXI BRAM控制器的相关内容,针对数据量较少.地址不连续.长度不规则的情况,通过 BRAM 来进行数据的交互. 开发环境 vivado 18.3&SDK,PYNQ-Z ...

  4. 米联客 ZYNQ/SOC 精品教程 S02-CH19 利用BRAM进行PS与PL间数据交互

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  5. 【FPGA ZYNQ Ultrascale+ MPSOC教程】33.BRAM实现PS与PL交互

    原创声明: 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(www.alinx.com). 适用于板卡型号: AXU2CGA/AXU2CGB/ ...

  6. ZYNQ学习之路4.ZYNQ通过GP口读取PL内部RAM数据

    实验环境:window 7 64 bit, vivado 2017.1, ZTURN board. 参考手册:Xilinx Distributed Memory Generator 在ZYNQ开发中, ...

  7. FPGA----ZCU106基于axi-hp通道的pl与ps数据交互(全网唯一最详)

    1.大家好,今天给大家带来的内容是,基于AXI4协议的采用AXI-HP通道完成PL侧数据发送至PS侧(PS侧数据发送至PL侧并没有实现,但是保留了PL读取PS测数据的接口) 2.如果大家用到SoC这种 ...

  8. ddr传输 pl ps_PS/PL之间的数据交互办法

    01概述 MPSoC是Xilinx基于16nm工艺推出的异构计算平台,由于灵活.稳定,在业界得到了广泛的使用.异构计算是一个比较新的领域,需要协调硬件设计.逻辑设计.软件设计,对工程师的要求很高.实际 ...

  9. pl/sql查询表数据,报错ORA-03115:不支持的网络数据类型或表示法

    今天测试人员遇到一个问题:pl/sql查询表数据,报错ORA-03115:不支持的网络数据类型或表示法 我在plsql上查询这张表是没有问题的,去看了那张表,发现有个字段类型是binary_doubl ...

最新文章

  1. 什么是java序列化_什么是Java序列化?为什么序列化?序列化有哪些方式?
  2. Python3网络爬虫快速入门实战解析(一小时入门 Python 3 网络爬虫)
  3. SAP评估控制 Valuation control
  4. 正点原子stm32f407开发板pcb图_#试用名单公布#正点原子ARM Linux开发板I.MX6ULL
  5. 深度学习——02、深度学习入门——经典卷积神经网络架构实例——VGGNet
  6. pdo mysql like_PHP PDO准备的语句-MySQL LIKE查询
  7. pytorch实现文本分类_使用变形金刚进行文本分类(Pytorch实现)
  8. Spring Boot面试题(2020最新版)
  9. OS X 平台的 8 个终端实用工具
  10. 前端学习(1556):ng-blnd指令
  11. 谈身份管理之进阶篇 - 快速了解从管理到治理的最佳方案
  12. java queue源码_Java高并发系列之ArrayBlockingQueue源码解析
  13. 7-17 航空公司VIP客户查询 (10 分)
  14. MATLAB求解分段函数
  15. 2020年居家实习日志
  16. python aks_使用环回aks和terraform构建基于打字稿的游戏后端
  17. ps滤镜之——马赛克
  18. C++ Primer Plus(第六版)第四章编程练习参考答案
  19. 保持青春的秘诀是有一颗不安份的心zz
  20. 穿越慕尼黑与耶路撒冷!英特尔 CEO 体验自家无人车

热门文章

  1. A ConvNet for the 2020s 论文阅读
  2. htttp常见得状态码
  3. 新的 self-attention 网络结构,Visual Attention Network
  4. code epi 光场_基于EPI的光场图像特征点检测方法与流程
  5. iPhone 升级到3.1.2固件后消失了设置IMAP邮件帐户的功能后,设置IMAP方式访问QQ邮箱的方法
  6. drupal 7宝典_乔治亚州如何优先考虑其Drupal 7平台的增强功能
  7. 【FPGA——基础篇】如何理解时序电路
  8. 从“存数”到“用数”,知识图谱为智慧城市注入新动能
  9. windows安装Java环境及Flightplot分析PX4飞行日志
  10. 零基础入门STM32编程——GPIO(五)