0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Distributed Memory Generator IP核簡介

CHANBAEK ? 來源: FPGA自學(xué)筆記分享 ? 作者: FPGA自學(xué)筆記分享 ? 2023-11-17 17:00 ? 次閱讀

Distributed Memory Generator IP 核采用 LUT RAM 資源創(chuàng)建各種不同的存儲(chǔ)器結(jié)構(gòu)。IP可用來創(chuàng)建只讀存儲(chǔ)器 (ROM)、單端口隨機(jī)存取存儲(chǔ)器 (RAM) 和簡單雙/雙端口 RAM 以及基于 SRL16 的 RAM。該IP的靈活的特性配置方式,使用戶能針對存儲(chǔ)器類型、數(shù)據(jù)寬度、存儲(chǔ)器大小、輸入/輸出選項(xiàng)和復(fù)位選項(xiàng)進(jìn)行定制。

Distributed Memory Generator IP GUI界面如下:

圖片

該IP的主要特性為:

  • 生成只讀存儲(chǔ)器 (ROM)、單、簡單雙和雙端口隨機(jī)存取存儲(chǔ)器 (RAM)以及基于SRL16 的 RAM;
  • 支持 16 到 65536 的數(shù)據(jù)深度;
  • 支持1 到 1024 之間的數(shù)據(jù)寬度;
  • 可選的寄存輸入和輸出;

這個(gè)IP的端口如下圖所示:

圖片

輸入:

a:地址輸入;

Dpra:雙端口時(shí)的讀地址;

d:數(shù)據(jù)輸入;

Clk:時(shí)鐘

Qdpo_clk:雙端口模式下的第二個(gè)時(shí)鐘

We:寫使能

i_ce:輸入時(shí)鐘使能;

Qspo_ce:輸出時(shí)鐘使能;

Qdpo_ce:第二個(gè)端口的輸出時(shí)鐘使能;

輸出:

Spo:寄存器模式下第一個(gè)端口的輸出數(shù)據(jù)

Dpo:非寄存器模式下第二個(gè)端口的輸出數(shù)據(jù)

Qspo:寄存器模式下第一個(gè)端口的輸出數(shù)據(jù)

Qdpo:寄存器模式下第二個(gè)端口的輸出數(shù)據(jù)

復(fù)位:

qspo_rst :寄存器模式下第一個(gè)端口的異步復(fù)位

qdpo_rst :寄存器模式下第二個(gè)端口的異步復(fù)位

qspo_srst:寄存器模式下第一個(gè)端口的同步復(fù)位

qdpo_srst :寄存器模式下第二個(gè)端口的同步復(fù)位

Distributed Memory在不同工作模式下的內(nèi)部情況如下圖所示:

ROM模式:

圖片

單端口RAM模式:

圖片

雙端口RAM模式:

圖片

簡單雙端口模式:

圖片

一般情況下常用簡單雙端口模式進(jìn)行跨時(shí)鐘域,簡單緩存的操作。用簡單雙端口實(shí)現(xiàn)一個(gè)簡單的跨時(shí)鐘域代碼如下:

