- FPGA進階開發與實踐
- 田亮 張瑞 蔡偉等編著
- 2412字
- 2021-02-22 16:30:19
第1章 FPGA高階設計方法
1.1 可編程邏輯設計原則
FPGA是可編程的硬件設備,可編程邏輯設計有以下4個原則。
(1)面積與速度互換原則。
(2)數字電路硬件原則。
(3)系統設計原則。
(4)同步設計原則。
1.1.1 面積與速度互換原則
這里的面積是指FPGA邏輯器件中的邏輯資源。在邏輯資源有限,且設計規模龐大的情況下,必須采取犧牲速度以節約面積的做法。例如,減少實例化模塊的數量,特別是標準IP生成的模塊,可分時復用這些模塊,前提是這些模塊不存在數據依存或者并行處理的要求。
例如,可用一個查找表ROM模塊將一組十六進制數據轉換為十進制數據來顯示,如果設計時有多組十六進制數據需要轉換為十進制數據來顯示,則可以分時復用一個查找表ROM模塊來節約資源,程序代碼如下。



以上是用一個查找表ROM模塊在7個周期內實現4組十六進制數轉換為十進制數的程序,下面是在4個周期內實現4組十六進制數轉換為十進制數的程序。



對比上面兩個程序可以看出,分時復用一個查找表ROM模塊,需要7個周期來完成4組數據轉換,而同時實例化4個查找表ROM模塊來并行轉換,只需要4個周期來完成4組數據轉換,相當于速度提高了約40%,但是邏輯資源多耗費了3倍。在資源充足的情況下,可采用并行實例化的設計;如果資源緊張,就只能采取降低速度來換取面積的做法。
1.1.2 數字電路硬件原則
可編程邏輯設計與軟件的高級語言開發有著本質的區別。軟件工程師進行高級語言開發時不必關心硬件的具體細節,只關心一段程序實現的結果,而且不在乎也不好把握每條語句執行的時間周期。數字電路硬件原則是指開發人員進行可編程邏輯設計時要保持硬件思維。首先,開發人員必須對數字電路有深刻的認識,特別是組合邏輯電路和時序邏輯電路。其次,開發人員必須了解數字電路的工作過程,如組合邏輯電路按電流速度工作,時序邏輯電路按時鐘周期工作。下面以Verilog HDL編程與C語言編程為例說明兩者的區別。
1.語句執行順序的區別
在Verilog HDL編程中,對于時序邏輯要注意語句的執行順序。例如:

如果c在上一周期的值是1,那么它在當前周期的值是2,而不是1,因為寄存器在同一周期內,Verilog HDL以always賦值語句的最后一條作為該周期的賦值語句,這條語句之前的語句都無效;而C語言程序是順序執行的,先把0賦予c,再把c+1賦予c,最終結果就是1。
2.語句執行周期的區別
對于上述程序中的變量a和b,在經過當前這個周期之后,它們的值等于上一周期的c和a的值,而不是c和a實時的值,這就是可編程邏輯的時序特性。開發人員從事可編程邏輯設計時,必須謹記時序的概念。
3.變量類型的區別
可編程邏輯中主要有兩種類型的變量:寄存器reg和信號線wire。其中,寄存器變量是按照時鐘周期工作的,所以只能用非阻塞賦值方式賦值,即<=,而且寄存器變量只能在連續賦值語句中賦值,即always@();信號線變量只能用阻塞賦值方式賦值,即=,而且不能同時用多個阻塞賦值語句賦值。
1.1.3 系統設計原則
系統設計原則是指在充分了解器件資源之后,對模塊功能進行正確劃分。特別是在設計規模較大、器件資源復雜的情況下,如集成CPU的SoC FPGA芯片,要正確分配在FPGA和CPU中實現的算法。對于FPGA中資源的使用要注意以下幾點。
1.存儲器資源的使用
存儲器資源的使用原則是根據設計中用到的RAM的寬度和深度,確定所選器件的嵌入式RAM的容量。嵌入式RAM的具體配置由Quartus軟件自動分配,用戶只需要確保片上RAM資源大于設計中的RAM需求。
2.軟核的使用
軟核是指用FPGA的邏輯資源生成的一個軟IP核,它可以定制功能,同時要消耗大量的邏輯資源。使用軟核的好處是不需要外部CPU就能在FPGA中實現大量復雜的計算功能,而且能與FPGA內部邏輯無縫連接,傳輸速率和運行效率高。缺點是在資源有限的器件中,軟核會占用其他邏輯功能模塊的資源。所以在設計之前,必須確定計算量大的功能模塊是使用軟核、硬核還是外部協處理器。
3.串行收發器的使用
由于目前高速通信的需要,高端FPGA器件都集成了高速串行收發器SERDES。其中,發送串口用于把數據和時鐘調制到模擬差分信號線上,接收串口用于恢復數據和時鐘。目前最快的SERDES可以達到幾Gbit/s到幾十Gbit/s的傳輸速率。SERDES可用來實現千兆網傳輸,也可用來實現PCIe和SPI4.2等高速接口。采用串行收發器可以節約板級布線資源。
4.其他結構的使用
其他結構主要是指可編程PLL或者DLL時鐘資源,通常采用片上自帶的PLL來做時鐘驅動,分頻或者倍頻有利于增強系統的穩定性和改善最高工作頻率。
系統設計流程如圖1-1所示。

