# [[DV筆記] Systemverilog - Mailbox](/LnkKNLLcS76GG7SLUYt_mA) ## 前言 Mailbox 對於整個驗證環境來說非常重要,UVM中的TLM (transaction level modeling)也是建立在 Mailbox 上去實現的,Mailbox 主要負責不同 process 中的 data transfer,也可以當作不同task/function或是UVM中各component 之間的 handshake機制 ## 語法 Mailbox 又分為 可以放各種datatype的 Gneric Mailbox 以及只能放特定 datatype 的 Parameterized Mailbox ### Generic Mailbox 這類的 mailbox 可以放各種datatype,在使用上來說非常方便,只是如果遇到需要限制特定 datatype 的傳輸的時候,使用這類型的 mailbox 就不能去避免 bug 出現 ``` mailbox mbx = new(); //表示這個 mailbox 沒有大小的限制 mailbox mbx_limited = new(5); // 表示 mbx_limited 最多只能放5個 datatype //mailbox function and method mbx.put(1); //放入 int 1; int data; mbx.get(data); //data = 1, 且 mbx中的 1 被 remove mbx.try_put(2); // 這是 nonblokcing 的,如果 mbx 沒有滿,就會放入1,並且 return 大於0整數,如果mbx 已經滿了,則會return 0 mbx.try_get(data);// 這是 nonblokcing 的,如果 mbx 不是空,data=2,並且 return 大於0整數,如果mbx 是空的,則會return 0 mbx.peek(data); // 跟 get 類似,只是不會 remove mailbox 裡面的 data mbx.try_peek(data) // 這是 nonblocking的,如果mailbox 是空的,會 return 0, 如果不是空的會 copy 到 data中,但不會 remove mailbox 中的 data ``` ### Parameterized Mailbox 會限制放入mailbox 的 datatype ``` mailbox #(int) mbx=new(); mbx.put("a"); //會報錯! mbx.put(100); //可以 ``` ## 結語 mailbox 大概是個簡單的概念,不過卻是十分實用的,後來也廣泛應用在UVM中 data transfer 的應用中
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up