---
# System prepended metadata

title: 第二篇 基礎概念

---

我們所寫得東西叫做Verilog，因為沒有實體的板子，所以我們都是用電腦來做出模擬  
我們把基礎分成幾個部分來理解
* ==Verilog的架構==  
module 模組名稱(輸入輸出埠清單);  
        輸入輸出埠的宣告     -> input, output, inout  
        變數資料型態宣告     -> wire, reg, …  
        引用較低階的模組  
        邏輯閘階層之描述  
        資料流階層之描述  
        function 或 task 的宣告  
        行為階層之描述區塊  
endmodule  
基礎的Verilog語法語C語言相似  
* ==Verilog語法==  
常見關鍵字  
![](https://hackmd.io/_uploads/B1460InOh.png)
(資料來源:網路)
* ==命名規則==  
第一個字元必須是英文字母  
第二個之後的字元可以是英文字母、數字、底線、或是$
* ==基本資料型態==  
wire：代表一條接線  
wand：Wired-AND  
wor：Wired-OR  
reg：暫存器  
 主要功能為用於維持電路中的某個值(always中)  
integer, real, …：用於計算的過程  
<font color="#f00">**wire 的特性**</font>  
 連接硬體元件之連接線  
 變數必須被驅動，才能改變它的內容  
 除非被宣告為一向量，否則wire 型態的變數內定為一個位元的值，且其內定值為Z  
<font color="#f00">**reg 的特性**</font>  
 功能和一般程式語言中的變數類似，可以直接給定一個數值  
 除非被宣告為一向量，否則reg 型態的變數內定為  
<font color="#f00">**使用 wire 或 reg 的時機**</font>  
使用wire所宣告的變數必須配合assign敘述來改變其值，且不能在always區塊中作為敘述的左值(Lvalue)  
使用reg所宣告的變數必須使用在always區塊中作為敘述的左值  
* ==輸入輸出埠==  
在Verilog 在Verilog Verilog 中，所有輸入輸出埠 所有輸入輸出埠(input、output、inout)的內定資料型態為wire  
若需將訊號的值存起來，則必須將其資料型態宣告為reg  
由於輸出入埠(inout)可用於與其他模組進行連接，因此可以將其視為在模組內外相互連接的兩個部分  
* ==資料流模型的敘述==  
在此模型中，常用的敘述：assign ：assign  
驅動某個值到wire、wand、wor 或tri  
用於描述組合邏輯電路  
必須避免使用迴路式的寫法：assign a = b + a;  
(我們用的是這個)  
可用預算子與邏輯設計相同(需要時再查詢即可)  
* ==行為模型的敘述==  
只需考慮電路模組的功能，而不需考慮其硬體的 ，而不需考慮其硬體的詳細內容  
以事件為基礎的時序控制  
事件：  
接線或暫存器的值被改變  
模組的輸入埠接收到新的值  
可電路合成的控制方式：正緣、負緣、訊號值改變  