(原創) 論文進度重大進展 (日記)
Abstract
雖然已經研二了,但離論文的結果仍遙遙無期,也由於忙於論文,所以blog就很少更新了,今天將其中一個『防手震』功能完成,算是這一個月來最大的進展。
Introduction
我論文要做的是在DE2上利用CMOS像機取得QR Code二維條碼的圖案,然後解出QR Code所代表的內容。其中有幾個要克服的點:
1.軟硬體整合:
利用軟硬體整合的方式,在DE2平台跑Nios II Softcore CPU,然後加上μC/OS-II由軟體控制硬體,牽涉到Avalon Bus上的控制與驅動程式,這部分已經在上學期解決,請參閱(原創) 程式生涯最艱苦的戰役:開發DE2上CCD驅動程式 (IC Design) (DE2) (Nios II)。
2.防手震功能:
使用CMOS拍攝QR Code時,很容易因為手震使的影像模糊,如此將影響QR Code解碼的品質,所以希望能利用motion detection的技術,當不再晃動時,自動按下快門。
3.使用硬體對QR Code解碼:
目前看到的QR Code解碼,有C寫的,有C++寫的,也有Java寫的,但這些都是使用軟體的方式,由於嵌入式的CPU運算速度有限,若QR Code資料量龐大,使用軟體解碼將無法達到real time的需求,此時惟有使用硬體加速的方式來對QR Code做解法。
今天很高興,總算將『防手震』功能完成了,主要使用了去雜訊和motion detection的技術解決,從開學弄到現在,弄了一個多月,主要卡在幾個問題:
1.Verilog功力仍然不夠
除了第一個驅動程式要用到C語言,防手震和QR Code解碼都要用Verilog來寫,我硬體語言的功力還是不夠,尤其硬體這種clock driven的思維,和軟體有很大的差異,所以也是邊寫邊摸索Verilog。
2.不知道有SignalTap這種好東西
寫軟體語言遇到bug時,最重要的就是debug工具,而且我也非常依賴debug工具來除錯,到了寫Verilog以後,以為就是Quartus II和ModelSim這兩個工具,但這兩個工具的一個大問題:無法debug,無法在runtime看出某個register值為多少,是否有變動...等,一直到上星期教授提醒有SignalTap這種好東西後,我才知道我的問題出在哪裡,所以工具真的很重要!!不能光靠眼睛debug。
3.沒想到雜訊影響這麼大
以前在寫軟體時,從沒考慮到『雜訊』的問題,雖然知道要去雜訊,但想說晚點再做,但沒想到日前防手震失敗的主因卻在於『雜訊』太大,導致motion detection演算法判斷失敗,今天先做了去雜訊後,motion detection就順利完成了,也因此才體會開發硬體時,『雜訊』是這麼嚴重的事情。
Future work
其實最大的挑戰,是用Verilog對QR Code解碼,目前還沒看到有任何Verilog的範例,所以得100%自己寫了,希望將來這部分也能順利完成,能在七月順利畢業。