IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 移位寄存器SHIFT RAM IP之模拟图像卷积 -> 正文阅读

[网络协议]移位寄存器SHIFT RAM IP之模拟图像卷积

? ? ? ? SHIFT RAM IP核,FPGA工程师们也通常称之为移位寄存器,它是一种特殊的RAM,并且在FPGA图像视频加速领域有着非常广泛的应用,甚至被人们称为专门为图像卷积运算而生的IP核。

? ? ? ?在这篇博客里笔者和大家一起去学习实践这个经典的IP核,pg122-c-shift-ram是IP核的官方说明手册,如果朋友们在使用过程中有一些不清楚的细枝末节,可以去及时查阅该手册,以扫清工作中存在的疑问。

? ? ? ?其实大家想想看,在对数字信号处理也好,图像视频加速也好,是不是经常会用到均值滤波、中值滤波等等相关的计算操作,这里核心的计算部分应该就是矩阵运算了,那么在FPGA设计中例如对3*3的矩阵进行运算的时候又有哪些方法呢,其实理论上应该有典型的三种方法可以实施落地:

1.通过2个或者3个RAM的存储来实现3*3像素窗口;

2.通过2个或者3个FIFO的存储来实现3*3像素窗口;

3.通过2行或者3行SHIFT RAM的存储来实现3*3像素窗口;

? ? ? ?在FPGA当中可以通过RAM和FIFO进行矩阵运算,但是明显这不是很好的方法,因为在设计当中需要考虑到很多方面,使得整体设计更加繁琐和复杂,其中很关键的一点,大家都知道卷积运算的时候需要对矩阵很多行进行缓存,比如3*3的卷积核则需要事先同时存入三行像素中每行的三个列数据,而用RAM和FIFO非常难做到这点,程序上几乎很难以实现,所以这时候就引入了移位寄存器这种特殊的RAM IP核。

? ? ? 比如这里我们模拟3*3卷积核对16*16像素图片卷积遍历的设计,如图1所示,设计一个模块依次卷积遍历整个16*16的像素图片,然后输出到下游模块,下游模块再依次根据3*3卷积核中的数据实现各类滤波算法等等。

图1? 3*3卷积核对16*16像素图片卷积遍历的设计示意图

? ? ? 介绍完设计目的和应用场景后,再来说明移位寄存器SHIFT RAM IP核的具体用途和初始化流程,移位寄存器,顾名思义它和RAM IP核的功能非常类似,即缓存数据,但是不同的地方在于它可以实现数据延时的缓存输出。通俗地说,比如向该IP内写入数据位宽为8位的数据,然后可以通过配置IP核的方式,实现很多个周期后再输出缓存数据的目的。如下图2所示,在这个练习中我们配置Dimensions选项中的Depth为16,那么从接口D写入IP核中的数据,会在16个时钟周期后再通过Q依次输出,Altera厂家的EDA环境下移位寄存器IP核可以实现多行的缓存输出,但是Xilinx下的Vivado环境,仅仅支持缓存输出一行数据,不过其实也无关紧要,我们这里可以使用两个SHIFT RAM IP核和正在输入的一行数据三者共同组成3行数据。

图2 移位寄存器SHIFT RAM IP核的配置

? ? ? 如表1所示,是移位寄存器SHIFT RAM IP练习设计中的信号列表,也引入了sop和eop两个关键的信号量,输出用以告诉下游的计算模块,图片的卷积核何时开始输出、何时停止输出,定义matrix_p11信号代表3*3卷积核的左上角第一个像素点,后面依次类推,matrix_p33代表右下角最后一个像素点,这里我们用前面单口ROM IP核练习中的ROM模拟16*16的像素图片作为输入。接着向第一个移位寄存器中先写入图片第一行的像素数据,这里因为前面IP核设置了延迟16个时钟周期输出,所以第一个移位寄存器输出的像素数据刚好为第二行像素数据,再把第一个移位寄存器的输出作为第二个移位寄存器的输入,又延时了16个时钟周期,所以第二个移位寄存器输出的像素数据刚好为第三行像素数据,将matrix_p13、matrix_p23、matrix_p33数据依次打拍用前面的卷积核的像素点赋值,即可完成对整张图片的卷积遍历,最后输出matrix_sop和matrix_eop两个信号,如上图12-30所示matrix_p33即右下角最后一个像素点为34的时刻去输出matrix_sop,为255的时刻去输出matrix_eop,如图3是本练习的代码设计,供大家参考。图4是其输入信号激励设计,也非常简单直接模拟给出shift_ram_en使能信号即可。

? ? ? ?这里可能有些绕脑,尤其当大家刚接触到这个IP核的时候,但是在代入Modelsim仿真后结合如图5仿真波形结果,就可以很直观地就能理解到移位寄存器的用处。

信号列表

信号名

I/O

位宽

clk

I

1

rst_n

I

1

shift_ram_en

I

1

rom_addr

O

8

rom_data

O

8

matrix_sop

O

1

matrix_eop

O

1

matrix_p11

O

8

matrix_p12

O

8

matrix_p13

O

8

matrix_p21

O

8

matrix_p22

O

8

matrix_p23

O

8

matrix_p31

O

8

matrix_p32

O

8

matrix_p33

O

8

表1?移位寄存器SHIFT RAM IP练习设计中的信号列表

图3 移位寄存器SHIFT RAM IP核练习的代码设计

图4 移位寄存器SHIFT RAM IP核练习的输入信号激励设计

?

图5?移位寄存器SHIFT RAM IP核练习的仿真结果

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:18:36  更:2022-01-28 12:20:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:44:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码