書名: Intel FPGA權威設計指南:基于Quartus Prime Pro 19集成開發環境作者名: 何賓編著本章字數: 9759字更新時間: 2021-10-29 21:33:48
1.1 邏輯陣列塊和自適應邏輯塊
邏輯陣列塊(Logic Array Block,LAB)由基本構件塊—自適應邏輯模塊(Adaptive Logic Module,ALM)構成。通過配置LAB,可以實現邏輯功能、算術功能和寄存器功能。
Cyclone 10 GX器件中1/4可用的LAB可用作存儲器LAB(Memory LAB,MLAB)。某些器件有更多的MLAB。
1.1.1 ALM結構和功能
LAB 為可配置的邏輯塊,它由一組邏輯資源構成。每個 LAB 包含用于將控制信號驅動其ALM的專用邏輯。MLAB是LAB的超集,包含所有LAB的特性。Cyclone 10 GX器件中 ALM 的內部結構如圖 1.1 所示。從圖中可知,每個 ALM 由上下兩半部分組成,上/下半部包含下面邏輯設計資源:
① 1個4輸入查找表(Look-Up Table,LUT);
② 2個3輸入查找表(Look-Up Table,LUT);
③ 2個可編程寄存器;
④ 1個加法器;
⑤ 進位輸入。
Cyclone 10 GX 器件中 ALM 的高層次結構如圖 1.2 所示。每個 ALM 包含不同的基于LUT的資源,可以分割為兩個組合自適應LUT(Adaptive LUT,ALUT)和4個寄存器。從圖1.2可知,兩個ALUT可以最多有8個輸入,一個ALM可以實現兩個函數的不同組合。這種適應性允許ALM與四輸入LUT架構完全向后兼容。一個ALM可以實現具有多達6個輸入和某些7個輸入功能的任何函數。

圖1.1 Cyclone 10 GX器件中ALM的內部結構
1.1.2 LUT的工作模式
每個ALM內的LUT可以工作在下面中的任何一種模式,包括普通模式、擴展LUT模式、算術模式和共享算術模式。
1.普通模式
在該模式中,允許在一個 ALM 中實現兩個函數,或者 6 輸入的一個函數。來自 LAB本地互聯最多的 8 個數據輸入可以作為組合邏輯的輸入。ALM 可以支持完全獨立功能的某些組合,以及具有共同輸入的各種功能組合。Quartus Prime 編譯器自動選擇 LUT 的輸入。在普通模式下,ALM支持寄存器打包。
一個具有四輸入和兩輸出邏輯函數的Verilog HDL描述如代碼清單1-1所示,適配后的網表結構如圖1.3所示。

圖1.2 Cyclone 10 GX器件中ALM的高層次結構

圖1.3 一個具有四輸入和兩輸出的邏輯函數適配后的網表結構
代碼清單1-1 一個具有四輸入和兩輸出邏輯函數的Verilog HDL描述


對圖1.3給出的網表結構進行分析,如表1.1和表1.2所示。
表1.1 a~d輸入與z[0]輸出的網表結構分析

表1.2 a~d輸入與z[1]輸出的網表結構分析

續表


注
(1)對于 INPUT 原語(a~pad)而言,端口 SIMIN 和 PADOUT 的輸出互補,SIMIN端口的輸入為a,而PADOUT的輸出為a_input;
(2)對于 INPUT 原語(b~pad)而言,端口 SIMIN 和 PADOUT 的輸出互補,SIMIN端口的輸入為b,而PADOUT的輸出為b_input。
思考與練習1-1:在Cyclone 10 GX系列的FPGA中,使用LUT實現基本組合邏輯的方法。
適配后 z[1]與 z[0]在 ALM 上的布局和布線表示如圖 1.4 所示。從圖中可以看到,在ALM內部通過組合不同的LUT資源實現四輸入和兩輸出的邏輯功能。

圖1.4 適配后z[1]與z[0]在ALM上的布局和布線表示

圖1.4 適配之后z[1]與z[0]在ALM上的布局和布線表示(續)
一個具有五輸入和兩輸出邏輯函數的Verilog HDL描述如代碼清單1-2所示,適配后的網表結構如圖1.5所示。
代碼清單1-2 一個具有五輸入和兩輸出邏輯函數的Verilog HDL描述


圖1.5 一個具有五輸入和兩輸出的邏輯函數適配后的網表結構
對于兩個五輸入的函數封裝到一個 ALM 的情況,函數必須至少要有兩個公共的輸入。公共的輸入是 dataa 和 datab。用五輸入函數來組合一個四輸入函數要求一個公共輸入,即dataa或datab。
思考與練習1-2:分析圖1.5給出的結構,以及在ALM上的布局和布線。
一個具有六輸入和兩輸出邏輯函數的Verilog HDL描述如代碼清單1-3所示,適配后的網表結構如圖1.6所示。
代碼清單1-3 一個具有六輸入和兩輸出邏輯函數的Verilog HDL描述


圖1.6 一個具有六輸入和兩輸出的邏輯函數適配后的網表結構
在使用一個ALM 實現兩個六輸入函數的情況下,必須共享4個輸入且組合函數必須相同。在一個稀疏使用的器件中,放置在一個 ALM 中的函數可以通過軟件放置在獨立的ALM 中以實現最好的性能。當一個器件開始被逐步填滿時,Quartus Prime 軟件自動使用Cyclone 10 GX器件中所有潛在的ALM。軟件編譯器在一個ALM中自動查找使用公共輸入的函數或完全獨立的函數,以最有效地使用器件資源。此外,可以通過設置位置分配來人工控制資源。
通過使用 dataa、datab、datac、datad、datae0,dataf1、datae1 和 dataf0,可以實現任意六輸入函數。如果使用datae0 和dataf1,得到的輸出可以驅動寄存器0/寄存器1;如果使用datae1和dataf0,得到的輸出可以驅動寄存器2/寄存器3。
思考與練習1-3:分析圖1.6給出的網表結構,以及在ALM上的布局和布線。
2.擴展LUT模式
當實現七輸入函數時,則使用擴展LUT模式。通過使用下面的輸入,即dataa、datab、datac、datad、datae0、datae1和dataf0/dataf1,可以在一個ALM內實現一個七輸入的函數。如果使用 dataf0,則輸出可以驅動寄存器 0/寄存器 1;如果使用 dataf1,則輸出可以驅動寄存器2/寄存器3。
一個具有七輸入和兩輸出邏輯函數的Verilog HDL描述如代碼清單1-4所示,適配后的網表結構如圖1.7所示。
代碼清單1-4 一個具有七輸入和兩輸出邏輯函數的Verilog HDL描述


圖1.7 一個具有七輸入和兩輸出的邏輯函數適配后的網表結構
思考與練習1-4:分析圖1.7給出的網表結構,以及在ALM上的布局和布線。
3.算術模式
在算術模式下,ALM使用兩組兩個四輸入的LUT和兩個專用的加法器。專用的加法器允許LUT執行預加法邏輯。因此,每個加法器可以對兩個四輸入的函數相加。ALM支持同時使用加法器的進位輸出和組合邏輯輸出。在這個操作中,忽略加法器的輸出。
使用包含組合邏輯輸出的加法器,可以為使用這個模式的功能節省最多 50%的資源。算術模式也提供時鐘使能、計數器使能、同步向上和向下控制、加減控制、同步清除和同步加載。
LAB 本地互聯的數據輸入產生時鐘使能、計數器使能、同步向上/向下和加/減控制信號。這些信號是在一個ALM內的4個LUT之間共享輸入的良好備選。
同步清除和同步加載選項是基于LAB寬度的信號,它影響一個LAB內的所有寄存器。設計者可以單獨地為每一個寄存器禁止或使能這些信號。
此外,在該模式下,進位鏈在專用加法器之間提供快速進位的功能。Cyclone 10 GX器件中兩位的進位選擇特性將 ALM 內的進位傳輸延遲減半。進位鏈可以起始于 ALB 內的第一個 ALM 或者第五個 ALM。最后的進位輸出將連接到一個 ALM,此處它輸入到本地、行或列互聯。
如果實現一個高扇入功能的算術功能,為了避免在一個小的面積內出現布線阻塞,在鏈接到下一個LAB之前,LAB支持進位鏈只使用ALB的上/下半部分。這樣,將LAB內剩下其他一半的ALM用于普通模式下降低扇入的函數。使用第一個LAB內上面5個ALM的進位鏈進位輸入到列中下一個 LAB 的 ALM 的上半部分。使用第一個LAB 內下面5 個 ALM的進位鏈進位輸入到列中下一個LAB的ALM的下半部分。設計者可以旁路掉LAB列的上半部分和MLAB列的下半部分。
從圖 1.1 中可知,一個 ALM 內有兩個專用的路徑,即進位鏈 carry_in 和共享算術鏈shared_arith_in(將在共享的算術模式中詳細介紹)。在Cyclone 10 GX器件中,包含在ALB內的一個擴展的互聯結構,用于對共享的算術鏈布線,以及實現高效算術功能的進位鏈,如圖1.8所示。這些ALM到ALM的連接旁路本地互聯。Quartus軟件將自動利用這些資源以提高利用率和性能。

