大家好:我是毛華望。目前在參加紫光同創(chuàng)PGL22G開發(fā)平臺試用。連載第6篇。
在第三篇里,不進行modelsim仿真了,而是直接上板在線邏輯分析儀去完成的原因,是因為我使用modelsim的仿真能力有限。通信模塊串口已經驗證可以了,邊緣檢測模塊也可以了。剩下的內容就是一個存儲數(shù)據(jù)和控制數(shù)據(jù)了,內容相對來說不難。感覺問題不大。最好的仿真其實是應該在tb.v文件里面寫入sobel數(shù)據(jù)的,然后在讀回來,進行整套仿真的。當然憑能力的了。我只會局部仿真一下。
程序部分的整體流程。首先串口的數(shù)據(jù)進來,模塊已經寫好了。數(shù)據(jù)緩存就是一個ram存儲器。同樣的數(shù)據(jù)緩存2也是一個ram緩存區(qū)。 Sobel已經仿真驗證過了。目前就剩下控制單元來調度數(shù)據(jù)和控制指令了。
仿真的時候有看到,3行,計算出一行的結果。所以,用串口調試工具,發(fā)3行圖像數(shù)據(jù),然后讓串口回1行結果。最后在拼接起來形成一張整圖。
第一部分:程序篇。
前面已經把主要模塊的內容都寫完了。現(xiàn)在就是要把模塊連接起來完成功能。
主要模塊的內容呢?? 4個存儲單元。 RAM256X8 。
Sobel 計算單元 compute。
Rx 和tx
這4個存儲器中。 第1個,存入上一行視頻數(shù)據(jù)。 第 2個,存入當前行數(shù)據(jù)。 第 3個存入下一行數(shù)據(jù)。 第4個,存入輸出數(shù)據(jù)。 就是因為這樣的結構,所以,再用串口傳送數(shù)據(jù)的時候,一定要按照要求存入數(shù)據(jù)才行。必須是前一行, 當前行,下一行。不是直接發(fā)送就可以了的。
這是框圖“數(shù)據(jù)緩存RAM”,雙端口 RAM,用了3個。
這里是框圖的“sobel計算單元”。連接上。
這里就是框圖中的,“數(shù)據(jù)緩存RAM 2”
這里是框圖 “控制單元”。我沒有單獨寫一個模塊,直接在頂層寫的控制狀態(tài)機。
我這里用了8個狀態(tài)機去完成。
分別是寫入狀態(tài)0前一行數(shù)據(jù)200個, 狀態(tài)1寫入當前行數(shù)據(jù)200個,狀態(tài)2寫入后一行數(shù)據(jù)200個。狀態(tài)3,sobel計算。 狀態(tài)4,讀前一行數(shù)據(jù), 狀態(tài)5,讀當前行數(shù)據(jù)。狀態(tài)6,讀后一行數(shù)據(jù)。 狀態(tài)7,tx返回計算結果。
狀態(tài)0. 寫入前一行數(shù)據(jù)。 寫地址增加, rx來的數(shù)據(jù)寫入存儲器。 打開使能。
寫入到200的時候。換狀態(tài)機,寫當前行。
狀態(tài)1,內容是一樣的。只是寫入的是當前行。 地址,數(shù)據(jù)和使能換到當前行存儲器。
狀態(tài)2,差不多一樣的。
狀態(tài)3是把sobel計算完的結果,寫入到存儲器里。
寫地址增加,打開寫使能。
狀態(tài)4,5,6. 內容是一樣的。
讀地址加1, 打開讀使能。 輪著打開不同的存儲器。
狀態(tài)機7, tx發(fā)送給上位機。
第二部分:matlab篇。
略:
第三部分: modelsim仿真
略:
邊緣檢測三部曲就這樣完成了。再會。