官术网_书友最值得收藏!

第1章 FPGA高階設(shè)計方法

1.1 可編程邏輯設(shè)計原則

FPGA是可編程的硬件設(shè)備,可編程邏輯設(shè)計有以下4個原則。

(1)面積與速度互換原則。

(2)數(shù)字電路硬件原則。

(3)系統(tǒng)設(shè)計原則。

(4)同步設(shè)計原則。

1.1.1 面積與速度互換原則

這里的面積是指FPGA邏輯器件中的邏輯資源。在邏輯資源有限,且設(shè)計規(guī)模龐大的情況下,必須采取犧牲速度以節(jié)約面積的做法。例如,減少實例化模塊的數(shù)量,特別是標準IP生成的模塊,可分時復(fù)用這些模塊,前提是這些模塊不存在數(shù)據(jù)依存或者并行處理的要求。

例如,可用一個查找表ROM模塊將一組十六進制數(shù)據(jù)轉(zhuǎn)換為十進制數(shù)據(jù)來顯示,如果設(shè)計時有多組十六進制數(shù)據(jù)需要轉(zhuǎn)換為十進制數(shù)據(jù)來顯示,則可以分時復(fù)用一個查找表ROM模塊來節(jié)約資源,程序代碼如下。

以上是用一個查找表ROM模塊在7個周期內(nèi)實現(xiàn)4組十六進制數(shù)轉(zhuǎn)換為十進制數(shù)的程序,下面是在4個周期內(nèi)實現(xiàn)4組十六進制數(shù)轉(zhuǎn)換為十進制數(shù)的程序。

對比上面兩個程序可以看出,分時復(fù)用一個查找表ROM模塊,需要7個周期來完成4組數(shù)據(jù)轉(zhuǎn)換,而同時實例化4個查找表ROM模塊來并行轉(zhuǎn)換,只需要4個周期來完成4組數(shù)據(jù)轉(zhuǎn)換,相當于速度提高了約40%,但是邏輯資源多耗費了3倍。在資源充足的情況下,可采用并行實例化的設(shè)計;如果資源緊張,就只能采取降低速度來換取面積的做法。

1.1.2 數(shù)字電路硬件原則

可編程邏輯設(shè)計與軟件的高級語言開發(fā)有著本質(zhì)的區(qū)別。軟件工程師進行高級語言開發(fā)時不必關(guān)心硬件的具體細節(jié),只關(guān)心一段程序?qū)崿F(xiàn)的結(jié)果,而且不在乎也不好把握每條語句執(zhí)行的時間周期。數(shù)字電路硬件原則是指開發(fā)人員進行可編程邏輯設(shè)計時要保持硬件思維。首先,開發(fā)人員必須對數(shù)字電路有深刻的認識,特別是組合邏輯電路和時序邏輯電路。其次,開發(fā)人員必須了解數(shù)字電路的工作過程,如組合邏輯電路按電流速度工作,時序邏輯電路按時鐘周期工作。下面以Verilog HDL編程與C語言編程為例說明兩者的區(qū)別。

1.語句執(zhí)行順序的區(qū)別

在Verilog HDL編程中,對于時序邏輯要注意語句的執(zhí)行順序。例如:

如果c在上一周期的值是1,那么它在當前周期的值是2,而不是1,因為寄存器在同一周期內(nèi),Verilog HDL以always賦值語句的最后一條作為該周期的賦值語句,這條語句之前的語句都無效;而C語言程序是順序執(zhí)行的,先把0賦予c,再把c+1賦予c,最終結(jié)果就是1。

2.語句執(zhí)行周期的區(qū)別

對于上述程序中的變量a和b,在經(jīng)過當前這個周期之后,它們的值等于上一周期的c和a的值,而不是c和a實時的值,這就是可編程邏輯的時序特性。開發(fā)人員從事可編程邏輯設(shè)計時,必須謹記時序的概念。

3.變量類型的區(qū)別

可編程邏輯中主要有兩種類型的變量:寄存器reg和信號線wire。其中,寄存器變量是按照時鐘周期工作的,所以只能用非阻塞賦值方式賦值,即<=,而且寄存器變量只能在連續(xù)賦值語句中賦值,即always@();信號線變量只能用阻塞賦值方式賦值,即=,而且不能同時用多個阻塞賦值語句賦值。

1.1.3 系統(tǒng)設(shè)計原則

系統(tǒng)設(shè)計原則是指在充分了解器件資源之后,對模塊功能進行正確劃分。特別是在設(shè)計規(guī)模較大、器件資源復(fù)雜的情況下,如集成CPU的SoC FPGA芯片,要正確分配在FPGA和CPU中實現(xiàn)的算法。對于FPGA中資源的使用要注意以下幾點。

1.存儲器資源的使用

