1.topics
threads :线程
semaphores:信号量
2.threads
verilog里面:begin…end(顺序执行) ,fork…join(并发执行)可以构成线程。
fork…join:三个线程同时跑,同时结束(取决于耗时最长的线程)
fork…join_any:三个线程同时跑,任何一个线程跑完了就可以跑下面一个线程
fork…join_none:出现的三个线程当做子线程,join_none当做父线程,父线程和子线程是同时跑的,并且子线程是不会阻塞父线程的执行。
fork…join:只有当所有的子线程都完成才会执行父线程;可以在内部定义begin…end,每一个语句里必须包含时间更新,否则会出错,且begin…end并行执行。
spawned :产生
子线程和父线程是并发执行的。
父线程先执行,到子线程并发执行,子线程跑完之后执行父线程。
fork…join里面的那个begin…end按顺序执行。
子线程执行子线程的,父线程执行父线程的。
wait…fork:等待所有子线程执行完成。
disbale…fork:有一个线程跑完之后,其余的线程咔嚓掉直接结束。
2.内部通信
2.1event
->(阻塞)或->>(非阻塞)是触发事件符号。
wait_order:等待顺序触发,一般用来看状态机。
事件是需要声明的,null是空事件。
事件是可以比较的。
2.2旗语
主要用在一些共享资源的分配上。
semaphores其实就是一个内建的class,创建semaphores用new函数。
声明:semaphores seTx。
旗语的作用举例:一个教室有三个老师需要去上课,但是一次只能一个人上,因此钥匙一次只能给一个老师,可以用get()取钥匙,用put()放回钥匙。
2.3邮箱
数据传送的时候,有的需要传的快一点,有的需要传的慢一点,所以需要先存放。mailboxes具体讲就是用来存放数据的,处理数据的,类似于队列/FIFO。
类似邮箱的实际作用,很多事情首先存放在邮箱里,邮递员会将信件送给对应人。
put(),get(),num()。
program 后面必须加上automatic。
根据握手信息进行非同步线程的通信。