验证IP(VIP)编写-interface

这个系列和大家一起学习一下VIP的编写。首先我们先啰嗦几句vip是个啥东西,他可不是咱们办的那个vip卡那个意思,而是verify ip。在IC验证里面是个十分重要的东西,主要的功能就是基于协议接口并将我们的激励打包成一组item与rtl进行交互。也分为master和slave,其中包含的组件有driver,monitor,item,inteface,sequence等等。它的功能很多啦,十分强大,在此不赘述了,我们直接来看看怎么写,写的时候应该有什么思路,里面涉及哪些知识点。

  1. Interface
    首先我们先要根据协议定义一组接口,直接上段代码吧
    插入代码片
interface  tx_if(input clk)
    logic data;
    logic rdy;
    
    clocking drv_cb @(posedge clk);
      default input#1 output#1;
      input data;
      output vld;
    endclocking
    
endinterface
      

好的,一段定义interface的简单而优美的代码接写完了。
不过,虽然简单,里面还是蕴含了不少细节需要我们注意。我们一行一行来看。

首先,第一行tx_if就是我们给这个interface块定义的名字,这个你想叫啥就叫啥,写成你自己名字也无所谓。

第二行与第三行就是我们定义的接口,logic类型,这个不管他是输入还是输出信号,都可以定义为logic。logic类型是啥呢,logic其实就是reg类型的改进,它既可被过程赋值也能被连续赋值,编译器可自动推断logic是reg还是wire。果然是改进版的,就是智能。

下面几行我们定义了一个clocking,就是时钟块。那么时钟块里面的第一行也是定义名字,然后@(posedge clk)的意思就是这个时钟块是和clk的上升沿对齐。

default input#1 output#1;这句话就是时钟块的核心作用了,对输入输出进行延迟,1就表示延迟一个时间单位。不过这里要注意了,这个input和output看着都是延迟1,意义可大不相同哦。

先想想,对于我们验证平台而言,input是不是就是rtl给我们的信号,而output才是我们发出的激励啊,这个没问题吧。
所以我们输出的信号,也就是output ,那我们延时1就是延时1。但input是rtl给我们的,他要经过d触发器打拍,所以他就不是我们写多少他就延迟多少,而是要以clk为周期进行延时。假如一个clk时间为3,我们写一个output#1,请问实际在波形上看,经过这个cb块的这个信号延迟多少,答案是3,如果写output#4呢,答案是6. 因为它的延迟是以clk周期为单位,并向上取整。

好了,今天先说到这里,这个系列涉及到一些很细节的知识点,难免有些学艺不精说的不对的地方,如果有朋友发现错误,希望及时指出,万分感谢!!!

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值