隊列提供了許多內置方法。如下表所示:
module dq; bit[7:0] dq1[$]; // A unbounded queue of unsigned 8-bit int q3[$:5] = {0,1,2,3,4,5}; //bounded queue int a; initial begin a = dq1.size( ); //empty queue $display ($stime,,, "empty dq1 size = %0d",a); dq1[0] = 0; dq1[1] = 1; dq1[2] = 2; $display ($stime,,, "dq1 SIZE = %0d",dq1.size( )); $display ($stime,,, "dq1=",dq1); dq1.insert (3,3); //index, value $display($stime,,, "After Insert dq1 SIZE = %0d",dq1.size( )); $display ($stime,,, "dq1=",dq1); dq1.delete (3); //index $display ($stime,,, "After delete dq1 SIZE = %0d",dq1.size( )); $display ($stime,,, "dq1=",dq1); a = dq1.pop_front( ); //pop frst entry of the queue $display ($stime,,, "dq1 pop front = %0d ",a); $display ($stime,,, "dq1=",dq1); a = dq1.pop_back( ); //pop last entry of the queue $display ($stime,,, "dq1 pop back = %0d ",a); $display ($stime,,, "dq1=",dq1); //push the frst entry of the queue with '4' dq1.push_front(4); $display ($stime,,, "push front dq1=",dq1); //push the last entry of the queue with '5' dq1.push_back(5); $display ($stime,,, "push back dq1=",dq1); q3_size = q3.size + 5; //size > q3 size //underfow : pop from index 6,7,8,9,10 – run time Warning for (int i = 0; i < q3_size; i++) $display($stime,,,"q3[%0d] = %0d", i, q3.pop_front( ) ); end //Solution for underfow - check for size before pop while (q3.size( ) > 0) $display($stime,,,"q3 = %0d", q3.pop_front ( )); //overfow : push over the bound limit – run time Warning for (int i = 0; i < q3_size; i++) begin q3.push_front( i ); $display($stime,,,"q3[%0d] :: q3 = %p", i , q3); end endmodule
仿真log:
0 empty dq1 size = 0 //empty queue size 0 dq1 SIZE = 3 //size after providing values to frst three elements 0 dq1='{'h0, 'h1, 'h2} //assigned frst three elements 0 After Insert dq1 SIZE = 4 //Insert value 3 at index 3. 0 dq1='{'h0, 'h1, 'h2, 'h3} //shows inserted value 0 After delete dq1 SIZE = 3 //delete value at index 3 0 dq1='{'h0, 'h1, 'h2} //shows dq1 after deletion 0 dq1 pop front = 0 //pop the front index of the queue 0 dq1='{'h1, 'h2} //dq1 after element at index 0 is gone (popped) 0 dq1 pop back = 2 //pop the back (last) index of the queue 0 dq1='{'h1} //the last index/value is gone 0 push front dq1='{'h4, 'h1} //push at the front of the queue (value 4) 0 push back dq1='{'h4, 'h1, 'h5} //push at the end of the queue (value 5)
上面我們通過隊列dq1展示了push和pop的行為。然后我們聲明了有界隊列q3,最大的index限制是5,所以這個隊列最大的size是6.
將隊列q3初始化為{0,1,2,3,4,5},然后pop超過6次。
q3_size = q3.size + 5; //size > q3 size //underfow : pop from index 6,7,8,9,10 – run time Warning //Queue 'q3' is empty after index 5. for (int i = 0; i < q3_size; i++) $display($stime,,,"q3[%0d] = %0d", i, q3.pop_front( ) ); end
這個時候仿真器會上報warnnin:
# RUNTIME: Warning: RUNTIME_0219 testbench.sv (54): Cannot pop from an empty queue.
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
仿真器
+關注
關注
14文章
1018瀏覽量
83766 -
Verilog
+關注
關注
28文章
1351瀏覽量
110124 -
System
+關注
關注
0文章
165瀏覽量
36970
原文標題:SystemVerilog中的Queue Methods
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
SystemVerilog中的“const”類屬性
SystemVerilog中可以將類屬性聲明為常量,即“只讀”。目的就是希望,別人可以讀但是不能修改它的值。
發表于 11-29 10:25
?2147次閱讀
Some Programming Methods for I
Some Programming Methods for Increasing the Operating Speed of PLC Program
Absbad With Mitsubishi
發表于 01-19 12:42
?15次下載
SystemVerilog的斷言手冊
SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
發表于 07-22 14:12
?20次下載
ThreadX(九)------消息隊列Queue
消息隊列QueueAPItx_queue_createtx_queue_deletex_queue_flushtx_queue_front_sendtx_queue_receivetx_queue_send_notifyAPItx_queue_createtx_queue_deletetx_queue_flushtx_qu
發表于 12-28 19:35
?2次下載
SystemVerilog中$cast的應用
SystemVerilog casting意味著將一種數據類型轉換為另一種數據類型。在將一個變量賦值給另一個變量時,SystemVerilog要求這兩個變量具有相同的數據類型。
SystemVerilog中的Semaphores
SystemVerilog中Semaphore(旗語)是一個多個進程之間同步的機制之一,這里需要同步的原因是這多個進程共享某些資源。
Systemverilog中的Driving Strength講解
在systemverilog中,net用于對電路中連線進行建模,driving strength(驅動強度)可以讓net變量值的建模更加精確。
評論