圖1.8 用于進位鏈和共享算術功能的擴展布線結構
一個帶有進位輸出的兩個四位二進制無符號數加法的 Verilog HDL 描述如代碼清單 1-5所示,適配后的網表結構如圖1.9所示。

圖1.9 一個帶有進位輸出的兩個四位二進制無符號數加法適配后的網表結構
代碼清單1-5 一個帶有進位輸出的兩個四位二進制無符號數加法的Verilog HDL描述

圖 1.9 中標記為 add_0~1 的 LOGIC_CELL_COMB 在 ALM 中的布局和布線如圖 1.10所示。

圖1.10 標記為add_0~1的LOGIC_CELL_COMB在ALM中的布局和布線
思考與練習1-5:分析圖1.10給出的結構,以及在ALM上的布局和布線,觀察進位鏈的連接。
4.共享算術模式
在共享算術模式中,ALM可以實現三輸入的加法。這個模式用4個四輸入的LUT配置ALM。每個LUT計算3個輸入的和或3個輸入的進位。進位計算的輸出使用一個稱為共享算術鏈的專用連接饋送到下一個加法器。
在該模式下,通過共享算術鏈可以允許 ALM 實現一個四輸入的加法器。這就顯著減少了實現較大規模加法器或相關器所需要的資源。共享算術鏈可以起始于一個 LAB 內的第一個或者第六個ALM。與進位鏈類似,可以繞過備用LAB列中共享算術鏈的上半部分和下半部分。此功能允許共享算術鏈級聯LAB中的一半ALM,而另一半可用于位寬較小的扇入功能。在每個LAB中,將上半部分的列旁路;而在MLAB中,將下半部分的列旁路。
通過自動將 LAB 鏈接在一起,Quartus 軟件可以創建長度大于 20 個 ALM 的共享算術鏈。為了擴展適配,垂直運行一個長的共享算術鏈,這樣允許快速水平鏈接到 TriMatrix 存儲器和DSP模塊。共享算術鏈可以連續到一個完整的列。
一個帶有進位輸出的3個四位二進制無符號數加法的Verilog HDL描述如代碼清單1-6所示,適配后的網表結構如圖1.11所示。
代碼清單1-6 一個帶有進位輸出的3個四位二進制無符號數加法的Verilog HDL描述

思考與練習1-6:分析圖1.11給出的網表結構,以及在ALM上的布局和布線,觀察進位鏈和共享算術鏈的連接。
1.1.3 寄存器和鎖存器
從圖1.1可知,每個LAB包含用于將控制信號驅動到其ALM的專用邏輯,并有兩個獨特的時鐘源和3個時鐘使能信號。
通過使用兩個時鐘源和 3 個時鐘使能信號,LAB 控制塊最多能生成 3 個時鐘。一個反相的時鐘可以看作單個的時鐘源。每個始終與時鐘使能信號相關聯。當時鐘使能信號無效時,將關閉對應LAB寬度的時鐘,如圖1.12所示。
LAB行時鐘[5:0]和LAB本地互聯產生LAB寬度的控制信號。MultiTrack互聯本身的低抖動允許時鐘和控制信號分配。MultiTrack 互聯由不同長度與速度連續的、性能優化的布線行組成,用于設計之間和設計內的塊連接。
LAB 寬度的信號控制邏輯用于寄存器的清除信號。ALM 直接支持一個異步清除功能。在Quartus軟件中,寄存器預置實現為非門回推邏輯(NOT-gate push-back)。每個LAB最多支持兩個清除信號aclr[1:0]。
Cyclone 10 GX器件提供了一個器件寬度的復位引腳DEV_CLRn,它可以用于復位器件內所有的寄存器。設計者可以在編譯之前使能 DEV_CLRn 引腳。器件寬度的信號覆蓋其他所有控制信號。
每個寄存器的端口包含數據、時鐘、同步和異步復位,以及同步加載。全局信號、通用I/O(General Purpose I/O,GPIO)或任何的內部邏輯可以用來驅動ALM寄存器的時鐘使能信號,以及時鐘和清除控制信號。對于單純的組合邏輯而言,可以旁路掉寄存器,LUT 的輸出可以直接驅動ALM的輸出。

