第一章-FPPA簡介

  

P1.
很高興有這個榮幸來跟大家一起學習FPPA的程式設計,由於工作上的機會接觸FPPA快一年,來到這邊主要跟大家分享FPPA程式設計的一些心得、程式設計技巧。
教學大綱如下
我的教學方向會比較偏向程式設計的基礎、實作上會用到的技巧,不會一個指令一個指令介紹起,實習的課程重點在原理的解說而不是程式碼逐行的解說。因為我覺得如果有興趣的話,一些基本的指令的學習、Datasheet研讀都只是基本功夫而己,大家都可以自發性的學習,教學的重點是經驗的傳授、解惑跟共同研討來縮短大家的學習曲線。
P3.
這邊要討論的是,用軟體來達成周邊硬體界面的功能,其它MCU就辦不到嗎? 答案是肯定的,那這樣的話FPPA的優勢又在哪裡? 多核、多工使得這些界面的軟體設計變的非常簡單,時序的控制只要完全按照Datasheet開出來的規格來作就可以了,而傳統MCU,要處理一個界面的溝通還算沒什麼問題,問題是有多種不同的界面在跑同時又要兼顧主程式的運作,那就不是單純的程式設計技巧可以彌補的,也因此才會有這麼多不同需求不同規格的MCU(例如PICPWM UART I2C SPI)及更高速的運作時脈來支持,靠的就是硬體上的補足。
P4.
這也是許多 SOC 所面臨的問題,這問題不只是技術問題而已,還包括客戶庫存的問題。您好不容易根據系統規格找了一顆適用的微控制器,若這次沒用完,當下次有新的系統規格時,卻又發現周邊不合用,又必須買新的微控制器晶片!所以當你看微控制器晶片製造商所提供眾多的微控制器晶片,就夠您眼花撩亂了。所以 FPPA 第一個概念就誕生了:微控制器晶片要能夠提供豐富的周邊功能並可以彈性調整功能。FPPA 在周邊功能之使用示意圖如下:

P5
 FPPA 的產品有很強的周邊功能彈性,可以像用堆積木的方式設計出周邊功能。您可以輕易的利用各個核心的獨立作業能力,輕鬆的寫出您所要的周邊應用功能。您要什麼功能的周邊介面,可以隨意的創造出來,不會被晶片供應商所提供的硬體功能給侷限住。如下圖所示,左上方系統功能為 1 UART TX1 UART RX1 PWM1 I2C1 IR1 SPI Master 以及1 SPI Slave,右上方之系統功能為 4 UART TX1 UART RX 以及 2 I2C,這兩個不同功能的產品是由同一個 FPPA 控制晶片所設計出來的,不同之處只在於晶片內部的軟體不同。同理,利用同一個控制晶片,只要改變控制晶片程式也可以設計出如左下方或右下方功能規格的系統。

  

P6.
要了解平行處理以及及時反應問題,可以透過傳統 MCU 的分時多工作業系統來分析問題,如下圖上半部。該架構係利用內部時間中斷來產生分時多工的工作排序,所以不管有沒有事件( Event ) 發生,您的內部時間中斷會不斷的來詢問事件狀況。您的微處理器就不斷的被迫進入中斷、離開中斷,進中斷要 push stack、離開中斷要 pop stack。當事件多時,還必需把時間切的很細,屆時不是程式運算長度被侷限外,就是要把系統工作頻率加快。這就是個人電腦必需提高 CPU 工作頻率的原因。基本上,它並不是平行處理的架構,事件是依序處理的,緊急事件的處理只能透過提高事件的處理頻率以及優先權;但是事件的處理順序仍是固定的。另外,微控制器進入中斷 ` 離開中斷都有相當的 overhead,也會佔掉微控制器的效能。經由上述的分析,可以了解到傳統 MCU 是無法做到真正的平行處理,想要減少反應的時間也只有透過提高控制晶片的工作頻率或在控制晶片內部增加硬體電路。
  上圖下半部為 FPPA 多核心微控制器單晶片架構在 task 處理的示意圖,FPPA 的一大重點就是多工處理能力,每個 FPP unit 可以平行獨立處理程式,不需要複雜的中斷處理程式就可以完成多工,還可以適時的調整每一個 FPP unit 的處理能力,用一個FPP unit 來處理多件不急的事件,也可以用一個 FPP unit 來專心處理緊急的事件。除了靈活彈性的周邊功能外,FPPA 多核心微控制器提供平行處理的架構,讓程式更精簡、反應時間更短。

P7.
系統設計師寫程式時,常常用到某個事件發生後需要處理其他許多的事件。圖的上半部,就是傳統 MCU 作法,等待事件發生後,進入 ISR,接著依序處理 TASK1TASK2TASK3 等事件;但是,FPPA 可以有完全不同的作法,卻能更有效率的處理事件,利用"wait1/wait0" 指令搭配各個 FPP unit 可獨立執行程式,FPP1FPP2FPP3 可以同時等待同一事件的發生,然後再各自執行所對應的 TASK1TASK2TASK3。大家可以發現,利用多核心單晶片的程式語法,可以很精簡的完成平行多工的事件處理,而且不會像傳統的單核心微控制器,只能依序的執行 TASK1 -> TASK2 -> TASK3。由於不依賴中斷來處理事件,所以不需花時間處理繁複的堆疊(stack)管理,讓多工的程式得以輕而易舉的完成。

P8.
另外,很重要的是 FPPA 的所有指令都是 1T(除了查表指令是 2T),這讓程式設計者在 timing 的計算更容易,當然也讓單晶片在較低的工作頻率下,卻能夠擁有較高的性能。下圖是 FPPA PDK80CXX 與一些常見微控制器在指令以及性能的比較表:

 

P9.
在電氣特性的表現上,PDK80CXX 雖然內含八核心,但是在耗電、抗干擾的表現上似乎又更勝一籌,下圖是在電氣特性上的比較表。

 

P10.
號稱近100個指令,可以參考FPPA指令集.docFPPA簡化指令表.txt

P13.
利用 FPPA 多核心微控制器來產生控制直流無刷馬達所需的六步方波,只用兩個 FPP unit 完成該控制訊號了!產生六步方波的程式範例如下圖所示,在 FPPA 多核心微控制器架構中,FPP unit 是可以彼此互相控制,在本範例中就是利用 FPP6 去控制FPP7 的程式。FPP7 程式的寫法在傳統 MCU 是個死迴圈,一定會當機;但是 FPPA 是個多核心的架構,可以藉由控制每一 FPP unit PC Program Counter)來作不同程式區段的跳躍,使得程式更有彈性與效率。您可以只用兩個 FPP unit 就可以完成不同時間執行不同模組的副程式,只要由一個 FPP unit Enable Disable 另一個 FPP unit,甚至執行完全不同的功能。本範例程式可以顯示出多核心架構的優勢,以及利用多核心特有的平行處理能力,可以遠遠超越傳統 MCU 所能提供的功能,在事件發生後之快速反應更是傳統 MCU所望塵莫及。