# Verilog HDL 撰寫前置作業 Verilog HDL 為硬體描述語言,而不是程式語言,撰寫前應先畫出**架構圖**,再用此語言**描述電路行為**。 ## Design Entry 當要展示個人想法,說明電路是如何設計時,介紹以下兩種方式。這裡以 Multiplexer(Mux) 元件為例。 >說明:以下圖中的 Mux 元件為例。 >* Sel signal 命名含義在於 select signal,因有 Sel signal 使此元件具有選擇的功用。 >* Mux 元件透過給予 Sel signal,決定 Y 值應為 A 或是 B。 >* Input signal 有 1 bit 的 A 與 B,還有 1 bit Sel signal (為了告訴元件需要選擇 A 還是 B)。 >* Output signal 則有 1 bit 的 Y。 >* 當 Sel = 1 時,Y = A。反之, Y = B。  ### Schematic 利用邏輯閘表達電路架構,如下圖所示。  >說明: > > >* And Gate: Input 皆為 1(True) 才輸出 1。 >* Or Gate: Input 只要有出現 1(True),就輸出 1。 >* Not Gate(Invertor): Output 為 Input 的反向,假設目前輸入 1(True),則會輸出 0(False)。 > * Mux 元件的設計: * 當 Sel 為 1 時, 會只輸出 A 的值。 * 因 Not Sel(1 反向為 0) 與 B 的 And Gate 只會輸出 0。 * 最後的 Or Gate 相當於 Y = (A or 0) = A 。 ### Block Diagram 如同黑箱子般,只知道 input 與 output,沒有完全將細節畫出來。  Mux 有通用圖形表示,如下圖所示。  >說明:  >* 上圖為 Mux 元件通用圖形,圖中須表達: >* Input signal >* Output signal >* Select signal,此 signal 代表是在何種 condition 下選擇 input signal。 ## 系統架構圖 利用上述 Design Entry 的方式,依照讀者的設計想法,先畫出**系統架構圖**,再進行 Verilog 語言撰寫。 下列為範例說明,詳細內容課程中會再說明。 ### I/O pin diagram 說明系統的 I/O port (包含 Signal name 與 Width)。  >說明: >* 此圖只是範例,並不是固定格式。 >* Width 部分,若為 1 bit,則不畫斜線。 ### System diagram 表達系統與外在系統如何溝通。  >說明: >* 此圖只是範例,並不是固定格式。 >* Width 部分,若為 1 bit,則不畫斜線。 >* 此部分是以 host 想成 Testbench 角色,傳遞 Input signal 給系統,並接收 Output signal,以驗證系統的正確性。 ### Finite State Machine(FSM) (此部分在課程後半部會介紹) 可用來表示系統在哪一個狀態,因什麼原因而跳到下一個狀態,也須表示 outputs 為何。 FSM 可分為 Mealy 與 Moore Machine,大部分可描述同樣的行為,兩種 Machine 的 output 皆與 state 有關,但因 Mealy Machine output 同時也與 input 有關(可即時作轉換),使得兩種 Machine 輸出結果會差一個 cycle (timing 差異),此部分可參考 [Circuits 範例](https://hackmd.io/s/H1lFtSgYg)。 在設計系統時,依照個人習慣選擇 FSM 的撰寫方式,另外,兩種 Machine 是可以混著使用,不是一定要切割說目前在使用何種 Machine。 #### Mealy Machine input 與 state 決定 output 的值。  >說明: >* 須表達剛開始預設的 state 為何,系統要從哪個 state 開始,也就是圖中的 start 線。 >* 每個 state 都應給予一個適當的名字。 >* state 轉換部分,固定格式為 **條件/輸出值**,另外,若是無條件進入下一個 state,則用 ' * ' 表示。 #### Moore Machine output 的值只跟 state 有關。  >說明: >* 須表達剛開始預設的 state 為何,系統要從哪個 state 開始,也就是圖中的 start 線。 >* 每個 state 都應給予一個適當的名字。 >* state 轉換部分,固定格式為 **條件**,另外,若是無條件進入下一個 state,則用 ' * ' 表示。 >* 因 output 只跟 state 有關,所以寫在 state 裡。 ### Datapath (此部分在課程後半部會介紹) 此部分請直接閱讀 [Circuits 範例](https://hackmd.io/s/H1lFtSgYg) 。 ## 總結 請撰寫 Verilog HDL 前,先對系統有全盤規劃,並依個人想法畫出來,此作法對於系統撰寫與 Debug 相當有幫助。 # [Home Page:hatched_chick: ](https://hackmd.io/s/BkYeCF5Og)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.