天天看點

Verilog文法規則

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
           

指派符号:=和<=(小等号)

=:阻塞,在組合邏輯中用,是順序執行的

<=:非阻塞,在時序邏輯中用,兩行語句在同一個時鐘周期來到時是并行處理的