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 領域中...