深恶痛绝IEEE Standard for SystemVerilog 1800-2017


重新学习SystemVerilog,从IEEE Standard for SystemVerilog着手,有些能够使用个人了解到的官方中文表述,便使用中文;有些无法翻译的,便使用原英文。也不算作是翻译,仅仅是个人对这一标准文本的学习后记录吧,目录是按照Standard搞得,有个人理解的地方会单独标出。

Part One: Design and Verification Constructs

3.设计和验证的组成部分

3.1 General

该部分将讲述module、program、interface、checker、primitive、subroutine子程序、package、configuration配置、design hierarchy、compilation and elaboration、Declaration name spaces声明命名空间、Simulation time, time units, and time precision。

3.2 Design element

即systemverilog中module、program、interface、checker、package、primitive、configuration。

3.3 module

module便是systemverilog中的基本building block,介于关键词module和endmodule之间。module主要用于代表设计块design block,但是也可以作为验证代码的容器,或者设计块和验证块之间的互联。

3.4 programs

program用于建模验证平台环境,相较于module适用于描述硬件电路的特点,验证平台的重点不在于连线、结构层级或者互联,而是在于建模出待验证设计的完整环境。
program block主要出于以下三个目的工作:
1)提供一个执行验证平台的入口点;
2)创造了一个scope,以封装program范围内的数据、任务和函数;
3)提供了一个syntactic context,指定在Reactive区域调度。
program明确将design和testbench分离,且指定了特定的仿真执行语义simulation execution semantic。加之时钟块clocking block,program能够提供设计和测试平台之间的无竞争交互,并支持cycle级和transaction级抽象。
program块可以包含数据声明、类定义、子例程定义、对象实例以及一个或多个initial或final过程。但是它不能包含always块、基primitive instance、模块实例、接口实例或其他程序实例。
SystemVerilog的抽象和建模构造简化了测试台的创建和维护,实例化和单独连接每个程序实例的能力使它们能够作为广义模型使用。

3.5 Interface

interface组件,能够封装起各design block之间,或者design block与verification block之间的通信,能够从抽象的system级设计迁移到RTL传输级以及设计视图。通过封装各block之间的传输,interface还能加强设计的重用性。
从最低层面来说,interface就是一束net或者变量。interface在设计中例化,且能够连接到其它实例化模块、接口和program 的interface port。interface可以作为a single item通过port访问,其组成成员nets或者variables能够被引用。设计的很大一部分通常由port list或者port connection list构成,其中port connection list仅仅是port list的重复。以单个名字完成一组名字替换的能力,能够极大减少所描述的复杂度,同时提高设计的可维护性。
接口的其它能力来自于它封装功能和连接功能,使得在其更高层次上,更像是一个类模板。An interface can have parameters,
constants, variables, functions, and tasks.接口中元素的类型可以声明,类型也可以作为parameter传递。The member variables and functions are referenced relative to the instance name of the interface as instance members.因此,通过接口连接的module,能够简单地调用该接口的子程序成员以驱动communication。伴随着封装在接口内部以及与module隔离的功能,design block或者design block与testbench block之间通信协议的抽象level或者抽象粒度,能够轻易地使用带有相同成员的接口完成替换。与此同时,通过接口连接的module并不需要改变。
为了为module port提供方向信息,并控制特定模块中子程序的使用,我们提供了modport组件。这里的方向,指的是从模块看到的方向。
除了子程序方法,接口还可以包含process,例如initial或者always,以及连续赋值操作,这对于系统级建模和测试平台应用非常有用。这样便允许接口能够include它自己的protocal checker,从而自动验证通过接口连接的所有模块是否符合指定的协议。

3.6 checkers

检查器,表示一个封装断言以及建模代码的验证块。检查器的预期用途是作为验证库单元或作为创建formal验证中使用的抽象辅助模型的构建块。

3.7 primitives

