lv123362的个人空间 https://blog.eetop.cn/1126258 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

断言(SVA)的简单例子

热度 7已有 5046 次阅读| 2019-6-7 21:40 |系统分类:芯片设计

     声明,不得转载。

     断言的英文是Assertion,就是对一些设计属性的推知。大型的硬件设计中会有各种各样的协议接口,这些协议都是时序的。这些协议接口定义中一般都会有include文件,这些include文件中包含了接口的断言描述,这些断言主要用于协议的时序检查。除了这种把断言语句放到接口协议里之外,还可以放到具体的design里面,也可以单独做成一个module的检查器,把module检验器和设计bind在一起。

 断言可以用Verilog实现,也可以用SystemVerilog Assertion(SVA)实现,也可以用C或者C++实现。由于要检查时序,过程性语言Verilog并不是很好的选择,一般会选择描述性语言SVA实现,SVA对时序的描述近乎完美。 本文讲介绍一下SVA的简单例子。如果想系统的学习SVA,建议购买一本书《SystemVerilog Assertions 应用指南》。

  内推大公司:海光, AMD, 兆芯,苏州瑞晟微电子,苏州盛科网络,TI,杭州矽力杰等等。


   招聘:上海,深圳,珠海,广州,成都,杭州,苏州,北京,西安,数字ic设计工程师,数字验证工程师,模拟ic设计工程师,DFT,FPGA,数字后端工程师,RFIC,射频工程师,ae,fae,sales。总有一款适合你,欢迎ICer自荐和推荐。

1、模拟IC设计工程师25-80W(电源方向:初级、高工、经理、总监)均有需求,坐标:深圳/上海/武汉/长沙/南京/苏州/昆山/杭州/成都/西安/北京/厦门。

2、资深模拟IC设计(混合信号),30-100W,  坐标:上海/南京/深圳/昆山/成都/重庆/西安/武汉/珠海/广州/昆山。

3、资深数字IC设计工程师-------苏州、上海、北京、杭州、武汉、成都、西安、四川、广州、深圳、珠海、昆山;

4、数字IC设计前端/后端 工程师-四川/武汉、上海、北京、广州、昆山;

5、FPGA-西安/上海;

6、RFIC资深/专家/VP,射频工程师 -杭州/上海、重庆、成都、深圳、西安、北京、。

7、FAE/AE-武汉/上海/深圳/昆山/厦门;

8、模拟版图设计工程师-武汉/上海/深圳/成都/厦门。

备注:初创型、成熟型、国企、外资企业、甚至合伙人岗位应有尽有。

另外,上海/苏州/成都/昆山分别有数字经理、模拟(ADC/DAC)(DC/DC)(AC/DC)经理

欢迎自荐和推荐(同学/朋友/同事)。谢谢啦!

方法1: 直接放到到design里面的方式如下。

文件dut.v , dut很简单,每个clk上升沿到来时对输入a取反。

`timescale 1ns/1ns

 module DUT (clk,a,b);

  input clk;

  input a;

  output b;

  reg b;   

 always @ (posedge clk )

     begin

          b<=~a;

     end

             `include "assertion.svh"

endmodule

文件 test.v

`timescale 1ns/1ns

module TOP;

      reg clk;

      reg a;

      wire b;

      always 

           #5 clk=~clk;

      initial

            begin

  clk <=0;

                  a <=1;

  #30 $finish;

            end

       DUT dut(.clk(clk),

                       .a(a)      ,

       .b(b)

        );

        //bind TOP.dut dut_assertion  dut_assertion_check(.a_(a),.b_(b),.clk_(clk));

endmodule

assertion.svh文件,每个clk上升沿,如果a=0,则是空成功,不满足第一个a=1的条件,b就不需要判断是否等于1,直接判断为成功。如果a=1,则对b进行判断,b为1则为成功,否则断言失败。

property check_p;

     @(posedge clk) a |->b;

 endproperty

check_a : assert property (check_p);

   运行命令:irun -sv dut.v test.v

ERROR:ncsim: *E,ASRTST (./assertion.svh,6): (time 5 NS) Assertion TOP.dut.check_a has failed

ERROR现象符合预期。

 方式2:单独定义一个module 检验器,然后通过bind实现。

注释DUT.v 中`include "assertion.svh",打开test.v中的bind。

Module检验器文件

  module dut_assertion(a_,b_,clk_);

        input logic a_,b_,clk_;

        property check_p;

              @(posedge clk_) a_ |->b_;

        endproperty 

        check_a : assert property (check_p);

endmodule

   运行命令:irun -sv dut.v test.v assertion_module.sv

ERROR:ncsim: *E,ASRTST (./assertion_module.sv,12): (time 5 NS) Assertion TOP.dut.dut_assertion_check.check_a has failed



点赞

发表评论 评论 (1 个评论)

回复 Timberlake666 2019-7-31 15:08
啥啊 这是

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 8

    粉丝
  • 2

    好友
  • 2

    获赞
  • 2

    评论
  • 1233

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-24 17:37 , Processed in 0.015715 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部