FPGA的硬體設計思維

FPGA的硬體設計思維

來自專欄 FPGA設計

上節講到軟體編程的順序思維,為什麼這種思維模式很難滿足FPGA設計呢?我們從FPGA的名詞解釋著手去看這個問題。FPGA,即現場可編程門陣列,是在PAL、GAL、CPLD等可編程器件的基礎上進一步發展的產物。

請注意「器件」這個詞。在第2小節裡面我們講到過,一個D觸發器,就是一個完成某項功能的電路,我們可以把它看作是一個晶元。

這就是一個由a、b、clk、rst-n幾個引腳組成的晶元,這個晶元即實現D觸發器的功能。下面是對應代碼

再來看另外一個晶元及其對應代碼:

下面我們從代碼角度去看晶元:

這組代碼我們就可以把它看做是兩個晶元。每個always對應一個。比如一個FPGA中有a、b、c、d、e、f、g等多個信號,我們可以把它理解為每一個都是有獨立輸出的晶元,示意圖和與之分別對應的代碼如下:

現在我們確定abcdefg這些晶元的功能之後,再把它們連線在一起,下載到開發板上,通電後按照設定功能運作。這就是FPGA的基本運作原理。由此我們可以看出,FPGA就是由若干個類似晶元並列組合而成,它們相互之間不一定產生順序因果關係。可以說,FPGA是描述實物,軟體編程是編寫過程。

為什麼軟體編程順序思維不適合FPGA設計呢?

在FPGA的運作過程中,有一步是連線。如上圖中f晶元與g晶元中的f管腳,名字相同的連接起來。那麼,如果出現兩個以上a晶元的情況呢?對於軟體來說不成問題,首先a=0,之後a=1,一直順序進行即可。但是在FPGA中,當兩個a連線之後,一個a=0,另外一個a=1,相互之間就出現了衝突。因此,在FPGA中,一個信號只能在一個always設計,否則就會出現衝突。

我們仍以上一小節中的計數器代碼為例,對比一下軟體思維與硬體思維的區別。

圖左是我們前面提到過的按照順序過程的軟體思維,現在我們再來看採取硬體思維模式的圖右。

1. 是否複位的情況?是。cnt=0;否,進入下一環節;

2. Cnt是否等於10?是。cnt=0;否,進入下一環節;

3. 排除上述情況後,cnt+1,結束。

很明顯,在圖右中採取的是對硬體功能進行「描述」,將各種不同情況分別列出。信號根據不同條件執行所對應的命令,且同時只會執行其中一種命令。

現在我們來回顧一下本節要點。FPGA正確的思維模式是硬體設計思維,通過下面四步來完成項目。

1. 一個信號就是一個元器件;

2. 一個always對應一個信號;

3. 逐個定義(描述)每個信號(元器件)功能;

4. 將定義好的信號連接起來。

下一節,要講的是《知識點的二八定律》。


推薦閱讀:

小米與榮耀之爭仍未結束,但結果已成定局
為什麼選擇做機器人教育
不寫黑板報的道哥:我要做出能代表我的偉大產品
悟空互動:你要的不是運營資料,而是手把手運營指導
如何使用powershell 跑 python

TAG:科技 | 硬體 | 現場可編輯邏輯門陣列FPGA |