0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Distributed Memory Generator IP核简介

CHANBAEK 来源: FPGA自学笔记分享 作者: FPGA自学笔记分享 2023-11-17 17:00 次阅读

Distributed Memory Generator IP 核采用 LUT RAM 资源创建各种不同的存储器结构。IP可用来创建只读存储器 (ROM)、单端口随机存取存储器 (RAM) 和简单双/双端口 RAM 以及基于 SRL16 的 RAM。该IP的灵活的特性配置方式,使用户能针对存储器类型、数据宽度、存储器大小、输入/输出选项和复位选项进行定制。

Distributed Memory Generator IP GUI界面如下:

图片

该IP的主要特性为:

  • 生成只读存储器 (ROM)、单、简单双和双端口随机存取存储器 (RAM)以及基于SRL16 的 RAM;
  • 支持 16 到 65536 的数据深度;
  • 支持1 到 1024 之间的数据宽度;
  • 可选的寄存输入和输出;

这个IP的端口如下图所示:

图片

输入:

a:地址输入;

Dpra:双端口时的读地址;

d:数据输入;

Clk:时钟

Qdpo_clk:双端口模式下的第二个时钟

We:写使能

i_ce:输入时钟使能;

Qspo_ce:输出时钟使能;

Qdpo_ce:第二个端口的输出时钟使能;

输出:

Spo:寄存器模式下第一个端口的输出数据

Dpo:非寄存器模式下第二个端口的输出数据

Qspo:寄存器模式下第一个端口的输出数据

Qdpo:寄存器模式下第二个端口的输出数据

复位:

qspo_rst :寄存器模式下第一个端口的异步复位

qdpo_rst :寄存器模式下第二个端口的异步复位

qspo_srst:寄存器模式下第一个端口的同步复位

qdpo_srst :寄存器模式下第二个端口的同步复位

Distributed Memory在不同工作模式下的内部情况如下图所示:

ROM模式:

图片

单端口RAM模式:

图片

双端口RAM模式:

图片

简单双端口模式:

图片

一般情况下常用简单双端口模式进行跨时钟域,简单缓存的操作。用简单双端口实现一个简单的跨时钟域代码如下:

// ============================================================
// File Name: tb_dist_mem_gen
// VERSION  : V1.0
// DATA     : 2023/8/18
// Author   : FPGA干货分享
// ============================================================
// 功能:xilinx Distributed Memory Generator ip 代码仿真
//       使用简单双端口实现一个简单的跨时钟域
// delay : 
// ============================================================




