FPGA的ram Xilinx的IP Block Memory Generator

embedded/2025/3/4 19:11:06/

        做过设计的对memory都比较熟悉了,在Asic设计中通常是rom,ram,那这些rom,ram在FPGA的模式下面怎么做呢,有两种方法,一种就是自己写代码,用寄存器去搭,搭好后需要指定综合成block ram,另一种就是直接用Xilinx的IP block ram。

如何调用Xilinx的memory IP呢?

        1.打开Vivado界面左侧的PROJECT MANAGER -> IP catalog 搜索block memory generator如下图,点进去。

        出现如下选择的界面:

Basic里面有2个重要的选项:

        1.选择ram的总线类型:本地和AXI4

        Native(本地): 实现一个本地块存储器,没有总线,只有data和地址;

        AXI4:实现AXI4接口块存储器生成器内核。

        Generate address interface with 32 bits: 如果选中该项,则地址输入端口(addra和addrb)的位宽固定为32位。

        2.ram的类型,这里面有5个类型。

        Single-port RAM(单端口RAM),Single Dual-port RAM(单双口RAM),True Dual-port RAM(真双口RAM),Single-port ROM(单端口ROM), Dual-port ROM(双端口ROM)。

        Common Clock: 公共时钟。如果输入时钟 (clka和clkb) 由同一时钟缓冲器驱动时,可选择Common Clock选项。

Port A种有6个重要的选项:

        1.ram的进出也就是读写的位宽和深度,这个要和自己的设计相匹配,我这个图前面选的是单口的ram,选的不同界面不一样,但是基本的设置是一样的;

        2.操作模式,是先读还是先写还是不设置顺序;

        3.是有enable还是一直enable,这个是设置出的也就是读;

        4. Port [A|B] Optional Output Registers: 端口A/B的可选输出寄存器,选择要使用的输出寄存器级:

        Primitives Output Register: 基本输出寄存器,会在存储器之后插入输出寄存器,分别用于端口A和端口B的原语。

        Core Output Register: 核心输出寄存器,会为每个端口 (A或B) 在该端口的内存核心的输出上插入一个寄存器。选中时,使用FPGA片实现寄存器以寄存核心输出。

        5.是否设置reset pin,如果不设置这个将会被tie为0,也就是不reset。还可以设置reset的优先级。

        6.这是一个节省功率的选项,一般不用。

Other Options有4个重要的选项:

        1.memory的初始化,这个比较重要,就是看你需不需要初始化,一般来说是需要的,这里可以直接加入初始化的文件,文件的格式是.coe.在这里面你要指定进制和数据,如下:

memory_initialization_radix=16;//指定数据格式为十六进制的

memory_initialization_vector=

00000000,

……

00000000

数据中间用逗号隔开,最后一个没有逗号,然后把这个文件加入到IP中;

        2. Structural/UNISIM Simulation Model Options: 结构/UNISIM仿真模型选项。

        Collision Warnings: 碰撞警告功能。选择发生碰撞时结构仿真模型生成的警告消息和输出的类型。对于选项All,Warning_Only和Generate_X_Only,UNISIM模型中启用了碰撞检测功能,可以在任何条件下处理碰撞。如果选择NONE,则在模型中禁用碰撞检测功能。

        3. Behavioral Simulation Model Options: 行为模型仿真选项。选择时候的警告消息的类型。对于碰撞警告,选择模型是否应采用同步时钟。

Disable Collision Warnings:关闭碰撞警告。

Disable Out of Range Warnings:关闭超出范围警告。

        4. Dynamic Power Saving: 功率节省功能。在存储器长时间内未活动情况下实现静态功率节省。当存储器阵列进入睡眠模式时,要使用内存,就需要将sleep引脚设置为0以唤醒内存。

注:做efuse的fpga rom的时候就可以用这个IP,efuse是不受reset控制的,写完之后不能随着reset清零,而且只能写一次,就用这个单端口ram就可以。

        


http://www.ppmy.cn/embedded/169994.html

相关文章

【Spark+Hive】基于Spark大数据技术小红书舆情分析可视化预测系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目目标 三、算法介绍 四、开发技术介绍 五、项目创新点 六、项目展示 七、权威教学视频 源码获取方式在文章末尾 一、项目背景 在数字经济蓬勃发展的当下,社交电商平台小红书凭借其"内容电商"的独特模式,已…

Docker相关知识

Docker 如今已经应用到软件开发中很多地方,有必要了解一下其相关知识, 什么是docker?docker是一款可以将我们目标应用程序和该程序运行所需的配置和依赖库等环境信息打包成镜像并运行的软件工具; 什么是基础镜像?它只…

C++核心编程之文件操作

C核心编程之文件操作 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放。因此&#xff0c;我们需要通过文件来将数据持久化&#xff0c;能够有效地将数据保存到本地电脑某个地方。 C中对文件操作需要包含头文件#include<fstream> 文件类型分为…

SpringBoot集成Elasticsearch 7.x spring-boot-starter-data-elasticsearch 方式

SpringBoot集成Elasticsearch 7.x | spring-boot-starter-data-elasticsearch 方式 前言添加maven依赖配置application.properties测试实体类 方式一&#xff1a;继承 ElasticsearchRepository&#xff08;适合简单查询&#xff09; 直接使用想自定义自己的Repository接口 方式…

React Native从入门到进阶详解

React Native知识框架从入门到进阶的问题。首先需要结合我搜索到的资料来整理出结构化的内容。证据中有多本书籍和文章&#xff0c;可能会涉及不同的章节和重点&#xff0c;需要仔细梳理。 首先&#xff0c;根据邱鹏源的《React Native精解与实战》将知识分为入门和进阶两大部分…

Rust语言基础知识详解【五】

继上一篇对rust所有权的讲解之后&#xff0c;本节主要对接下来的引用与借用的知识做详细的介绍。 上节中提到&#xff0c;如果仅仅支持通过转移所有权的方式获取一个值&#xff0c;那会让程序变得复杂。 Rust 能否像其它编程语言一样&#xff0c;使用某个变量的指针或者引用呢…

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…

Spring MVC 返回数据

目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么&#xff1f;有什么关系&#xff1f; Servlet 是 java 官方定义的 web 开发的标准规范&#xff1b;Tomcat 是…