SV--过程语句与并发进程

a: 阻塞语句=,非阻塞语句<=,自加自减++、--,过程连续复制语句assign、deassign、force、deposit、release

b: if……else、case、casex、casez、

c: for、foreach、while、do……while、repeat、forever

d: break、continue、return、return(statement)

e: fork……join/join_any/join_none:并发结构

    mailbox:实现进程通信

    semaphore实现进程的互斥与仲裁

    event:实现进程的同步

f: 需要知道的概念:父进程与子进程、fork和begin名、进程与变量(静态和动态)、disable(名或fork)、wait fork。

  maibox内置函数:new、put、get或peek、try_put、try_get或try_peek、num、生产进程和客户进程、客户进程可以挂起、参数化。

  semaphore内置:new、put、get、try_get。key

  event:->、->>、@、wait、事件触发、事件触发状态。

 

1: case:做全等比较(===),而非==。

              casex:case表达式中的所有x值不参与比较。

              casez:case表达式中的所有的x和z都不参与比较。

    priority/unique 修饰case。

2: break:跳出本层循环。

       continue:调到本次循环尾部,开始下一次循环。

       return:退出一个任务或void函数。

       return(expression):退出一个函数并返回函数值。

3:fork……join/join_any/join_none

              join:表示fork内所有进程都结束后,跳出fork主进程。

              join_any:表示任一子进程结束,都跳出主进程,子进程没结束的继续执行。

              join_none:刚进子进程便跳出主进程,子进程继续执行。

       fork表示主进程、fork内部的程序称为子进程,可以用begin/end。

   代码:fork:aaa或者begin:bbb,表示fork名为aaa,begin名为bbb。

  for循环中有fork/join_none时,SV会先做for,最后做fork,所以最后执行的子进程的变量可能为一样,所以需要将变量定义为automatic。即SV会先执行循环体,将子进程展开后,在启动并执行。

  disable可以中止特定块的进程;disable fork仅中止fork块的进程,中止所有子进程。

  wait fork表示等到所有的fork的主进程和子进程都执行完毕后,再执行之后的语句。

4:mailbox

       可以理解为FIFO,空时读和满时写都会阻塞。try_*表示非阻塞,此外,get为取走,peek为复制走。

       如果为空时,去读,会挂起,直到有数据写入。

       new时,传参缺省或为0时,表示此mailbox是无边界的。传参表mailbox深度。new返回句柄,传参必须为正,负时会导致不确定后果。

       try_put,如果放入了,函数返回1,否则返回0。try_get,拿走了,返回1,数据类型不匹配,返回负1,空的返回0。try_peek类似。

       num得到此mailbox内的数据的个数。

       申明时,默认的mailbox无类型,可以接收各种数据,也可以申明是指定需要传输的数据类型,方便编译器发现类型不匹配。

5:semaphore

       key的概念。

       new时,传参缺省值为0,传参表示key的个数。

       put传参表示放回key的个数,缺省值1.

       get传参表示获得key的个数,缺省值1,不存在指定数目key时,进程会阻塞到对应key数量的出现。

       try_get无阻塞的获得指定数目的key,存在则返回1,否则返回0。

6:event

       wait(event.triggered):等事件触发状态,可看成状态触发

       @:事件触发,可看成沿触发

猜你喜欢

转载自www.cnblogs.com/superany/p/12218177.html
今日推荐