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