FPGA基礎知識極簡教程(1)從布爾代數到觸發器


html

  • 寫在前面git

  • 正文web

    • 初學者數字設計編程

    • 什麼是FPGA?什麼是ASIC?微信

    • 數字設計師如何使用布爾代數?併發

    • 使用查找表(LUT)在FPGA內部執行布爾代數編程語言

    • 觸發器如何在FPGA中工做?編輯器

  • 參考資料性能

  • 交個朋友學習



寫在前面

  • 我的博客首頁 [1]
  • 注:學習交流使用!

從初學者對數字設計的疑問?到什麼是FPGA?什麼是ASIC?再到布爾代數如何在FPGA內部實現?最後到數字設計的核心元件觸發器?本文將從簡潔的角度帶你認識這些數字設計的必備基礎知識!


正文



初學者數字設計

您應該問本身的第一個問題是什麼是數字設計師?數字設計師一般是工程師,他們針對FPGA或ASIC編寫代碼,也稱爲硬件。Digital Designer使用兩種主要的編程語言:VHDL和Verilog。這種類型的代碼與軟件根本不一樣!主要區別在於軟件代碼以處理器爲目標,而硬件代碼則不是。

中央處理器(CPU)或僅僅是處理器,是軟件設計人員須要瞭解的中央組件。CPU一次處理一個指令以執行任務。例如,一條指令多是將寄存器A的內容添加到寄存器B,而後將結果存儲在寄存器C中。軟件設計人員使用像C這樣的語言編寫代碼,該代碼由編譯器進行編譯。編譯器的工做是獲取軟件設計人員編寫的高級代碼,並將其轉換爲處理器能夠理解的低級代碼。必須理解,在硬件設計中沒有編譯器!沒有什麼能夠像使用軟件編譯器那樣將代碼帶入指令中了。

這是由於Digital Designer沒有要定位的處理器。相反,它們具備成千上萬的離散數字組件,例如查找表,寄存器,RAM,數字信號處理組件等。咱們將在如下文章中逐一介紹這些內容,由於它們很是重要。這些是您的基石!數字設計師所編寫的代碼比軟件工程師要低得多。Digital Designer面向FPGA的各個組件,而且能夠控制一切!

您可能會問本身,爲何CPU如此之快,還要使用硬件設計?這是一個好問題。答案是,CPU適用於大量任務,但不是全部任務。沒有數字設計師,將沒法實現諸如視頻處理,雷達數字信號處理,高速股票交易,高速電信等許多功能。學習數字設計頗有趣,由於它是最低級別的編程。您的代碼用於字面上在諸如與門和或門之類的組件之間佈線!讓咱們開始您進入數字設計世界的美好旅程!


什麼是FPGA?什麼是ASIC?

FPGA表明現場可編程門陣列。FPGA是能夠被認爲是能夠經過電線鏈接在一塊兒的大量數字組件(門,查找表,觸發器)的組件。您編寫的代碼與電線創建了真正的物理鏈接,以執行所需的功能。FPGA和ASIC之因此不同凡響,是由於它們擅長並行(同時)執行大量操做。它們用於高速,高性能任務,例如圖像處理,電信,數字信號處理,高頻股票市場交易等。ASIC表明專用集成電路。ASIC在理論上與FPGA類似,不一樣之處在於ASIC是做爲定製電路製造的。這意味着-與FPGA不一樣-它是不可從新編程的,所以您最好在第一時間正確!因爲ASIC是定製電路,所以與FPGA相比,它們的速度很是快且功耗更低。對於手機,mp3播放器和其餘電池供電的設備等對功耗敏感的應用,這可能相當重要。

ASIC的最大缺點是成本。要讓一家公司爲您構建ASIC,初期投資將花費數十萬美圓!

FPGA和ASIC均採用硬件描述語言(HDL)設計。兩種最受歡迎的硬件描述語言是VHDL和Verilog。


數字設計師如何使用布爾代數?

布爾代數是FPGA操做的基礎。布爾代數描述了輸入和輸出取值爲true或false(分別爲1或0)的操做。所以,若是您不擅長微積分,則沒必要擔憂,布爾代數是最基本的數學運算!它是由數學家George Boole於1854年引入的。利用布爾代數創建的規則,能夠建立執行全部基本邏輯運算的基礎。下文將討論的操做是:AND,OR,NOT,XOR(異或)和NAND。有了這些數字邏輯的基本構建塊,就有可能建立更復雜的操做,例如加法,減法,除法等。可是首先咱們必須瞭解基礎知識。

「與門」

