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

    文章

    10451

    浏览量

    206582
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109312
  • System
    +关注

    关注

    0

    文章

    161

    浏览量

    36575
  • dma
    dma
    +关注

    关注

    3

    文章

    536

    浏览量

    99070

原文标题:SystemVerilog中的Semaphores

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [启芯公开课] SystemVerilog for Verification

    学快速发展,这些趋势你了解吗?SystemVerilog + VM是目前的主流,在未来也将被大量采用,这些语言和方法学,你熟练掌握了吗?对SoC芯片设计验证感兴趣的朋友,可以关注启芯工作室推出的SoC芯片
    发表于 06-10 09:25

    systemverilog--语法详解

    官方的一个systemverilog详解,很详细。推荐给打算往IC方面发展的朋友。
    发表于 06-02 09:30

    systemverilog学习教程

    systemverilog的一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    round robin 的 systemverilog 代码

    大家好,我对一个 round robin 的 systemverilog 代码有疑惑。https://www.edaplayground.com/x/2TzD代码第49和54行是怎么解析呢 ?
    发表于 03-14 19:16

    做FPGA工程师需要掌握SystemVerilog吗?

    在某大型科技公司的招聘网站上看到招聘逻辑硬件工程师需要掌握SystemVerilog语言,感觉SystemVerilog语言是用于ASIC验证的,那么做FPGA工程师有没有必要掌握SystemVerilog语言呢?
    发表于 08-02 20:30

    Semaphores_Mutexes

    Semaphores_Mutexes
    发表于 01-25 10:34

    如何在SystemVerilog为状态机的命令序列的生成建模

     我们将展示如何在SystemVerilog为状态机的命令序列的生成建模,并且我们将看到它是如何实现更高效的建模,以及实现更好的测试生成。​
    发表于 01-01 06:05

    使用SystemVerilog来简化FPGA接口的连接方式

    FPGA接口的连接方式。    也许很多FPGA工程师对SystemVerilog并不是很了解,因为以前的FPGA开发工具是不支持SystemVerilog的,导致大家都是用VHDL或者Verilog来
    发表于 01-08 17:23

    SystemVerilog有哪些标准?

    SystemVerilog有哪些标准?
    发表于 06-21 08:09

    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的正式验证和混合验证

    手册的这一部分探讨了使用SystemVerilog进行验证,然后查看了使用SystemVerilog的优点和缺点。
    发表于 03-29 10:32 23次下载

    SystemVerilog中的struct

    SystemVerilog“struct”表示相同或不同数据类型的集合。
    的头像 发表于 11-07 10:18 1923次阅读

    SystemVerilog在硬件设计部分有哪些优势

    谈到SystemVerilog,很多工程师都认为SystemVerilog仅仅是一门验证语言,事实上不只如此。传统的Verilog和VHDL被称为HDL(Hardware Description
    的头像 发表于 10-19 11:19 458次阅读
    <b class='flag-5'>SystemVerilog</b>在硬件设计部分有哪些优势

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的头像 发表于 11-22 09:17 320次阅读
    分享一些<b class='flag-5'>SystemVerilog</b>的coding  guideline