关于原语这一building block,用于表示低抽象层级的逻辑门和开关,SystemVerilog包括许多内置的基元类型。

3.8 subroutines

子程序提供了一种机制来封装可从一个或多个位置调用的可执行代码,systemverilog提供了两种子程序,即task和function。
task即作为语句调用,可以有任意数量的输入、输出、inout和ref参数,但不返回值。task可以在执行期间阻止仿真时间,也就是说,任务退出可能发生在比调用任务时晚的仿真时间。
function执行完毕后可以返回值,也可以定义为不返回值的空函数。非void function调用可被用作表达式中的操作数。void function一般作为语句调用。函数可以有输入、输出、inout和ref参数。函数必须在不阻塞仿真时间的情况下执行,but can fork off processes that do block time但可以分叉执行阻塞时间的进程。

3.9 package

模块、接口、程序和检查器为声明提供了local name space;在模块、接口、程序或检查器中声明的标识符,are local to that scope,不会影响或与其他building block中的声明冲突。
package提供了一个声明空间,该空间能够被其它building block共享。package声明能够被其它building block或者package import

3.10 configurations

3.11 overview of hierarchy

暂时无法体会,后期再补充;

3.12 compilation and elaboration

3.13 name space

3.14 simulation time unit and precision

4 scheduling semantic调度

4.1 General

本章主要内容如下:
·基于事件的仿真调度原理;
·SystemVerilog的分层事件调度算法;
·事件排序的确定性和非确定性;
·竞争条件的可能来源;
· PLI回调控制点;

4.2 Execution of a hardware model and its verification environment

systemverilog语言所提供的各构成要素,能够以不同的抽象层级描述电路的行为。同时,systemverilog是一门并行编程语言,某些语言construct的执行,是通过并行执行block或者process来定义的。了解哪些执行顺序是确定的、而哪些执行顺序不可确定,是非常重要的。
尽管systemverilog不仅仅被运用于仿真,但是这门语言本身便为仿真而创建,所有一切均起于此。

4.3 event simulation

systemverilog语言是根据discrete event execution model(离散事件执行模型)定义的,因此本节将详细讲解discrete event simulation的各方面细节,为下文描述systemverilog构造的含义提供一个过渡。这些生成的定义,为仿真提供了标准的systemverilog参考算法。在以下事件执行模型定义中,有很多选择,且不同simulator之间的执行细节可能会存在不同。此外,systemverilog仿真器可以自由选择本节所描述的算法,只需要保证用户可见的效果与参考算法一致。
systemverilog描述由连接的执行线程或者进程组成,进程是可以评估的对象,可以具有状态,并且可以响应其输入的更改以产生输出。同时,进程是并发调度的元素,比如initial进程。原语中进程的实例,包括但不限于:initial、always、always_comb、always_latch、always_ff、连续赋值、异步任务、过程赋值语句。
仿真运行的系统描述中,a net or variable的任一改变,均被称作为更新时间update event。
进程对update event敏感,当执行update event时,所有对该事件敏感的进程,均将以任意的顺序进行评估。评估的流程也是一个事件,称为评估事件evaluation event。
evaluation event还包括PLI回调,这些回调是执行模型中能够从仿真内核中调用PLI应用程序例程的点。
除却事件,仿真器中另一个概念便是时间。术语simulation time指的是,the time value maintained by the simulator to model the actual time it would take for the system description being simulated,这里术语时间与仿真时间可互换使用。
为了更好地支持清晰和可预测的交互,单个time slot被划分为多个region,在这些区域中可以调度事件,从而提供特定类型执行的顺序。这允许property和checker在被测试的设计处于稳定状态时采样数据。属性表达式可以安全地被评估,而测试台也可以以零延迟对属性和检查器做出反应,所有这些都是以可预测的方式进行的。这种机制还允许设计、时钟传播和/或刺激和响应代码中的非零延迟与周期精确描述自由和一致地混合。

4.4 stratified event scheduler分层事件调度器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值