各種好用的 SystemVerilog 語法 (01) - logic

Share on:

本文內容採用創用 CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款授權.

不知不覺一年以上沒更新了,想說網域的費用都繳了,不寫些東西實在是浪費錢,所以來想開一個新的系列。想來想去,發現網路上針對新手的 SystemVerilog 的資源相當的稀少,所以就來開一個系列好了。

總之就是介紹各種 SystemVerilog 實務上可以用的語法,想到什麼就寫什麼的系列,有時候也不一定會跟 SystemVerilog 有關,可能只是新手比較少用的 Verilog 語法,每一篇的量也會變少,文章針對的是已經大約知道 Verilog,但是對 SystemVerilog 不熟悉的人。

Logic 語法

在 Verilog 中宣告信號有 wire 以及 reg 兩種語法,設計上是用來表示 combinational 跟 sequential 信號使用的。

1wire sig1;
2reg sig2;

但是實際上這個語法根本沒發揮到他的功能,就是來搞人的。在 always block 裡面寫到 wire 的時候會 compile fail,或是反過來 assignreg 的時候也會 fail,除此之外根本沒其他意義。

 1wire sig1, sig3;
 2reg sig2;
 3
 4assign sig2 = 1'b1; // boom!
 5always@(*) begin
 6   sig1 = 1'b1; // boom!
 7end
 8
 9always@(posedge clk) begin
10   sig3 <= 1'b1; // boom!
11end

於是就出現了 logic 語法全部取代掉。

1logic sig1, sig2, sig3;
2assign sig2 = 1'b1; // OK!
3always@(*) begin
4   sig1 = 1'b1; // OK!
5end
6
7always@(posedge clk) begin
8   sig3 <= 1'b1; // OK!
9end

logic 的使用就是這麼的方便,沒其他好說的了。在可以用 SystemVerilog 的情形下,用就對了。

第一篇很短,就當作熱身復健吧。