【SystemVerilog基础】7.线程

本文详细介绍了Verilog中的线程概念,包括硬件逻辑块间的通信、软件仿真中的线程同步以及线程控制。重点讲解了begin-end、fork-join结构,以及线程的启动、暂停和终止。此外,还阐述了线程间的通信机制,如事件、旗语、信箱等同步手段,强调了在多线程环境中如何实现同步和数据交换。

线程使用

对于硬件的过程块,它们之间的通信可理解为不同逻辑/时序块之间的通信或者同步,是通过信号的变化来完成的。Verilog通过always, initial过程语句块和信号数据连接实现进程间通信。

对于软件,仿真中的各个模块首先是独立运行的线程(thread),模块(线程)在仿真一开始便并行执行,除了每个线程会依照自身内部产生的事件来触发过程语句块之外,也同时依靠相邻模块间的信号变化来完成模块之间的线程同步。

1、什么是线程

线程即独立运行的程序。 线程需要被触发,可以结束或者不结束。在module中的initial和always, 都可以看做独立的线程,它会在仿真0时刻开始, 而选择结束或者不结束。

硬件中的每一个always语句块,可以看成是独立运行的线程,而这些线程会一直占用仿真资源, 因为它们并不会结束。 软件测试平台中的验证环境都由initial语句块去创建,而在仿真过程中,验证环境中的对象可以创建和销毁, 因此软件测试端的资源占用是动态的。

2、begin-end和fork-join

begin-end中的语句是以顺序方式执行,而fork-join中的语句则是并发方式执行,除此之外还有fork-join_any和fork-join_none。

3、子线程和父线程

线程的执行轨迹是呈结构的, 即任何的线程都应该有父线程。 父线程可以开辟若干个子线程, 父线程可以暂停或者终子线程。 当子线程终止时,父线程可以继续执行。当父线程终止时 其所开辟的所有子线程都应当会终止。

线程控制

1、fork并行线程语句块

fork-join:所有的子线程全部结束,fork-join才会退出。

fork-join_any:任何一个线程结束,fork-join_any就会退出,但是剩下的还是会执行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值