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(