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

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

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

Xilinx FPGA IP之Block Memory Generator仿真

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

上文對BMG ip的基本情況進行了簡單的描述,本文通過例化仿真來實際使用功能一下這個IP。

首先使用簡單雙端口BRAM實現(xiàn)一個簡單的跨時鐘域操作:將16bit的a時鐘域的數(shù)據(jù)跨到b時鐘域,b時鐘頻率是a時鐘頻率的一半,為了操作方便,直接將b數(shù)據(jù)位寬擴展到32bit(這樣就不用增加控制信息,數(shù)據(jù)流是滿的)。BMG IP輸入輸出位寬比支持:1:32, 1:16, 1:8, 1:4, 1:2, 1:1, 2:1, 4:1, 8:1, 16:1, 32:1.位寬變換時BMG的AB端口數(shù)據(jù)映射關(guān)系如下:

圖片

例化一個簡單的ip,設(shè)置如下。這里選擇簡單雙端口模式的本地接口,采用面積最小原則,端口A為16bit,深度為16,ram大小就是16*16bit,控制信號就使用ENA。對于端口B,將位寬設(shè)置為32bit,此時深度自動變換為8,使用寫優(yōu)先模式,同樣使能ENB端口作為控制端口。

圖片

圖片

圖片

這里對續(xù)寫模式再做一個簡單的說明,支持WRITE_FIRST, READ_FIRST或NO_CHANGE三種模式,這三種模式的讀寫時序如下圖所示。

圖片

圖片

圖片

WRITE_FIRST模式下,寫優(yōu)先級最高,同一地址,一旦寫入,數(shù)據(jù)直接會透傳到輸出端。READ_FIRST模式,數(shù)據(jù)輸出端口會鎖存輸出數(shù)據(jù),有數(shù)據(jù)寫入時,輸出數(shù)據(jù)是上一次的數(shù)據(jù)。NO_CHANGE模式下,在寫使能拉高后,輸出將保持開始拉高時刻的數(shù)據(jù),保持不變。注意這三種模式針對的是單端口,即端口A或者B。

編寫一個簡單的仿真測試代碼如下:

// ============================================================
// File Name: tb_blk_mem_gen_sdp
// VERSION  : V1.0
// DATA     : 2023/8/5
// Author   : FPGA干貨分享
// ============================================================
// 功能:xilinx blk_mem_gen_sdp ip 代碼仿真
//       使用簡單雙端口實現(xiàn)一個簡單的跨時鐘域
// delay : 
// ============================================================




