在進(jìn)行圖像處理算法中,往往需要生成圖像像素矩陣,這對(duì)于C語(yǔ)言來(lái)說(shuō)可以直接用數(shù)組表示,但是對(duì)于verilog來(lái)說(shuō)便不是那么容易了,硬件描述語(yǔ)言不比軟件,它的核心不再算法,而是在于設(shè)計(jì)思想,加速硬件。在進(jìn)行圖像的濾波算法時(shí),需要生成3x3矩陣,而altera的IP shift_ram 簡(jiǎn)直就是為矩陣運(yùn)算而生的。下面便進(jìn)行shift_ram的學(xué)習(xí)。
手冊(cè)還是盡量看英文原版的比較好,剛開(kāi)始是會(huì)比較痛苦,看習(xí)慣了就會(huì)發(fā)現(xiàn),就是那么一些熟悉的單詞,句子也很好理解,比較手冊(cè)又不是文章。
這段話的意思是,這個(gè)IP支持一個(gè)時(shí)鐘周期移位一個(gè)或多個(gè)bit的數(shù)據(jù),位寬是可以設(shè)置的。
下面這個(gè)圖是shift_ram的移位示意圖,開(kāi)始我一直以為是這個(gè)IP每存儲(chǔ)三個(gè)數(shù)據(jù)就會(huì)進(jìn)行移位到下一行,如果這樣想當(dāng)一行圖像數(shù)據(jù)傳過(guò)來(lái)的時(shí)候,顯然如果是均值濾波的話,這是將第一行的數(shù)據(jù)進(jìn)行了取中值操作,這樣顯然是不符合濾波的原理的。那么從這個(gè)圖上所表達(dá)的貌似就是這個(gè)意思,為什么會(huì)出現(xiàn)這種矛盾。這也是一直困惑我的地方,還是手冊(cè)沒(méi)有好好看,手冊(cè)上說(shuō)的很清楚,圖下一幅圖所示。
看Note所表明的,這里設(shè)置的行數(shù)是4行,每行的distance是3,所以便出現(xiàn)了這樣的移位寄存,所以手冊(cè)還是要仔細(xì)閱讀的,我剛開(kāi)始就是因?yàn)殚e手冊(cè)太麻煩便草草了事,后來(lái)實(shí)踐證明,還是等弄清楚原理在下手操作,磨刀不誤砍柴工。
當(dāng)然手冊(cè)中也給了仿真例程
數(shù)據(jù)輸入輸出寬度為8bit,設(shè)置4行,選擇每行寬度為3,添加使能和復(fù)位