程式生涯最艱苦的戰役:開發DE2上CCD驅動程式 (IC Design) (DE2) (Nios II) (日記)

Abstract
十多年的編程生涯,還沒遇過解不了的問題,只是時間長短而已,但這次開發DE2上CCD驅動程式,足足花了三個多月,若要問我這學期在幹嘛?全部的時間都花在寫這個程式了,這是我程式生涯最艱苦的一戰。

Introduction
從開始寫程式到現在,從Visual FoxPro -> Visual BASIC -> ASP -> ASP.NET(C#) -> C/C++,從資料庫系統到Windows程式,從網頁程式又轉到C/C++,接觸越來越低階。主要是開發應用程式時,需要去了解複雜的商業邏輯,我對這種興趣缺缺,而對編程技術面和硬體較有興趣,所以才決定改走嵌入式和IC設計,這個領域需要的是C語言和Verilog。

下圖是我這學期搏鬥三個月的傢伙:

 程式生涯最艱苦的戰役:開發DE2上CCD驅動程式 (IC Design) (DE2) (Nios II) (日記)

左上角的NB是我為了Quartus II編譯Verilog而買的Lenovo ThinkPad X61,CPU是最新的Intel Core 2 Duo T7500,配有4 GB的 DDR II 533記憶體,硬碟為Hitachi 100G 7200轉,這已經是12吋NB最猛的硬體配備了。右側為DE2嵌入式開發版,左邊外接了130萬像素的CMOS CCD Camera,右側接了3.6吋LCD,我要開發的就是讓CCD的影像顯示在LCD上。DE2原廠友晶科技雖然附提供了Verilog程式碼,但這是純硬體的,而我要做的就是讓Nios II透過軟體去控制CCD和LCD,並且加上μC/OS-II這個及時作業系統跑在SRAM上。

由於之前接觸的均是微軟的技術,所以很習慣有問題直接查MSDN,養成相信『原廠』資料的習慣。 Quartus II和Nios II EDS均是Altera的產品,所以一開始我也都是K Altera原廠手冊,明明依照tutorial一步一步的作,但發現很多範例仍然無法執行,因而開始懷疑是DE2開發板的問題,甚至想去新竹直接找友晶科技的工程師『興師問罪』!!另外,網路上並不容易找到Nios II相關資料,所以前幾個月真的不知道從何開始,每個星期跟教授的meeting幾乎都沒什麼進度!!真的相當氣餒且無助。

後來偶然地在網路上發現了Roger的研究生日誌,進而認識了Roger,他是個在SOC和VHDL方面的高手,對Nios II相當熟悉,透過他的指點,解決了不少問題,他也推薦了西安電子科技大學出版社的FPGA與SOPC設計教程-DE2實踐這本書,真的受益良多,這是一本專門討論DE2的專書,是目前我看過談DE2和Nios II最深入淺出的書,值得推薦。

shupi

為什麼Altera原廠的資料不能盡信呢?主要是因為Altera原廠手冊談的是Altera原廠的板子,而DE2並非Altera原廠的實驗板,一些周邊友晶科技都有改過,假如你主要是用Verilog/VHDL寫硬體,燒進Cyclone II FPGA,這樣問題不大,但若要玩SOPC和Nios II這一塊,問題就來了,範例多多少少都必須做些修改才能動,雖然我知道DE2光碟和友晶科技網站有不少範例程式,但以前一直以為Altera才是『原廠』,所以沒去注意友晶提供的範例,一直到在Roger的網站提到了DE2的Reference Design後,我才恍然大悟,發現DE2並不是Altera原廠的板子,所以才有Nios II Reference Design出現,也因此我開始大量的研究友晶的範例和文件,這是一個重要的轉累點。

開發過程中主要面臨了幾個問題卡很久:
1.如何在Avalon bus為自己的Verilog硬體建立ip?,在(原創) 如何在DE2執行Checksum Master範例? (中級) (IC Design) (DE2) (Quartus II) (Nios II) (SOPC Builder) 有談到如何將Altera的Checksum Master範例改到能在DE2上跑。
2.如何在DE2成功的上μC/OS-II?在(原創) 如何自己用SOPC Builder建立一個能在DE2上跑μC/OS-II的Nios II系統? (DE2) (Quartus II) (Nios II) (SOPC Builder) (μC/OS-II)有詳細的討論。

聽到寫驅動程式,一般人一定認為只要用C語言寫軟體就好吧!!這次的經驗是,C和Verilog都要來!!軟體比較好解決,都有錯誤訊息,但硬體就比較麻煩了,錯誤訊息都一樣,不是CPU paused,就是verification error,要不然就死給你看不會動,debug真的只能靠經驗,此外,寫Verilog時,真的要心裡想著硬體,不能像寫C語言時,只是照著邏輯去寫和語法就好,剩下就丟給compiler去處理,是完全不同的思維,我也是經過這次的經驗才有深刻的體認。

Conclusion
雖然過程充滿挫折,不過大體上來說,我還是很喜歡DE2和Nios II,主要是在這個平台上,你可以同時接觸軟體和硬體,這種軟硬體整合的經驗相當有趣。友晶科技雖然附了相當多的範例程式,可惜沒有很多的文件,所以唯一能做的就是:『努力看code』吧,從code中發現其中的奧妙所在。

See Also
(原創) 如何在DE2將CCD影像顯示在彩色LCD上? (純硬體篇) (IC Design) (DE2)
(原創) 如何在DE2將CCD影像顯示在彩色LCD上? (Nios II軟體篇 + onchip memory) (IC Design) (DE2) (Nios II) (SOPC Builder)
(原創) 如何在DE2將CCD影像顯示在彩色LCD? (Nios II軟體篇 + μC/OS-II + SRAM + 驅動程式) (IC Design) (DE2) (Nios II) (μC/OS-II) (SOPC Builder)

你可能感兴趣的:(design)