返回介绍

第十五章 时钟控制块

发布于 2020-09-09 22:55:52 字数 3827 浏览 1187 评论 0 收藏 0

主题
主题描述
15.1 简介(一般信息)在Verilog中,块与块之间的通信通过模块端口来指定。SystemVerilog加入了接口(interface)这一概念,接口是一个关键的结构,它能够封装块与块之间的通信,因此,用户能够方便地改变模块间通信的建模抽象层次。

一个接口指定了一个测试平台用来与被测设计进行通信的信号或线网。然而,一个接口并没有任何显式的时序规程、同步要求、或时钟控制范例。

SystemVerilog加入了时钟控制块,它能够识别时钟信号,并能够捕获被建模块的时序和同步要求。一个时钟控制块集合了同步于一个特定时钟的信号,并且使得它们的时序成为显式的。在一个基于周期的方法中,时钟控制块是一个关键的元素,它使得用户能够在一个更高的抽象层次上编写测试平台。除了关注于信号以及时间上的转变外,测试还可以根据周期和事务定义。根据环境的不同,一个测试平台可以包含一个或多个时钟控制块,每一个都可以包含它自己的时钟加上任意数目的信号。

时钟控制块将时序和同步细节与一个测试平台中的结构、功能和过程元素分割开来。因此,采样和驱动时钟控制块信号的时序成为隐式的并且相对于时钟控制块的时钟。这使得我们能够以一个非常简洁的方式编写一组关键的操作,而无需显式地使用时钟或指定时序。这些操作是:

  • 同步的事件
  • 输入采样
  • 同步的驱动

15.2 时钟控制块声明时钟控制块的声明语法如下:
15.3 输入时滞与输出时滞输入或双向信号在指定的时钟事件上采样。如果指定了一个输入时滞,那么信号在时钟事件之前的时滞时间单位上采样。类似地,输出或双向信号在相应的时钟事件之后的时滞仿真时间单位上被驱动。图15-1为一个上升沿时钟显示了基本的采样/驱动时序。


图15-1 — 包含相对于时钟上升沿的时滞的采样和驱动时间


一个时滞必须是一个常量表达式,并且可以被说明成一个参数。如果没有指定时滞的时间单位,那么会使用当前的时间单位。如果使用了一个数字的话,那么时滞会使用当前作用范围的时间比例来解释。

15.4 层次化的表达式一个时钟控制块中的任何信号都可以与一个任意的层次化表达式相关联。正像15.2节所描述的那样,层次化的表达式通过在层次化表达式前面附加一个等号(=)来引入:
15.5 多时钟控制块中的信号相同的信号(时钟、输入、输入输出、或输出)可以在一个时钟控制块中出现多次。使用相同时钟(或时钟表达式)的时钟控制块应该共享相同的同步事件,这种方式就像几个锁存器可以被一个相同的时钟控制一样。输入语义在15.12节中描述,输出语义在15.14节中描述。
15.6 时钟控制块的作用范围和生命周期一个时钟控制块既是一个声明也是这个声明的一个实例。单独的实例化步骤不是必要的。相反,会为包含声明的块的每一个实例产生一个拷贝(就像一个always块一样)。一旦声明了一个时钟控制块,定时信号就可以通过时钟控制块的名字和一个点(.)操作符来引用:
15.7 多时钟控制块的例子在这个例子中,一个简单的测试程序包含了两个时钟控制块。在本例中使用的程序结构将在第十六章中讨论。
15.8 接口与时钟控制块一个时钟控制块封装了一组共享一个基本时钟的信号,因此使用一个SystemVerilog接口说明一个时钟控制块能够显着地减少连接测试平台所需代码的数目。此外,由于测试平台内时钟控制块中信号方向是有关测试平台而不是被测设计的,一个modport声明可以恰当地描述这两个方向。一个测试平台程序可以包含在一个程序当中,并且它的端口可以是接口,这个接口对应于每个时钟控制块中声明的信号。从测试平台这一侧(也就是modport test)看接口中的连线应该与时钟控制块中声明的方向相同,而从被测设计来看则具有相反的方向(也就是modport dut)。

例如,前面的例子可以使用接口按如下的方式重新编写:
15.9 时钟控制块事件一个时钟控制块的时钟控制事件可以直接使用时钟控制块的名字来引用,而不用理会用来声明时钟控制块的真实时钟控制事件。

例如:
15.10 周期延时:####操作符可以被用来将执行延时一个指定数目的时钟控制事件,或者时钟周期。

周期延时语句的语法如下:
15.11 缺省时钟控制一个时钟控制可以被说明成缺省的,这样它可以作用于一个指定模块、接口、或程序内的所有周期延时操作。

缺省周期说明语句的语法如下:
15.12 输入采样所有的时钟控制块输入(input或inout)都在对应的时钟控制事件上采样。如果输入时滞不是一个显式的#0,那么采样的值对应于先于时钟控制事件的时间布值时滞时间单位的Postponed区域中的信号值(参见15.3节中的图15-1)。如果输入时滞是一个显式的#0,那么采样的值对应于Observed区域的采样值。

采样会立即发生(调用进程不会阻塞)。当一个信号出现在一个表达式中的时候,它会被信号的采样值替代,也就是在最后一个采样点上采样的值。

当同一个信号是多个始终控制块输入的时候,它的语义是很直接的;每一个时钟控制块使用自己的时钟控制事件采样对应的信号。
15.13 同步的事件显式的同步通过事件控制操作符@来实现,它允许一个进程来等待一个特定的信号值变化或者一个时钟控制事件(参见15.9节)。

同步操作符的语法在第8.10节给出。

与事件控制一起使用的表达式可以指示时钟控制块的输入(input或inout)或者一个分片。分片可以包含动态索引,它会在@表达式执行的时候进行一次计算。

下面是一些同步语句的例子:

  • 等待时钟控制块ram_bus中ack_1信号的下一次变化

15.14 同步的驱动时钟控制块的输出(output或inout)被用来在一个指定的时间上将值驱动到它们对应的信号。换句话说,对应的信号在指定的时钟控制事件上通过输出时滞来修改它的值。

说明一个同步驱动的语法类似于一个赋值:
链接 主题

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文