数字验证学习笔记——SystemVerilog芯片验证18 ——线程的使用
admin
2024-05-04 01:49:09

一、线程的使用

1.1 程序和模块

  • module作为SV从Verilog继承过来的概念,自然地保持了它的特点,除了作为RTL模型的外壳包装和实现硬件行为,在更高层的集成层面,模块之间也需要通信和同步。
  • 对于硬件的过程块,它们之间的通信可理解为不同逻辑/时序块之间的通信或者同步,是通过信号的变化来完成的。
  • 从硬件实现的角度来看,Verilog 通过always、initial过程语句块和信号数据连接实现进程间通信。
  • 我们可以将不同的module 作为独立的程序块,他们之间的同步通过信号的变化(event 触发)、等待特定事件(时钟周期)或者时间(固定延时)来完成。
  • 如果按照软件的思维理解硬件仿真,仿真中的各个模块首先是独立运行的线程(thread)
  • 模块(线程)在仿真一开始便并行执行,除了每个线程会依照自身内部的事件来触发过程语句块之外,也同时依靠相邻模块间的信号变化来完成模块之间的线程同步

问题1?
always线程不会结束。 对
initial 线程一定会结束。 不对,比如用initial产生时钟。

1.2 什么是线程

  • 线程即独立运行的程序。
  • 线程需要被触发,可以结束或者不结束
  • 在module中的initial和always,都可以看做独立的线程,它们会在仿真0时刻开始,而选择结束或者不结束。
  • 硬件模型中由于都是always语句块,所以可以看成是多个独立运行的线程,而这些线程会一直占用仿真资源,因为它们并不会结束。
  • 软件测试平台中的验证环境需要由initial语句块去创建,而在仿真过程中,验证环境中的对象可以创建和销毁,因此软件测试端的资源占用是动态的。

问题2,如果需要降低仿真时的内存负载,那么下面哪些措施是合理的?
降低模块之间的信号跳变频率
只在必要的时候创建软件对象。
在不需要时钟的时候关闭时钟。
在数据带宽需求低的时候降低时钟频率。

  • 软件环境中的initial块语句有两种分组方式,使用begin…end 或 fork … join
  • begin … end 中的语句以顺序方式执行,而 fork … join中的语句则以并发方式执行。
  • 与fork … join 类似的并行方式语句还包括 fork … join_any, fork … join_none 。

1.3 线程的概念澄清

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

相关内容

热门资讯

除了凤翔东湖,苏东坡还在陕西修... 这是小渔的行旅日记,走走停停,和我一起看陕西。北宋文豪苏东坡,堪称最受国人喜爱的古代文人之一。他不仅...
全球首台全能冠军咖啡机器人CO... 记者|张华 发自无锡,当清晨第一缕阳光透过无锡铂尔曼大酒店高大的落地窗,客人惊喜地发现,大堂一角亮起...
腊八粥里,竟然藏着一个容易被忽... 腊八节,一个承载着丰厚文化记忆与饮食智慧的节日,每年农历腊月初八,家家户户熬煮腊八粥,已成为寒冬里温...
李亚鹏卖的茶叶被加价倒卖,99... 1月23日的夜晚,李亚鹏再次开启了他的带货直播,距上一次直播仅仅过了一周。刚一开播,直播间瞬间涌入了...
红壳鸡蛋和白壳鸡蛋究竟有什么不... 不知道大家吃鸡蛋时注意过么, 有些鸡蛋蛋壳是红色的, 有些鸡蛋的蛋壳是白色的, 这两种鸡蛋除了颜色 ...