`timescale 1ns/100ps
module tb_blk_mem_gen_sdp ;


reg             clka   = 'd0 ;
reg             ena    = 'd1 ; 
reg  [0 : 0]    wea    = 'd1 ; 
reg  [3 : 0]    addra  = 'd0 ;
reg  [15 : 0]   dina   = 'd0 ;
reg             clkb   = 'd0 ;
reg             enb    = 'd1 ; 
reg  [2 : 0]    addrb  = 'd0 ;
wire [31 : 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 #2 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 == 4'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;




//----------- Begin Cut here for INSTANTIATION Template ---// 
blk_mem_gen_sdp blk_mem_gen_sdp (
  .clka     (clka       ), // input wire clka   
  .ena      (ena        ), // input wire ena     
  .wea      (wea        ), // input wire [0 : 0] wea     
  .addra    (addra      ), // input wire [3 : 0] addra 
  .dina     (dina       ), // input wire [15 : 0] dina   
  .clkb     (clkb       ), // input wire clkb   
  .enb      (enb        ), // input wire enb     
  .addrb    (addrb      ), // input wire [2 : 0] addrb 
  .doutb    (doutb      )  // output wire [31 : 0] doutb 
);


endmodule

仿真結(jié)果如下:clkb時鐘頻率是clka時鐘頻率的一半,dataa數(shù)據(jù)位寬16bit,datab數(shù)據(jù)位寬32bit,輸入輸出均為滿速率,同時在代碼中增加了防抖保護措施,防止跨時鐘域中因為出現(xiàn)時鐘抖動而產(chǎn)生的數(shù)據(jù)異常問題。

圖片

以上就是Xilinx Block Memory Generator(BMG) IP的仿真。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601239
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2155

    瀏覽量

    120853
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4023

    瀏覽量

    133337
  • 時鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1714

    瀏覽量

    131275
收藏 人收藏

    評論

    相關(guān)推薦

    XILINX FPGA IPClocking Wizard詳解

    鎖相環(huán)基本上是每一個fpga工程必不可少的模塊,之前文檔xilinx 7 系列FPGA時鐘資源對xilinx fpga的底層時鐘資源做過說明
    發(fā)表于 06-12 17:42 ?5117次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>Clocking Wizard詳解

    XILINX FPGA IPMMCM PLL DRP時鐘動態(tài)重配詳解

    上文XILINX FPGA IPClocking Wizard詳解說到時鐘IP的支持動態(tài)重配的,本節(jié)介紹通過DRP進行MMCM PLL的重
    發(fā)表于 06-12 18:24 ?1w次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>MMCM PLL DRP時鐘動態(tài)重配詳解

    Xilinx FPGA IPBlock Memory Generator功能概述

    Xilinx Block Memory Generator(BMG)是一個先進的內(nèi)存構(gòu)造器,它使用Xilinx
    的頭像 發(fā)表于 11-14 17:49 ?2443次閱讀
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b><b class='flag-5'>Block</b> <b class='flag-5'>Memory</b> <b class='flag-5'>Generator</b>功能概述

    Xilinx FPGA IPBlock Memory Generator AXI接口說明

    之前的文章對Block Memory Generator的原生接口做了說明和仿真,本文對AXI接口進行說明。
    的頭像 發(fā)表于 11-14 18:25 ?1640次閱讀
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b><b class='flag-5'>Block</b> <b class='flag-5'>Memory</b> <b class='flag-5'>Generator</b> AXI接口說明

    Distributed Memory Generator IP核簡介

    Distributed Memory Generator IP 核采用 LUT RAM 資源創(chuàng)建各種不同的存儲器結(jié)構(gòu)。IP可用來創(chuàng)建只讀存儲器 (ROM)、單端口隨機存取存儲器 (RA
    的頭像 發(fā)表于 11-17 17:00 ?1766次閱讀
    Distributed <b class='flag-5'>Memory</b> <b class='flag-5'>Generator</b> <b class='flag-5'>IP</b>核簡介

    XILINX FPGA IPAXI Traffic Generator

    AXI Traffic Generator IP 用于在AXI4和AXI4-Stream互連以及其他AXI4系統(tǒng)外設(shè)上生成特定序列(流量)。它根據(jù)IP的編程和選擇的操作模式生成各種類型的AXI事務(wù)。是一個比較好用的AXI4協(xié)議測
    的頭像 發(fā)表于 11-23 16:03 ?2260次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>AXI Traffic <b class='flag-5'>Generator</b>

    Xilinx FPGA無痛入門,海量教程免費下載

    -- 波形發(fā)生器IP核CORDIC(正弦波)仿真Lesson77 特權(quán)Xilinx FPGA SF-SP6入門指南 -- 波形發(fā)生器
    發(fā)表于 07-22 11:49

    Xilinx FPGA入門連載44:FPGA片內(nèi)ROM實例ROM配置

    `Xilinx FPGA入門連載44:FPGA片內(nèi)ROM實例ROM配置特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1jGjAhEm 1
    發(fā)表于 01-08 13:12

    Xilinx FPGA入門連載48:FPGA片內(nèi)RAM實例RAM配置

    `Xilinx FPGA入門連載48:FPGA片內(nèi)RAM實例RAM配置特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1jGjAhEm 1
    發(fā)表于 01-22 13:39

    xilinx FPGA的FFT IP核的調(diào)用

    有沒有大神可以提供xilinx FPGA的FFT IP核的調(diào)用的verilog 的參考程序,最近在學(xué)習(xí)FFT的IP核的使用,但是仿真結(jié)果有問
    發(fā)表于 12-25 17:05

    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

    Xilinx FPGA片內(nèi)ROM實例ROM配置

    Xilinx FPGA入門連載44:FPGA片內(nèi)ROM實例ROM配置特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1jGjAhEm 1
    發(fā)表于 01-09 16:02

    創(chuàng)建Block RAM IP不起作用

    在我的一個FPGA類中,我被要求使用coregen創(chuàng)建一個blcok ram(8dx16w),單端口ram IP。我在Windows XP,Service Pack 3上使用Xilinx ISE
    發(fā)表于 06-05 13:39

    FPGA開發(fā)算法開發(fā)System Generator

    的對應(yīng)關(guān)系: System generator 安裝之后會在Simulin模塊庫中添加一些Xilinx FPGA專用的模塊庫,包括Basic Element,Communication,Control
    發(fā)表于 11-17 14:29 ?7852次閱讀

    XILINX FPGA IPFIFO Generator例化仿真

    上文XILINX FPGA IPFIFO對XILINX FIFO Generator
    的頭像 發(fā)表于 09-07 18:31 ?1741次閱讀
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b><b class='flag-5'>之</b>FIFO <b class='flag-5'>Generator</b>例化<b class='flag-5'>仿真</b>