圖1.11 一個帶有進位輸出的3個四位二進制無符號數加法適配后的網表結構

圖1.12 Cyclone 10 GX器件的ALB寬度控制信號
1.寄存器
一個帶異步復位寄存器的Verilog HDL描述如代碼清單1-7所示,適配后的網表結構如圖1.13所示。

圖1.13 一個帶異步復位寄存器適配后的網表結構
代碼清單1-7 一個帶異步復位寄存器的Verilog HDL描述

一個帶同步復位寄存器的Verilog HDL描述如代碼清單1-8所示,適配后的網表結構如圖1.14所示。

圖1.14 一個帶同步復位寄存器適配后的網表結構
代碼清單1-8 一個帶同步復位寄存器的Verilog HDL描述


思考與練習 1-7:比較圖 1.13 和圖 1.14 給出適配后的網表結構,說明區別(提示:異步復位電路可以直接映射到觸發器的異步復位端口,而同步復位電路不能直接映射到觸發器的復位端口,很明顯經過了 LOGIC_CELL_COMB 單元,將其和輸入數據,經過邏輯運算后,送給觸發器的D端口,對設計性能會有一些影響)。
一個帶異步復位和時鐘使能寄存器的Verilog HDL描述如代碼清單1-9所示,適配后的網表結構如圖1.15所示,在ALM內具體的布局和布線如圖1.16所示。

圖1.15 一個帶異步復位和時鐘使能寄存器適配后的網表結構

圖1.16 在ALM內具體的布局和布線
代碼清單1-9 一個帶異步復位和時鐘使能寄存器的Verilog HDL描述



注
需要在Advanced Analysis&Synthesis Settings中將Allow Synchronous Control Signals設置為Off。
2.鎖存器
在此特別指出,ALM 內的觸發器不能用作鎖存器。在 ALM 內實現鎖存器,仍然使用LUT 資源,這點要特別注意。鎖存器是一個小的組合環路,它保存信號的值直到分配新的值。當設計者不打算使用鎖存器時,綜合工具可以從 HDL 代碼中推斷鎖存器。如果設計者打算讓綜合工具推斷鎖存器,則必須正確推斷它以確保正確的器件操作。

注
盡可能不使用鎖存器進行設計。
當設計組合邏輯時,某些編碼風格會使軟件綜合設計時無意間產生鎖存器。例如,當case或if語句沒有覆蓋所有可能的輸入條件時,如果沒有分配一個新的值,則綜合工具就會推斷出鎖存器以保持輸出。檢查綜合工具給出的消息以獲取對推斷鎖存器的引用。如果設計的代碼無意間創建了一個鎖存器,則需要修改RTL以去除設計中出現的鎖存器。
(1)當HDL代碼為時鐘邊沿之外的信號分配值(如異步復位),但是代碼沒有在一個邊沿觸發的設計模塊中分配值時,綜合就會推斷一個鎖存器。
(2)當 HDL 代碼在一個邊沿觸發的設計模塊中為一個信號分配值,而綜合優化去掉了這個邏輯時,則會推斷出鎖存器。例如,當case或if語句的條件只評價為False時,綜合優化將刪除該語句中的任何邏輯或信號賦值,該優化將導致為該信號推斷出鎖存器。
(3)省略if或case語句中最終的else或when others子句時,也會生成鎖存器。在默認條件下,無關項(X)的賦值對于防止生成鎖存器非常有用。為了獲得最佳的邏輯優化,請將默認case或else值指定為無關項(X)而不是某個邏輯值。
在 Verilog HDL 設計中,使用 full_case 屬性來處理未指定的情況為無關項(X)。但是full_case僅為綜合,因此可以導致仿真不匹配,因為仿真工具仍然處理未指定的情況為鎖存器。
綜合工具可以推斷出一個鎖存器,該鎖存器沒有出現與組合環路相關的毛刺和時序問題。在Quartus Prime Pro版本的集成開發環境中生成編譯報告時,在用戶指定和推斷鎖存部分會給出推斷出的鎖存器。該報告指出鎖存器是否存在時序危險,以及用戶指定和推斷鎖存器的總數。

