Xilinx-BlockRAM-高效移位寄存器

博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
--------------------------------------------------------------------------------------------------------------------------

 

1.在任何情况下,深度较深的以为寄存都强烈建议使用block ram

思路如上图所示,但实现不推荐用这么多D触发器,也不推荐使用SRL16 之类的slice级别移位寄存器。

 

2.对于(例如图像处理)分多通道时,不用拘泥于单通道对应单block ram

 

Block ram 是9bit 1920深度。输入格式为R10 G10 B10 ,如上图最大化利用位宽。

 

3.对于SDP 以及TDP 模式blockram应用的启发。

 

对于每一个port 在读写都是全双工的。当使用TDP模式时,相当于一个Block RAM可以实现2路同时读,2路同时写的quad port memory。

 

设定为read_first 模式时,(同时,EN=WE=1)可以产生如下时序:

 


 

如此可知,控制每个port的地址位进行递增,便可以实现一个tap(引用altera的概念) 

 

此时的硬件结构如上图

 

此时的时序如上图

 

这边需要注意的是,假定一行16个像素,1 与 17 对应。每列的像素需要对齐。

如果地址为16进制,那么1与17会差一个时钟周期,所以地址必须是15进制。

结论,地址位 (行像素数-1)进制。

 

4.使用EN引脚来过渡图像fly-back(个人觉得可以理解为行消隐blanking)而非WE

 

在遇到fly-back时 我们所需要的时序如下:

 

 

当使用WE引脚来做使能时,时序如下:

 

 

通过时序图对比直观反映了在使用WE引脚作为选通信号时,会过早的read出下一行第二个数据。

 

5.由于blockram的深度是相对固定的,必须评估ram的使用率。

 

在文档中详细介绍了各种位宽和深度。这边只列举一个对比启发增加使用率的思路。

1)当图像宽度为1024,位宽为18bit时,正好对应18位宽的block ram 级联成1024深度。

 

 

此时硬件结构如上,右边英文告诉你每8个bit会有1bit奇偶位,其实就是普通的1bit。

 

这个时候地址位控制为0到3FE(1022)使用了1023个地址位,最后一位地址永远用不到,正是为了前面提到过的每列数据对齐。

 

注意,这边的1022是计数器的最后一位,1023说明移位有1023个状态,1024是一行像素数,不要相互混淆。

 

这个时候,得出的结论是

 

2)当行像素数为768时,同样使用的是 1024深度的block ram。

此时,只会使用前面的767个地址,后面的地址就浪费了,所以要想办法再利用后面的257个地址。方法如下:

 

 

因为768 = 256 x 3 那么 后面的地址可以组成一个 256深度 x 3 的 6位宽移位寄存器。

 

 

硬件结构如上,下面说明的正是后面的存储空间的利用。

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值