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
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593195
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161986
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1321

    浏览量

    113705
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119373
  • IP核
    +关注

    关注

    4

    文章

    317

    浏览量

    49043
收藏 人收藏

    评论

    相关推荐

    Xilinx FPGA IP之Block Memory Generator功能概述

    Xilinx Block Memory Generator(BMG)是一个先进的内存构造器,它使用Xilinx fpga中的嵌入式块RAM资源生成面积和 性能优化的内存。
    的头像 发表于 11-14 17:49 951次阅读
    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仿真

    上文对BMG ip的基本情况进行了简单的描述,本文通过例化仿真来实际使用功能一下这个IP
    的头像 发表于 11-14 18:24 723次阅读
    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 800次阅读
    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

    ip

    我想问一下,在quartus上直接调用IP和在qsys中用IP有什么区别?自个有点迷糊了
    发表于 08-07 10:09

    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

    Gowin DDR Memory Interface IP参考设计

    本次发布 Gowin DDR Memory Interface IP 参考设计及 IP CoreGenerator 支持调用 Gowin DDR Memory Interface
    发表于 10-08 07:17

    Gowin DDR2 Memory Interface IP参考设计

    本次发布 Gowin DDR2 Memory Interface IP 参考设计及 IP CoreGenerator 支持调用 Gowin DDR2 Memory Interface
    发表于 10-08 07:25

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

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