在這邊不強調你程式該如何寫作..畢竟寫C,組語,VHDL,這些寫法都不一樣...可是在這邊的程式設計還是有一定的程序規則的..照著這規則走是可以省去很多時間在于DEBUG上,而系統相對的穩定性也比較高,只要不是本身發展平台自己的Bug的話,就算出錯也是很容易Debug的...
在設計流程四已經大概定明了你所要有的Module了,接下來就可以使用"造積木,堆積木"的想法去實行我們的系統..在這個地方無CPU的FPGA一類跟內置CPU的AVR,DSP,ARM一類的作法大同小異..差別只在Debug而已...
在這一步將是最花腦筋也是最花時間的,因為這一步除了要完成各Module,必要還要進行系統最佳化..在當你的程式完成後,還要回頭重新檢查IC,在同一系列IC中去選擇適當的速度跟容量大小的IC,這樣可以在往後可以省一些金錢以及其他後續程序上的麻煩...
製作流程:
1.先將輸出外部的介面Module完成.
這部份在最基本寫完後要記得準備一串資料做輸出,讓它可以正常顯示你的輸出結果..輸出結果不行的話就進入DEBUG一步一步的觀察到底是哪裡出問題,導致輸出結果不良..這個要先完成..
2.完成外部輸入的介面Module.
這部份可以把資料直接連結剛剛做好的輸出Module,這樣就可以很直接的觀察結果,不然就可以借用LED去顯示執行結果..
若是比較簡單的輸入的介面就稍稍的把輸入的數值透過另外的輸出埠接LED輸出看看結果是不是正確...比較複雜的輸入通訊就是先準備一串最基本的對應資料..在基本通訊資料傳送確定OK的時候也是利用另一個PORT接個LED,告知自己這部份是完整的..若是他NG..你就把程式改成每傳送一筆資料就改變一次輸出Port的LED燈號,如此得知你是傳到哪裡暈倒了..這樣也是個不錯的DEBUG的方法..
3.核心運算Module.
核心運算程序..製作這個程序的話就要隔離輸出跟輸入,只能由DEBUG模式先一步一步的把程式看完並且改變輸入到核心的數值去看他算出來的結果是否符合..最後才把它放到整體裡,完成Project.DEBUG撇步,沒有!!只能一步一步看...不過可以把核心運算的部份再細切幾個Function個別完成後再組合會比較好..但是個別Function還是逃不過一步一步看的命運..這部份只能認命...-_-|||
4.組合!!!!
往往組合Module的時候都是大家怕怕的時候,因為這時常常就是一些莫名奇妙的問題都跑出來..所以前面的步驟很重要..每次做好一個Module就組合一次,這樣才可以分得清楚到底是哪裡有問題...這步再出問題,就要注意資料流與時脈是否有完整搭配..不然只能再拆開或是加入假信號讓系統強制動作..乖乖DEBUG去看他Module連結結果吧...
:::注意要點:::
基本上Module的製作順序是像剝洋蔥一樣從外部做到內部..而製作的流程是先做輸出的部份,然後再做輸入的部份,必要的話加一點轉換運算讓輸入連接到輸出Module做一個暫時的結果,這樣比較好觀察結果,最後才是最終大魔王,核心程式!!!
每做好一個Module,都要用Debug去跑過一遍,在剛開始時先把每個Module當成Project來製作.確認完成一個就做一個新的Project把做好的Module直接做連結,這樣在Module連結過程中就可以知道新加入的Module是否有問題..
內置CPU類的發展最重要的就是關注每個MODULE的執行時間,不要讓Module運算時間超過系統整體Cycle Time,一但有機會超過,就有必要執行最佳化..而不管是寫C或是寫組語,都要盡量不要出現IF,CASE,等的條件判斷式出現,因為一些有併行程序(PipeLine)的CPU,只要遇到這種條件判斷就會立刻停止運算,直到條件判斷結果出現才會繼續運算,像是DSP的CPU有的有6階Pipeline,平常運算加減法都是一個Clk完成一個指令,但是一遇到條件判斷他就馬上停6Clk,等PipeLine內的資料都算完清空後再判斷把結果輸出.
無內置CPU的IC,也是每個Module乖乖的Debug,並把每個可能的狀況要先模擬出來,然後在組合Module的時候要注意觸發時脈,會不會造成偏移而導致資料抓錯..這個很重要!!!而在最佳化的時候則是注意IF判斷的疊層數,以及乘法器一類比較花邏輯排列的組合,若是會出現妨礙的話,就要把Module的運算拆開,讓他變成PipeLine形式的並行形式輸出..
文章定位: