ic验证笔记-20天挑战day8

这篇笔记探讨了Verilog中的线程使用,包括initial和always线程的区别,以及如何降低仿真时的内存负载。线程控制通过wait fork和disable实现,线程间通信涉及事件触发、信号同步及semaphore和mailbox的使用。详细阐述了event、semaphore和mailbox在多线程同步和数据交换中的作用。
摘要由CSDN通过智能技术生成

1.线程的使用

module(模块)之间需要通信和同步,各个模块是独立运行的线程,通过相邻信号的变化来完成信号之间的线程同步。

initial和always可以视作线程,initial线程不一定会结束,always一定不会结束,会一直占用资源。

线程被触发

需要降低仿真时的内存负载措施:

降低模块之间的信号跳变频率

只在必要的时候创建软件对象

在不需要时钟的时候关闭时钟

在数据带宽需求低的时候降低时钟频率(频率引发产生事件的多少)

begin

end //顺序运行

fork

join //并发运行

2.线程控制 

fork join //全部执行完,才会运行之后的语句

fork join_any//只要有任何子线程结束,就会退出

fork join_none //点火,不需要执行线程,就可以结束

当程序中的initial块全部执行完毕,仿真器就退出了,希望等待所有线程执行完毕,再退出结束,可以使用 wait fork语句来等待所有子线程结束

fork: fork1

join

disable fork1//停止单线程

disable也会关闭线程衍生的其他线程

3.线程间的通信

测试平台的所有线程都需要同步并交换数据,称为线程通信

一个线程需要等待另一个

多个线程可能同时访问同一个资源

线程之间可能需要交换数据

@操作符,边沿敏感,总是阻塞着的,等待事件的变化

其他线程通过->来触发事件

event.triggered()

使用 wait(e1.triggered())来替代边沿敏感的阻塞语句

module road;

initial begin 

        automatic car byd = new(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值