BRAM的使用

article/2025/10/9 12:21:21

使用Block Memory Generator IP核,PL读取BRAM数据

软件环境:Vivado 2018.3

IP核:Block Memory Generator 8.4(Rev.2)

1、点击IP Catalog
在这里插入图片描述

2、搜索”Block Memory Generator“双击选择RAMs & ROMs & BRAM下的IP核

3、配置IP核为Simple Dual Port RAM,Width为8,Depth为9,load数据文件init.coe,点击OK

init.coe

memory_initialization_radix=16;
memory_initialization_vector=00 01 02 03 04 05 06 07 08;

4、点击Genrate

5、blk_mem_gen_0.veo中即IP核调用方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y445xUcU-1578552806722)(8.png)]

6、新建ram_top.v

module ram_top(input clk,input ena,input wea,input [3:0] addra,input [7:0] dina,input enb,input [3:0] addrb,output [7:0] doutb  );
blk_mem_gen_0 my_ram(.clka(clk),     // input wire clka.ena(ena),      // input wire ena.wea(wea),      // input wire [0 : 0] wea.addra(addra),  // input wire [3 : 0] addra.dina(dina),    // input wire [7 : 0] dina.clkb(clk),     // input wire clkb.enb(enb),      // input wire enb.addrb(addrb),  // input wire [3 : 0] addrb.doutb(doutb)   // output wire [7 : 0] doutb
);endmodule

7、新建仿真文件tb_ram_top.v

