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/100psmodule 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; endalways @(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 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
蔚来“抢跑”半固态电池量产装车
莱恩德LD-SP10食品添加剂检测仪器产品功能介绍
智能家居领域的触控显示技术产品新趋势解答
中间继电器的作用和工作原理解析
Signal conditioning for a sigm
Distributed Memory Generator IP核简介
致癌基因检测新突破:金颗粒可诊断单位点基因突变
视频产业崛起之下 用户价值如何挖掘
vivoS5正式发布 售价2698元起
云计算数据中心和传统IDC的差异在哪里
MAX35101在热量表中的应用
医学影像四大设备是什么 医学影像的作用和存在意义
大宽服务器的优势
在2018人工智能大会上看行业大佬说AI
“收听”位于0到22kHz之间频段的无线电波解决方案
工信部:2029年开始引入6G
芯闻3分钟:波兰称间谍指控牵涉个人行为与华为没有直接关联
IBM发现医疗和制造业使用的一系列物联网芯片存在漏洞
压电陶瓷蜂鸣片工作原理_压电陶瓷蜂鸣片电路
宜家收购Geomagical Labs 拟使用AI成像技术增强房间可视化效果