module my_first_prj(
埠訊號列 … )
;邏輯代 …
endmodule
input clk;
input wire rst_n;
input [7:0] data_in;
module 模組命
(埠命名 1>, 埠命名 2>, ...)
;// 輸入埠申明
input 埠命名 1>
;input wire 埠命名 2>
;input [
最高:最低
]埠命名 3>
;...
// 輸出埠申明
output 埠命名 4>
;output [
最高:最低
]埠命名 5>
;output reg [
最高:最低
]埠命名 6>
;...
// 雙向(輸入輸出)埠申明
inout 埠命名 7>
;inout [
最高:最低
]埠命名 8>
;...
// 引數定義
parameter 引數命名 1>
=預設值 1>
;parameter [
最高:最低
]引數命名 2>
=預設值 2>
;...
// 具體功能邏輯**
...endmodule
其中「//」後為注釋的內容。「<>」之間是各個引數以及埠的名稱命名,在實際**中不需要加「<>」。
// 定義乙個 wire 訊號
wire
;// 給乙個定義的 wire 訊號直接連線賦值
// 該定義等同於分別定義乙個 wire 訊號和使用 assign 語句進行賦值
wire
=常量或變數賦
;// 定義乙個多 bit 的 wire 訊號
wire [
最高:最低
];// 定義乙個 reg 訊號
reg
;// 定義乙個賦初值的 reg 訊號
reg
=初始;// 定義乙個多 bit 的 reg 訊號
reg [
最高:最低
];// 定義乙個賦初值的多 bit 的 reg 訊號
reg [
最高:最低
]=初始
;// 定義乙個二維的多 bit 的 reg 訊號
reg [
最高:最低
][最高:最低
];
由以上**可知:
// 含有命名的 begin 語句
begin :
塊// 可選申明部分
// 具體邏輯
end// 基本的 begin 語句
begin
// 可選申明部分
// 具體邏輯
end
// if 判斷語句
if(判斷條
) begin
// 具體邏輯
end// if…else 判斷語句
if(判斷條
)begin
// 具體邏輯 1
endelse
begin
// 具體邏輯 2
end// if…else if…else 判斷語句
if(判斷條件 1>
)begin
// 具體邏輯 1
endelse if(
判斷條件 2>
)
// for 語句
for(
變數=初
;判斷表達
;變數=新
)begin
// 具體邏輯
end
task
;// 可選申明部分,如本地變數申明
begin
// 具體邏輯
endendtask
assign
=變數或常
;
(判斷條件) ? (判斷條件為真時的邏輯處理)
:(判斷條件為假時的邏輯處理)
(1)組合邏輯:敏感表為電平、沿訊號posedge/negedge;通常用@連用。使用示例如下所示:
always@(*)
begin
// 具體邏輯
end
(2)時序邏輯:always後若有沿訊號(上公升沿posedge,下降沿negedge)宣告,則多為時序邏輯,使用示例如下所示:
// 單個沿觸發的時序邏輯
always@(
沿變)begin
//具體邏輯
end// 多個沿觸發的時序邏輯
always@(
沿變化 1> or 沿變化 2>
)begin
//具體邏輯
end
+ // 加 - // 減
! // 邏輯非
~ // 取反
& // 與
~& // 與非
| // 或
~| // 或非
^ // 異或
^~ // 同或
~^ // 同或
* // 乘,是否可綜合看綜合工具
/ // 除,是否可綜合看綜合工具
% // 取模
<< // 邏輯左移
>> // 邏輯右移
< // 小於
<= // 小等於
> // 大於
>= // 大等於
== // 邏輯相等
!= // 邏輯不等於
&& // 邏輯與
|| // 邏輯或
由上表可以看出來,這些和c語言中的是一樣的。
賦值的=與c語言中的運算一直,不同之處在於在verilog中有阻塞和非阻塞賦值。(有待了解,在具體的例項中感受他們之間的不同之從)
在學微控制器的初始階段,我寫**就超級亂,超級爛。其實我們在寫每個**程式的時候都應該遵守**書寫的規範。最起碼起到便於他人閱讀的效果。不然**一團亂,即使電腦執行的時候不會出錯但是也不便與別人交流合作。學fpga也是一樣的,verilog也是有**的書寫規範的。我們要從剛開始接觸verilog就養成好的習慣,盡力遵從比較規範的書寫方式。下面是也寫基本的可供遵循的規範。
1、識別符號:識別符號包括語法保留關鍵字、模組名稱、埠名稱、訊號名稱、各種變數或常量名稱等(注意後面的名稱不能和關鍵字一樣)
可綜合的verilog語法
1 所有綜合工具都支援的結構 always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,n...
FPGA學習筆記(二) verilog 語法講解
verilog語法介紹 數位電路中主要有組合邏輯和時序邏輯兩種電路。組合邏輯 多路選擇器 解碼器 加法器 乘法器等 時序邏輯 最基本的是計數器。verilog檔案的基本結構 乙個檔案中可以包含多個模組。方法1 模組宣告 模組名 埠列表 module mux2 a,b,sel,out,io 埠屬性定義...
學習日記 Verilog語法簡介
此經驗是從被人那裡學來的,一起跟著方法去做 1 需要同時掌握vhdl和verilog 2 和電路的關係 3 可綜合的語法與 行為級語法 4 hdl語言學習經驗 下面列出的是ve r i l o g硬體描述語言的主要能力 基本邏輯門,例如and o r和nand等都內建在語言中。使用者定義原語 u d...