注
在某些情況下,時序分析并不能完全建模鎖存器時序。作為最佳實踐,應避免鎖存器,除非設計需要,并且設計者本人完全了解其影響。
如果設計中的鎖存器或組合環路沒有出現在用戶指定的和推斷鎖存器的部分中,則Quartus軟件不會將鎖存器推斷為安全鎖存器,這樣鎖存器將不會被認為是無毛刺的。
在編譯報告中分析和綜合邏輯單元部分所列出的邏輯環路是有時序風險的。這些選項表明設計可能存在需要進一步調查的問題。然而,正確的設計中包含組合環路。例如,組合環路可能并不敏感。當硬件中存在一個電氣路徑時會發生這種情況,但是設計人員知道電路永遠不會遇到導致該路徑被激活的數據,或者周圍邏輯以互斥方式設置,以阻止該路徑被感知,而與數據輸入無關。
對于基于六輸入的LUT器件而言,Quartus綜合工具在組合環路中通過單個ALUT實現所有鎖存器的輸入。因此,當單個輸入發生變化時,用戶指定的和推斷表中的所有鎖存器都沒有時序危險。
如果 Quartus 綜合報告將鎖存器列為安全鎖存器,則其他優化,如適配器中的物理綜合網表優化,將保持無危險性能。為了確保無危害行為,一次只能更改一個控制輸入。同時更改兩個輸入,如同時取消置位和復位,或者同時改變數據和使能,可以使任何鎖存器產生錯誤的行為。
Quartus綜合工具從Verilog HDL中的always塊和VHDL中的process描述中推斷鎖存器。然而,Quartus綜合工具不會從Verilog HDL的連續分配或VHDL中的并發信號分配中推斷鎖存器。這些規則與寄存器推斷相同。Quartus 綜合工具只從 always 塊和 process 描述中推斷寄存器/觸發器。
置位和復位鎖存器的 Verilog HDL 描述如代碼清單 1-10 所示,適配后的網表結構如圖1.17所示。

圖1.17 帶有置位和復位鎖存器適配后的網表結構
代碼清單1-10 置位和復位鎖存器的Verilog HDL描述

從圖 1.17 中可知,第二個 LOGIC_CELL_COMB 構成了組合環路。很明顯,符合鎖存器的構成要素。
對于case語句非全條件的Verilog HDL描述,如代碼清單1-11所示,適配后的網表結構如圖1.18所示。
代碼清單1-11 對于case語句非全條件的Verilog HDL描述



圖1.18 對于case語句非全條件描述適配后的網表結構
從圖 1.18 中可知,由于在 case 語句塊中缺少全條件描述語句,所以生成了鎖存器結構。嘗試在case語句塊前面加上full_case屬性,得到適配后的網表結構如圖1.19所示。很明顯,由于在case前面添加了full_case屬性,使得最終生成的網表結構中未出現鎖存器。

圖1.19 對于case語句非全條件描述加上full_case屬性適配后的網表結構
1.1.4 LAB的互聯架構
一個LAB中有10個ALM,每個ALM有4個輸出,因此每個LAB能驅動40個ALM輸出。兩組 20 個 ALM 輸出可以通過直接鏈接互聯來直接驅動相鄰的 LAB。直接鏈接連接功能將使用的行和列互聯降低到最小,因此提供了更高的性能和靈活性。
通過使用行和列互聯,以及同一個LAB內的ALM輸出,本地互聯驅動相同LAB內的ALM。
通過使用直接鏈路連接,來自左側或右側相鄰的LAB、MLAB、M20K塊或數字信號處理(Digital Signal Processing,DSP)模塊也能驅動LAB的本地互聯,如圖1.20所示。很明顯,這種布線資源為分段結構。

圖1.20 Cyclone 10 GX器件內LAB和ALM的資源布局