與門符號

須要理解的第一個概念稱爲真值表。真值表是根據輸入和輸出描述功能的表。經過查看「與」門的真值表能夠最好地證實這一點。

2輸入與門表示與門具備2個輸入和1個輸出。這些值中的每個均可以具備值0或1,而且輸出值取決於2個輸入值。當兩個輸入值均爲1時,輸出僅爲1。下面是與門的真值表。

Input A Input B Output Q
0 0 0
0 1 0
1 0 0
1 1 1

「或門」

或門符號

或門具備2個輸入和1個輸出。當兩個輸入值中的任意一個爲1時,輸出均爲1。如下是「或」門的真值表。

Input A Input B Output Q
0 0 0
0 1 1
1 0 1
1 1 1

「非門」

非門符號

非門表示非門有1個輸入和1個輸出。輸出與輸入值相反。如下是非門的真值表。

Input A Output Q
0 1
1 0

「異或門」

異或門符號

XOR(異或)門表示XOR(異或)門具備2個輸入和1個輸出。當兩個輸入值不一樣時,輸出爲1。如下是XOR門的真值表。

Input A Input B Output Q
0 0 0
0 1 1
1 0 1
1 1 0

「與非門」

與非門符號

真值表輸出與與門的輸出相反。當兩個輸入都設置爲1時,它僅爲0,不然爲1。如下是「與非」門的真值表。

Input A Input B Output Q
0 0 1
0 1 1
1 0 1
1 1 0

使用查找表(LUT)在FPGA內部執行布爾代數

上節討論了布爾代數的基礎,即AND,OR,NOT,XOR和NAND門的工做方式。討論了真值表的概念。在此頁面中,咱們將擴展有關真值表如何工做的主題,並討論更復雜的布爾代數方程。

首先應該注意,咱們前面討論的全部那些離散邏輯門(AND,OR等)實際上實際上並不存在於FPGA內部!可是能夠執行那些功能。FPGA可以執行布爾代數的方法是使用查找表(LUT)。查找表是能夠由Digital Designer編程的離散功能塊。LUT使用相同的真值表概念將輸出與輸入相關聯。讓咱們嘗試一個例子。

爲如下布爾方程式建立一個真值表:Q = A * B + A'。也許咱們應該定義這些符號的含義。

* = AND
+ = OR
' = NOT
^ = NAND

所以,從語言上講,布爾方程Q = A * B + A'能夠讀爲「輸出Q等於A與B或A非」。讓咱們看一下真值表和該方程式建立的電路。從下圖能夠看出,製做此電路總共須要三個門。

Truth Table - A*B + A'

Input A Input B Output Q
0 0 1
0 1 1
1 0 0
1 1 1
demo1

