Verilog 基礎

Verilog

基本語法

型態

全域變數

基本元件

多樣的寫法

指定

assign

always

initial

運算式

分枝

迴圈

模組

函數

Task

陣列

輸出入

觀察

真值表

測試程式

訊息顯示

注意事項

模擬程序

硬體工程

程式範例

Xor

Xor3

全加器

加法器

加減器

快速加法器

乘法器

ALU

閂鎖器

脈衝偵測

計數器

多工器

暫存器群

記憶體

延遲問題

浮點數

狀態機

程式計數器

CPU0-Mini

CPU0

pipeline

工具

QuartusII

Icarus

Veritek

訊息

相關網站

參考文獻

最新修改

簡體版

English

基本語法

module <name> // 模組名稱
 parameter ... // 參數宣告
 port ... // 腳位宣告
 wire ... // 線宣告
 reg  ... // 暫存器宣告

 initial begin // 初始化設定區塊 
 end

 assign ... // 資料處理層級之描述

 ... // 引用較低階模組別名

 always begin // 行為層級之描述區塊
   // 資料處理與指定等描述
   // task與function的使用
 end

 function  // 函數宣告
 task       // 作業宣告

endmodule

範例:Hello

module Hello

initial begin
  $display("Hello!");
  #10 $finish;
end
endmodule

Verilog 的兩種主要模式

1. 結構模式 (Structural Modeling) : 描述網路連線 (netlist) 的方式,元件和元件之間如何連接起來。

  • 模組 (Model):透過輸出入 (I/O) 與其他模組連接起來,模組內可以包含元件 (instance)、子模組、訊號 (signal) 等。
    • 模組是靜態 (static) 且平行執行 (concurrent) 的單位。

2. 行為模式 (Behavioral Modeling) : 有順序關係 (sequencing),更加彈性,同時可用來寫電路與測試程式 (testbench)。

  • 平行:Initial , Always — 事件驅動模式 (Concurrent, event-triggered processes)
  • 控制:Assignment, if else, case — 進行順序控制,可加上延遲一段時間 #time 的概念。

Verilog 的兩種主要資料型態

1. 線路 (Nets) : 代表連線,不能儲存內容,代表閘或模組之間的連線,不可以被指定 (assign)。

範例:wire、input、output。

2. 暫存 (Reg) :代表存儲空間,就像暫存器一樣,儲存某值,直到下次被指定 (assign) 為止。

範例:reg、input reg、output reg。(可以用來代表正反器 latch、flip-flop)。

注意:Reg 不可與某個元件連結 (Never connected to something)。

參考文獻

  1. (筆記) Verilog module建議的coding style (SOC) (Verilog)
  2. 針對C語言編程者的Verilog開發指南實例

摘錄:

reg和wire的主要區別是,reg類型的訊號只能在過程塊(後面會談到)中賦值,而wire類型的訊號只能在過程塊外賦值。這兩種訊號類型都可以出現在過程塊內部和外部的賦值運算符右邊。

使用關鍵字reg並不一定意味著編譯器會製作一個暫存器,理解這一點是非常重要的。清單2的程式碼中有一個reg類型8位元寬的內部訊號out。該模組使用暫存器源於always模組(過程塊的一種)的編程方式。值得注意的是,訊號a是一個wire類型,因此只能在連續賦值(continuous assignment)語句中賦值,而reg類型的out訊號只能在always塊中賦值。

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License