注
(1)C4互聯縱向跨越4個LAB高度;
(2)C27互聯縱向跨越27個LAB高度;
(3)R3互聯橫向跨越3個LAB寬度;
(4)R6互聯橫向跨越3個LAB寬度;
(5)R32互聯橫向跨越32個LAB寬度。
1.1.5 分布式存儲器
本節將介紹嵌入式存儲器塊的性能,重點介紹 MLAB 的原理和使用 MLAB 實現 RAM的方法。
1.嵌入式存儲器塊的性能
Cyclone 10 GX器件提供兩種類型的存儲器塊,即M20K和640位的MLAB。
1)M20K
專用的塊存儲器資源。該資源是較大存儲器陣列的最理想選擇,同時仍然提供了大量獨立的端口。
2)640位的存儲器邏輯陣列塊(Memory Logic Array Blocks,MLAB)
Cyclone 10 GX器件中嵌入式存儲器塊的容量和分布如表1.3所示。
表1.3 Cyclone 10 GX器件中嵌入式存儲器塊的容量和分布

每個MLAB支持最大640位的簡單雙端口SRAM,由兩用的LAB配置為增強的存儲器塊。MLAB 是寬和淺存儲器陣列的理想選擇。MLAB 針對 DSP 應用和濾波器延遲線移位寄存器的實現進行了優化。每個MLAB由10個ALM組成。在Cyclone 10 GX器件中,可以將這些 ALM 配置為 10 個 32×2 的模塊,每個 MLAB 可以提供一個 32×20 的簡單雙端口SRAM模塊。
嵌入式存儲器塊的性能參數如表1.4所示。
表1.4 嵌入式存儲器塊的性能參數

續表

2.嵌入式存儲器塊的配置
嵌入式存儲器塊所支持的存儲模式如表1.5所示。
表1.5 嵌入式存儲器塊所支持的存儲模式


注
為了避免破壞存儲器塊的內容,請勿在讀取或寫入器件時違反任何存儲器塊的建立或保持時間。如果在單端口 RAM、簡單雙端口 RAM、真正雙端口RAM或者ROM模式中使用存儲器塊,則必須遵守該規則。
Cyclone 10 GX器件中嵌入式存儲器塊的單端口配置如表1.6所示。
表1.6 Cyclone 10 GX器件中嵌入式存儲器塊的單端口配置

Cyclone 10 GX 器件中嵌入式存儲器塊的簡單雙端口配置如表 1.7 所示。對于混合寬度的配置,只有M20K支持該配置方式。
表1.7 Cyclone 10 GX器件中嵌入式存儲器塊的簡單雙端口配置

Cyclone 10 GX 器件中嵌入式存儲器塊的真正雙端口配置如表 1.8 所示。對于混合寬度的配置,只有M20K支持該配置方式。
表1.8 Cyclone 10 GX器件中嵌入式存儲器塊的真正雙端口配置

3.嵌入式存儲器塊的時鐘模式
在不同的嵌入式存儲器塊的配置模式下所支持的時鐘模式如表1.9所示。
表1.9 不同的嵌入式存儲器塊的配置模式所支持的時鐘模式


注
在 MLAB 內,不支持時鐘使能信號用于寫地址、字節使能和數據輸入寄存器。
1)單時鐘模式
在該模式下,單個時鐘和時鐘使能信號控制存儲器塊的所有寄存器。
2)讀/寫時鐘模式
在該模式下,每個讀端口和寫端口都有獨立的時鐘。讀時鐘控制數據輸出、讀地址和讀使能寄存器。寫時鐘控制數據輸入、寫地址、寫使能和字節使能寄存器。
3)輸入/輸出時鐘模式
在該模式下,每個讀端口和寫端口都有獨立的時鐘。輸入時鐘控制與輸入到存儲器塊的數據有關的所有寄存器,包括數據、地址、字節使能、讀使能和寫使能。一個輸出時鐘控制數據輸出寄存器。
4)獨立時鐘模式
在該模式下,每個端口(A 和 B)都有一個單獨的時鐘。時鐘 A 控制端口 A 側的所有寄存器,時鐘B控制端口B側的所有寄存器。

