riple

Stay Hungry, Stay Foolish.

这不就是“可综合的断言监控器”么?!

0
阅读(2335)

最早看到“可综合断言”是在VMM里。书中介绍的断言在设计验证中的强大功能我能够理解,并且在代码里也实际应用过。但是正因为断言具备强大的交互 能力,才使得我对断言的可综合性迷惑不解。

即使采用可综合语句在芯片中用逻辑电路实现了断言监控器,当硬件电路实际运行时,断言监控器又如何与设计师沟通呢?断言的输出通道如何在电路中建立呢?在 一篇文章中看到过一种方法:用一个CPU收集断言信息并实现与设计师的沟通。我能想出的另一个方法是一个足够大的FIFO再配合Virtual JTAG。但是这样做只能获得“什么事件发生过”的信息。如果再配合一个计数器,还能获得“何时发生”的信息。这些信息虽然有用,但是对于电路调试者来说 仍然不够。对电路调试者来说,最佳的信息形式是波形,大量的波形。

感谢天才而勤奋的Altera的工程师们,他们先是发明了一种叫做SignalTap II的芯片内部波形观察工具(嵌入式逻辑分析仪),让我们看到了芯片内部的运行状况,然后又给这一工具加入了“基于状态的触发方式”,而这一功能只有在昂 贵的外部逻辑分析仪中才会提供。采用了状态触发的SignalTap II,就可以在FPGA调试——这一让我又爱又恨的工作中——扮演“可综合的断言监控器”的角色。

State-based triggering flow是在Quartus II 7.2版本中新添加的功能。不同于原有的Sequential触发方式中通过增加触发级别实现的简单时序触发功能,State-based触发方式可以实 现复杂而且精确的时序触发功能,甚至可以通过添加可动态配置的计数器实现“触发后延时采样”的功能。为了实现复杂时序触发条件的准确描述,Quartus II中提供了SignalTap II Trigger Flow Description Language这一触发条件编程语言(别怕,这种语言的语法非常简单,就是一串if else和goto语句)。

能够对电路的预期行为进行准确描述,能够在电路中实时运行,还能够给出事件发生时相关信号的 波形,这不就是我需要的“可综合的断言监控器”么!

在我看来,Sequential触发方式与State-based触发方式都可以用于检测简单的握手关系,而且都需要通过增加触发级别(Trigger level)来实现对时间上存在先后关系的事件的检测。在检测简单时序关系的情况下,Sequential触发方式更简单灵活一些。

在检测复杂时序关系时,还是State-based触发方式更高效。这是因为State概念的引入,可以使得对触发条件的描述与真实电路的状态迁移行为一致。 许多在Sequential触发方式下需要Advanced触发条件才能描述的情况都可以在State-based触发方式下用Basic触发条件实现。 由于State-based触发方式中的一些参数可以实时更改,省去了重新编译的时间,就比Sequential触发方式下使用Advanced触发条件 灵活了许多。在Sequential触发方式下,只能触发依次发生的事件,如果需要触发循环事件或者部分循环事件就需要设置多级重复的触发级别;在 State-based触发方式下,由于有了可命名的State,就可以通过goto语句实现触发事件的循环,可以省去重复的触发级别,减少逻辑资源的占 用。State-based触发方式中的触发 条件状态机,是昂贵的外部逻辑分析仪才具备的功能。这是3年多来,Altera在SignalTap II调试手段上的一个重大突破。(这一技术与同时在Quartus II 7.2中引入的图形化FSM输入方式采用的技术有一定关联。这表明,Altera在FSM代码自动生成上有了自己的核心技术。)

在需要检测的两个或多个事件之间存在精确的时间关系的情况下,State-based触发方式中的counter也是很有用的。除此之外,采用 counter实现的“触发后延时采样”也是一个非常实用的功能:在采用Sequential触发方式的调试中,为了用有限的采样窗口捕获在一个确定触发 事件之后很长时间才出现的波形,我不知道想了多少窍门,花了多少时间。

下面,就是Altera网站上刚刚公布的如何使用State-based触发方式的一组例子:

  • Trigger on Event Absent for Less than 5 Clock Cycles
  • Trigger on 5th Occurrence of a Group Value
  • Trigger on the 5th Transition of a Group Value
  • Trigger after Condition1 is Followed by Condition2
  • Trigger on Condition1 Immediately Followed by Condition2
  • Trigger on Condition2 not Occurring Between Condition 1 and Condition3
  • Trigger on the 5th Consecutive Occurrence of Condition1
  • Trigger after a Violation of Sequence: Condition1->Condition2->Condition3->Condition4
  • Trigger on a Sequence of Edges
  • Trigger on Condition1 Followed by Condition2 after 5 Clock Cycles
  • Trigger on Condition1 Followed by Condition2 within 5 Clock Cycles
  • Trigger on Condition1 not Followed by Condition2 within 5 Clock Cycles
  • Trigger after 5 Consecutive Transitions
  • Trigger when Condition1 Occurs less than 5 Times Between Condition2 and Condition3
  • 相关链接:FPGA 设计验证关键要点

    用于可编程逻辑设计的快速、有效的RTL调试解决方案(上)

    用于可编程逻辑设计的快速、有效的RTL调试解决方案(下)

    Synplicity助Foundry快速定位FPGA设计中的bug

    基于FPGA的原型:为什么所有的ASIC都应该采用FPGA来创建原型(上)

    基于FPGA的原型:为什么所有的ASIC都应该采用FPGA来创建原型(下)

    The Chip is Ready. Am I done? On-chip Verification using Assertion Processors点击下载

    Baidu
    map