存儲器資源的使用原則是根據(jù)設(shè)計中用到的RAM的寬度和深度,確定所選器件的嵌入式RAM的容量。嵌入式RAM的具體配置由Quartus軟件自動分配,用戶只需要確保片上RAM資源大于設(shè)計中的RAM需求。

2.軟核的使用

軟核是指用FPGA的邏輯資源生成的一個軟IP核,它可以定制功能,同時要消耗大量的邏輯資源。使用軟核的好處是不需要外部CPU就能在FPGA中實現(xiàn)大量復(fù)雜的計算功能,而且能與FPGA內(nèi)部邏輯無縫連接,傳輸速率和運行效率高。缺點是在資源有限的器件中,軟核會占用其他邏輯功能模塊的資源。所以在設(shè)計之前,必須確定計算量大的功能模塊是使用軟核、硬核還是外部協(xié)處理器。

3.串行收發(fā)器的使用

由于目前高速通信的需要,高端FPGA器件都集成了高速串行收發(fā)器SERDES。其中,發(fā)送串口用于把數(shù)據(jù)和時鐘調(diào)制到模擬差分信號線上,接收串口用于恢復(fù)數(shù)據(jù)和時鐘。目前最快的SERDES可以達到幾Gbit/s到幾十Gbit/s的傳輸速率。SERDES可用來實現(xiàn)千兆網(wǎng)傳輸,也可用來實現(xiàn)PCIe和SPI4.2等高速接口。采用串行收發(fā)器可以節(jié)約板級布線資源。

4.其他結(jié)構(gòu)的使用

其他結(jié)構(gòu)主要是指可編程PLL或者DLL時鐘資源,通常采用片上自帶的PLL來做時鐘驅(qū)動,分頻或者倍頻有利于增強系統(tǒng)的穩(wěn)定性和改善最高工作頻率。

系統(tǒng)設(shè)計流程如圖1-1所示。

圖1-1 系統(tǒng)設(shè)計流程

1.1.4 同步設(shè)計原則

時序電路通常分為同步時序電路和異步時序電路。

1.同步時序電路的特點

(1)電路核心為各種觸發(fā)器。

(2)電路輸入和輸出信號都由時鐘沿觸發(fā)。

(3)可避免電路信號產(chǎn)生毛刺現(xiàn)象。

(4)有利于程序在器件間移植。

(5)有利于靜態(tài)時序分析。

2.異步時序電路的特點

(1)電路核心為組合邏輯門電路。

(2)電路輸入和輸出信號與時鐘沿不同步。

(3)電路信號容易產(chǎn)生毛刺現(xiàn)象。

(4)不利于程序在器件間移植,或者移植后參數(shù)不一樣導(dǎo)致結(jié)果不一樣。

(5)不利于靜態(tài)時序分析。

在FPGA設(shè)計中,通常優(yōu)先采用同步時序設(shè)計。

在同步時序設(shè)計中,需要注意以下事項。

(1)兩個基本時序原則:setup time原則和hold time原則。setup time是指時鐘沿到來前數(shù)據(jù)已經(jīng)準備好的時間,hold time是指時鐘沿離去后數(shù)據(jù)保持的時間。這兩個時間都滿足相應(yīng)條件才能保證數(shù)據(jù)被正確采樣保存。

(2)異步時鐘域數(shù)據(jù)傳輸。

(3)組合邏輯常用設(shè)計方式。

(4)同步時序邏輯的時鐘設(shè)計。

(5)同步時序電路信號的延遲,即需要把信號延遲一定時間再送往下一級寄存器,短時間延遲用寄存器級聯(lián),長時間延遲用計數(shù)器。

(6)關(guān)于reg變量是否被綜合成實際寄存器的問題。Verilog中定義了兩種類型的變量:reg和wire,reg指寄存器,wire指組合邏輯的信號線。一般情況下,將reg變量放到always@()中會被綜合成寄存器。但是,如果always@()的括號里面的敏感信號不是時鐘沿,而是其他信號的高低電平,而且always@()中不采用非阻塞賦值,則會把該reg變量綜合成組合邏輯的一個信號線變量,沒有數(shù)據(jù)寄存功能。所以要想把reg變量綜合成實際的寄存器,必須使always@()的敏感信號為時鐘沿,而且always@()中要采用非阻塞賦值。

主站蜘蛛池模板: 泰州市| 阿坝县| 延边| 科技| 荣成市| 九寨沟县| 通州市| 锦屏县| 恭城| 滨海县| 南昌市| 广饶县| 长葛市| 江口县| 射洪县| 长武县| 盐边县| 竹山县| 焦作市| 额尔古纳市| 分宜县| 阿尔山市| 建德市| 永嘉县| 大姚县| 梅州市| 乌拉特后旗| 盐池县| 荔浦县| 大荔县| 岳阳市| 松桃| 玉山县| 镇原县| 钟祥市| 合水县| 邯郸市| 新余市| 聊城市| 仲巴县| 盘山县|