在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SystemVerilog中的Semaphores

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 作者:芯片驗證工程師 ? 2022-12-12 09:50 ? 次閱讀

SystemVerilog中Semaphore(旗語)是一個多個進程之間同步的機制之一,這里需要同步的原因是這多個進程共享某些資源

舉一個場景:SoC中的,CPUDMA都希望去訪問相同地址的內存空間。實際的情況可能是CPU的訪問覆蓋DMA的訪問,或者相反。

簡而言之,這其中存在著沖突,這也是SystemVerilog中Semaphore的應用場景。

如果CPU訪問某個地址,CPU會先鎖住這塊地址空間,等到CPU訪問完成才會解鎖,這個互斥鎖可以通過Semaphore來實現。在CPU鎖住這個塊地址空間期間,DMA是無法訪問的。

semaphore的相關用法如下:
1、聲明一個旗語。

semaphore semaphore_name;

2、聲明旗語中互斥鎖的個數,默認是0。

function new (int keyCount = 0);

3、獲取互斥鎖,默認是1。

task get (int keyCount = 1);

4、回收互斥鎖,默認是1.

function void put (int keyCount = 1);

5、獲取互斥鎖,默認是1。和get()的區別是try_get ( )是non-blocking的。

function int try_get (int keyCount = 1);

semaphore示例:

module sema;
 bit [7:0] mem [0:3];
 int i, data;
 semaphore s1;
 
 initial begin
 s1 = new (1); //Create semaphore with 1 key
 fork
 DMA_write;
 CPU_read;
 join 
 end
 task DMA_write; 
 if (s1.try_get(1)) //non-blocking. Locks (gets)
 $display($stime,,, "DMA gets a KEY from semaphore");
 else
 wait (s1.try_get(1)); 
 //DMA writes data
 for (i=0; i < 4; i++) begin
 mem[i] = $urandom;
 $display($stime,,, "DMA WRITE[%0d] = %0d",i,mem[i]);
 end
 #5; //do something else
 s1.put(1); //DMA releases (puts) the key
 $display($stime,,, "DMA puts the KEY into semaphore");
 endtask
 
 task CPU_read;
 #0; s1.get (1); //WAIT to get the key - blocking
 $display($stime,,, "CPU gets the KEY from semaphore");
 //CPU reads data
 for (i=0; i < 4; i++) begin
 data = mem[i];
 $display($stime,,, "CPU READ[%0d] = %0d",i,data);
 end
 
 endtask
endmodule

上面的例子中有兩個并行的進程DMA_write和CPU_read。
一開始DMA拿到互斥鎖后,寫入4次。后面CPU拿到互斥鎖后,再讀取這些值。因為無法保證開始時刻DMA先拿到互斥鎖,還是CPU拿到互斥鎖,所以加上了#0

仿真log:

0 DMA gets a KEY from semaphore
 0 DMA WRITE[0] = 36
 0 DMA WRITE[1] = 129
 0 DMA WRITE[2] = 9
 0 DMA WRITE[3] = 99
 5 DMA puts the KEY into semaphore
 5 CPU gets the KEY from semaphore
 5 CPU READ[0] = 36
 5 CPU READ[1] = 129
 5 CPU READ[2] = 9
 5 CPU READ[3] = 99
 V C S S i m u l a t i o n R e p o r t

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11054

    瀏覽量

    216269
  • Verilog
    +關注

    關注

    29

    文章

    1366

    瀏覽量

    111990
  • System
    +關注

    關注

    0

    文章

    166

    瀏覽量

    37638
  • dma
    dma
    +關注

    關注

    3

    文章

    574

    瀏覽量

    102556

原文標題:SystemVerilog中的Semaphores

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    SystemVerilog的Virtual Methods

    SystemVerilog多態能夠工作的前提是父類的方法被聲明為virtual的。
    發表于 11-28 11:12 ?842次閱讀

    SystemVerilog的“const”類屬性

    SystemVerilog可以將類屬性聲明為常量,即“只讀”。目的就是希望,別人可以讀但是不能修改它的值。
    發表于 11-29 10:25 ?2329次閱讀

    SystemVerilog的聯合(union)介紹

    SystemVerilog ,聯合只是信號,可通過不同名稱和縱橫比來加以引用。
    的頭像 發表于 10-08 15:45 ?1821次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯合(union)介紹

    systemverilog學習教程

    systemverilog的一些基本語法以及和verilog語言之間的區別。
    發表于 04-01 14:24

    Semaphores_Mutexes

    Semaphores_Mutexes
    發表于 01-25 10:34

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發表于 07-22 14:12 ?20次下載

    SystemVerilog$cast的應用

    SystemVerilog casting意味著將一種數據類型轉換為另一種數據類型。在將一個變量賦值給另一個變量時,SystemVerilog要求這兩個變量具有相同的數據類型。
    的頭像 發表于 10-17 14:35 ?3327次閱讀

    SystemVerilog的操作方法

    SystemVerilog提供了幾個內置方法來支持數組搜索、排序等功能。
    的頭像 發表于 10-31 10:10 ?3445次閱讀

    SystemVerilog可以嵌套的數據結構

    SystemVerilog除了數組、隊列和關聯數組等數據結構,這些數據結構還可以嵌套。
    的頭像 發表于 11-03 09:59 ?1926次閱讀

    SystemVerilog的package

    SystemVerilog packages提供了對于許多不同數據類型的封裝,包括變量、task、function、assertion等等,以至于可以在多個module中共享。
    的頭像 發表于 11-07 09:44 ?1471次閱讀

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數據類型的集合。
    的頭像 發表于 11-07 10:18 ?2817次閱讀

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄賦值和對象復制的概念是有區別的。
    的頭像 發表于 11-21 10:32 ?1122次閱讀

    帶你了解SystemVerilog的關聯數組

    SystemVerilog,我們知道可以使用動態數組實現數組元素個數的動態分配,即隨用隨分
    的頭像 發表于 06-09 09:46 ?8256次閱讀
    帶你了解<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的關聯數組

    Systemverilog的Driving Strength講解

    systemverilog,net用于對電路連線進行建模,driving strength(驅動強度)可以讓net變量值的建模更加精確。
    的頭像 發表于 06-14 15:50 ?1993次閱讀
    <b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength講解
    主站蜘蛛池模板: 国产福利不卡一区二区三区 | 狠狠操夜夜爽 | 天天做天天爱夜夜爽 | 亚洲男人a天堂在线2184 | 啪啪小视频网站 | 日本欧洲亚洲一区在线观看 | 久久国模 | 国产福利午夜自产拍视频在线 | 四虎电影免费观看网站 | 91插插视频 | 欧美高清成人videosex | 国产资源在线视频 | 欧美30p| 啪啪黄色片| 免费人成网站在线高清 | 天天综合色天天综合色sb | 欧美天堂色 | 国产一区二区三区美女图片 | 久草丁香| 天堂tv亚洲tv日本tv欧美人tv | 男人视频网| 欧美综合一区二区三区 | yiren22亚洲综合高清一区 | videsgratis欧美另类 | 黑人黄色片 | 午夜免费小视频 | 岛国最新资源网站 | 国产精品电影一区 | 国产嫩草影院精品免费网址 | 亚洲骚片 | 免费久久精品国产片香蕉 | 青青热久久国产久精品秒播 | 亚洲成人7777 | 四虎永久免费影院 | 午夜啪啪福利视频 | 欧美啪啪精品 | 国产成人永久免费视频 | 天天躁夜夜躁狠狠躁2024 | 午夜综合网| 国产三级 在线播放 | 三级网站在线播放 |