前言:
- 线程间的同步,用event。
- 多个线程访问一个共享资源,用semaphore(旗语)的钥匙。
- 线程间传递信息,用mailbox。(信箱:放置缓存)
一、程序和模块
- module除了作为RTL模型的外壳包装和实现硬件行为,在更高层的集成层面,模块之间也需要通信和同步。
- 对于硬件的过程块,它们之间的通信可理解为不同逻辑/时序块之间的通信或者同步,是通过信号的变化来完成的。
- 从硬件实现的角度来看,Verilog通过always,initial过程语句块和信号数据连接实现进程间通信。
- 可以将不同的module作为独立的程序块,他们之间的同步通过信号的变化event触发、等待特定事件(时钟周期)或者时间(固定延时)来完成。
- 模块(线程)在仿真一开始便并行执行,除了每个线程会依照自身内部产生的事件来触发过程语句块之外,也同时依靠相邻模块间的信号变化来完成模块之间的线程同步。
二、什么是线程
- 线程即独立运行的程序。
- 线程需要被触发,可以结束或者不结束。
- 在module中的initial和always,都可以看做独立的线程,它们会在仿真0时刻开始,而选择结束或者不结束。
- 硬件模型中由于都是always语句块,所以可以看成是多个独立运行的线程,而这些线程会一直占用仿真资源,因为它们并不会结束。
- 软件测试平台中的验证环境都需要由initial语句块去创建,而在仿真过程中,验证环境中的对象可以

最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



