基础003_V7-Memory Resources

一、综述

参考ug473.pdf。

常用Memory 资源:

在IP核中,Block memory(distributed memory为CLB中的资源):

通常选用Native,而不用AXI接口:

Block RAM可配置单端口RAM、伪双端口RAM、双端口RAM、单端口ROM、双端口ROM、FIFO。

各个模式调用时可承受的最高频率,参考pg058.pdf:

二、主要功能

学习资源: http://www.asic-world.com/examples/verilog/memories.html

  A-RAM/ROM

主要功能:

每一个Block RAM都可配置为1个36Kb的BRAM或1个36Kb的FIFO;同时也可以将其配置为2个单独的18Kb的BRAM或1个18KbBRAM + 1个18Kb的BRAM。

为什么是18k而不是16k(2的整次幂)?因为每8bit一个校验位。2*8 + 2 =18bit。

结论:无论是单端口RAM、伪双端口RAM还是双端口RAM,他们都只有一块Memory

Single-port RAM:

同步示例:

module ram_sp_sr_sw (
clk         , // Clock Input
address     , // Address Input
data        , // Data bi-directional
cs          , // Chip Select
we          , // Write Enable/Read Enable
oe            // Output Enable
); parameter DATA_WIDTH = 8 ;
parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;//--------------Input Ports----------------------- 
input                  clk         ;
input [ADDR_WIDTH-1:0] address     ;
input                  cs          ;
input                  we          ;
input                  oe          ; //--------------Inout Ports----------------------- 
inout [DATA_WIDTH-1:0]  data       ;//--------------Internal variables---------------- 
reg [DATA_WIDTH-1:0] data_out ;
reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1];
reg                  oe_r;//--------------Code Starts Here------------------ // Tri-State Buffer control 
// output : When we = 0, oe = 1, cs = 1
assign data = (cs && oe && !we) ? data_out : 8'bz; // Memory Write Block 
// Write Operation : When we = 1, cs = 1
always @ (posedge clk)
begin : MEM_WRITEif ( cs && we ) beginmem[address] = data;end
end// Memory Read Block 
// Read Operation : When we = 0, oe = 1, cs = 1
always @ (posedge clk)
begin : MEM_READif (cs && !we && oe) begindata_out = mem[address];oe_r = 1;end else beginoe_r = 0;end
endendmodule // End of Module ram_sp_sr_sw

异步(异步读、同步写)示例:

module ram_sp_ar_sw (
clk         , // Clock Input
address     , // Address Input
data        , // Data bi-directional
cs          , // Chip Select
we          , // Write Enable/Read Enable
oe            // Output Enable
); parameter DATA_WIDTH = 8 ;
parameter ADDR_WIDTH = 8 ;
parameter RAM_DEPTH = 1 << ADDR_WIDTH;//--------------Input Ports----------------------- 
input                                     clk          ;
input [ADDR_WIDTH-1:0] address ;
input                                     cs           ;
input                                     we          ;
input                                     oe           ; //--------------Inout Ports----------------------- 
inout [DATA_WIDTH-1:0]  data       ;//--------------Internal variables---------------- 
reg [DATA_WIDTH-1:0]   data_out ;
reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1];//--------------Code Starts Here------------------ // Tri-State Buffer control 
// output : When we = 0, oe = 1, cs = 1
assign data = (cs && oe && !we) ? data_out : 8'bz; // Memory Write Block 
// Write Operation : When we = 1, cs = 1
always @ (posedge clk)
begin : MEM_WRITEif ( cs && we ) beginmem[address] = data;end
end// Memory Read Block 
// Read Operation : When we = 0, oe = 1, cs = 1
always @ (address or cs or we or oe)
begin : MEM_READif (cs && !we && oe) begindata_out = mem[address];end
endendmodule // End of Module ram_sp_ar_sw

  对应电路:

可以看出2^8 = 256由4个64拼接拼接而成:

这里其实调用的是CLB中SliceM下的Distributed RAM资源:

  B-FIFO

 FIFO的能力:

 FIFO的IP核使用,具体可参考:pg057.pdf。

 FIFO可调用shift reg、distributed RAM、Block RAM、BulitIn FIFO,关于使用,xilinx论坛有相关说法:

Q:

From PG057 (Fifo generator) I understand FIFO's can be implemented in 4 ways, using : 

  • block RAM 
  • distributed RAM
  • shift register
  • built-in FIFO  (using FIFO18 / FIFO36)

is there any simple document / app note / overview describing on what basis you typically decide between the 4  implementations. What are the main tradeoffs, advantages, ... of each underlying memory type used?