圖1-1 系統設計流程
1.1.4 同步設計原則
時序電路通常分為同步時序電路和異步時序電路。
1.同步時序電路的特點
(1)電路核心為各種觸發器。
(2)電路輸入和輸出信號都由時鐘沿觸發。
(3)可避免電路信號產生毛刺現象。
(4)有利于程序在器件間移植。
(5)有利于靜態時序分析。
2.異步時序電路的特點
(1)電路核心為組合邏輯門電路。
(2)電路輸入和輸出信號與時鐘沿不同步。
(3)電路信號容易產生毛刺現象。
(4)不利于程序在器件間移植,或者移植后參數不一樣導致結果不一樣。
(5)不利于靜態時序分析。
在FPGA設計中,通常優先采用同步時序設計。
在同步時序設計中,需要注意以下事項。
(1)兩個基本時序原則:setup time原則和hold time原則。setup time是指時鐘沿到來前數據已經準備好的時間,hold time是指時鐘沿離去后數據保持的時間。這兩個時間都滿足相應條件才能保證數據被正確采樣保存。
(2)異步時鐘域數據傳輸。
(3)組合邏輯常用設計方式。
(4)同步時序邏輯的時鐘設計。
(5)同步時序電路信號的延遲,即需要把信號延遲一定時間再送往下一級寄存器,短時間延遲用寄存器級聯,長時間延遲用計數器。
(6)關于reg變量是否被綜合成實際寄存器的問題。Verilog中定義了兩種類型的變量:reg和wire,reg指寄存器,wire指組合邏輯的信號線。一般情況下,將reg變量放到always@()中會被綜合成寄存器。但是,如果always@()的括號里面的敏感信號不是時鐘沿,而是其他信號的高低電平,而且always@()中不采用非阻塞賦值,則會把該reg變量綜合成組合邏輯的一個信號線變量,沒有數據寄存功能。所以要想把reg變量綜合成實際的寄存器,必須使always@()的敏感信號為時鐘沿,而且always@()中要采用非阻塞賦值。
- 數字邏輯(第3版)
- The Deep Learning with Keras Workshop
- Spring Cloud微服務架構實戰
- 筆記本電腦維修實踐教程
- Spring Cloud微服務和分布式系統實踐
- Istio服務網格技術解析與實踐
- Hands-On Motion Graphics with Adobe After Effects CC
- 筆記本電腦芯片級維修從入門到精通(圖解版)
- 電腦橫機使用與維修
- 觸摸屏應用技術從入門到精通
- 微服務實戰(Dubbox +Spring Boot+Docker)
- The Deep Learning with PyTorch Workshop
- Machine Learning Projects for Mobile Applications
- 計算機組裝與維護教程
- The Deep Learning Workshop