Verilog并不難,只要有一點的C語言基礎,你就可以開始學習它,進而不斷深入的學習FPGA。和C語言以main函數一樣,Verilog以模塊為主體,看下面一個小小的例子:module my_first(
sys_clk,
rst_n,
data_ina,
data_inb,
data_out
);
// 端口說明
input sys_clk;
input rst_n;
input [7:0] data_ina;
input [7:0] data_inb
output [8:0] data_out;
// 功能操作
assign data_out = data_ina + data_inb;
endmodule
整個模塊就是以 module 模塊名 和 endmodule組成,這樣就算編寫了一個簡單的模塊了。它主要包括:
- 模塊的輸入(input)和輸出(output)端口聲明:簡單的說就是這個模塊對外部的相應輸入做處理后輸出處理后的結果.上面的例子就是對2個8位寬的數據做加法后在data_out端口輸出結果。
- 模塊的功能:主要有3中方法可以用:a.數據流級操作,屬于組合邏輯,例如例子中的 assigndata_out =data_ina + data_inb;只要模塊執行,就不斷地對數據data_ina和data_inb進行加法操作并賦給data_out輸出;b.門級操作,屬于組合邏輯如:c= a & b;它就是一個2輸入的與門,對輸入數據做與門計算后輸出;c.行為級操作,這個用的最多,屬于時序邏輯,如:always @(觸發的條件) 執行操作,簡單的說就是鎖存器或者觸發器的模型。當觸發的條件是電平觸發時,即鎖存器模型,只要相應的電平改變了就會執行后面需要執行的操作一次;而當觸發條件是邊沿觸發時,即觸發器模型,只要用對應的邊沿產生就執行后面的操作一次。這里有一個重要的概念需要弄明白,組合邏輯是,輸入一旦改變,相應輸出就改變;而時序邏輯是輸入改變了,需等觸發條件的到來才相應的改變一次。但是它們的執行是并行的,所有級都是同時執行,這和C語言是不同的,初學者一定要弄明白。
- 功能的操作語法:不僅和C語言很相似,而且都是C語言里面常用的一些語法,常用的語法有: if( ),if( ) else( ),if( ) elseif( ) else,case( ),至于它和C語言的用法有什么不同,下次將詳細的講解。
|