Verilog HDL(簡稱 Verilog )是一種硬件描述語言,用於數字電路的係統設計。可對算法級、門級、開關級等多種抽象設計層次進行建模。
Verilog 繼承了 C 語言的多種操作符和結構,與另一種硬件描述語言 VHDL 相比,語法不是很嚴格,代碼更加簡潔,更容易上手。
Verilog 不僅定義了語法,還對語法結構都定義了清晰的仿真語義。因此,Verilog 編寫的數字模型就能夠使用 Verilog 仿真器進行驗證。
誰適合閱讀本教程
本教程主要針對 Verilog 初學者打造。
有一定 Verilog 基礎的同學也可以對進階篇、實例篇進行學習、交流。
閱讀本教程前,你需要了解的知識
在學習本教程之前,你需要了解數字電路的一些基本信息。
如果你對 C 語言有一定的了解,有助於 Verilog 的快速上手。
第一個 Verilog 設計
4 位寬 10 進製計數器:
實例
module counter10(
//端口定義
input rstn, //複位端,低有效
input clk, //輸入時鍾
output [3:0] cnt, //計數輸出
output cout); //溢出位
reg [3:0] cnt_temp ; //計數器寄存器
always@(posedge clk or negedge rstn) begin
if(! rstn)begin //複位時,計時歸0
cnt_temp <= 4'b0 ;
end
else if (cnt_temp==4'd9) begin //計時10個cycle時,計時歸0
cnt_temp <=4'b000;
end
else begin //計時加1
cnt_temp <= cnt_temp + 1'b1 ;
end
end
assign cout = (cnt_temp==4'd9) ; //輸出周期位
assign cnt = cnt_temp ; //輸出實時計時器
endmodule
//端口定義
input rstn, //複位端,低有效
input clk, //輸入時鍾
output [3:0] cnt, //計數輸出
output cout); //溢出位
reg [3:0] cnt_temp ; //計數器寄存器
always@(posedge clk or negedge rstn) begin
if(! rstn)begin //複位時,計時歸0
cnt_temp <= 4'b0 ;
end
else if (cnt_temp==4'd9) begin //計時10個cycle時,計時歸0
cnt_temp <=4'b000;
end
else begin //計時加1
cnt_temp <= cnt_temp + 1'b1 ;
end
end
assign cout = (cnt_temp==4'd9) ; //輸出周期位
assign cnt = cnt_temp ; //輸出實時計時器
endmodule
Cat Me
本人從事過 FPGA 設計、 IC 設計。學生時代用 VHDL 語言設計比較多,目前一直用 Verilog 。為方便查詢語法,也為其他學者提供便利的學習通道,特意寫此教程。需要說明的是:
- (1) 教程內容是以自己曾經的學習角度進行撰寫的,學習起來可能會容易些。其中有不妥之處還望指出,一起交流進步。
- (2) 當用 Verilog 設計完成數字模塊後進行仿真時,需要在外部添加激勵,激勵文件叫 testbench。有時 testbench 設計可能比數字模塊本身都複雜。所以前麵在介紹 Verilog 基本語法時,幾乎沒有仿真。後麵介紹行為級和時序級相關知識時,會多用仿真說明。
聯係人:Think · In · Hardware
全篇教程都是本人手動搜集、整理、編寫的,所有設計仿真都有原創或改進。如果您從中受益,您的讚賞或關注將是最不耍流氓的支持,鼓勵我饑餓的靈魂去撰寫飽滿的篇章。