// ============================================================
// File Name: tb_dist_mem_gen
// VERSION  : V1.0
// DATA     : 2023/8/18
// Author   : FPGA干貨分享
// ============================================================
// 功能:xilinx Distributed Memory Generator ip 代碼仿真
//       使用簡單雙端口實(shí)現(xiàn)一個(gè)簡單的跨時(shí)鐘域
// 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
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21538

    瀏覽量

    600454
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7402

    瀏覽量

    163385
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1350

    瀏覽量

    114369
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2140

    瀏覽量

    120682
  • IP核
    +關(guān)注

    關(guān)注

    4

    文章

    318

    瀏覽量

    49331
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Xilinx FPGA IP之Block Memory Generator功能概述

    Xilinx Block Memory Generator(BMG)是一個(gè)先進(jìn)的內(nèi)存構(gòu)造器,它使用Xilinx fpga中的嵌入式塊RAM資源生成面積和 性能優(yōu)化的內(nèi)存。
    的頭像 發(fā)表于 11-14 17:49 ?2239次閱讀
    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接口進(jìn)行說明。
    的頭像 發(fā)表于 11-14 18:25 ?1573次閱讀
    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是指:將一些在數(shù)字電路中常用但比較復(fù)雜的功能塊,如F
    發(fā)表于 07-06 14:15

    IP簡介

    IP簡介IP是指:將一些在數(shù)字電路中常用但比較復(fù)雜的功能塊,如FIR濾波器、SDRAM控制器、PCI接口等等設(shè)計(jì)成可修改參數(shù)的模塊,讓其
    發(fā)表于 07-15 14:46

    ISE不能生成IP

    '.Failed executing Tcl generator.然后我新建工程,添加IPcore時(shí)也是這個(gè)錯(cuò)誤,現(xiàn)在添加IP時(shí)都是這個(gè)錯(cuò)誤。我百度有個(gè)人有同樣的問題,他說解決了,但說的我不是很明白
    發(fā)表于 09-07 12:21

    新手求助,Nexys3開發(fā)板如何讀寫數(shù)據(jù)到Flash

    小弟剛接觸FPGA沒幾天,準(zhǔn)備照著《自己動(dòng)手寫CPU》這本書寫一個(gè)簡單的CPU。我現(xiàn)在開發(fā)用的是Xilinx,用Distributed Memory GeneratorIP
    發(fā)表于 11-04 19:56

    ARM embedded memory ip的產(chǎn)生,couldn't run spreadsheet generator to fetch results

    如題,在Linux下,產(chǎn)生memory,使用的是ARM的 memory IP 工具,無法產(chǎn)生,提示:couldn't run spreadsheet generator to fetc
    發(fā)表于 08-15 15:56

    如何使用System Generator來創(chuàng)建自己的IP

    嗨,我正在嘗試學(xué)習(xí)如何使用System Generator來創(chuàng)建自己的IP。首先,我在DocNav中找到了一個(gè)ug948-vivado-sysgen-tutorial文檔。我在哪里可以找到本文檔中描述的示例?我在安裝目錄中的“
    發(fā)表于 05-22 07:22

    使用Vivado調(diào)用ROM IP

    使用的是zynq7020    三、調(diào)用ROM IP 這里選擇Distributed Memory Generate      四、打開IP
    發(fā)表于 01-08 17:16

    ARM memory_compiler sram ip生成問題怎么解決呢

    ARM memory_compiler ip的產(chǎn)生,couldn't run spreadsheet generator to fetch results,這類問題怎么解決呢?????
    發(fā)表于 09-28 10:22

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

    the selected IP Block_Memory_Generator v3.1 to a more recent version.
    發(fā)表于 02-11 10:58 ?4172次閱讀
    如何在ISE中更新老版本的<b class='flag-5'>IP</b><b class='flag-5'>核</b>

    AXI接口簡介_AXI IP的創(chuàng)建流程及讀寫邏輯分析

    本文包含兩部分內(nèi)容:1)AXI接口簡介;2)AXI IP的創(chuàng)建流程及讀寫邏輯分析。 1AXI簡介(本部分內(nèi)容參考官網(wǎng)資料翻譯) 自定義IP
    的頭像 發(fā)表于 06-29 09:33 ?1.6w次閱讀
    AXI接口<b class='flag-5'>簡介</b>_AXI <b class='flag-5'>IP</b><b class='flag-5'>核</b>的創(chuàng)建流程及讀寫邏輯分析

    如何將IP模塊整合到System Generator for DSP中

    了解如何將Vivado HLS設(shè)計(jì)作為IP模塊整合到System Generator for DSP中。 了解如何將Vivado HLS設(shè)計(jì)保存為IP模塊,并了解如何將此IP輕松整合
    的頭像 發(fā)表于 11-20 05:55 ?3163次閱讀

    Vivado中xilinx_BRAM IP使用

    Vivado2017.2 中BRAM版本為 Block Memory Generator Specific Features 8.3。BRAM IP包括有5種類型:Single-p
    發(fā)表于 03-10 06:15 ?19次下載
    Vivado中xilinx_BRAM <b class='flag-5'>IP</b><b class='flag-5'>核</b>使用

    FPGA應(yīng)用之vivado三種常用IP的調(diào)用

    今天介紹的是vivado的三種常用IP:時(shí)鐘倍頻(Clocking Wizard),實(shí)時(shí)仿真(ILA),ROM調(diào)用(Block Memory)。
    發(fā)表于 02-02 10:14 ?3178次閱讀