Distributed Memory Generator IP 核采用 LUT RAM 資源創(chuàng)建各種不同的存儲(chǔ)器結(jié)構(gòu)。IP可用來(lái)創(chuàng)建只讀存儲(chǔ)器 (ROM)、單端口隨機(jī)存取存儲(chǔ)器 (RAM) 和簡(jiǎn)單雙/雙端口 RAM 以及基于 SRL16 的 RAM。該IP的靈活的特性配置方式,使用戶(hù)能針對(duì)存儲(chǔ)器類(lèi)型、數(shù)據(jù)寬度、存儲(chǔ)器大小、輸入/輸出選項(xiàng)和復(fù)位選項(xiàng)進(jìn)行定制。
Distributed Memory Generator IP GUI界面如下:
該IP的主要特性為:
- 生成只讀存儲(chǔ)器 (ROM)、單、簡(jiǎn)單雙和雙端口隨機(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:寫(xiě)使能
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模式:
簡(jiǎn)單雙端口模式:
一般情況下常用簡(jiǎn)單雙端口模式進(jìn)行跨時(shí)鐘域,簡(jiǎn)單緩存的操作。用簡(jiǎn)單雙端口實(shí)現(xiàn)一個(gè)簡(jiǎn)單的跨時(shí)鐘域代碼如下:
// ============================================================
// File Name: tb_dist_mem_gen
// VERSION : V1.0
// DATA : 2023/8/18
// Author : FPGA干貨分享
// ============================================================
// 功能:xilinx Distributed Memory Generator ip 代碼仿真
// 使用簡(jiǎn)單雙端口實(shí)現(xiàn)一個(gè)簡(jiǎn)單的跨時(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
-
FPGA
+關(guān)注
關(guān)注
1643文章
21954瀏覽量
613939 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7632瀏覽量
166368 -
RAM
+關(guān)注
關(guān)注
8文章
1391瀏覽量
116744 -
Xilinx
+關(guān)注
關(guān)注
73文章
2181瀏覽量
124316 -
IP核
+關(guān)注
關(guān)注
4文章
338瀏覽量
50442
發(fā)布評(píng)論請(qǐng)先 登錄
Xilinx FPGA IP之Block Memory Generator功能概述

Xilinx FPGA IP之Block Memory Generator AXI接口說(shuō)明

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

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

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

評(píng)論