FPGA基礎(chǔ)知識極簡教程(1)從布爾代數(shù)到觸發(fā)器


寫在前面

從初學(xué)者對數(shù)字設(shè)計(jì)的疑問?到什么是FPGA?什么是ASIC?在到布爾代數(shù)如何在FPGA內(nèi)部實(shí)現(xiàn)?最后到數(shù)字設(shè)計(jì)的核心元件觸發(fā)器?
本文將從簡潔的角度帶你認(rèn)識這些數(shù)字設(shè)計(jì)的必備基礎(chǔ)知識!


正文



初學(xué)者數(shù)字設(shè)計(jì)

您應(yīng)該問自己的第一個問題是什么是數(shù)字設(shè)計(jì)師?數(shù)字設(shè)計(jì)師通常是工程師,他們針對FPGA或ASIC編寫代碼,也稱為硬件。 Digital Designer使用兩種主要的編程語言:VHDL和Verilog。這種類型的代碼與軟件根本不同!主要區(qū)別在于軟件代碼以處理器為目標(biāo),而硬件代碼則不是。

中央處理器(CPU)或僅僅是處理器,是軟件設(shè)計(jì)人員需要了解的中央組件。 CPU一次處理一個指令以執(zhí)行任務(wù)。例如,一條指令可能是將寄存器A的內(nèi)容添加到寄存器B,然后將結(jié)果存儲在寄存器C中。軟件設(shè)計(jì)人員使用像C這樣的語言編寫代碼,該代碼由編譯器進(jìn)行編譯。編譯器的工作是獲取軟件設(shè)計(jì)人員編寫的高級代碼,并將其轉(zhuǎn)換為處理器可以理解的低級代碼。必須理解,在硬件設(shè)計(jì)中沒有編譯器!沒有什么可以像使用軟件編譯器那樣將代碼帶入指令中了。

這是因?yàn)镈igital Designer沒有要定位的處理器。相反,它們具有成千上萬的離散數(shù)字組件,例如查找表,寄存器,RAM,數(shù)字信號處理組件等。我們將在以下文章中逐一介紹這些內(nèi)容,因?yàn)樗鼈兎浅V匾?。這些是您的基石!數(shù)字設(shè)計(jì)師所編寫的代碼比軟件工程師要低得多。 Digital Designer面向FPGA的各個組件,并且可以控制一切!

您可能會問自己,為什么CPU如此之快,還要使用硬件設(shè)計(jì)?這是一個好問題。答案是,CPU適用于大量任務(wù),但不是所有任務(wù)。沒有數(shù)字設(shè)計(jì)師,將無法實(shí)現(xiàn)諸如視頻處理,雷達(dá)數(shù)字信號處理,高速股票交易,高速電信等許多功能。學(xué)習(xí)數(shù)字設(shè)計(jì)很有趣,因?yàn)樗亲畹图墑e的編程。您的代碼用于字面上在諸如和門和或門之類的組件之間布線!讓我們開始您進(jìn)入數(shù)字設(shè)計(jì)世界的美好旅程!


什么是FPGA? 什么是ASIC?

FPGA代表現(xiàn)場可編程門陣列。 FPGA是可以被認(rèn)為是可以通過電線連接在一起的大量數(shù)字組件(門,查找表,觸發(fā)器)的組件。您編寫的代碼與電線建立了真正的物理連接,以執(zhí)行所需的功能。 FPGA和ASIC之所以與眾不同,是因?yàn)樗鼈兩瞄L并行(同時)執(zhí)行大量操作。它們用于高速,高性能任務(wù),例如圖像處理,電信,數(shù)字信號處理,高頻股票市場交易等。
ASIC代表專用集成電路。 ASIC在理論上與FPGA相似,不同之處在于ASIC是作為定制電路制造的。 這意味著-與FPGA不同-它是不可重新編程的,因此您最好在第一時間正確! 由于ASIC是定制電路,因此與FPGA相比,它們的速度非??烨夜母?。 對于手機(jī),mp3播放器和其他電池供電的設(shè)備等對功耗敏感的應(yīng)用,這可能至關(guān)重要。

ASIC的最大缺點(diǎn)是成本。 要讓一家公司為您構(gòu)建ASIC,初期投資將花費(fèi)數(shù)十萬美元!

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


數(shù)字設(shè)計(jì)師如何使用布爾代數(shù)?

