标题:
Xilinx实现基于BlockRAM的高效移位寄存器 [此博文包含图片]
[打印本页]
作者:
苹果也疯狂
时间:
2015-8-26 10:25
标题:
Xilinx实现基于BlockRAM的高效移位寄存器 [此博文包含图片]
Xilinx
使用
block ram
(
RAM_based shiftregister
)
实现图像行存储(Video LineStroe)
-
对应
altera
的
altshift_taps
详细可见:
http://www.altera.com.cn/literature/ug/ug_shift_register_ram_based.pdf
Xilinx
具体实现参考文档
Implementingand Testing Efficient Video Line Stores
http://www.xilinx.com/products/boards/s3estarter/files/s3esk_video_line_stores.pdf
整篇文档下半部分
详细介绍了基于
blockram
的数据移位寄存。
摘要几点中心思想:
1.
在任何情况下,深度较深的以为寄存都强烈建议使用
block ram
。
思路如上图所示,但实现不推荐用这么多
D
触发器,也不推荐使用
SRL16
之类的
slice
级别移位寄存器。
2.
对于(例如图像处理)分多通道时,不用拘泥于单通道对应单
block ram
。
Block ram
是
9bit1920
深度。输入格式为
R10 G10 B10
,如上图最大化利用位宽。
3.
对于
SDP
以及
TDP
模式
blockram
应用的启发。
对于每一个
port
在读写都是全双工的。当使用TDP模式时,相当于一个Block RAM可以实现2路同时读,2路同时写的quad portmemory。
设定为
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
位宽移位寄存器。
硬件结构如上,下面说明的正是后面的存储空间的利用。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0