SV:program block

定义

一个经常困扰测试台环境的问题是设计和测试台之间的竞争条件。考虑下面的示例。假设一个测试平台需要等待来自DUT的特定响应。一旦它收到响应,在同一仿真时间,它需要发送一组激励到DUT。由于Verilog可以在各种peocedural block(过程块)中无序地执行事件,因此测试台有可能在DUT的响应到达之前就发送激励。

程序块在 program 和 endprogram 关键字对中定义。
程序块是对编写设计和测试台的目标差异的认识。 它旨在方便测试平台的编写。
它有三个目的。

  • 它为测试台的执行提供了一个入口点。类似于设计中的module。
  • 与模块类似,程序块可以充当封装程序范围数据的作用域。
  • 最重要的是在“Reactive region”中安排事件

Program block中的initial块会在reactive区执行,外部的initial会在active区执行

program block 是与package对应的概念,它是给testbench引用的,存在的意义在于避免testbench中对module的引用引起竞争冒险问题,它是如何解决竞争冒险的呢,这就要回到systemverilog最开始的那篇时序上了,program里面对blocking和non blocking assignment的调用是在reactive region,即active region和NBA之后。

它在使用上,大部分时候跟一个testbench中引用普通的module没有什么不同,但一个很关键的点,program block,就像它的名字所揭示的,是一个纯软件的代码,不能综合,所以它里面不能有always语句。

Program:主要是为了在逻辑和仿真时间上,区分开RTL设计与验证平台。在SV搭建的验证环境中,testcase一般就定义一个program来开始执行。program中不能使用always,因为program相比较来说,与C语言更靠近一些。所以多用initial就可以。
program中的仿真时间与RTL中的是有区别的,SV将同一仿真时刻分为四个区域,Active(design), Observed(assertion), Reactive(testbench), Postponed(sample)。相当于在原verilog的基础上又为program增加了一个执行区间,一个采样区间。所以clk的定义不能放在program中。
当program中的initial结束时,SV会调用$finish完成仿真。

在这里插入图片描述

区域名 行为
Active 仿真模块中的设计代码(RTL、时钟发生器、门级代码)
Observed 执行SystemVerilog 断言
Reactive 执行程序中的测试平台部分
Postponed 为测试平台的输入采样信号

1,在时间片内首先执行的是Active区域,设计事件在这里运行。这包括RTL和gate代码以及时钟发生器。
2,

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值