日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Verilog中reg和SystemVerilog中logic的區別

作者:Alfred.HOO 更新時間: 2022-07-11 編程語言

關于reg和logic的區別,在SystemVerilog驗證測試平臺編寫指南中有所提出,如下所示:
SystemVerilog對經典的reg數據類型進行了改進,使得他除了作為一個變量以外,還可以被連續賦值、門單元和模塊所驅動。為了與寄存器類型相區別,這種改進的數據類型稱為logic。任何使用線網的地方均可以使用logic,但是要求logic不能有多個結構性的驅動,例如在對雙向總線建模的時候,此時,需要使用線網類型,例如wire,SystemVerilog會對多個數據來源解析后確定最終值。
logic數據類型的使用:

module logic_data_type(input logic rst_h);
  parameter CYCLE=20;
  logic q, q_l, d, clk, rst_l;
  initial begin
    clk = 0;  //過程賦值
    forever #(CYCLE/2) clk = ~clk;
  end
  assign rst_l = ~rst_h;  //連續賦值
  not n1(q_l, q);         //q_l被門驅動
  my_diff(q, d, clk, rst_l); //q被模塊驅動
endmodule

由于logic類型只能有一個驅動,所以你可以使用它來查找網單中的漏洞。把你所有的信號都聲明為logic而不是reg或wire,如果存在多個驅動,那么編譯時就會出現錯誤。當然,有些信號你本來就希望有多個驅動,例如雙向總線,這些信號就需要被定義成線網類型,例如wire。

verilog中對reg類型的解釋如下:
寄存器是數據存儲單元的抽象。寄存器數據類型的關鍵字是reg。通過賦值語句可以改變寄存器儲存的值,其作用于改變觸發器儲存的值相當。
reg型數據常用來表示always模塊內指定信號,常代表觸發器。通常在設計中要由always模塊通過使用行為描述語句來表達邏輯關系。在always模塊內被賦值的每一個信號都必須定義成reg型。

原文鏈接:https://blog.csdn.net/Michael177/article/details/125711023

欄目分類
最近更新