第四章 连接设计和测试平台
4.1 将测试平台和设计分开
基本的概念
-
采样和驱动
- 注意方向性。
- 采样指的是测试平台TB采样设计DUT的数据,也就是DUT数据传给TB
- 驱动指的是TB驱动DUT,数据从TB传输到DUT
4.2 接口
勘误:
相信不少小伙伴看到这里肯定会有所疑问。明明新的值就是在下个周期传给测试平台,为什么说“并不是”。
其实啊,这里是翻译错误。我们来看一下英文原版是怎么写的。
原文说的是,当接口输入信号正好在时钟沿变化时,信号的新值直到下一个时钟周期才会传递给测试平台。
这个故事告诉我们,在看经典的翻译书时,如果觉得有些地方没弄懂,就得把原版的书拿出来对照一下。
你没理解可能不是你的问题,而可能是人家翻译错误。
顺带讲一下同步时钟接口的采样和驱动为什么有以下的差别。为什么当接口的输入信号恰好在时钟沿(25ns)变化时,新的值会等到下一个周期才被测试平台采样(图4.6),而同样的情况发生在驱动的时候,第三周期(25ns)产生的值22却永远不会被DUT捕获(图4.7)。
我们知道,接口里的时钟块是为了模拟时序逻辑的建立保持时间的,也就是当clk上升沿来临前,数据就必须准备好,并且需要在上升沿之后再保持一段时间。比如下面default后面表达的就是采样在clock1上升沿前的10ns,而驱动则发生在上升沿的2ns后。
若没在定义default偏移量,则默认在clocking采样事件前#1step采样输入,在采样事件后的 #0驱动输出。(我感觉#1step和#0应该指的都是最小时间片,只不过采样的时候说#1step,驱动的时候说#0)
为了方便下面的讲解,可以先把这个最小时间片单纯理解为一点点延迟。
讲解开始。我们可以用8条辅助线来解决这个问题。
对于采样,TEST arbif.cb.grant(翻译又漏掉了波形图中TEST里的“T”…)呈现出的结果是这么来的。clk上升沿来的时候,测试平台会去采样DUT arb.grant在上升沿之前的数据,如下图箭头所示。因此就算当接口的输入信号恰好在时钟沿(25ns)变化(2→3)时,新的值和旧的值都可以被采样到,并在EST arbif.cb.grant信号的25ns以及35ns时出现,不会出现被漏掉的情况。
而驱动就不一样了。DUT arb.grant的数据来源于TEST arbif.cb.grant。接口是在clk上升沿后一段时间把TEST arbif.cb.grant的值给到DUT arb.grant。所以我们可以很清楚地看出2的值并没有被DUT捕获。(从这也可以看出如果数据延续的时间不到一个时钟周期,就会容易被漏掉)
这样再来看81页的这段话也就没那么难懂了,只要注意时钟块会把clk上升沿后的数据驱动给DUT就行了。
如果测试平台在时钟的有效沿驱动同步接口信号,那么其值将会立即传递到设计中。这是因为时钟块的默认输出延时是#0。
如果测试平台在时钟有效沿之后驱动输出,那么该值直到时钟的下一个有效沿才会被设计所捕获。