各種好用的 SystemVerilog 語法 (02) - always
Verilog 中我們會使用 always
來建立一個 block。這個語法其實沒有太大的問題,而 SystemVerilog 提供了數個更好的語法。
SystemVerilog 中引入了 always_comb
always_ff
用來提供替換原本的 always
,分別用在 combinational circuit 以及 register 使用。使用這兩個語法的話,如果 tool 支援的話,可以在不小心把 register 跟 combinational circuit 寫錯的時候,發出一些警告。tool 不支援的話也能多少當作註解來用。
因為沒什麼傷害性,基本上這個語法就是能用就用。
always_comb
在最早的 Verilog 裡面,combinational circuit 需要用 @
語法加上 sensitive list 才能正確運作。然而隨語法的更新,根本沒有這個需求了,所以在 Verilog 中 always
後面一律是 @(*)
。
1always@(*) begin
2 x = y;
3end
這就導致了 @(*)
看起來很多餘,所以新版語法 always_comb
就直接去掉了,如下:
1always_comb begin
2 x = y;
3end
另外,因為不用加上 @(*)
,所以想把他當 assign
來用也是可以的。
1assign x = y;
2always_comb x = y;
always_ff
這個語法相比 always_comb
沒什麼好說,因為就是直接替換掉本來的 always
就好。
1always_ff@(posedge clk) begin
2 x <= y;
3end
最後,雖然也有 always_latch
這個語法用在 latch 的,但是在大部分同步電路中,這個不太常用,所以沒有介紹。
系列文連結
-
各種好用的 SystemVerilog 語法 (01) - logic
-
各種好用的 SystemVerilog 語法 (02) - always
-
各種好用的 SystemVerilog 語法 (03) - typedef (integer types)
-
各種好用的 SystemVerilog 語法 (04) - typedef (enum)
-
各種好用的 SystemVerilog 語法 (05) - typedef (struct)
-
各種好用的 SystemVerilog 語法 (06) - typedef (union)
-
各種好用的 SystemVerilog 語法 (07) - local variable
- 各種好用的 SystemVerilog 語法 (01) - logic
- 各種好用的 SystemVerilog 語法 (02) - always
- 各種好用的 SystemVerilog 語法 (03) - typedef (integer types)
- 各種好用的 SystemVerilog 語法 (04) - typedef (enum)
- 各種好用的 SystemVerilog 語法 (05) - typedef (struct)
- 各種好用的 SystemVerilog 語法 (06) - typedef (union)
- 各種好用的 SystemVerilog 語法 (07) - local variable