注
可以為不同的輸入和輸出寄存器創建獨立的時鐘使能,以關閉特定寄存器以實現降低功耗的目的。在參數編輯器中,單擊“更多選項”(在時鐘使能選項旁)以設置所喜歡的可用獨立時鐘使能。
在所有的時鐘模式下,異步清除只能用于輸出鎖存器和輸出寄存器。對于獨立時鐘模式,它可以用于所有端口。
如果使用讀/寫時鐘模式對同一地址位置執行同時讀/寫操作,則輸出的讀取數據未知。如果要求輸出的讀數據為一個已知值,使用單時鐘或輸入/輸出時鐘模式,并且在 IP 核參數編輯器中選擇適當的寫期間讀行為。
以下時鐘模式支持獨立時鐘使能:
(1)讀/寫時鐘模式,支持所有的讀和寫時鐘;
(2)獨立時鐘模式,支持所有端口的寄存器。
為了降低功耗,可以通過使用時鐘使能關閉特定寄存器。
4.嵌入式存儲器塊的字節使能
嵌入式存儲器塊支持字節使能控制,包括:
(1)字節使能控制屏蔽輸入數據,這樣只寫入指定字節的數據。未寫入的字節保留以前寫入的值。
(2)寫使能(wren)信號和字節使能(byteena)信號一起控制 RAM 塊的寫操作。默認情況下,byteena信號為高電平(使能),并且只有wren信號控制寫入。
(3)字節使能寄存器沒有清除端口。
(4)如果使用奇偶校驗,則在M20K存儲器塊中,字節使能功能控制8個數據位和2個奇偶校驗位;在MLAB上,字節使能功能控制最寬模式下的所有10位。
(5)byteena信號的LSB與數據總線的LSB相對應。
(6)字節使能信號位高電平有效。
×20數據寬度模式下的byteena信號如表1.10所示。×40數據寬度模式下的byteena信號如表1.11所示。
表1.10×20數據寬度模式下的byteena信號

表1.11×40數據寬度模式下的byteena信號


注
在M20K存儲器塊或者MLAB中,當字節使能位設置為0時,嵌入存儲 IP 將對應的數據字節輸出設置為無關值。必須確保總是選中選項Get X’s for write masked bytes instead of old data when byte enable。
5.嵌入式存儲器塊的上電狀態或存儲器初始化
上電時嵌入式存儲器塊不同的初始狀態如表1.12所示。
表1.12 上電時嵌入式存儲器塊不同的初始狀態

默認,除非指定.mif文件,否則Quartus軟件將Cyclone 10 GX器件內的RAM單元初始化為零。
所用的存儲塊支持使用.mif 文件進行初始化。可以在 Quartus 軟件中創建.mif 文件,并且在設計中例化存儲器塊時指定它們使用RAM IP核。特別注意,即使存儲器塊已經預初始化(如使用.mif文件),但是在上電時仍然清零。
6.使用MLAB實現RAM
使用Quartus 軟件,在軟件實現中,MLAB 支持下面的64 深度模式,包括64(深度)×8 (寬度)、64(深度)×9(寬度)和64(深度)×10(寬度)。
為了推斷 RAM 的功能,綜合工具識別某些類型的 HDL 代碼并將檢測到的代碼映射到指定技術的實現。對于具有專用RAM模塊的器件,Quartus軟件使用Intel FPGA IP核以對準器件存儲器架構。
下面以一個 16(深度)×4(寬度)的存儲器使用 MLAB 的 Verilog HDL 描述為例,如代碼清單 1-12 所示。在該設計中,使用了屬性 ramstyle="mlab",強制 RAM 使用MLAB資源。
代碼清單1-12 一個16(深度)×4(寬度)存儲器使用MLAB的Verilog HDL描述

該存儲器適配后的頂層網表結構(頂層)如圖1.21 所示。雙擊圖中名字為“mem_rtl_0”的元件符號,展開其內部結構,如圖1.22所示。