`timescale 1ns / 1psmodule tb_ram_top;// ram_top Parameters
parameter PERIOD  = 10;// ram_top Inputs
reg   clk                                  = 0 ;
reg   ena                                  = 0 ;
reg   wea                                  = 0 ;
reg   [3:0]  addra                         = 0 ;
reg   [7:0]  dina                          = 0 ;
reg   enb                                  = 0 ;
reg   [3:0]  addrb                         = 0 ;// ram_top Outputs
wire  [7:0]  doutb                         ;initial
beginforever #(PERIOD/2)  clk=~clk;
endinitial
begin#(PERIOD*2) ena  =  1; enb = 1;
endram_top  u_ram_top (.clk                     ( clk          ),.ena                     ( ena          ),.wea                     ( wea          ),.addra                   ( addra  [3:0] ),.dina                    ( dina   [7:0] ),.enb                     ( enb          ),.addrb                   ( addrb  [3:0] ),.doutb                   ( doutb  [7:0] )
);initial
begin#20 addrb = 4'd00;#20 addrb = 4'd01;#20 addrb = 4'd02;#20 addrb = 4'd03;#20 addrb = 4'd04;#20 addrb = 4'd05;#20 addrb = 4'd06;#20 addrb = 4'd07;#20 addrb = 4'd08;
endendmodule

8、运行仿真

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0oksmTV4-1578552806725)(9.png)]

附录1 coe文件

在某些IP核的配置中,需要使用COE(Coefficient)文件来传递参数, COE文件是一种ASCII文本文件,文件头部定义数据基数(Radix),可以是2、10或16。数据以向量的形式给出,每个向量以分号结尾。Vivado会解析COE文件格式,并在生成IP核时导出相关的MIF格式文件,用于行为级仿真。

block memory coe文件格式

memory_initialization_radix=10;   -->文件存储数据的进制,10即为10进制
memory_initialization_vector =    -->数据向量65534,65533,……,65532,65528;   -->所存储的10进制数据,每个数据使用逗号隔开,最后分号结束

利用Matlab生成coe文件

clc
width=16;                                             %rom的位宽
depth=1024;                                           %rom的深度
x=linspace(0,2*pi,depth);                             %在一个周期内产生1024个采样点
y_cos=cos(x);                                         %生成余弦数据
y_cos=round(y_cos*(2^(width-1)-1))+2^(width-1)-1;     %将余弦数据全部转换为整数
fid=fopen('C:/Users/dell/Desktop/cos_coe.coe','w');   %创建coe文件
fprintf(fid,'%d,\n',y_cos);                           %向coe文件中写入数据
fclose(fid);                                          %关闭.coe文件

利用记事本编辑生成的coe文件,在前两行添加下面的内容并将最后的逗号改为分号。

memory_initialization_radix=10;
memory_initialization_vector =

最终coe文件为

memory_initialization_radix=10;
memory_initialization_vector =
65534,
65533,
.....,
65334,
65287;

参考

[1] Xilinx Block Memory Generator v8.4 LogiCORE IP Product Guide

[2] coe文件与mif文件的区别和联系

[3] Matlab生成Xilinx Rom IP CORE的初始化内容coe文件

[4] coe文件使用方法

[5] 单口 RAM、伪双口 RAM、真双口 RAM、单口 ROM、双口 ROM区别


http://chatgpt.dhexx.cn/article/OwRI9osm.shtml

相关文章

FPGA — BRAM学习笔记—读写操作

使用软件: Vivado 开发板: EGO1采用Xilinx Artix-7系列XC7A35T-1CSG324C FPGA BRAM笔记 BRAM介绍同步双端口BRAMBRAM读写操作(1)读操作(2)写操作(3)写模式写优先模式读优先模式不变模式 双端口块内存接口BRAM IP的使用及仿真验证IP核使用coe文件将IP核添…

FPGA从入门到精通(8)-BRAM

所使用EDA软件:VIVADO2018.3 FPGA型号:xc7a35tcsg325-2 很久没写了,随便写一篇BRAM的吧。说到BRAM ,很多人都喜欢拿它来DRAM比较 ,两者都有啥优缺点,其实我也拿不准。不过一般来说,存储较大的数…

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

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之间进行数据的交换。Zyn…

FPGA设计中BRAM(Block RAMs)资源的使用(综合为BRAM)

FPGA设计中BRAM(Block RAMs)资源的使用 RAM分为BRAM(Block RAMs)和DRAM(Distributed RAM),即块RAM与分布式RAM,这两个差别在于BRAM是FPGA上固有的一些存储资源(针对不同型…

web测试与app测试的区别

目录 前言 首先从系统架构来看 专项测试 安装、卸载、更新: 界面操作: 前言 仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的。那么区别在哪里呢? 我个人觉得就是由于载体不一样,所以系统测试和…

APP测试与WEB测试

APP测试与WEB测试的区别(异同) 相同点: 功能测试层面而言:APP测试和web测试都是使用相同的测试用例测试方法(都用到等价类划分、边界值分析、正常和异常情况去考虑测试点) UI界面测试:都需要按照原型图和设计图检查UI…

web测试,App测试,小程序测试区别

最近项目真的太忙了,不过,今天无论如何我都要更文章了,谢谢大家的支持,不断努力进步 这篇文章,我就是要梳理一下,web测试,app测试,和小程序的区别 话不多说,上主题 web…

WEB端与移动端测试区别和总结

WEB端与移动端测试区别总结如下: 1、系统架构 WEB端 B/S结构,WEB端的前端一般不做端的区分 WEB端的上线不管是预发布还是N环上线,server上线后,前端同步更新,一般是不存在多个版本的问题; 移动端 C/S结构,移…

Apifox简单了解——WEB端测试的集大成者

文章目录 0 引入1、Postman2、Swagger (丝袜哥)3、Mock4、JMeter5、Apifox6、引用 0 引入 Apifox Postman Swagger Mock JMeter 1、Postman 1 作用 Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,简单易用的接口测试…

web测试的基本流程

1、web测试流程: (1)web测试 1)参与一个web新项目的测试前,先搜集测试相关的资料,包括原型图、各种需求文档、业务相关等需求相关材料 2)结合第一步搜集到的需求相关资料,自行熟悉系统,同时列出不明白的点,…

Web端测试常用方法

介绍下工作中,Web端测试所涉及到的方法: 前言:Web测试常用的方法,兼容性测试、安全性测试、可用性测试 & 逻辑功能测试 1 > 兼容性测试 先说下兼容性测试,工作中在测试时,一般涉及操作系统测试、浏…

web端测试经验(项目实战经验)

软件测试相信大家已经有一定的了解了,无非就是找bug 找缺陷 找问题 找这个程序(前端、后端)的不足点 以及不人性化的地方 ,由我们监测并提出有效的建议给项目进行缺陷修复以及优化点。软件测试大体分为Web、App两个,当…

这可能是最全的Web测试各个测试点,有这一篇就够了

前言 什么是Web测试? Web测试测试Web或Web应用程序的潜在错误。它是在上线前对基于网络的应用程序进行完整的测试。 Web测试检查 功能测试 易用性测试 接口测试 性能测试 安全测试 兼容性测试 1、功能测试 测试网页中的所有链接、数据库连接、网页中用于提交或从…

【转载】 web项目测试

前言 之前说了APP项目的测试,今天来总结一下web项目的测试,其实大多数过程是差不多类似的。对比平常移动端手机的高频率使用来说,对于部分人使用pc端浏览器的概率就不会这么高,讲APP项目测试的时候没怎么涉及到网络协议部分的介绍…

Web端测试方法

web端通用测试点请移步 1. Web 测试的总体策略 2. Web 测试的范围 √ 功能 √ 性能 √ 界面 √ 兼容性 √ 安全性 √ DB √ 文档 2.1 功能测试 ☆ 功能测试主要从链接、表单、Cookies、设计语言、数据库、文件上传等方面进行。 2.1.1 链接 ☆ 链接也称超链接,…

Redis集群 关闭和重启

1、创建好的redis集群,一下是正常运行的3主3从服务器 2、正常关闭集群服务器 [rootca01 redis-cluster]# cat stopall.sh cd 7001 ./redis-cli -p 7001 shutdown cd .. cd 7002 ./redis-cli -p 7002 shutdown cd .. cd 7003 ./redis-cli -p 7003 shutdown cd .. c…

叫你别随便重启Redis!!!怎么样,数据全丢了吧~~~

目录 事情是这样的... Redis持久化数据的两种模式 一、RDB模式 二、AOF模式 三、RDB和AOF之间的关系 四、问题回顾分析 那么该如何开启AOF增量备份模式呢? 解决方法: 1、登录到redis 2、在线修改AOF开关 3、查看数据 事情是这样的... 今天,跑…

redis集群 服务器重启测试

redis集群 服务器重启测试 1、集群规划:2台服务器 每台服务器运行3个redis实例2、重启2台服务器后redis实例没有自动重启最后一对主从节点比较 重启实例后和之前的主从分配 3、再次重启2台服务器4、主从同步测试 1、集群规划:2台服务器 每台服务器运行3个…

启动redis

目录 could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接 解决办法 启动效果 今天下载了若依框架,本来想运行一下看看效果,结果出现下列问题 org.springframework.beans.factory.UnsatisfiedDependencyExcept…

Redis集群的关闭、启动、重启等相关指令

目录 关闭 启动 重启 (保留原有集群的)重启 (删除原有集群的)重启 集群相关指令 查看集群相关指令 查看集群状态信息 查看集群节点信息 关闭: 方式一:进入redis后,使用SHUTDOWN指令或SHUTDOWN SAVE指令或SHUTDOWN NOSAVE指令。 方式二(不…