閱讀774 返回首頁    go 阿裏雲 go 技術社區[雲棲]


SystemVerilog語言簡介(三)

15. 強製類型轉換

 

Verilog不能將一個值強製轉換成不同的數據類型。SystemVerilog通過使用'操作符提供了數據類型的強製轉換功能。這種強製轉換可以轉換成任意類型,包括用戶定義的類型。例如:

 

 

int' (2.0 * 3.0) // 將結果轉換為int類型

 

mytype' (foo) // foo轉換為mytype類型

 

 

 

一個值還可以通過在強製轉換操作符前指定一個10進製數來轉換成不同的向量寬度,例如:

 

17' (x - 2) // 將結果轉換為17位寬度

 

 

也可以將結果轉換成有符號值,例如:

 

 

signed' (x) // x轉換為有符號值

 

16. 操作符

 

Verilog沒有C語言的遞增(++)和遞減(--)操作符。而SystemVerilog加入了幾個新的操作符:

 

l         ++和--:遞增和遞減操作符;

 

l         +=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、<<<=和>>>=賦值操作符;

 

17. 唯一性和優先級決定語句

 

在Verilog中,如果沒有遵循嚴格的編碼風格,它的if-elsecase語句會在RTL仿真和RTL綜合間具有不一致的結果。如果沒有正確使用full_caseparallel_case綜合指令還會引起一些其它的錯誤。

 

SystemVerilog能夠顯式地指明什麼時候一條決定語句的分支是唯一的,或者什麼時候需要計算優先級。我們可以在if或case關鍵字之前使用uniquerequires關鍵字。這些關鍵字可以向仿真器、綜合編譯器、以及其它工具指示我們期望的硬件類型。工具使用這些信息來檢查ifcase語句是否正確建模了期望的邏輯。例如,如果使用unique限定了一個決定語句,那麼在不希望的case值出現的時候仿真器就能夠發布一個警告信息。

 

bit [2:0] a;

 

unique if ((a==0) || (a==1)) y = in1;

 

else if (a==2) y = in2;

 

else if (a==4) y = in3; // 3567會引起一個警告

 

 

 

priority if (a[2:1]==0) y = in1; // a01

 

else if (a[2]==0) y = in2; // a23

 

else y = in3; // 如果a為其他的值

 

 

 

unique case (a)

 

  0, 1: y = in1;

 

  2: y = in2;

 

  4: y = in3;

 

endcase // 3567會引起一個警告

 

 

 

priority casez (a)

 

  2'b00? : y = in1; // a01

 

  2'b0?? : y = in2; // a23

 

  default : y = in3; //如果a為其他的值

 

endcase

 

 

18. 底部檢測的循環

 

Verilog包含forwhilerepeat循環,這幾個循環都是在循環的起始處檢測循環條件。SystemVerilog加入了一個do-while循環,這種循環在執行語句的結尾處檢測循環條件。

 

19. 跳轉語句

 

在語句的執行過程中,C語言提供了幾種方式來跳轉到新的語句,包括:returnbreakcontinuegoto。在Verilog中除了通過使用disable語句跳轉到語句組的尾部外,沒有提供任何其它跳轉語句。使用disable語句執行中止和繼續功能要求加入塊的名字,並且會產生不直觀的代碼。SystemVerilog加入了C語言的breakcontinue關鍵字,這兩個關鍵字不要求使用塊名字。另外,SystemVerilog還加入了一個return關鍵字,它可以用來在任何執行點上退出一個任務或函數。

 

l         break:退出一個循環,與C語言相同;

 

l         continue:跳轉到一個循環的尾部,與C語言相同;

 

l         return 表達式:退出一個函數;

 

l         return:退出一個任務或void類型的函數。

 

SystemVerilog沒有包含C語言中的goto語句。

 

20. 塊名字和語句標簽

 

在Verilog中,我們可以通過在beginfork

最後更新:2017-04-03 14:53:40

  上一篇:go freerdp的android客戶端afreerdp的編譯過程
  下一篇:go 網絡子係統51_ip協議報文分片