注
該描述實現單時鐘,簡單雙端口同步 RAM,它實現寫期間讀行為,其輸出模式為舊數據,關于這部分內容的詳細介紹,請參看 1.2.1 節中定制的寫期間讀行為。
雙擊圖 1.22 中名字為“auto_generated”的模塊符號,展開其內部的具體結構,如圖 1.23 所示。需要特別指出的是,在器件的工作期間,不能使用復位信號清除 Intel FPGA存儲器塊中的RAM內容。如果在HDL代碼中描述了RA,其具有用于RAM內容的一個復位信號,則邏輯在常規邏輯單元而不是在一個存儲器塊中實現。不要將RAM的讀/寫操作放置在包含一個復位信號的always模塊或者process模塊中。要指定存儲器塊的內容,則需要器件在工作期間初始化存儲器或者將數據寫到RAM。
除復位信號外,其他控制邏輯也會阻止綜合工具將存儲器邏輯推斷為存儲器塊。例如,如果在讀地址寄存器上使用時鐘使能,則可以更改RAM的輸出鎖存器,從而會導致綜合后的RAM與HDL描述不匹配。使用地址停止特性作為一個讀地址時鐘使能以避免這個限制。
7.使用MLAB實現移位寄存器
為了推斷FPGA內中的移位寄存器,綜合工具檢測一組具有相同特征的移位寄存器,并將它們轉化為一個Intel FPGA移位寄存器IP核。

圖1.21 存儲器適配后的網表結構(頂層)

圖1.22 mem_rtl_0的內部結構

圖1.23 mem_rtl_0內部的具體結構
為了檢測,所有移位寄存器必須具有以下特征:
(1)使用相同的時鐘和時鐘使能;
(2)沒有其他第二級信號;
(3)相同間距的抽頭,至少間隔3個寄存器。
綜合工具只為要寫具有專用 RAM 塊的器件識別移位寄存器。Quartus 軟件使用下面的向導:
(1) Quartus 軟件根據寄存器的總線寬度( w)、每個抽頭之間的長度( l)或抽頭數(n)確定是否推斷Intel FPGA移位寄存器IP核。
(2)如果Quartus軟件中的綜合屬性Auto Shift Register Recognition選項設置為Auto,通過使用以下規則,Quartus綜合工具將確定在RAM塊中實現哪個移位寄存器。
① 優化技術設置。
② 關于設計的邏輯核RAM利用率信息。
③ 來自定時驅動綜合的時序信息。
(3)如果寄存器的總線寬度是 1(w=1),如果抽頭的個數乘以每個抽頭之間的長度大于或等于64(n×l>64),Quartus綜合推斷移位寄存器IP核。
(4)如果寄存的總線寬度大于 1(w>1),寄存器的總線寬度乘以每個抽頭之間的長度大于或等于32(w×n×l>32),Quartus綜合推斷寄存器IP核。
(5)如果每個抽頭之間的長度(l)不是 2 的冪次方,則 Quartus 綜合需要外部邏輯(LE 或 ALM)來解碼讀和寫計數器,因為移位寄存器的大小不同。這種額外的解碼邏輯消除了在存儲器中實現移位寄存器的性能和利用優勢。
Quartus綜合映射到FPGA移位寄存器IP核的寄存器,以及RAM中的寄存器不適用于仿真工具的Verilog HDL或VHDL輸出文件,因為它們的節點名字在綜合后將不存在。

注
編譯器無法為使用移位使能信號的移位寄存器使用 MLAB 存儲器塊資源進行實現;取而代之,編譯器使用專用的 RAM 塊。通過使用ramstyle屬性,控制實現移位寄存器的存儲器結構。
一個串入/串出16位長度移位寄存器的Verilog HDL描述如代碼清單1-13所示,適配后的網表結構如圖1.24所示。

圖1.24 串入/串出16位長度移位寄存器適配后的網表結構
代碼清單1-13 一個串入/串出16位長度移位寄存器的Verilog HDL描述



注
在“Advanced Analysis&Synthesis Settings”對話框中,將 Allow Any Shift Register Size For Recognition設置為On。
- 電腦維護與故障排除傻瓜書(Windows 10適用)
- Python GUI Programming:A Complete Reference Guide
- 基于Proteus和Keil的C51程序設計項目教程(第2版):理論、仿真、實踐相融合
- 極簡Spring Cloud實戰
- 數字道路技術架構與建設指南
- Linux運維之道(第2版)
- 現代辦公設備使用與維護
- 3ds Max Speed Modeling for 3D Artists
- Mastering Adobe Photoshop Elements
- 筆記本電腦維修300問
- Arduino BLINK Blueprints
- VMware Workstation:No Experience Necessary
- 基于PROTEUS的電路設計、仿真與制板
- 電腦橫機使用與維修
- STM32自學筆記