FPGA的ram Xilinx的IP Block Memory Generator

server/2025/3/4 5:37:12/

        做过设计的对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/server/172261.html

相关文章

Sparsely-Gated Mixture-of-Experts Layer (MoE)论文解读与Pytorch代码实现

MoE解析 阅读论文:https://arxiv.org/pdf/1701.06538 OUTRAGEOUSLY LARGE NEURAL NETWORKS:THE SPARSELY-GATED MIXTURE-OF-EXPERTS LAYER 本文介绍了一种名为Sparsely-Gated Mixture-of-Experts Layer (MoE) 的神经网络组件,旨在通过条件计算&#xf…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(8)

详解(8) 初始化模块配置上下文(conf_ctx) cycle->conf_ctx ngx_pcalloc(pool, ngx_max_module * sizeof(void *));if (cycle->conf_ctx NULL) {ngx_destroy_pool(pool);return NULL;}1 分配模块配置上下文数组 cycle->…

kafka stream对比flink

Kafka Streams 和 Apache Flink 虽然都支持实时计算,但它们的定位、架构和适用场景存在显著差异。选择哪一个取决于具体的需求、场景和技术栈。以下是两者的核心区别和适用场景分析: 1. 定位与架构差异 Kafka Streams 定位:轻量级库&#x…

使用 Nginx 轻松处理跨域请求(CORS)

使用 Nginx 轻松处理跨域请求(CORS) 在现代 Web 开发中,跨域资源共享(CORS)是一种重要的机制,用于解决浏览器的同源策略限制。CORS 允许服务器声明哪些来源可以访问其资源,从而确保安全性与可用…

《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)

《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP) 在自然语言处理(NLP)领域,Transformer 架构的出现彻底改变了传统的序列建模方法。它不仅成为现代 NLP 的核心,还推动了诸如 BERT、…

在 Ubuntu 下通过 Docker 部署 Mastodon 服务器

引言 大家好,我是Hitch。今天咱们来聊聊如何在 Ubuntu 系统上通过 Docker 部署 Mastodon 服务器。Mastodon 是一个开源的社交网络平台,像 Twitter 但更自由。Docker 是一个强大的容器化工具,可以让我们轻松地打包和部署应用。接下来&#xf…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架实现one-stage目标检测模型SSD

SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上,SSD对于输入尺寸300x300的网络,达到74.3%mAP以及59FPS;对于512x512的网络,…

QT播放视频保持视频宽高比消除黑边

QT播放视频保持视频宽高比消除黑边 1、问题 在播放视频的时候,由于框架的大小发生变化,导致视频出现黑边很不好看。 因此需要像一种方法消除黑边 2、处理 1、读取视频的宽高比 2、设置视频的Widget的大小固定,Widget的宽高比和视频宽高比…