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


寫在前面

從初學(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
demo1

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

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

D觸發(fā)器

請注意,在上圖中溜腐,設(shè)備頂部有一個標(biāo)記為S的引腳译株。這被稱為置位引腳。 在設(shè)備底部挺益,有一個標(biāo)記為R的引腳歉糜。這稱為復(fù)位引腳。 此外矩肩,在設(shè)備的右側(cè)现恼,有一個標(biāo)記為Qbar的引腳。 該引腳將始終包含與引腳Q上的值相反的值黍檩。既然您知道這些引腳是什么叉袍,那就讓我們忽略它們! 它們很重要刽酱,但不是本文重點喳逛。 觸發(fā)器上最重要的三個引腳是:

D觸發(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觸發(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è)計如此重要追葡。同樣审轮,我提到 觸發(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周荐,左下角二維碼狭莱;

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


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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腋妙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仆嗦,更是在濱河造成了極大的恐慌,老刑警劉巖先壕,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘩扼,死亡現(xiàn)場離奇詭異,居然都是意外死亡垃僚,警方通過查閱死者的電腦和手機(jī)集绰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谆棺,“玉大人栽燕,你說我怎么就攤上這事「氖纾” “怎么了碍岔?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朵夏。 經(jīng)常有香客問我蔼啦,道長,這世上最難降的妖魔是什么仰猖? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任捏肢,我火速辦了婚禮,結(jié)果婚禮上饥侵,老公的妹妹穿的比我還像新娘鸵赫。我一直安慰自己,他們只是感情好躏升,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布辩棒。 她就那樣靜靜地躺著,像睡著了一般膨疏。 火紅的嫁衣襯著肌膚如雪盗温。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天成肘,我揣著相機(jī)與錄音卖局,去河邊找鬼。 笑死双霍,一個胖子當(dāng)著我的面吹牛砚偶,可吹牛的內(nèi)容都是我干的批销。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼染坯,長吁一口氣:“原來是場噩夢啊……” “哼均芽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起单鹿,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤掀宋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仲锄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劲妙,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年儒喊,在試婚紗的時候發(fā)現(xiàn)自己被綠了镣奋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡怀愧,死狀恐怖侨颈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芯义,我是刑警寧澤哈垢,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站扛拨,受9級特大地震影響温赔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鬼癣,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一陶贼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧待秃,春花似錦拜秧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暖庄,卻和暖如春聊替,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背培廓。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工惹悄, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肩钠。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓泣港,卻偏偏與公主長得像暂殖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子当纱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348