I can imagine a few, but not sure if these are correct and complete :

  • block RAM is interesting for large, deep fifo's
  • distributed RAM is interesting for smaller fifo's
  • shift register is interesting for smaller fifo's, with short word width
  • built-in FIFO allow for the fastest fifo's

but that's just intuition ... so any corrections or further insights are welcome here!

A:

Its based your application , requirement and available resources in your target FPGA. The most of the points you mention correct. I would recommend you to refer target FPGA resource guide LUTs have lowest access time, FIFO18/FIFO36 good timing performance but require effort in design migration, BRAM very good for scalable memory requirement . You can also check about URAM/ultraram available in ultrascale devices

三、IP核调用

  A-simple dual RAM 

 参考IP_bram笔记。

 这里涉及到位宽的计算,以6通道,160MHz采样率,12bit有效位AD举例,现在需要转化为:240MHz的FPGA工作时钟。

12bit*6*160/240 = 48bit

位宽由12*6 = 72bit转化为48bit,:

  • Port-A为写数据,width:位宽12*6 = 72bit,depth = 160
  • Port-B为读数据,width:48bit,depth = 240

但Port-B的width只能是:72bit/(2^n),n = 0, ±1, ±2, ...,因此通常都是二次转化

Step1:72*160 = 48*240 < x * 240,x = 72*2^n >48,此处n = 0;x工作在240MHz。

Step2:x * M = 48 * N,M、N都是整数。M = 1,N = 2,完成转化。

总结步骤:160Mhz 72bit转化为 240Mhz 72bit;240Mhz写1拍(M = 1),每2(N = 2)拍读取一次数据。
IP核调用格式:
按输入端口,调用IP即可
bm_tb bram_int(
.addra(addra),
...
)
未勾选primitive output register:

勾选primitive output register:

可见该选项延迟了1拍

  B-FIFO

主要参考:

关于IP核参数设置,可参考FIFO generator笔记。

与BRAM同样的例子,很多时候数据时钟域转换用dual-port RAM而不用FIFO,说是前者含地址,存在时延变量取数方便,但改为FIFO实现其实也可以,后者含有计数功能,同样可以进行定位。

 

从读使能给出,到数据输出,经过6个周期,计算:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代控制理论基础

现代控制理论基础 机理建模法列写状态空间表达式 状态方程是指刻画系统输入和状态关系的表达式。状态向量所满足的向量常微分方程称为控制系统的状态方程。状态方程是控制系统数学模型的重要组成部分。 状态方程的描述 其中A、B、C、D的位置是固定的。 第一步先找状态。状态的…

信用非常良好,为何银行不给你批信用卡?

大家都是知道申请信用卡对个人信用的要求很高&#xff0c;稍微有逾期都有可能被拒绝。但是很多网友反映&#xff0c;自己信用没有逾期&#xff0c;可是为什么申请信用卡还是被拒绝了呢&#xff1f;其实申请信用卡不只是单单看信用这么简单&#xff0c;银行在审批的时候是从申请…

云闪付单个红包最高2018,这是要打败支付宝的节奏吗?

最近过年&#xff0c;红包雨满天飞&#xff0c;各家各路都来参与&#xff0c;特别是移动支付领域的竞争更为激烈&#xff0c;其中支付宝、微信、云闪付的战火烧的最旺。云闪付巨额红包意在抢占移动支付市场云闪付最近一段时间又出来闹事&#xff0c; 为推广银联云闪付&#xff…

如何解决MathType中公式与文字错位的问题

如何解决MathType中公式与文字错位的问题 使用MathType数学公式编辑器编辑公式时&#xff0c;难免会出现公式与文字错位的问题&#xff0c;这不仅影响整个文档的美观&#xff0c;也会给排版带来不便。公式与文字对齐的方法主要有三种&#xff0c;分布是清除格式、使用MathType…

基础004_V7-DSP Slice

主要参考ug479.pdf。之前的文章&#xff1a;FIR调用DSP48E_05。本文主要记录基本用法。 一、DSP48核 A-参数说明 instrctions&#xff0c;多个功能&#xff0c;通过sel选用目前没发现C勾选与否&#xff0c;有何影响。 如上图所示&#xff0c;结果3拍后输出&#xff1a; 其他参数…

打字小妙招

打字小妙招 u字的拼音是字之间的组合 例如&#xff1a;奆 v数字可是大写 例如&#xff1a;壹万贰仟叁佰肆拾伍 v数字计算 例如&#xff1a;123

揭秘买车0首付的套路,羊毛出在羊身上

买车现在已经成为很多年轻人的一种追求&#xff0c;不管是城里的还是农村的&#xff0c;也不管有钱没钱&#xff0c;总之&#xff0c;很多年轻人觉得有车层次就是不一样&#xff0c;开出去把妹也很拉风。但是很多人在买车的时候根本就没有考虑自己的经济能力&#xff0c;甚至很…

