# 2016 IC Design Contest Preliminary(數位電路設計)-Local Binary Patterns ## 總覽 題目有註明圖片最外圈不進行LBP計算,並且在lbp_mem中依照圖片擺放的位置來看,影像最外圈的值必須填入0。因此在reset結束後,狀態機進入WRITE_MEM階段,直接開始將0寫入lbp_mem,直到當寫入地址lbp_addr為128時,下一個cycle須進入READ_MEM階段讀取gray_mem,開始比對3x3方格中的八個鄰居並進行計算,當比對完成後再次進入WRITE_MEM將結果寫入lbp_mem,直到lbp_addr等於16383時運算結束。 ## 狀態圖  ## 思考核心 必須先建立清楚甚麼時間點要進入WRITE_MEM,甚麼時間點要進入READ_MEM的觀念。在這之前需先將讀取以及寫入記憶體的protocal建立好,我的設計是在**next state時就必須先將讀取/寫入記憶體的致能訊號以及地址和資料都先決定好**,並在current state時即時給記憶體,有了這個protocal之後再進行狀態轉換之間的條件判斷。 ## 狀態間的跳轉判斷 **WRITEMEM至READ_MEM**: 跳轉條件的判斷就是在判斷next state的走向,所以要從WRITE_MEM跳轉至READ_MEM的條件很直觀,就是當row介於在1和126之間並且col在0和125之間,因為只有當lbp_addr在這個區間中,next state才會進入到紅色的框框中。 **READ_MEM至WRITE_MEM**: 當比較運算結果得到後即進入至WRITE_MEM階段寫入記憶體。  ## 寫入記憶體資料的決定 依照題目敘述,圖片外圍都不用讀取gray_mem,直接寫入0即可,所以需要讀取記憶體的pixel都坐落在紅色框框中。WRITE_MEM有分成兩部分,一部份是寫入資料為0,另一部分是寫入資料為READ_MEM時的比較結果,那lbp_data在何時須為0,何時須為READ_MEM的運算結果呢? 理論上lbp_data是在next state為WRITE_MEM所決定的,但因為當current state的col為126時,next state是WRITE_MEM且須寫入0,所以在col為126時的資料寫入比對後的資料的下一個cycle,lbp_data須為0,如波型圖中的黃色實線所示,因此在這裡我的寫法是考量current state為WRITE_MEM時,並且lbp_addr為126時,lbp_data為0。其餘的lbp_data都是依照next state去判斷的。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up