上例中的真值表有兩個輸入(A和B),這意味着有四種可能的輸出可能性。每一個輸入將可能的輸出數量增長2倍。所以,對於一個輸入,有2個輸出可能性,對於2個輸入,有4個輸出可能性,對於3個輸入,有8個輸出可能性,等等。在數學上,這能夠表示爲2 ^ (輸入的數量)。如今讓咱們再看一個具備三個輸入的示例。這是咱們要爲如下項建立真值表的方程:Q = A +(C * B')。注意,圓括號表示操做C AND NOT B發生在OR操做以前。

Truth Table - A + (C*B')

Input A Input B Input C Output Q
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1

如本文開頭所述,FPGA內部實際上並不存在離散邏輯門。相反,FPGA使用查找表或LUT。LUT由數字設計師編程以執行布爾代數方程,就像咱們上面看到的兩個同樣。如您所料,布爾表達式的全部可能組合都須要可以被編程到查找表中。我將再次以不一樣的方式說:一個3輸入LUT可使您想到使用3個輸入信號的任何布爾代數方程。驚人!

根據所使用的FPGA,LUT的大小可能不一樣,但它們的行爲方式相同。3輸入LUT不久前就已成爲標準,但今天4輸入甚至5輸入LUT都很廣泛。若是您須要作出更復雜的表達式,則可使用更多的查找表。LUT是FPGA中兩個最基本的組件之一。單個FPGA具備數千個這些組件。既然您已經更加熟悉了這些功能強大的通用組件,那麼如今該討論FPGA內部另外一個最重要的元素了:


觸發器如何在FPGA中工做?

在上一節中,咱們討論了查找表(LUT)組件。這是FPGA內部兩個最重要的組件之一,另外一個最重要的組件是觸發器。觸發器有幾種不一樣的類型(JK,T,D),但最經常使用的是D觸發器。

請注意,在上圖中,設備頂部有一個標記爲S的引腳。這被稱爲置位引腳。在設備底部,有一個標記爲R的引腳。這稱爲復位引腳。此外,在設備的右側,有一個標記爲Qbar的引腳。該引腳將始終包含與引腳Q上的值相反的值。既然您知道這些引腳是什麼,那就讓咱們忽略它們!它們很重要,但不是本文重點。觸發器上最重要的三個引腳是:

D觸發器簡化
D    數據輸入到觸發器
Q 觸發器的Q數據輸出
> 時鐘輸入到觸發器

您可能會問本身的第一個問題是,時鐘是什麼?

注意,不是這種類型的時鐘!

而是這種類型的時鐘!數字時鐘是使幾乎全部數字電路均可以運行的緣由。考慮系統時鐘的一種方法是考慮齒輪組。爲了使系統中的任何齒輪都能轉動,必須有一些主齒輪來驅動全部其餘齒輪。這其實是數字邏輯中時鐘的目的。它提供了電壓從低到高到低的穩定過渡流,使您的FPGA可以順暢運行。此外,類比頗有趣,由於齒輪看上去有點像數字時鐘的方波。

時鐘是容許觸發器用做數據存儲元件的時鐘。任何數據存儲元素都稱爲寄存邏輯。寄存邏輯在時鐘的躍遷上運行。99.9%的時間將是上升沿(時鐘從0變爲1時)。當觸發器看到時鐘的上升沿時,它將數據從輸入D寄存到輸出Q。觸發器使複雜的FPGA成爲可能!讓咱們看一些事件的波形。

D觸發器的輸入到輸出

上面的波形顯示了三個時鐘週期事件,由時鐘上升沿上的紅色箭頭表示。在時鐘的第一和第二上升沿之間,D輸入從低到高。輸出Q看到D在第二個時鐘週期的上升沿從低變高。上升沿是當觸發器採樣輸入數據的時刻。此時,Q變爲與輸入D相同的值。在第三個上升沿,Q再次採樣D的值並將其寄存(這就是爲何觸發器一般被稱爲寄存器)的緣由。因爲它沒有變化,所以Q保持較高。咱們來看另外一個波形。

D觸發器事件序列

上圖顯示了D觸發器的輸入波形和輸出的波形。D觸發器對時鐘的上升沿敏感,所以當上升沿出現時,輸入D會傳遞到輸出Q。這僅發生在上升沿。在第一個時鐘週期,Q看到D已變爲1,所以它從0切換到1。在第二個時鐘沿,Q再次檢查D的值並發現它再次爲低,所以變爲低。

如今您瞭解了它們是如何工做的,讓咱們討論它們爲何對數字設計如此重要。一樣,我提到 觸發器 和LUT是FPGA內部兩個最重要的組件。觸發器(寄存器)如何工做的概念對於成爲一名優秀的數字設計師相當重要。這些小傢伙無處不在!觸發器是FPGA中的主要組件,用於將狀態保持在芯片內部。

若是一切都是由LUT組成的,則沒法在FPGA中保持狀態。這意味着FPGA將不知道之前發生了什麼。輸入上的全部更改都將當即被評估,並經過一個很長的與門、或門等鏈發送給輸出。可是,爲了完成絕大多數任務,FPGA須要瞭解一些過去的知識。這樣,它能夠跟蹤計數器,狀態機和事物的狀態。觸發器使這成爲可能。若是您仍然不太瞭解這個概念,好吧,這是一種抽象的思惟方式。使用硬件描述語言(HDL)的工做越多,觸發器在FPGA設計中的重要性就越明顯。


參考資料

  • 參考資料1 [2]
  • 參考資料2 [3]
  • 參考資料3 [4]

交個朋友

  • 我的微信公衆號:FPGA LAB,左下角二維碼;

  • 知乎:李銳博恩,右下角二維碼。

  • FPGA/IC技術交流2020[5]

Reference

[1]

我的博客首頁: https://blog.csdn.net/Reborn_Lee

[2]

參考資料1: https://www.nandland.com/articles/flip-flop-register-component-in-fpga.html

[3]

參考資料2: https://www.nandland.com/articles/boolean-algebra-using-look-up-tables-lut.html

[4]

參考資料3: https://www.nandland.com/articles/boolean-algebra-truth-table-and-gates.html

[5]

FPGA/IC技術交流2020: https://blog.csdn.net/Reborn_Lee/article/details/105844330


本文分享自微信公衆號 - FPGA LAB(gh_af38c08c9983)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索