`timescale 1ns/100ps
module tb_dist_mem_gen ;


reg             clka   = 'd0 ;
reg             ena    = 'd1 ; 
reg  [0 : 0]    wea    = 'd1 ; 
reg  [5 : 0]    addra  = 'd0 ;
reg  [15 : 0]   dina   = 'd0 ;
reg             clkb   = 'd1 ;
reg             enb    = 'd1 ; 
reg  [5 : 0]    addrb  = 'd0 ;
wire [15 : 0]   doutb        ;




reg [2:0]   S_addr_a_flag   ='d0 ;
reg         S_a_flag        ='d0 ;
reg [2:0]   S_a_flag_2_b    ='d0 ;
reg         S_b_flag        ='d0 ;


reg [2:0]   S_clk_cnt8      ='d3   ;


always #1 clka = ~clka;
always #1 clkb = ~clkb;




//----------- clk_a  ---// 
always @(posedge clka)
    if(ena && wea)
        begin
            addra <= addra + 'd1;
            dina  <= dina + 'd1;
        end


always @(posedge clka)
    S_addr_a_flag[0] <= (addra == 6'd10);

always @(posedge clka)
    S_addr_a_flag[2:1] <= S_addr_a_flag[1:0] ; 


always @(posedge clka)
    S_a_flag <= |S_addr_a_flag ;


//----------- clk_b  ---// 
always @(posedge clkb)
    S_a_flag_2_b <= {S_a_flag_2_b[1:0],S_a_flag} ;


always @(posedge clkb)
    S_b_flag <= (!S_a_flag_2_b[2])&& S_a_flag_2_b[1] ;

always @(posedge clkb)
    if((S_clk_cnt8 > 3'd2)&&S_b_flag)
        S_clk_cnt8 <= 3'd2;
    else 
        S_clk_cnt8 <= S_clk_cnt8 + 'd1;




always @(posedge clkb)
    if(S_clk_cnt8 == 3'd1)
        addrb <= 'd0;
    else 
        addrb <= addrb + 'd1;




dist_mem_gen_0 dist_mem_gen_0 (
  .a        (addra      ), // input wire [5 : 0] a
  .d        (dina       ), // input wire [15 : 0] d
  .dpra     (addrb      ), // input wire [5 : 0] dpra
  .clk      (clka       ), // input wire clk
  .we       (wea        ), // input wire we
  .qdpo_clk (clkb       ), // input wire qdpo_clk
  .qdpo     (doutb      )  // output wire [15 : 0] dpo
);


endmodule
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602969
  • 存储器
    +关注

    关注

    38

    文章

    7484

    浏览量

    163759
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1368

    浏览量

    114639
  • Xilinx
    +关注

    关注

    71

    文章

    2167

    浏览量

    121293
  • IP核
    +关注

    关注

    4

    文章

    327

    浏览量

    49485
收藏 人收藏

    评论

    相关推荐

    Xilinx FPGA IP之Block Memory Generator功能概述

    Xilinx Block Memory Generator(BMG)是一个先进的内存构造器,它使用Xilinx fpga中的嵌入式块RAM资源生成面积和 性能优化的内存。
    的头像 发表于 11-14 17:49 2737次阅读
    Xilinx FPGA <b class='flag-5'>IP</b>之Block <b class='flag-5'>Memory</b> <b class='flag-5'>Generator</b>功能概述

    Xilinx FPGA IP之Block Memory Generator AXI接口说明

    之前的文章对Block Memory Generator的原生接口做了说明和仿真,本文对AXI接口进行说明。
    的头像 发表于 11-14 18:25 1820次阅读
    Xilinx FPGA <b class='flag-5'>IP</b>之Block <b class='flag-5'>Memory</b> <b class='flag-5'>Generator</b> AXI接口说明

    IP简介

    本帖最后由 eehome 于 2013-1-5 09:59 编辑 IP简介IP是指:将一些在数字电路中常用但比较复杂的功能块,如F
    发表于 07-06 14:15

    IP简介

    IP简介IP是指:将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器、SDRAM控制器、PCI接口等等设计成可修改参数的模块,让其
    发表于 07-15 14:46

    ISE不能生成IP

    '.Failed executing Tcl generator.然后我新建工程,添加IPcore时也是这个错误,现在添加IP时都是这个错误。我百度有个人有同样的问题,他说解决了,但说的我不是很明白
    发表于 09-07 12:21

    新手求助,Nexys3开发板如何读写数据到Flash

    小弟刚接触FPGA没几天,准备照着《自己动手写CPU》这本书写一个简单的CPU。我现在开发用的是Xilinx,用Distributed Memory GeneratorIP
    发表于 11-04 19:56

    ARM embedded memory ip的产生,couldn't run spreadsheet generator to fetch results

    如题,在Linux下,产生memory,使用的是ARM的 memory IP 工具,无法产生,提示:couldn't run spreadsheet generator to fetc
    发表于 08-15 15:56

    如何使用System Generator来创建自己的IP

    嗨,我正在尝试学习如何使用System Generator来创建自己的IP。首先,我在DocNav中找到了一个ug948-vivado-sysgen-tutorial文档。我在哪里可以找到本文档中描述的示例?我在安装目录中的“
    发表于 05-22 07:22

    使用Vivado调用ROM IP

    使用的是zynq7020    三、调用ROM IP 这里选择Distributed Memory Generate      四、打开IP
    发表于 01-08 17:16

    ARM memory_compiler sram ip生成问题怎么解决呢

    ARM memory_compiler ip的产生,couldn't run spreadsheet generator to fetch results,这类问题怎么解决呢?????
    发表于 09-28 10:22

    如何在ISE中更新老版本的IP

    the selected IP Block_Memory_Generator v3.1 to a more recent version.
    发表于 02-11 10:58 4226次阅读
    如何在ISE中更新老版本的<b class='flag-5'>IP</b><b class='flag-5'>核</b>

    AXI接口简介_AXI IP的创建流程及读写逻辑分析

    本文包含两部分内容:1)AXI接口简介;2)AXI IP的创建流程及读写逻辑分析。 1AXI简介(本部分内容参考官网资料翻译) 自定义IP
    的头像 发表于 06-29 09:33 1.6w次阅读
    AXI接口<b class='flag-5'>简介</b>_AXI <b class='flag-5'>IP</b><b class='flag-5'>核</b>的创建流程及读写逻辑分析

    如何将IP模块整合到System Generator for DSP中

    了解如何将Vivado HLS设计作为IP模块整合到System Generator for DSP中。 了解如何将Vivado HLS设计保存为IP模块,并了解如何将此IP轻松整合
    的头像 发表于 11-20 05:55 3236次阅读

    Vivado中xilinx_BRAM IP使用

    Vivado2017.2 中BRAM版本为 Block Memory Generator Specific Features 8.3。BRAM IP包括有5种类型:Single-p
    发表于 03-10 06:15 19次下载
    Vivado中xilinx_BRAM <b class='flag-5'>IP</b><b class='flag-5'>核</b>使用

    FPGA应用之vivado三种常用IP的调用

    今天介绍的是vivado的三种常用IP:时钟倍频(Clocking Wizard),实时仿真(ILA),ROM调用(Block Memory)。
    发表于 02-02 10:14 3506次阅读