0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

System Verilog中的Mailboxes

芯片驗(yàn)證工程師 ? 來源:芯片驗(yàn)證工程師 ? 作者:芯片驗(yàn)證工程師 ? 2022-12-13 09:24 ? 次閱讀

Mailboxes是進(jìn)程間通信的另一種方式,但是比semaphores更強(qiáng)大,因?yàn)?strong>Mailboxes可以在兩個(gè)進(jìn)程之間交換消息。

數(shù)據(jù)可以由一個(gè)進(jìn)程發(fā)送,由另一個(gè)進(jìn)程獲取,顧名思義就像是郵箱一樣。

獲取郵箱中信件的方式有兩種:
1、一直等待信件的到來(blocking
2、如果沒有信件就先去干其他事情,過一會(huì)兒再來看是否信件到了。(non-blocking

從Mailboxes中可以存放信件規(guī)模的角度,Mailboxes可以大致分為bounded Mailboxesunbounded Mailboxes

bounded Mailboxes就是指Mailboxes中能夠容納有限數(shù)量的信件,如果在Mailboxes滿時(shí)寫入會(huì)阻塞住,直到不滿。unbounded Mailboxes可以容納無限數(shù)量的信件。

Mailboxes也可以聲明為只能存放某一類的信件。默認(rèn)情況下,Mailboxes是無類型的,這意味著Mailboxes可以發(fā)送和接收任何不同類型的信件。

郵箱聲明的語法是:

mailbox mbox;

Mailbox是一個(gè)SystemVerilog內(nèi)置類,自然也提供了許多內(nèi)置的方法:

1、new ()
創(chuàng)建一個(gè)mailbox,函數(shù)原型是:

functionnew()(intbound=0);

會(huì)返回一個(gè)mailbox句柄,默認(rèn)bound是0,表示unbounded mailbox。

2、num ()
返回mailbox中信件的個(gè)數(shù),函數(shù)原型是:

functionintnum();

3、put ()
blocking put(按照FIFO順序),如果mailbox滿了會(huì)阻塞進(jìn)程,函數(shù)原型是:

task put (singular message)

4、try_put ( )
non-blocking put(按照FIFO順序),如果mailbox滿了不會(huì)阻塞進(jìn)程,會(huì)返回值0。函數(shù)原型是:

functiontry_put(singularmessage);

5、get ()
blocking get(按照FIFO順序),如果mailbox是空的,會(huì)一直blocking進(jìn)程。函數(shù)原型是:

taskget(refsingularmessage);

6、try_get ( )
non-blocking get(按照FIFO順序),如果mailbox是空的,不會(huì)阻塞進(jìn)程,會(huì)返回值0。函數(shù)原型是:

function int try_get( ) (ref singular expression)

7、peek ( )
peek()不同于get(),peek會(huì)復(fù)制mailbox中的信件,而不會(huì)將信件從mailbox中刪除。函數(shù)原型是:

taskpeek(refsingularmessage);

如果mailbox是空的,會(huì)一直block進(jìn)程。
8、try_peek (),不過多言說,non-block peek。函數(shù)原型是:

function int try_peek ( ref singular expression)

示例:

module mB;
 bit [7:0] mem [0:3];
 int i, j, data;
 mailbox mbox; //declare a mailbox
 
 initial begin
 mbox = new (4); //create a bounded mailbox
 
 fork
 DMA_write;
 CPU_read; 
 join 
 end
 
 task DMA_write; 
 $display($stime,,, "DMA puts Mem Data into mbox");
 for (i=0; i < 4; i++) begin
 mem[i] = $urandom;
 $display($stime,,, "DMA WRITE[%0d] = %0d",i,mem[i]);
 mbox.put(mem[i]); //put data into the mailbox
 end
 endtask
 
 task CPU_read;
 $display($stime,,, "CPU retrieves Mem Data from mbox");
 for (j=0; j < 4; j++) begin
 mbox.get(data); //retrieve data from the mailbox
 $display($stime,,, "CPU READ[%0d] = %0d",i,data);
 end 
 endtask
 
endmodule

仿真log:

 0 DMA puts Mem Data into mbox
 0 DMA WRITE[0] = 36
 0 DMA WRITE[1] = 129
 0 DMA WRITE[2] = 9
 0 DMA WRITE[3] = 99
 0 CPU retrieves Mem Data from mbox
 0 CPU READ[0] = 36
 0 CPU READ[1] = 129
 0 CPU READ[2] = 9
 0 CPU READ[3] = 99
 V C S S i m u l a t i o n R e p o r t

上面這個(gè)例子首先聲明了一個(gè)mailbox “mbox”,然后例化深度為4。

后面兩個(gè)并行的進(jìn)程“DMA_write”和“CPU_read” 。從打印log來看并不存在兩個(gè)進(jìn)程之間的沖突。

參數(shù)化Mailbox

如果希望在mailbox put和get時(shí)進(jìn)行類型檢查,可以顯式地聲明mailbox的類型。

module pMailbox; 
 typedef mailbox #(string) string_mbox;
 string s;
 
 initial begin
 static string_mbox SMbox = new;
 s = "hi";
 SMbox.put( s );
 $display("String 'put' is %s", s);
 SMbox.get( s ); 
 $display("String 'get' is %s", s);
 end
endmodule

仿真log:

String 'put' is hi
String 'get' is hi

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1339

    瀏覽量

    109889
  • System
    +關(guān)注

    關(guān)注

    0

    文章

    164

    瀏覽量

    36812
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    200

    瀏覽量

    13933

原文標(biāo)題:System Verilog中的Mailboxes

文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Modelsim XE是否支持System Verilog

    information:-1.Does itsupport System verilog forverification?2. Code coverage support.3.Assertion support.Whichversionof Modelsim XE su
    發(fā)表于 11-27 14:20

    System Verilog常見問題及語言參考手冊(cè)規(guī)范

    本文討論了一些System Verilog問題以及相關(guān)的SystemVerilog 語言參考手冊(cè)規(guī)范。正確理解這些規(guī)格將有助于System Verilog用戶避免意外的模擬結(jié)果。
    發(fā)表于 12-11 07:19

    System Verilog問題和語言參考手冊(cè)規(guī)范

    本文討論了一些System Verilog問題以及相關(guān)的SystemVerilog 語言參考手冊(cè)規(guī)范。正確理解這些規(guī)格將有助于System Verilog用戶避免意外的模擬結(jié)果。
    發(fā)表于 12-24 07:07

    求大佬分享一些System Verilog的學(xué)習(xí)經(jīng)驗(yàn)

    求大佬分享一些System Verilog的學(xué)習(xí)經(jīng)驗(yàn)
    發(fā)表于 06-21 06:29

    Verilog Digital System Design

    This book is on the IEEE Standard Hardware Description Languagebased on the Verilog® Hardware
    發(fā)表于 07-23 08:59 ?0次下載
    <b class='flag-5'>Verilog</b> Digital <b class='flag-5'>System</b> Design

    VHDL,Verilog,System verilog比較

    本文簡(jiǎn)單討論并總結(jié)了VHDL、Verilog,System verilog 這三語言的各自特點(diǎn)和區(qū)別 As the number of enhancements
    發(fā)表于 01-17 11:32 ?0次下載

    基于System Verilog的隨機(jī)化激勵(lì)

    基于System Verilog的隨機(jī)化激勵(lì)
    發(fā)表于 10-31 09:25 ?9次下載
    基于<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b><b class='flag-5'>中</b>的隨機(jī)化激勵(lì)

    基于System Verilog的可重用驗(yàn)證平臺(tái)設(shè)計(jì)及驗(yàn)證結(jié)果分析

    采用System Verilog語言設(shè)計(jì)了一種具有層次化結(jié)構(gòu)的可重用驗(yàn)證平臺(tái),該平臺(tái)能夠產(chǎn)生各種隨機(jī)、定向、錯(cuò)誤測(cè)試向量,并提供功能覆蓋率計(jì)算。將驗(yàn)證平臺(tái)在Synopsys公司的VCS仿真工具上運(yùn)行
    發(fā)表于 01-12 11:28 ?2609次閱讀
    基于<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>的可重用驗(yàn)證平臺(tái)設(shè)計(jì)及驗(yàn)證結(jié)果分析

    FPGA CPLDVerilog設(shè)計(jì)小技巧

    FPGA CPLDVerilog設(shè)計(jì)小技巧(肇慶理士電源技術(shù)有限)-FPGA CPLDVerilog設(shè)計(jì)小技巧? ? ? ? ? ? ? ? ?
    發(fā)表于 09-18 16:49 ?37次下載
    FPGA CPLD<b class='flag-5'>中</b>的<b class='flag-5'>Verilog</b>設(shè)計(jì)小技巧

    System Verilogverilog的對(duì)比

    SystemVerilog語言簡(jiǎn)介 SystemVerilog是一種硬件描述和驗(yàn)證語言(HDVL),它基于IEEE1364-2001 Verilog硬件描述語言(HDL),并對(duì)其進(jìn)行了擴(kuò)展,包括擴(kuò)充
    的頭像 發(fā)表于 09-28 17:12 ?3386次閱讀

    學(xué)會(huì)這些System Verilog方法,芯片驗(yàn)證入門沒問題

    一個(gè)掌握Verilog語言的工程師初次看SystemVerilog都會(huì)有這樣的感受,這就是Verilog啊,很容易啊,So easy啊。沒錯(cuò),確實(shí)是這樣,System Verilog
    的頭像 發(fā)表于 12-09 15:08 ?3412次閱讀

    淺談System Verilog的DPI機(jī)制

    System Verilog(SV)把其他編程語言統(tǒng)一成為外語,F(xiàn)oreign Programming Language(FPL)。
    的頭像 發(fā)表于 05-23 15:39 ?1859次閱讀
    淺談<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>的DPI機(jī)制

    談?wù)?b class='flag-5'>system Verilog 和C的交互

    PLI全稱 Program Language Interface,程序員可以通過PLI在verilog調(diào)用C函數(shù),這種訪問是雙向的。這些用戶定義的系統(tǒng)任務(wù)和函數(shù)的名稱必須以美元符號(hào)"$" 開頭。大家用得比較多的PLI函數(shù)有$display,$finish等。
    發(fā)表于 05-31 09:59 ?622次閱讀
    談?wù)?b class='flag-5'>system</b> <b class='flag-5'>Verilog</b> 和C的交互

    談?wù)?b class='flag-5'>Verilog/System Verilog和C的幾種交互模式

    PLI全稱 Program Language Interface,程序員可以通過PLI在verilog調(diào)用C函數(shù),這種訪問是雙向的。
    的頭像 發(fā)表于 06-01 17:32 ?1408次閱讀
    談?wù)?b class='flag-5'>Verilog</b>/<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>和C的幾種交互模式

    System Verilog的概念以及與Verilog的對(duì)比

    的端口定義完成后,我們也很難改變端口的配置。 另外,一個(gè)設(shè)計(jì)的許多模塊往往具有相同的端口定義,在Verilog,我們必須在每個(gè)模塊中進(jìn)行相同的定義,這為我們?cè)黾恿藷o謂的工作量。
    的頭像 發(fā)表于 06-12 10:05 ?1337次閱讀