寫在前面
- 個人博客首頁
- 注:學(xué)習(xí)交流使用!
從初學(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 |

上例中的真值表有兩個輸入(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 |

如本文開頭所述,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ā)器。

請注意,在上圖中,設(shè)備頂部有一個標(biāo)記為S的引腳。這被稱為置位引腳。 在設(shè)備底部,有一個標(biāo)記為R的引腳。這稱為復(fù)位引腳。 此外,在設(shè)備的右側(cè),有一個標(biāo)記為Qbar的引腳。 該引腳將始終包含與引腳Q上的值相反的值。既然您知道這些引腳是什么,那就讓我們忽略它們! 它們很重要,但不是本文重點(diǎn)。 觸發(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輸入從低到高。 輸出Q看到D在第二個時鐘周期的上升沿從低變高。 上升沿是當(dāng)觸發(fā)器采樣輸入數(shù)據(jù)的時刻。 此時,Q變?yōu)榕c輸入D相同的值。在第三個上升沿,Q再次采樣D的值并將其寄存(這就是為什么觸發(fā)器通常被稱為寄存器)的原因。 由于它沒有變化,因此Q保持較高。 我們來看另一個波形。
上圖顯示了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 個人知乎:李銳博恩
