# Verilog 基本架構 ## ● 介紹 > [!Note] **module(模組):是電路設計的最高層功能單元** > - 一個 **module** 可視為 ==**解決特定功能的 IC**== > - 每個 module 可以有多個 **==輸入(input)==** 與 **==輸出(output)==** > - **電路設計的核心概念**: > - **以多個 module 透過 ==`assign`(連接訊號)== 組合成完整電路** > > [!Note] **block(區塊):是實作 module 功能的基本單位** > - 把 **module** 再細分就是 **==block(區塊)==** > - module 解決的大問題通常可 ==拆成多個小問題==, 由不同 block 處理 > - block 定義了 **==輸入與輸出之間的邏輯關係==** > - block 分為兩類: > 1. **==Combinational logic(組合邏輯)==** > 2. **==Sequential logic(循序邏輯)==** > [!Note] **input(輸入) 與 output(輸出):輸出必須唯一, 輸入可共用** > - 相同的 **輸入** 可以 ==**提供給多個 block 使用**== > - 相同的 **輸出** ==**只能由一個 block 定義**== > > [!Tip] **良好的撰寫風格:模組化思維能提升電路可讀性與可維護性** > - 先分析 module 的功能 > - 再將其拆解成多個 **解決特定子問題的 block** > - 最後用 `assign` 或 `always` 敘述把各 block 連接起來 --- ## ● module 宣告方式1 - **先定義 ==接腳順序==,後定義 ==接腳輸入/輸出==:** ```verilog= module module_name(net1, net2, /*...*/); // 輸入/輸出 敘述 // 變數設定 敘述 // 電路設計 敘述 endmodule ``` ## ● module 宣告方式2 - **一併定義==接腳順序==、==接腳輸入/輸出==:** ```verilog= module module_name( // 輸入/輸出 敘述 //<輸入/輸出> <net1>, //<輸入/輸出> <net2>, //... //<輸入/輸出> <net> ); // 變數設定 敘述 // 電路設計 敘述 endmodule ``` ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up