880 likes | 2.59k Views
數位邏輯 -使用 Verilog 設計. 第 10 章 數位系統設計 Digital System Design. 目錄. 10.1 建構區塊電路 10.2 設計範例 10.3 時脈同步 10.4 總結評論. 介紹. 本章我們將介紹更複雜的電路範例,可以建構區塊作為子電路組成。這種較大的電路形成 數位系統 (digital system) 。
E N D
數位邏輯-使用Verilog設計 第10章 數位系統設計 Digital System Design
目錄 • 10.1 建構區塊電路 • 10.2 設計範例 • 10.3 時脈同步 • 10.4 總結評論
介紹 • 本章我們將介紹更複雜的電路範例,可以建構區塊作為子電路組成。這種較大的電路形成數位系統(digital system)。 • 數位系統主要由兩個部分組成,稱為資料路徑電路和控制電路。資料路徑電路(datapath circuit)是用來儲存和處理資料,以及從系統的一部份將資料轉移到另一部份。資料路徑電路由建構區塊組成,例如暫存器、位移暫存器、計數器多工器、解碼器、加法器等等。控制電路(control circuit) 控制資料路徑電路的運作。
10.1.1 具有致能輸入的正反器和暫存器 Flip-Flops and Registers with Enable Inputs 圖10.1 具有致能輸入的正反器。
10.1.2 具有致能輸入的位移暫存器 Shift Registers with Enable Inputs 圖10.2 具有致能的D正反器的程式碼。
圖10.4 具有平行載入和致能控制輸入的位移暫存器。圖10.4 具有平行載入和致能控制輸入的位移暫存器。
10.1.3 靜態隨機存取記憶體 Static Random Access Memory (SRAM) • 當m很大時,以個別暫存器儲存資料是相當麻煩的。比較好的方法是使用靜態隨機存取記憶體(static random access memory, SRAM) 區塊。SRAM區塊是SRAM單元的二維陣列,其中每個單元都可以儲存一位元資訊。若我們需要儲存m筆n位元資料,可以用SRAM單元陣列。SRAM陣列的維度稱為縱橫比 (aspect ratio)。
圖10.5 具有致能輸入的由右往左位移暫存器。圖10.5 具有致能輸入的由右往左位移暫存器。
10.1.4 PLD的SRAM區塊SRAM Blocks in PLDs 圖10.8 的SRAM區塊。
10.2.1 位元計數電路A Bit-Counting Circuit • 假設我們想要計算暫存器A中為1的位元個數。圖10.9為逐步程序的虛擬程式碼,又稱作演算法(algorithm),可用來執行要求的工作。
10.2.2 隱含於ASM圖的時序資訊 ASM Chart Implied Timing Information 圖10.10 圖10.9虛擬程式碼的ASM圖。
資料路徑電路Datapath Circuit • 檢視位元計數電路的ASM圖,我們可以推論出實作此資料路徑所需的電路元件。我們需要由左往右的位移暫存器以實作A。它必須有平行載入的能力,因為狀態S1的條件輸出方塊將資料載入暫存器。也需要致能輸入,因為位移只發生在狀態S2。計數器對B是必要的,而且要有平行載入能力在狀態S1將計數初始化為0。依賴計數器的重置輸入在狀態S1將B清除為0是不智的作法。實際應用上,數位系統的重置訊號只作兩種用途:當電源首次打開時將電路初始化,或從錯誤中回復。若s = 0則FSM從狀態S3變到S1;因此我們不應該假設重置訊號是用來清除計數器。
資料路徑電路如圖10.11所示。位移暫存器的串列輸入w連接到0,因為它是不需要的。位移暫存器的載入和致能輸入由訊號LA和EA所驅動。位移暫存器的平行輸入為Data,平行輸出為A。n輸入NOR邏輯閘是用來測試是否A = 0。若A = 0則邏輯閘的輸出z為1。注意,圖中n輸入NOR邏輯閘只有單一輸入連到邏輯閘,上面標示n。計數器有log2(n)位元,其平行輸入連接到0,而平行輸出為B。它也有平行載入輸入LB和致能輸入EB控制訊號。
控制電路Control Circuit • 為了方便起見,我們可以畫只代表控制電路所需的FSM的第二個ASM圖,如圖10.12所示。此FSM的輸入為s、a0和z,產生輸出EA、LB、EB和Done。在狀態S1時LB被設定,因此將0平行載入計數器。注意,對控制訊號例如LB,不必寫LB = 1,我們只需寫LB以表示訊號被設定。假設當有效資料出現在位移暫存器的平行輸入時,外部電路驅動LA為1,因此位移暫存器的內容在s變成1之前被初始化。在狀態S2時設定EA開始位移運作,而且只有當a0 = 1時B的計數致能被設定。
Verilog程式碼Verilog Code • 位元計數電路可以Verilog程式碼描述,如圖10.13所示。我們將A定義為八位元向量,將B定義為四位元向量訊號。圖10.12的ASM圖可以直接譯成描述要求控制電路的程式碼。訊號y是用來表示FSM的現在狀態,而Y表示下個狀態。此FSM以三個always區塊表示:標示為State_table的區塊指定狀態轉換,標示為State_flipflops的區塊表示狀態正反器,而標示為FSM_outputs的區塊指定每個狀態產生的輸出。每個輸出訊號的預設值指定於FSM_outputs區塊的開頭,而個別輸出值指定於case敘述。
第四個always區塊定義實作B的上數計數器。A的位移暫存器在程式碼結尾被實體化,而z訊號由簡化的NOR運算子所指定。我們實作圖10.13程式碼於晶片,並執行時序模擬。圖10.14為A = 00111011的模擬結果。電路重置之後,輸入訊號LA被設為1,要求的資料(3B)16被放在Data輸入。當s變成1時,下個有效時脈邊緣使得FSM變到狀態S2。在此狀態,若a0為1則在每個有效時脈邊緣將B加1,並且位移A。當A = 0,下個時脈邊緣使得FSM變到狀態S3,其中Done被設為1且B有正確的結果B = 5。為了徹底檢查電路設計是否正確,我們應該嘗試不同的輸入值。
圖10.13 位元計數電路的Verilog程式碼(a部分)。圖10.13 位元計數電路的Verilog程式碼(a部分)。
圖10.13 位元計數電路的Verilog程式碼(b部分)。圖10.13 位元計數電路的Verilog程式碼(b部分)。
10.2.3 位移相加乘法器Shift-and-Add Multiplier 圖10.14 位元計數電路的模擬結果。
資料路徑電路Datapath Circuit 圖10.16 乘法器的ASM圖。
控制電路Control Circuit 圖10.18 乘法器控制電路的ASM圖。
Verilog程式碼Verilog Code • 乘法器的Verilog程式碼如圖10.19所示。A和B的位元個數由參數n設定。 • 電路產生最終乘積所需的時脈循環個數,是由B中為1的最左位元所決定。我們可以對A和B使用更複雜的位移暫存器,可能可以減少所需的時脈循環個數。若B中的兩個最右位元都是0,則A和B都可以在一個時脈循環內位移兩個位元位置。類似地,若B的最低三位元為0,則可以位移三個位元位置,以此類推。我們可以桶狀位移器(barrel shifter) 一次位移多個位元位置。
10.2.4 除法器Divider 圖10.19 乘法器電路的Verilog程式碼(a部分)。
圖10.19 乘法器電路的Verilog程式碼(b部分)。圖10.19 乘法器電路的Verilog程式碼(b部分)。
資料路徑電路Datapath Circuit • 我們需要n位元位移暫存器將A、R和Q由右向左位移。B需要n位元暫存器,產生R–B需要減法器。我們可以用進位輸入設為1且B為互補的加法器模組。若則模組的進位輸出cout值為1。因此進位輸出可以連接到持有Q的位移暫存器的串列輸入。因此在狀態S3被位移進入Q。因為R在狀態S1被載入0,在狀態S3被載入加法器輸出,R的平行資料輸入需要多工器。資料路徑電路如圖10.23所示。注意,實作C所需的下數計數器和輸出為1的NOR邏輯閘沒有顯示於圖中。
控制電路Control Circuit • 只顯示除法器所需的控制訊號的ASM圖如圖10.24所示。在狀態S3時cout值決定是否將加法器的總和輸出載入R。Q的位移致能在狀態S3被設定。我們不必指定是1或0被載入Q,因為cout連接到資料路徑電路中Q的串列輸入。我們將此留給讀者作為習題,撰寫圖10.24的ASM圖和圖10.23資料路徑電路的Verilog程式碼。
除法器電路的加強Enhancements to the Divider Circuit • 使用圖10.24的ASM圖使得電路在狀態S2和S3之間來回了2n個時脈循環。若這些狀態可以合併成單一狀態,則所需的時脈循環個數可以減到n個。在狀態S3,若cout= 1,將加法器的總和輸出(減法的結果)載入R,且(假設z = 0)變到狀態S2。在狀態S2我們將R(和A)向左位移。為了將狀態S2和S3合併成新的狀態S2,必須在位移A的MSB進入R的LSB時,把總和放在R的最左位元。我們可以分開的正反器代表R的LSB以完成此步驟。令此正反器輸出為rr0。當s = 0於狀態S1時被初始化為0。否則,正反器從A的MSB載入。在狀態S2,若cout= 0,則R向左位移且rr0位移進入R。但是若cout = 1,R從加法器的總和輸出平行載入。
Verilog程式碼Verilog Code 圖10.25 以n = 8個時脈循環作除法的例子。
10.2.5 算術平均Arithmetic Mean 圖10.26 加強除法器控制電路的ASM圖。
圖10.28 除法器電路的Verilog程式碼(a部分)。圖10.28 除法器電路的Verilog程式碼(a部分)。
圖10.28 除法器電路的Verilog程式碼(b部分)。圖10.28 除法器電路的Verilog程式碼(b部分)。
圖10.28 除法器電路的Verilog程式碼(c部分)。圖10.28 除法器電路的Verilog程式碼(c部分)。