布爾代數(shù)是FPGA操作的基礎(chǔ)。 布爾代數(shù)描述了輸入和輸出取值為true或false(分別為1或0)的操作。 因此,如果您不擅長微積分,則不必?fù)?dān)心,布爾代數(shù)是最基本的數(shù)學(xué)運(yùn)算! 它是由數(shù)學(xué)家George Boole于1854年引入的。 利用布爾代數(shù)建立的規(guī)則,可以創(chuàng)建執(zhí)行所有基本邏輯運(yùn)算的基礎(chǔ)。 下文將討論的操作是:AND,OR,NOT,XOR(異或)和NAND。 有了這些數(shù)字邏輯的基本構(gòu)建塊,就有可能創(chuàng)建更復(fù)雜的操作,例如加法,減法,除法等。但是首先我們必須了解基礎(chǔ)知識。

與門

與門符號

需要理解的第一個概念稱為真值表。 真值表是根據(jù)輸入和輸出描述功能的表。 通過查看“與”門的真值表可以最好地證明這一點(diǎn)。

2輸入與門表示與門具有2個輸入和1個輸出。 這些值中的每一個都可以具有值0或1,并且輸出值取決于2個輸入值。 當(dāng)兩個輸入值均為1時,輸出僅為1。下面是與門的真值表。

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

或門

或門符號

或門具有2個輸入和1個輸出。 當(dāng)兩個輸入值中的任意一個為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個輸出。 當(dāng)兩個輸入值不同時,輸出為1。 以下是XOR門的真值表。

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

與非門

與非門符號

真值表輸出與與門的輸出相反。 當(dāng)兩個輸入都設(shè)置為1時,它僅為0,否則為1。以下是“與非”門的真值表。

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

使用查找表(LUT)在FPGA內(nèi)部執(zhí)行布爾代數(shù)

上節(jié)討論了布爾代數(shù)的基礎(chǔ),即AND,OR,NOT,XOR和NAND門的工作方式。 討論了真值表的概念。 在此頁面中,我們將擴(kuò)展有關(guān)真值表如何工作的主題,并討論更復(fù)雜的布爾代數(shù)方程。

首先應(yīng)該注意,我們前面討論的所有那些離散邏輯門(AND,OR等)實(shí)際上實(shí)際上并不存在于FPGA內(nèi)部! 但是可以執(zhí)行那些功能。 FPGA能夠執(zhí)行布爾代數(shù)的方法是使用查找表(LUT)。 查找表是可以由Digital Designer編程的離散功能塊。 LUT使用相同的真值表概念將輸出與輸入相關(guān)聯(lián)。 讓我們嘗試一個例子。

為以下布爾方程式創(chuàng)建一個真值表:Q = A * B + A'。 也許我們應(yīng)該定義這些符號的含義。

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

因此,從語言上講,布爾方程Q = A * B + A'可以讀為“輸出Q等于A與B或A非”。 讓我們看一下真值表和該方程式創(chuàng)建的電路。 從下圖可以看出,制作此電路總共需要三個門。

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),這意味著有四種可能的輸出可能性。 每個輸入將可能的輸出數(shù)量增加2倍。因此,對于一個輸入,有2個輸出可能性,對于2個輸入,有4個輸出可能性,對于3個輸入,有8個輸出可能性,等等。在數(shù)學(xué)上,這可以表示為2 ^ (輸入的數(shù)量)。 現(xiàn)在讓我們再看一個具有三個輸入的示例。 這是我們要為以下項(xiàng)創(chuàng)建真值表的方程:Q = A +(C * B')。 注意,圓括號表示操作C AND NOT B發(fā)生在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
demo2

如本文開頭所述,F(xiàn)PGA內(nèi)部實(shí)際上并不存在離散邏輯門。相反,F(xiàn)PGA使用查找表或LUT。 LUT由數(shù)字設(shè)計(jì)師編程以執(zhí)行布爾代數(shù)方程,就像我們上面看到的兩個一樣。如您所料,布爾表達(dá)式的所有可能組合都需要能夠被編程到查找表中。我將再次以不同的方式說:一個3輸入LUT可以使您想到使用3個輸入信號的任何布爾代數(shù)方程。驚人!

根據(jù)所使用的FPGA,LUT的大小可能不同,但它們的行為方式相同。 3輸入LUT不久前就已成為標(biāo)準(zhǔn),但今天4輸入甚至5輸入LUT都很普遍。如果您需要做出更復(fù)雜的表達(dá)式,則可以使用更多的查找表。 LUT是FPGA中兩個最基本的組件之一。單個FPGA具有數(shù)千個這些組件。既然您已經(jīng)更加熟悉了這些功能強(qiáng)大的通用組件,那么現(xiàn)在該討論FPGA內(nèi)部另一個最重要的元素了:


觸發(fā)器如何在FPGA中工作?

在上一節(jié)中,我們討論了查找表(LUT)組件。 這是FPGA內(nèi)部兩個最重要的組件之一,另一個最重要的組件是觸發(fā)器。 觸發(fā)器有幾種不同的類型(JK,T,D),但最常用的是D觸發(fā)器。

D觸發(fā)器

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

D觸發(fā)器簡化
D    數(shù)據(jù)輸入到觸發(fā)器
Q    觸發(fā)器的Q數(shù)據(jù)輸出 
>    時鐘輸入到觸發(fā)器

您可能會問自己的第一個問題是,時鐘是什么?

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


鐘表

而是這種類型的時鐘!


時鐘信號

數(shù)字時鐘是使幾乎所有數(shù)字電路都可以運(yùn)行的原因。 考慮系統(tǒng)時鐘的一種方法是考慮齒輪組。 為了使系統(tǒng)中的任何齒輪都能轉(zhuǎn)動,必須有一些主齒輪來驅(qū)動所有其他齒輪。 這實(shí)際上是數(shù)字邏輯中時鐘的目的。 它提供了電壓從低到高到低的穩(wěn)定過渡流,使您的FPGA能夠順暢運(yùn)行。 此外,類比很有趣,因?yàn)辇X輪看上去有點(diǎn)像數(shù)字時鐘的方波。

