Verilog 介紹
Verilog 是一種用於類比電子系統的硬體描述語言(HDL)。它最常描述的是抽象的暫存器傳輸級(RTL)的電子系統。它還用於驗證類比電路和混合訊號電路。其結構和主要原則(如下所述)旨在描述和成功實施電子系統。
- 剛性
電子電路是具有固定結構的物理實體,Verilog 適用於此。模組(模組),埠(輸入/輸出/輸入),連線(電線),塊(@always),暫存器(reg)都在編譯時固定。實體和互連的數量不會動態變化。頂層始終有一個模組代表晶片結構(用於合成),一個在系統級用於驗證。 - 並行性
物理晶片中固有的同時操作通過始終(大多數通用),初始和 fork / join 塊在語言中模仿。
module top();
reg r1,r2,r3,r4; // 1-bit registers
initial
begin
r1 <= 0 ;
end
initial
begin
fork
r2 <= 0 ;
r3 <= 0 ;
join
end
always @(r4)
r4 <= 0 ;
endmodule
所有上述語句在同一時間單元內並行執行。
-
定時和同步
Verilog 支援各種結構來描述電路的時間特性。電路中的時序和延遲可以在 Verilog 中實現,例如#delay 結構。類似地,Verilog 還適用於同步和非同步電路以及使用各種結構的觸發器,鎖存器和組合邏輯等元件,例如始終模組。還可以通過公共時鐘訊號同步一組塊,或者可以基於特定的輸入集觸發塊。#10 ; // delay for 10 time units always @(posedge clk ) // synchronous always @(sig1 or sig2 ) // combinatorial logic @(posedge event1) // wait for post edge transition of event1 wait (signal == 1) // wait for signal to be 1
-
不確定性
Verilog 支援電子電路中固有的一些不確定性。X
用於表示電路的未知狀態。Z
用於表示電路的未驅動狀態。reg1 = 1'bx; reg2 = 1'bz;
-
抽象
Verilog 支援不同抽象級別的設計。設計的最高抽象級別是 Resister 傳輸級別(RTL),下一個是門級別,最低階別是單元級別(User Define Primitives),RTL 抽象是最常用的。Verilog 還支援行為抽象級別,而不考慮主要用於驗證的設計的結構實現。
// Example of a D flip flop at RTL abstraction
module dff (
clk , // Clock Input
reset , // Reset input
d , // Data Input
q // Q output
);
//-----------Input Ports---------------
input d, clk, reset ;
//-----------Output Ports---------------
output q;
reg q;
always @ ( posedge clk)
if (~reset) begin
q <= 1'b0;
end else begin
q <= d;
end
endmodule
// And gate model based at Gate level abstraction
module and(input x,input y,output o);
wire w;
// Two instantiations of the module NAND
nand U1(w,x, y);
nand U2(o, w, w);
endmodule
// Gate modeled at Cell-level Abstraction
primitive udp_and(
a, // declare three ports
b,
c
);
output a; // Outputs
input b,c; // Inputs
// UDP function code here
// A = B & C;
table
// B C : A
1 1 : 1;
0 1 : 0;
1 0 : 0;
0 0 : 0;
endtable
endprimitive
Verilog 有三個主要用例。它們確定程式碼的結構及其解釋,並確定使用的工具集。所有這三個應用程式都是成功實現任何 Verilog 設計所必需的。
- 物理設計/後端
Verilog 主要用於將設計視為實現邏輯設計的互連門矩陣。RTL / logic / Design 經歷了從綜合 - >佈局 - >時鐘樹構造 - >路由 - > DRC - > LVS - >到 tapeout 的各個步驟。精確的步驟和順序根據實施的確切性質而有所不同。 - 模擬
在此用例中,主要目標是生成測試向量,以根據規範驗證設計。在這個用例中編寫的程式碼不需要是可綜合的,它仍然在驗證範圍內。這裡的程式碼更像是 for / while / do 迴圈等通用軟體結構。 - 設計
設計涉及通常在 RTL 抽象級實現電路規範。然後給出用於驗證的 Verilog 程式碼,並且為物理實現提供完全驗證的程式碼。程式碼只使用 Verilog 的可合成結構編寫。某些 RTL 編碼風格可能導致模擬與合成不匹配,必須注意避免這些。
有兩個主要的實施流程。它們還會影響 Verilog 程式碼的編寫和實現方式。某些樣式的編碼和某些結構更適合於一個流程而不是另一個流程。
- ASIC 流程(專用積體電路)
- FPGA 流程(現場可程式設計門陣列) - 包括 FPGA 和 CPLD