1 / 82

數位邏輯 -使用 Verilog 設計

數位邏輯 -使用 Verilog 設計. 第 10 章 數位系統設計 Digital System Design. 目錄. 10.1 建構區塊電路 10.2 設計範例 10.3 時脈同步 10.4 總結評論. 介紹. 本章我們將介紹更複雜的電路範例,可以建構區塊作為子電路組成。這種較大的電路形成 數位系統 (digital system) 。

naasir
Download Presentation

數位邏輯 -使用 Verilog 設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 數位邏輯-使用Verilog設計 第10章 數位系統設計 Digital System Design

  2. 目錄 • 10.1 建構區塊電路 • 10.2 設計範例 • 10.3 時脈同步 • 10.4 總結評論

  3. 介紹 • 本章我們將介紹更複雜的電路範例,可以建構區塊作為子電路組成。這種較大的電路形成數位系統(digital system)。 • 數位系統主要由兩個部分組成,稱為資料路徑電路和控制電路。資料路徑電路(datapath circuit)是用來儲存和處理資料,以及從系統的一部份將資料轉移到另一部份。資料路徑電路由建構區塊組成,例如暫存器、位移暫存器、計數器多工器、解碼器、加法器等等。控制電路(control circuit) 控制資料路徑電路的運作。

  4. 10.1 建構區塊電路Building Block Circuits

  5. 10.1.1 具有致能輸入的正反器和暫存器 Flip-Flops and Registers with Enable Inputs 圖10.1 具有致能輸入的正反器。

  6. 10.1.2 具有致能輸入的位移暫存器 Shift Registers with Enable Inputs 圖10.2 具有致能的D正反器的程式碼。

  7. 圖10.3 具有致能輸入的n位元暫存器。

  8. 圖10.4 具有平行載入和致能控制輸入的位移暫存器。圖10.4 具有平行載入和致能控制輸入的位移暫存器。

  9. 10.1.3 靜態隨機存取記憶體 Static Random Access Memory (SRAM) • 當m很大時,以個別暫存器儲存資料是相當麻煩的。比較好的方法是使用靜態隨機存取記憶體(static random access memory, SRAM) 區塊。SRAM區塊是SRAM單元的二維陣列,其中每個單元都可以儲存一位元資訊。若我們需要儲存m筆n位元資料,可以用SRAM單元陣列。SRAM陣列的維度稱為縱橫比 (aspect ratio)。

  10. 圖10.5 具有致能輸入的由右往左位移暫存器。圖10.5 具有致能輸入的由右往左位移暫存器。

  11. 圖10.6SRAM單元。

  12. 圖10.7SRAM單元的陣列。

  13. 10.1.4 PLD的SRAM區塊SRAM Blocks in PLDs 圖10.8 的SRAM區塊。

  14. 10.2 設計範例Design Examples

  15. 10.2.1 位元計數電路A Bit-Counting Circuit • 假設我們想要計算暫存器A中為1的位元個數。圖10.9為逐步程序的虛擬程式碼,又稱作演算法(algorithm),可用來執行要求的工作。

  16. 圖10.9 位元計數器的虛擬程式碼。

  17. 10.2.2 隱含於ASM圖的時序資訊 ASM Chart Implied Timing Information 圖10.10 圖10.9虛擬程式碼的ASM圖。

  18. 資料路徑電路Datapath Circuit • 檢視位元計數電路的ASM圖,我們可以推論出實作此資料路徑所需的電路元件。我們需要由左往右的位移暫存器以實作A。它必須有平行載入的能力,因為狀態S1的條件輸出方塊將資料載入暫存器。也需要致能輸入,因為位移只發生在狀態S2。計數器對B是必要的,而且要有平行載入能力在狀態S1將計數初始化為0。依賴計數器的重置輸入在狀態S1將B清除為0是不智的作法。實際應用上,數位系統的重置訊號只作兩種用途:當電源首次打開時將電路初始化,或從錯誤中回復。若s = 0則FSM從狀態S3變到S1;因此我們不應該假設重置訊號是用來清除計數器。

  19. 資料路徑電路如圖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控制訊號。

  20. 圖10.11 圖10.10的ASM圖的資料路徑。

  21. 控制電路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的計數致能被設定。

  22. 圖10.12 位元計數器資料路徑電路的ASM圖。

  23. 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敘述。

  24. 第四個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。為了徹底檢查電路設計是否正確,我們應該嘗試不同的輸入值。

  25. 圖10.13 位元計數電路的Verilog程式碼(a部分)。圖10.13 位元計數電路的Verilog程式碼(a部分)。

  26. 圖10.13 位元計數電路的Verilog程式碼(b部分)。圖10.13 位元計數電路的Verilog程式碼(b部分)。

  27. 10.2.3 位移相加乘法器Shift-and-Add Multiplier 圖10.14 位元計數電路的模擬結果。

  28. 圖10.15 乘法的演算法。

  29. 資料路徑電路Datapath Circuit 圖10.16 乘法器的ASM圖。

  30. 圖10.17 乘法器的資料路徑電路。

  31. 控制電路Control Circuit 圖10.18 乘法器控制電路的ASM圖。

  32. Verilog程式碼Verilog Code • 乘法器的Verilog程式碼如圖10.19所示。A和B的位元個數由參數n設定。 • 電路產生最終乘積所需的時脈循環個數,是由B中為1的最左位元所決定。我們可以對A和B使用更複雜的位移暫存器,可能可以減少所需的時脈循環個數。若B中的兩個最右位元都是0,則A和B都可以在一個時脈循環內位移兩個位元位置。類似地,若B的最低三位元為0,則可以位移三個位元位置,以此類推。我們可以桶狀位移器(barrel shifter) 一次位移多個位元位置。

  33. 10.2.4 除法器Divider 圖10.19 乘法器電路的Verilog程式碼(a部分)。

  34. 圖10.19 乘法器電路的Verilog程式碼(b部分)。圖10.19 乘法器電路的Verilog程式碼(b部分)。

  35. 圖10.20 乘法器電路的模擬結果。

  36. 資料路徑電路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邏輯閘沒有顯示於圖中。

  37. 控制電路Control Circuit • 只顯示除法器所需的控制訊號的ASM圖如圖10.24所示。在狀態S3時cout值決定是否將加法器的總和輸出載入R。Q的位移致能在狀態S3被設定。我們不必指定是1或0被載入Q,因為cout連接到資料路徑電路中Q的串列輸入。我們將此留給讀者作為習題,撰寫圖10.24的ASM圖和圖10.23資料路徑電路的Verilog程式碼。

  38. 圖10.21 除法的演算法。

  39. 除法器電路的加強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從加法器的總和輸出平行載入。

  40. 圖10.22 除法器的ASM圖。

  41. 圖10.23 除法器的資料路徑電路。

  42. 圖10.24 除法器控制電路的ASM圖。

  43. Verilog程式碼Verilog Code 圖10.25 以n = 8個時脈循環作除法的例子。

  44. 10.2.5 算術平均Arithmetic Mean 圖10.26 加強除法器控制電路的ASM圖。

  45. 圖10.27 加強除法器的資料路徑電路。

  46. 圖10.28 除法器電路的Verilog程式碼(a部分)。圖10.28 除法器電路的Verilog程式碼(a部分)。

  47. 圖10.28 除法器電路的Verilog程式碼(b部分)。圖10.28 除法器電路的Verilog程式碼(b部分)。

  48. 圖10.28 除法器電路的Verilog程式碼(c部分)。圖10.28 除法器電路的Verilog程式碼(c部分)。

  49. 圖10.29 除法器電路的模擬結果。

  50. 圖10.30 求出k個數值的平均數的演算法。

More Related