第二章 FPGA知識(shí)大串講02_知識(shí)串聯(lián)
作者:潘文明
本文為明德?lián)P原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處!
在上一篇文章中,我們概括地講述了FPGA的一些學(xué)習(xí)誤區(qū)。本文我們將FPGA的關(guān)鍵知識(shí)串聯(lián)起來,系統(tǒng)地介紹各個(gè)知識(shí)點(diǎn)所處的層次和位置,為后面幾仿篇文章的詳細(xì)講解做好鋪墊。
第1節(jié) FPGA的基本電路結(jié)構(gòu)
首先,我們來講解一下FPGA的基本電路結(jié)構(gòu)。請(qǐng)看上圖中左邊紅色方框,該方框內(nèi)包含了組合邏輯電路以及一個(gè)D觸發(fā)器。組合邏輯里可能是加法器、減法器、選擇器,甚至是什么都沒有,就是連線;組合邏輯的輸出將連接到D觸發(fā)器的輸入端;D觸發(fā)器在時(shí)鐘的驅(qū)動(dòng)下,將組合邏輯的運(yùn)算結(jié)構(gòu),輸出到D觸發(fā)器的輸出端。
這就是一個(gè)FPGA的基本電路結(jié)構(gòu),而這個(gè)電路結(jié)構(gòu)則與VERILOG中的一個(gè)ALWAYS對(duì)應(yīng),如下面的代碼
上面代碼在綜合器的作用下,其綜合的FPGA電路結(jié)構(gòu),也是組合邏輯+D觸發(fā)器的形式。其中組合邏輯由比較器(cnt==0、cnt==1、cnt==2就是比較器)、選擇器(從1、2、3或者保持不變中選擇)等組成;D觸發(fā)器的時(shí)鐘就是代碼中的clk,輸入則是組合邏輯的結(jié)果,輸出則是信號(hào)cnt。
有讀者可能會(huì)對(duì)基本電路結(jié)構(gòu)有疑問,難道所有代碼都這樣結(jié)構(gòu)嗎?例如下面代碼中的add_cnt0和end_cnt0信號(hào),它是由assign設(shè)計(jì)的,它們就沒有D觸發(fā)器。
單純只看add_cnt0和end_cnt0的代碼,貌似是沒有D觸發(fā)器,但仔細(xì)看第5行和第6行,這個(gè)兩個(gè)信號(hào)是參與了判斷(事實(shí)就是選擇器),決定了D觸發(fā)器的輸出cnt0。即從add_cnt0到cnt0之間,就是組合邏輯+D觸發(fā)器的結(jié)構(gòu)。
FPGA代碼是由一個(gè)又一個(gè)ALWAYS代碼組成的,這說明FPGA的絕大部分電路,就是由一個(gè)又一個(gè)“組合邏輯+D觸發(fā)器”的電路組合起來的,如下圖
上面這種結(jié)構(gòu)是我們?cè)O(shè)計(jì)的基本單位。這種結(jié)構(gòu)還有一種隱含的意思:組合邏輯決定電路的運(yùn)算及功能,D觸發(fā)器就像一個(gè)節(jié)點(diǎn),將運(yùn)算結(jié)果保存下來,為下一級(jí)運(yùn)算作準(zhǔn)備。FPGA代碼設(shè)計(jì)過程,就像是設(shè)計(jì)一個(gè)功能,保存一下,設(shè)計(jì)下一個(gè)功能,保存一下。文字難以描述,請(qǐng)讀者認(rèn)真體會(huì)體會(huì)。
還有注意的是,上面推薦的是“組合邏輯+D觸發(fā)器”結(jié)構(gòu)思維,不要使用“D觸發(fā)器+組合邏輯”思維,這種思維是不正確的。
再看上圖,為什么說FPGA代碼里,各個(gè)ALWAYS是并行的呢?從上圖就很容易理解了。圖中可以看到,三個(gè)D觸發(fā)器都連接時(shí)鐘CLK。當(dāng)時(shí)鐘CLK的上升沿的時(shí)候,這三個(gè)D觸發(fā)器將同時(shí)受到此信息,同時(shí)將D觸發(fā)器的輸入值給到輸出。這些電路都是同時(shí)工作的,不存在誰先誰后的。沒有所謂說這個(gè)電路在工作,另一個(gè)不在工作的情況。
這個(gè)就是FPGA 的基本電路結(jié)構(gòu),讀者務(wù)必做到非常清楚這個(gè)電路結(jié)構(gòu),這是我們后面描述的一個(gè)重要基礎(chǔ)。
第2節(jié) FPGA的知識(shí)點(diǎn)
我們?cè)贔PGA基礎(chǔ)電路結(jié)構(gòu)圖的基礎(chǔ),將FPGA的所有知識(shí)點(diǎn)串聯(lián)起來,然后通過4篇文章,逐一進(jìn)行詳細(xì)的講解。
1. 先講述組合邏輯部分。組合邏輯是由加法器、減法器、比較器、選擇器等電路組成的,所以一開始我們要理解組合邏輯的電路有哪些類型;然后據(jù)此掌握這些類型的VERILOG代碼的寫法;接下來討論這些組合邏輯的時(shí)序,引出組合邏輯才有的競(jìng)爭(zhēng)和冒險(xiǎn)現(xiàn)象,最后提出競(jìng)爭(zhēng)和冒險(xiǎn)的解決方法。
2. 完成組合邏輯的講述后,我們將討論D觸發(fā)器。首先會(huì)講解D觸發(fā)器的結(jié)構(gòu),進(jìn)而會(huì)講述D觸發(fā)器的時(shí)序,討論D觸發(fā)器時(shí)序與組合邏輯的異同。從D觸發(fā)器時(shí)序中,有一個(gè)非常重要的概念:建立時(shí)間和保持時(shí)間。如果建立時(shí)間和保持時(shí)間不滿足,就會(huì)有一個(gè)叫亞穩(wěn)態(tài)的情況。亞穩(wěn)態(tài)有什么危害,亞穩(wěn)態(tài)出現(xiàn)的場(chǎng)合有哪些。在明確了出現(xiàn)的場(chǎng)合后,就要想辦法解決亞穩(wěn)態(tài)問題,提出了亞穩(wěn)態(tài)的解決方法。其解決方法分兩種:一種是單一信號(hào),也就是一比特信號(hào)的解決方法;還有一種是多比特信號(hào)的解決方法。
3. 講完了D觸發(fā)器之后,我們將把組合邏輯和D觸發(fā)器聯(lián)合起來。前面已經(jīng)講魔神,組合邏輯+D觸發(fā)器是一個(gè)正確的的電路結(jié)構(gòu)。有正確,那么就不正確,根據(jù)收集讀者的反饋情況,我們列出了一些經(jīng)常會(huì)犯的、不合理的結(jié)構(gòu)。之后將討論這個(gè)基本結(jié)構(gòu)的時(shí)序;接下來是講述如何用VERILOG來實(shí)現(xiàn)。實(shí)現(xiàn)的話,就有行為描述以及狀態(tài)機(jī)的實(shí)現(xiàn)這幾種方法了。
4. 最后一部分,我們將單獨(dú)對(duì)時(shí)鐘進(jìn)行講解。時(shí)鐘是FPGA的一個(gè)基礎(chǔ),是一個(gè)很重要的概念,是FPGA設(shè)計(jì)的重點(diǎn)和難點(diǎn)。首先我們將講述時(shí)鐘的概念;然后是時(shí)鐘抖動(dòng)SKEW和時(shí)鐘頻率。經(jīng)常有被問到:我這個(gè)電腦CPU能跑1G,他那個(gè)電腦CPU能跑2G,這就是使用頻率。那這個(gè)頻率取決于什么因素,為什么有些跑得快,有些跑得慢?這個(gè)問題將引出關(guān)鍵路徑的概念。為了提高時(shí)鐘頻率,我們可以怎么做?流水線的設(shè)計(jì)!!!
以上就是我們FPGA 的所有知識(shí)點(diǎn),將其展示到一張圖,方便讀者使用。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1625文章
21637瀏覽量
601316 -
電路
+關(guān)注
關(guān)注
172文章
5828瀏覽量
171804 -
結(jié)構(gòu)
+關(guān)注
關(guān)注
1文章
117瀏覽量
21556
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論