移位寄存器的 IP核调取及应用

本文介绍了如何使用 Altera 的移位寄存器IP核进行图像处理中的模板运算,如Sobel和均值滤波。通过创建一个深度为256的ROM IP核,并配置移位寄存器为两个8深度的FIFO,实现数据的移位和流水线操作。详细步骤包括ROM和移位寄存器的设置、顶层架构设计、代码编写及仿真验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面的话

做很多图像算法的时候我们经常需要用到模板运算(如sobel图像边缘检测、中值滤波、均值滤波等等),处理这些问题的时候,我们可以借助altera提供的移位寄存器IP核来简化我们的设计,从而提高设计效率。本节,梦翼师兄和大家一起学习这个适合用于模板运算的移位寄存器IP核的用法。

 

功能要求

 

假设数据在一个ROM中以如下图所示的方式存放,列加行的值作为该数的地址(如e的地址就是8+1=9)。

 

address

0

1

2

3

4

5

6

7

0

a

d

g

j

m

p

aa

bb

8

b

e

h

k

n

q

dd

cc

16

c

f

i

l

o

r

ee

ff

24

s

t

u

v

w

rr

gg

hh

……

y

z

uu

vv

ww

qq

ii

jj

 

在图像处理领域,要实现Sobel或者均值滤波等算法,则需要按照3*3矩阵的格式提取数据,如下图所示:(现在想要每次取出3列数据为一组,如第一列数据:a、b、c 第二列数据:d、e、f 第三列数据:g、h、i)

解决方案:在这儿我想给大家介绍一个叫做Shift_register的 IP核来实现这种功能,而且还有很重要的一点就是我们可以利用这种方法来实现流水线操作,我们暂且就将其看做是移位寄存的“FIFO”吧。

如果我们将该IP核配置成如下图所示的两个“FIFO”,那么我们从ROM中取数的原理就可以用下图表示:

有两个“FIFO”,长度都是8。ROM中的数据从in端口输入,每次地址加一。

用一个计数器cnt作为ROM的地址线,cnt每增加1,ROM就会输出新的数据并通过in[7:0]端口进入shift_register,同时shift_register中的所有数据就会同步向前移位一次,当计数到16时:

 

 

 

下一个时钟到来时候开始同时取值shiftout0、shiftout1、shiftout2

操作步骤

首先建立一个深度为256,字节位宽为8,初始值为0255ROM IP核(参考:5.2)。

接下来设置移位寄存器的IP核:

在右侧的IP核搜索的编辑区,键入shift,在菜单栏中找到并双击【Shift register】

 选择语言类型为Verilog,并命名,然后点击【OK】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值