寫在前面
- 個人博客首頁
- 注:學(xué)習(xí)交流使用棚贾!
從初學(xué)者對數(shù)字設(shè)計的疑問酥宴?到什么是FPGA?什么是ASIC颜武?在到布爾代數(shù)如何在FPGA內(nèi)部實現(xiàn)璃搜?最后到數(shù)字設(shè)計的核心元件觸發(fā)器?
本文將從簡潔的角度帶你認(rèn)識這些數(shù)字設(shè)計的必備基礎(chǔ)知識鳞上!
正文
初學(xué)者數(shù)字設(shè)計
您應(yīng)該問自己的第一個問題是什么是數(shù)字設(shè)計師这吻?數(shù)字設(shè)計師通常是工程師,他們針對FPGA或ASIC編寫代碼篙议,也稱為硬件唾糯。 Digital Designer使用兩種主要的編程語言:VHDL和Verilog。這種類型的代碼與軟件根本不同鬼贱!主要區(qū)別在于軟件代碼以處理器為目標(biāo)趾断,而硬件代碼則不是。
中央處理器(CPU)或僅僅是處理器吩愧,是軟件設(shè)計人員需要了解的中央組件芋酌。 CPU一次處理一個指令以執(zhí)行任務(wù)。例如雁佳,一條指令可能是將寄存器A的內(nèi)容添加到寄存器B脐帝,然后將結(jié)果存儲在寄存器C中同云。軟件設(shè)計人員使用像C這樣的語言編寫代碼,該代碼由編譯器進(jìn)行編譯堵腹。編譯器的工作是獲取軟件設(shè)計人員編寫的高級代碼炸站,并將其轉(zhuǎn)換為處理器可以理解的低級代碼。必須理解疚顷,在硬件設(shè)計中沒有編譯器旱易!沒有什么可以像使用軟件編譯器那樣將代碼帶入指令中了。
這是因為Digital Designer沒有要定位的處理器腿堤。相反阀坏,它們具有成千上萬的離散數(shù)字組件,例如查找表笆檀,寄存器忌堂,RAM,數(shù)字信號處理組件等酗洒。我們將在以下文章中逐一介紹這些內(nèi)容士修,因為它們非常重要。這些是您的基石樱衷!數(shù)字設(shè)計師所編寫的代碼比軟件工程師要低得多棋嘲。 Digital Designer面向FPGA的各個組件,并且可以控制一切矩桂!
您可能會問自己沸移,為什么CPU如此之快,還要使用硬件設(shè)計耍鬓?這是一個好問題。答案是流妻,CPU適用于大量任務(wù)牲蜀,但不是所有任務(wù)。沒有數(shù)字設(shè)計師绅这,將無法實現(xiàn)諸如視頻處理涣达,雷達(dá)數(shù)字信號處理,高速股票交易证薇,高速電信等許多功能度苔。學(xué)習(xí)數(shù)字設(shè)計很有趣,因為它是最低級別的編程浑度。您的代碼用于字面上在諸如和門和或門之類的組件之間布線寇窑!讓我們開始您進(jìn)入數(shù)字設(shè)計世界的美好旅程!
什么是FPGA箩张? 什么是ASIC甩骏?
FPGA代表現(xiàn)場可編程門陣列窗市。 FPGA是可以被認(rèn)為是可以通過電線連接在一起的大量數(shù)字組件(門,查找表饮笛,觸發(fā)器)的組件咨察。您編寫的代碼與電線建立了真正的物理連接,以執(zhí)行所需的功能福青。 FPGA和ASIC之所以與眾不同摄狱,是因為它們擅長并行(同時)執(zhí)行大量操作。它們用于高速无午,高性能任務(wù)媒役,例如圖像處理,電信指厌,數(shù)字信號處理刊愚,高頻股票市場交易等。
ASIC代表專用集成電路踩验。 ASIC在理論上與FPGA相似鸥诽,不同之處在于ASIC是作為定制電路制造的。 這意味著-與FPGA不同-它是不可重新編程的箕憾,因此您最好在第一時間正確牡借! 由于ASIC是定制電路,因此與FPGA相比袭异,它們的速度非衬屏快且功耗更低。 對于手機(jī)御铃,mp3播放器和其他電池供電的設(shè)備等對功耗敏感的應(yīng)用碴里,這可能至關(guān)重要。
ASIC的最大缺點是成本上真。 要讓一家公司為您構(gòu)建ASIC咬腋,初期投資將花費數(shù)十萬美元!
FPGA和ASIC均采用硬件描述語言(HDL)設(shè)計睡互。 兩種最受歡迎的硬件描述語言是VHDL和Verilog根竿。
數(shù)字設(shè)計師如何使用布爾代數(shù)?
布爾代數(shù)是FPGA操作的基礎(chǔ)就珠。 布爾代數(shù)描述了輸入和輸出取值為true或false(分別為1或0)的操作寇壳。 因此,如果您不擅長微積分妻怎,則不必?fù)?dān)心壳炎,布爾代數(shù)是最基本的數(shù)學(xué)運算! 它是由數(shù)學(xué)家George Boole于1854年引入的逼侦。 利用布爾代數(shù)建立的規(guī)則冕广,可以創(chuàng)建執(zhí)行所有基本邏輯運算的基礎(chǔ)疏日。 下文將討論的操作是:AND,OR撒汉,NOT沟优,XOR(異或)和NAND。 有了這些數(shù)字邏輯的基本構(gòu)建塊,就有可能創(chuàng)建更復(fù)雜的操作,例如加法踢故,減法,除法等侵俗。但是首先我們必須了解基礎(chǔ)知識。
與門
需要理解的第一個概念稱為真值表丰刊。 真值表是根據(jù)輸入和輸出描述功能的表隘谣。 通過查看“與”門的真值表可以最好地證明這一點。
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等)實際上實際上并不存在于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)在讓我們再看一個具有三個輸入的示例乳蓄。 這是我們要為以下項創(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)部實際上并不存在離散邏輯門产舞。相反,F(xiàn)PGA使用查找表或LUT菠剩。 LUT由數(shù)字設(shè)計師編程以執(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上的值相反的值黍檩。既然您知道這些引腳是什么叉袍,那就讓我們忽略它們! 它們很重要刽酱,但不是本文重點喳逛。 觸發(fā)器上最重要的三個引腳是:
D 數(shù)據(jù)輸入到觸發(fā)器
Q 觸發(fā)器的Q數(shù)據(jù)輸出
> 時鐘輸入到觸發(fā)器
您可能會問自己的第一個問題是,時鐘是什么棵里?
注意润文,不是這種類型的時鐘!
而是這種類型的時鐘殿怜!
數(shù)字時鐘是使幾乎所有數(shù)字電路都可以運行的原因典蝌。 考慮系統(tǒng)時鐘的一種方法是考慮齒輪組。 為了使系統(tǒng)中的任何齒輪都能轉(zhuǎn)動头谜,必須有一些主齒輪來驅(qū)動所有其他齒輪骏掀。 這實際上是數(shù)字邏輯中時鐘的目的。 它提供了電壓從低到高到低的穩(wěn)定過渡流柱告,使您的FPGA能夠順暢運行截驮。 此外,類比很有趣际度,因為齒輪看上去有點像數(shù)字時鐘的方波葵袭。
時鐘是允許觸發(fā)器用作數(shù)據(jù)存儲元件的時鐘。 任何數(shù)據(jù)存儲元素都稱為寄存邏輯乖菱。 寄存邏輯在時鐘的躍遷上運行坡锡。 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è)計如此重要追葡。同樣审轮,我提到 觸發(fā)器 和LUT是FPGA內(nèi)部兩個最重要的組件。觸發(fā)器(寄存器)如何工作的概念對于成為一名優(yōu)秀的數(shù)字設(shè)計師至關(guān)重要辽俗。這些小家伙無處不在疾渣!觸發(fā)器是FPGA中的主要組件,用于將狀態(tài)保持在芯片內(nèi)部崖飘。
如果一切都是由LUT組成的榴捡,則無法在FPGA中保持狀態(tài)。這意味著FPGA將不知道以前發(fā)生了什么朱浴。輸入上的所有更改都將立即被評估吊圾,并通過一個很長的與門、或門等鏈發(fā)送給輸出翰蠢。但是项乒,為了完成絕大多數(shù)任務(wù),F(xiàn)PGA需要了解一些過去的知識梁沧。這樣檀何,它可以跟蹤計數(shù)器,狀態(tài)機(jī)和事物的狀態(tài)廷支。觸發(fā)器使這成為可能频鉴。如果您仍然不太了解這個概念,好吧恋拍,這是一種抽象的思維方式垛孔。使用硬件描述語言(HDL)的工作越多,觸發(fā)器在FPGA設(shè)計中的重要性就越明顯施敢。
參考資料
交個朋友
個人微信公眾號:FPGA LAB周荐,左下角二維碼狭莱;
-
知乎:李銳博恩,右下角二維碼概作。