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