簡介:SystemVerilog引進了一些新的數據類型,具有以下的優點:(1)雙狀態數據類型,更好的性能,更低的內存消耗;(2)隊列、動態和關聯數組,減少內存消耗,自帶搜索和分類功能。(3)類和結構:支持抽象數據結構。(4)聯合和合并結構:允許對同一數據有多種視圖。(5)字符串:支持內建的字符序列。(6)枚舉類型:方便代碼編寫,增加可讀性。
1.1內建數據類型
Verilog-1995有兩種基本數據類型:變量和線網。變量可以是reg,integer,time與real。其中integer是32比特的有符號數。所有的存儲都是靜態的,意味著所有變量在整個仿真過程中都是存活的,子程序不能通過堆棧來保存形式參數和局部變量。Verilog-2001允許使用者在靜態和動態存儲之間切換,例如堆棧。
1.1.1邏輯類型(logic)
SystemVerilog對經典的reg數據類型進行改進,使得它除了作為一個變量以外,還可以被連續賦值,門單元和模塊所驅動,命名為logic。任何使用線網的地方都可以使用logic類型,但是要求logic類型不能有多個結構性驅動,例如雙向總線,必須使用wire類型。
module logic_data_type(input logic rst_h);parameter CYCLE = 20;logic q,q_l,d,clk,rst_l;initial beginclk = 0;forever #(CYCLE/2) clk = ~clk;endassign rst_l = ~rst_h;not n1(q_1, q);my_dff(q,d,clk,rst_l);endendmodule
1.1.2雙狀態數據類型
SystemVerilog引入的雙狀態數據類型有利于提高仿真器的性能并減少內存的使用量。最簡單的雙狀態數據類型是bit,它是無符號的。雙狀態數據類型:bit,int,byte,shortint,longint,real。四狀態數據類型:integer,time。無符號數據類型:bit,time。有符號數據類型:int,byte,int,integer。可以使用unsigned或者signed改變數據的符號類型。
注意:在把雙狀態變量連接到被測設計時,尤其時被測設計的輸出時務必要小心,如果被測設計試圖產生X或Z,這些值會被轉換為0或1.使用$isunknown操作符,可以在表達式任意位出現X或Z時返回1.
?if ($isunknown(iport) == 1) begin$display("@%0t:4-state value detected on iport %b", $time, iport);end