当前位置: 首页 > article >正文

FPGA的ram Xilinx的IP Block Memory Generator

        做过设计的对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.kler.cn/a/569741.html

相关文章:

  • GPIO及其应用
  • 使用Kubernetes部署Spring Boot项目
  • iOS 使用消息转发机制实现多代理功能
  • Android Hilt 高级用法
  • 系统架构设计师—计算机基础篇—进度管理
  • 决策树 vs 神经网络:何时使用?
  • Linux-基本指令2
  • 2024蓝桥杯省赛真题-封闭图形个数
  • 青少年编程与数学 02-010 C++程序设计基础 14课题、控制结构
  • PhotoShop2022进行布尔运算--学习日志
  • 网络安全词汇
  • 【新手向】从零开始学习Java(Day17)重写、重载与多态
  • java容器 LIst、set、Map
  • SpringCloud常用企业级别框架整合--上篇
  • Notepad++下载地址【亲测好用】
  • 【0005】Python变量详解
  • 25西医研究生复试面试问题汇总 西医专业知识问题很全! 西医试全流程攻略 西医考研复试调剂真题汇总
  • 【子网掩码计算器:Python + Tkinter 实现】
  • 机器学习数学基础:35.效度
  • Unix Domain Socket和eventfd