【FPGA】學習筆記—{Verilog}—{一、Verilog設計初步}
1.1 Verilog簡介
Verilog是一種硬件描述語言。
Idea→行爲級描述→RTL描述→門(Gate)級網表→物理版圖
1.2 Verilog模塊的結構
1.2.1 Verilog程序的特點
- ●Verilog程序的基本設計單元是“模塊”(
module
);
●每個模塊的內容都嵌在module
和endmodule
之間;
●每個模塊實現特定的功能。 - ●每個模塊首先要進行端口定義;
●並說明輸入和輸出口(input
、output
或inout
);
●再對模塊的功能進行定義。 - ● 除
endmodule
等少數語句外,每個語句的最後必須有分號 。 - 註釋:
●//······
●/*······*/
1.2.2 Verilog程序的4個主要部分
1、模塊聲明
1、模塊聲明包括:模塊名字,模塊輸入、輸出端口列表。
2、格式:
module 模塊名(端口1,端口2,端口3,……)
3、模塊結束的標誌爲關鍵字 endmodule
2、端口(Port)定義
1、端口分類:
端口是模塊與外界連接和通信的信號線
● input:輸入端口
● output:輸出端口
● inout:雙向端口
2、格式:
input 端口名1,端口名2,…………端口名n; //輸入端口
output 端口名1,端口名2,…………端口名n; //輸出端口
inout 端口名1,端口名2,…………端口名n; //雙向端口
3、注意:!!!
● 每個端口需要進行端口類型聲明(輸入、輸出還是雙向端口)和數據類型聲明(wire型、reg型還是其他類型)
● 輸入和雙向端口不能聲明爲寄存器型。
●在測試模塊中不需要定義端口。
3、信號類型聲明
●模塊中所有用到的信號(包括端口信號、節點信號等)都必須進行數據類型的定義。
●Verilog語言提供的各種信號類型,分別模擬實際電路中的 各種物理連接和物理實體。
●若信號的數據類型沒有定義,則綜合器將其默認爲是wire
型。
●在Verilog-2001標準中,規定可以將端口聲明和信號類型聲明放在一條語句中完成。
●端口聲明和信號類型聲明可以都放在模塊列表中,而不是模塊內部。
4、邏輯功能定義
1、用assign持續賦值語句定義。
●assign語句一般用於組合邏輯的賦值,稱爲持續賦值方式
●格式:assign 結果信號名=表達式;
例:assign f=~((a&b)|(~(c&d)));
2、用always過程塊定義。
●格式:
always @(敏感信號列表)
begin
//過程賦值
//if-else,case語句;for循環語句
//task,function調用
end
●例:見 例
描述3,4
3、調用元件(元件例化)。
例
用Verilog對該電路描述:
描述1:
module aoi(a,b,c,d,f); //模塊名爲aoi,端口列表a,b,c,d,f
input a,b,c,d; //模塊輸入端爲a,b,c,d
output f; //模塊輸出端爲f
wire a,b,c,d,f; //定義信號的數據類型
assign f=~((a&b)|(~(c&d))); //邏輯功能描述
endmodule
描述2:
module aoi //將端口類型和信號類型的聲明都放在模塊列表
(input wire a,b,c,d, //在Verilog-2001標準中,規定可以將端口聲明和信號類型聲明放在一條語句中完成。
output wire f);
assign f=~((a&b)|(~(c&d)));
endmodule
描述3:
module aoi(a,b,c,d,f);
input a,b,c,d;
output f;
reg f; //在always過程塊中賦值的變量應定義爲reg型
always @(a or b or c or d) //always過程塊及敏感信號列表
begin
f=~((a&b)|(~(c&d))); //邏輯功能描述
end
endmodule
描述4:
module aoi //模塊聲明採用Verilog-2001格式
(input a,b,c,d,
output reg f);
always @(*) //通配符,等價於a or b or c or d
begin
f=~((a&b)|(~(c&d))); //邏輯功能描述
end
endmodule