地震中房子变废墟了,贷款还需要还吗?

2月12日18时31分在河北省廊坊市永清县(北纬39.37度&#xff0c;东经116.67度)发生4.3级地震&#xff0c;震源深度20千米。截止目前暂时没有人员伤亡报告。我国是一个自然灾害比较多的国家&#xff0c;比如地震&#xff0c;泥石流、台风、洪灾等等&#xff0c;这些自然灾害每年都…

远程控制他人电脑

远程控制他人电脑 首先wini打开window设置&#xff0c;选择系统 下划找到&#xff0c;关于&#xff0c;找到&#xff0c;远程 点击启用远程桌面&#xff0c;弹出的选项框中选择确定 然后&#xff0c;winr&#xff0c;打开运行框&#xff0c;输入mstsc点确定。 然后输入需要远…

过年遇到前任借钱, 如何傲娇的拒绝?

春节又到了&#xff0c;过节走亲访友&#xff0c;有一个话题不得不谈&#xff0c;那就是钱&#xff01;都说谈钱伤感情&#xff0c;这话一点都没有错&#xff0c;特别是遇到前任来找你借钱。明明被前任甩得伤痕累累&#xff0c;没想到过年了&#xff0c;有些前任竟然厚着脸皮回…

由传递函数求状态方程

由传递函数求状态方程 直接法 例子 并联法

借呗利息为什么比银行信用贷款高很多?

利息高低取决于3个方面&#xff0c;一个是风险&#xff0c;二个是资金成本&#xff0c;三是市场竞争对收益定价的影响。借呗利息之所以比银行高也离不开这三个因素。首先是风险&#xff0c;借呗面对的据大部分是普通老百姓&#xff0c;门槛比较低&#xff0c;所以相应的风险比较…

全款房抵押贷款利息和抵押率各是多少?

银行房产抵押贷款的利息及抵押率根据不同客户的资质及申请条件&#xff0c;最终结果是不一样的。&#xfffc;首先我们来说下利率&#xff0c;目前银行贷款利率一般都会在基础利率的基础上上浮&#xff0c;目前银行贷款基准利率一年之内是4.35%&#xff1b;1-5年是4.75%&#x…

将simulink中的workspace中的变量画出来

将simulink中的workspace中的变量画出来 第一种方法 设置Scope 允许之后&#xff0c;工作空间会出现变量 在编辑器中输入画图代码 figure %%% scope多个接口 plot(ScopeData.time,ScopeData.signals(1).values,LineWidth, 1) hold on plot(ScopeData.time,ScopeData.si…

房贷等额本金和等额本息有什么区别,为何很多人傻傻分不清?

等额本金和等额本息是房贷最常见的两种还款方式&#xff0c;但两者却有很多差别&#xff0c;而且很多人对如何区分等额本息和等额本金云里雾里&#xff0c;傻傻分不清。 其实要区分等额本金和等额本息也很简单。首先我们来说下等额本金。所谓等额本金就是把房贷金额平分到每个月…

信用卡不能提额,是因为使用了招联金融吗?

最近在网上看到一个网友说&#xff0c;自己在招联金融上借了1万块钱&#xff0c;之后申请招商银行信用卡提额失败&#xff0c;所以他怀疑使用招联金融影响了信用卡的提额。那这到底是不是真的呢&#xff1f;联金融是招商银行和联通共同推出的消费贷款&#xff0c;可以算是网贷的…

TimeGen的使用

TimeGen的使用 TimeGen的入门使用

环球黑卡是不是很牛逼?

环球黑卡环球黑卡是很牛逼&#xff0c;估计听说过的人都有这样的疑问。近段就有一个网友在支付宝上抽到了环球黑卡&#xff0c;如果很牛逼还能抽奖送&#xff1f;所谓抽奖获得环球黑卡&#xff0c;可能是商家跟支付宝联合推出的活动&#xff0c;但是也不要太激动。这个环球黑卡…

使用蚂蚁借呗会影响房贷申请吗?

首先可以肯定的是&#xff0c;目前如果有借呗微粒贷未还清的会影响房贷的申请。我也是在2017年9月在深圳龙岗工行申请的房贷&#xff0c;当时银行查看征信发现有一笔招联金融5000多元分期消费贷款未还清&#xff0c;提交完资料后银行没有进件&#xff0c;而是要求我把这5000多元…

MATLAB设置启动文件夹为上次退出时的工作文件夹

MATLAB设置启动文件夹为上次退出时的工作文件夹 右击执行快捷方式&#xff0c;选择属性 -useStartupFolderPref 将 -useStartupFolderPref 放入到末尾。