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