時鐘是允許觸發(fā)器用作數(shù)據(jù)存儲元件的時鐘。 任何數(shù)據(jù)存儲元素都稱為寄存邏輯。 寄存邏輯在時鐘的躍遷上運(yùn)行。 99.9%的時間將是上升沿(時鐘從0變?yōu)?時)。 當(dāng)觸發(fā)器看到時鐘的上升沿時,它將數(shù)據(jù)從輸入D寄存到輸出Q。觸發(fā)器使復(fù)雜的FPGA成為可能! 讓我們看一些事件的波形。

D觸發(fā)器的輸入到輸出

上面的波形顯示了三個時鐘周期事件,由時鐘上升沿上的紅色箭頭表示。 在時鐘的第一和第二上升沿之間,D輸入從低到高。 輸出Q看到D在第二個時鐘周期的上升沿從低變高。 上升沿是當(dāng)觸發(fā)器采樣輸入數(shù)據(jù)的時刻。 此時,Q變?yōu)榕c輸入D相同的值。在第三個上升沿,Q再次采樣D的值并將其寄存(這就是為什么觸發(fā)器通常被稱為寄存器)的原因。 由于它沒有變化,因此Q保持較高。 我們來看另一個波形。

D觸發(fā)器事件序列

上圖顯示了D觸發(fā)器的輸入波形和輸出的波形。 D觸發(fā)器對時鐘的上升沿敏感,因此當(dāng)上升沿出現(xiàn)時,輸入D會傳遞到輸出Q。這僅發(fā)生在上升沿。在第一個時鐘周期,Q看到D已變?yōu)?,因此它從0切換到1。在第二個時鐘沿,Q再次檢查D的值并發(fā)現(xiàn)它再次為低,因此變?yōu)榈汀?/p>

現(xiàn)在您了解了它們是如何工作的,讓我們討論它們?yōu)槭裁磳?shù)字設(shè)計(jì)如此重要。同樣,我提到 觸發(fā)器 和LUT是FPGA內(nèi)部兩個最重要的組件。觸發(fā)器(寄存器)如何工作的概念對于成為一名優(yōu)秀的數(shù)字設(shè)計(jì)師至關(guān)重要。這些小家伙無處不在!觸發(fā)器是FPGA中的主要組件,用于將狀態(tài)保持在芯片內(nèi)部。

如果一切都是由LUT組成的,則無法在FPGA中保持狀態(tài)。這意味著FPGA將不知道以前發(fā)生了什么。輸入上的所有更改都將立即被評估,并通過一個很長的與門、或門等鏈發(fā)送給輸出。但是,為了完成絕大多數(shù)任務(wù),F(xiàn)PGA需要了解一些過去的知識。這樣,它可以跟蹤計(jì)數(shù)器,狀態(tài)機(jī)和事物的狀態(tài)。觸發(fā)器使這成為可能。如果您仍然不太了解這個概念,好吧,這是一種抽象的思維方式。使用硬件描述語言(HDL)的工作越多,觸發(fā)器在FPGA設(shè)計(jì)中的重要性就越明顯。


參考資料


交個朋友

  • 個人微信公眾號:FPGA LAB,左下角二維碼;

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


    個人微信公眾號:FPGA LAB 個人知乎:李銳博恩
  • FPGA/IC技術(shù)交流2020

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容