Distributed Memory Generator IP 核采用 LUT RAM 資源創(chuàng)建各種不同的存儲器結構。IP可用來創(chuàng)建只讀存儲器 (ROM)、單端口隨機存取存儲器 (RAM) 和簡單雙/雙端口 RAM 以及基于 SRL16 的 RAM。該IP的靈活的特性配置方式,使用戶能針對存儲器類型、數(shù)據(jù)寬度、存儲器大小、輸入/輸出選項和復位選項進行定制。
Distributed Memory Generator IP GUI界面如下:
該IP的主要特性為:
- 生成只讀存儲器 (ROM)、單、簡單雙和雙端口隨機存取存儲器 (RAM)以及基于SRL16 的 RAM;
- 支持 16 到 65536 的數(shù)據(jù)深度;
- 支持1 到 1024 之間的數(shù)據(jù)寬度;
- 可選的寄存輸入和輸出;
這個IP的端口如下圖所示:
輸入:
a:地址輸入;
Dpra:雙端口時的讀地址;
d:數(shù)據(jù)輸入;
Clk:時鐘
Qdpo_clk:雙端口模式下的第二個時鐘
We:寫使能
i_ce:輸入時鐘使能;
Qspo_ce:輸出時鐘使能;
Qdpo_ce:第二個端口的輸出時鐘使能;
輸出:
Spo:非寄存器模式下第一個端口的輸出數(shù)據(jù)
Dpo:非寄存器模式下第二個端口的輸出數(shù)據(jù)
Qspo:寄存器模式下第一個端口的輸出數(shù)據(jù)
Qdpo:寄存器模式下第二個端口的輸出數(shù)據(jù)
復位:
qspo_rst :寄存器模式下第一個端口的異步復位
qdpo_rst :寄存器模式下第二個端口的異步復位
qspo_srst:寄存器模式下第一個端口的同步復位
qdpo_srst :寄存器模式下第二個端口的同步復位
Distributed Memory在不同工作模式下的內部情況如下圖所示:
ROM模式:
單端口RAM模式:
雙端口RAM模式:
簡單雙端口模式:
一般情況下常用簡單雙端口模式進行跨時鐘域,簡單緩存的操作。用簡單雙端口實現(xiàn)一個簡單的跨時鐘域代碼如下:
// ============================================================
// File Name: tb_dist_mem_gen
// VERSION : V1.0
// DATA : 2023/8/18
// Author : FPGA干貨分享
// ============================================================
// 功能:xilinx Distributed Memory Generator ip 代碼仿真
// 使用簡單雙端口實現(xiàn)一個簡單的跨時鐘域
// 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
+關注
關注
1650文章
22207瀏覽量
626892 -
存儲器
+關注
關注
39文章
7693瀏覽量
170054 -
RAM
+關注
關注
8文章
1396瀏覽量
119260 -
Xilinx
+關注
關注
73文章
2190瀏覽量
128796 -
IP核
+關注
關注
4文章
338瀏覽量
51534
發(fā)布評論請先 登錄
Xilinx FPGA IP之Block Memory Generator功能概述

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

IP核簡介
ISE不能生成IP核
新手求助,Nexys3開發(fā)板如何讀寫數(shù)據(jù)到Flash
ARM embedded memory ip的產生,couldn't run spreadsheet generator to fetch results
如何使用System Generator來創(chuàng)建自己的IP核
使用Vivado調用ROM IP核
ARM memory_compiler sram ip生成問題怎么解決呢
如何在ISE中更新老版本的IP核

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

如何將IP模塊整合到System Generator for DSP中
Vivado中xilinx_BRAM IP核使用

評論