SystemVerilog語言簡介 四

2021-06-15 22:49:16 字數 3396 閱讀 6099

23.

動態過程

verilog

通過使用

fork-jion

提供了一種靜態的併發過程。每乙個分支都是乙個分離的、並行的過程。

fork-jion

中任何語句的執行必須在組內的每乙個過程完成後才會執行。例如:

initial begin

fork

send_packet_task (1, 255, 0);

send_packet_task (7, 128, 5);

watch_result_task (1, 255, 0);

watch_result_task (7, 128, 5);

jion

// 所有的任務必須完成後才會到達這裡

endsystemverilog

通過process

關鍵字加入了乙個新的、動態的過程。它為乙個過程產生分支,然後繼續執行而無需等待其他過程完成。過程不會阻塞過程或任務內的語句執行。這種方式能夠建模多執行緒的過程。例如:

initial begin

process

send_packet_task (1, 255, 0);

process

send_packet_task (7, 128, 5);

process

watch_result_task (1, 255, 0);

process

watch_result_task (7, 128, 5);

end

// 所有的過程並行執行

24.

任務和函式增強

systemverilog

為verilog

的任務和函式作了幾個增強。

l靜態和自動的儲存

預設情況下,在

verilog

任務或函式內的所有儲存都是靜態的。

verilog-2001

允許將任務和函式宣告成自動的。在

systemverilog

中:(1).

在乙個靜態任務和函式內的特定資料可以顯式地宣告成自動的。宣告成自動的資料在塊中具有完整的生命週期,並且在任務和函式呼叫的入口處初始化;

(2).

在乙個自動的任務或函式中的特定資料可以顯式地宣告成靜態的。自動的任務或函式中宣告成靜態的資料在乙個塊的本地範圍內具有靜態的生命週期。

l從任何點返回

verilog

在乙個任務或函式中執行到

endtask

或endfunction

關鍵字的時候返回。函式的返回值是給函式名賦的最後乙個值。

systemverilog

加入了乙個

return

關鍵字,使用這個關鍵字,乙個任務或函式可以在任何點上返回。

l多語句

verilog

要求乙個任務或函式只具有乙個語句或語句塊。多條語句必須組合到乙個單一的

begin-end

或fork-jion

塊中。systemverilog

去除了這種限制。因此,多條語句可以在乙個任務或函式中列出而無需使用的

begin-end

或fork-jion

。每有分組的語句就像在

begin-end

中一樣順序執行。我們還可以產生乙個沒有語句的任務或函式定義。

lvoid函式

verilog

要求乙個函式具有乙個返回值,函式的呼叫接收這個返回值。

systemverilog

加入了乙個

void

資料型別,這個資料型別可以作為乙個函式的返回值型別。

void

函式可以像

verilog

任務一樣進行呼叫,而無需接收乙個返回值。

void

函式和任務的差別在於函式存在幾個限制,例如沒有時間控制等。

l函式的輸入和輸出

verilog

標準要求乙個函式至少具有乙個輸入並且函式只能具有輸入。

systemverilog

去除了這些限制。函式可以具有任意數目的輸入、輸出以及輸入輸出,也可以什麼也沒有。

25.

連續賦值的增強

在verilog

中,連續賦值語句的左側只能是線網型別,例如

wire

。連續賦值語句被認為是線網的驅動源,而線網可以擁有任意資料的驅動源。

systemverilog

允許除reg

型別以外的任何資料型別用於連續賦值語句的左側。與線網不同,所有其它資料型別被限制為只能有乙個連續賦值語句驅動。為相同的變數混合使用連續賦值語句和過程賦值語句是不被允許的。

26. $bit

系統函式

在verilog

中沒有類似於

c語言中

sizeof

的函式。

systemverilog

加入乙個新的

$bit

內建函式。這個函式返回儲存乙個值所需的硬體位的數目(乙個四態值要求乙個硬體位),這個函式還可以用來確定乙個結構體所代表的硬體位的數目。

27. `define

的增強

systemverilog

增強了`define

編譯器指令的能力以便支援將字串作為巨集的引數。巨集的文字字串中可以包含乙個隔離的引號,它的前面必須具有乙個反勾號(

`」),這就允許字串中包含巨集引數。巨集文本可以在行的尾部包含乙個反斜槓(''

)來表示在下一行繼續。如果巨集文本字串中包含反斜槓,則反斜槓應該被放在兩個反勾號之間,這樣它就不會被認為是

verilog

轉義識別符號的開始。巨集文本字串還可以包含雙反勾號(

``),它允許識別符號能夠從引數中構建。這些增強使得

`define

指令更加靈活。例如:

`include

指令後可以緊跟乙個巨集名字來替代乙個字串。

`define

f1 「../project_top/opcode_defines」

`include

`f1

28.

狀態機建模

systemverilog

允許在更高的抽象層次上對狀態機建模。這些結構包括:

l列舉型別

l乙個特殊的

state

資料型別;

l乙個遷移語句

l乙個遷移操作符

29. 斷言

systemverilog

中加入了斷言的功能來改善系統的驗證過程。

30. 結論

systemverilog

為verilog-2001

標準提供了一系列的擴充套件。這些擴充套件使得大型設計的建模和驗證更加容

SystemVerilog語言簡介 二

6.使用者定義的型別 verilog不允許使用者定義新的資料型別。systemverilog通過使用typedef提供了一種方法來定義新的資料型別,這一點與c語言類似。使用者定義的型別可以與其它資料型別一樣地使用在宣告當中。例如 typedef unsigned int uint uint a,b ...

(35)SystemVerilog語言編寫呼吸燈

1 章節目錄 2 fpga簡介 3 systemverilog簡介 4 systemverilog語言編寫呼吸燈 5 本節結束 fpga field programmable gate array 是在pal gal等可程式設計器件的基礎上進一步發展的產物。它是作為專用積體電路 asic 領域中的一...

9 SystemVerilog語言編寫SPI接收

1 章節目錄 2 fpga簡介 3 systemverilog簡介 4 systemverilog語言編寫spi接收 5 本節結束 fpga field programmable gate array 是在pal gal等可程式設計器件的基礎上進一步發展的產物。它是作為專用積體電路 asic 領域中...