Verilog文法規則
-
- 子產品聲明類
- 參數定義
- 信号類型
- 多語句定義
- 比較判斷和分支判斷
- 任務定義
- 連續指派
- always子產品
- 指派符号:=和<=(小等号)
子產品聲明類
module at7(<端口信号清單>...)
<邏輯代碼>
endmodule
FPGA中常常定義各種子產品,不同子產品之間有接口,類似C語言中的不同函數,有不同的輸入輸出變量。
參數定義
parameter用于申明一些常量,便于子產品的移植或更新時的修改。
信号類型
wire:不同寄存器之間的連線
reg:一個寄存器,可以進行指派等操作
多語句定義
begin…end
可用于包含關系,相當于C語言中的{},若有強耦合關系的一組,則不需要用begin…end
begin
//可選申明部分
//具體邏輯
end
比較判斷和分支判斷
比較判斷:if…else
if()
begin
...
end
else
begin
...
end
if()
begin
...
end
else if()
begin
...
end
else
begin
...
end
分支判斷:case…default…endcase
case(變量名)
取值1:具體邏輯1
取值2:具體邏輯2
取值3:具體邏輯3
default:具體邏輯4
endcase
任務定義
task…endtask 像是C語言中的子函數,有輸入輸出參數。
task是可綜合的行為級文法,是順序執行的,不是并行的。
task <task名>
input 輸入變量申明
begin
...
end
endtask
連續指派
-
assign
assign可直接給wire型變量指派:
assign wire變量名 = 變量或常量
- ?表達式
wire timer_cnt;
assign timer_vnt = (cnt == MAX_CNT_VALUE)?1:0;
always子產品
//單個沿觸發的時序邏輯
always @ (沿變化)
begin
...
end
//多個沿觸發的時序邏輯
always @ (沿變化1 or 沿變化2)
begin
...
end
如:
always @ (posedge clk or negedge rst_n)
//上升沿posedge,下降沿negedge
指派符号:=和<=(小等号)
=:阻塞,在組合邏輯中用,是順序執行的
<=:非阻塞,在時序邏輯中用,兩行語句在同一個時鐘周期來到時是并行處理的