SV基础知识2---接口及应用

目录

1 接口

        接口是什么

       实例说明(接口使用三步骤)

2 采样和数据驱动

电路中的竞争问题

时钟块cloking

cloking采样和驱动

​编辑

3 测试的开始和结束

        系统函数的调用

4 调试方法


1 接口

接口是什么

接口(interface)是连接设计和测试平台的一个"插排",可以用作设计,也可用作验证;

 接口的优势
将有关信号封装在同一个接口中,对于设计和验证环境都便于维护和使用。
interface是SV中唯一的硬件和软件环境的媒介交互。
接口可以例化,使得对于多组相同的总线,在例化和使用时变得更加灵活。
接口的使用
  在inteface端口列表中只需定义时钟、复位等公共信号,或者不定义任何端口,推荐使用logic定义变量。
interface也可以依靠函数参数化方式提供复用性。
interface在例化时,同module例化方式一样。
模块里面可以例化模块,也可以例化interface,interface里面可以例化interface但不能例化module。

 实例说明(接口使用三步骤)

  • 定义接口,Dut调用interface
interface arb_if(input bit clk); 
	logic [1:0] grant,request;
	logic rst;
endinterface
 
module arb (arb_if arbif); //接口传入模块中
	...
always @ (posedge arbif.clk or negedge arbif.rst) begin
	if (arbif.rst)
		arbif.grant <= 2'b00;
	else
		arbif.grant <= next_grant;
	... 
	end
endmodule 
  •  Test调用interface
module test (arb_if arbif);
	...
  initial begin
      @(posedge arbif.clk);
          arbif.request <= 2'b01;
          $display("@%0t:Drove req = 01",$time);
      repeat(2) 
      @(posedge arbif.clk);
      	  if (arbif.grant != 2'b01)
      	  $display("@%0t: al:grant != 2'b01",$time);
      $finish;
  end
endmodule
  • Top层例化接口、dut和test
module top;
    bit clk;
always #5 clk = ~clk;
arb_if arbif(clk);
arb_al(arbif);
test_tl(arbif)'
endmodule

2 采样和数据驱动

电路中的竞争问题

1、为了解决在RTL中发生的信号竞争问题,我们建议通过非阻塞赋值或特定的信号延迟来解决同步问题。

2、同样的在仿真行为中,为了避免时序电路中时钟信号和驱动信号的时序竞争问题,需要明确驱动时序和采样时序。

3、在默认情况下,时钟对驱动会添加一个无限小的时间delta-cycle的延迟,该时间无法用绝对时间衡量,比最小的时间精度还小。

4、一个时间片(time-slot)包含了无数delta-cycle,在仿真命令中输入run 0 ,表示运行一个delta-cycle。

5、由于各种可能性,clk和被采样数据之间若只存在若干个delta-cycle的延迟,那么采样很可能会存在问题。那么如何去避免采样时的竞争问题?

  •      在驱动时,添加相应的人为延迟时间
  •      在采样事件前的某段时间进行采样。

由此引入了下面的cloking的概念

时钟块cloking

     实例说明

   除此之外,cloking的一些特性有:1.可定义在interface、module、program中;2.clocking中的信号不是自己定义的,而生由其所在的模块或interface中定义的;3.如果没有定义默认的采样事件,则默认 input #1step output #0;  4.可以用新的采样事件覆盖原有的默认事件。
 

cloking采样和驱动

在使用接口中时钟块进行采样时,应使用阻塞赋值;驱动时使用非阻塞赋值

3 测试的开始和结束

系统函数的调用

在verilog中,需要调用系统函数来结束($finish)或者暂停($stop)仿真

仿真开始
在仿真命令输入run 0

program
     sv中推出program将设计你和验证进行有效隔离,

     1、Progam执行验证平台代码,是不能含有层次的结构,如其他module或者interface的实例。
     2、program内部定义的变量赋值方式应该是阻塞赋值(软件方式),在驱动外部硬件信号时采用非阻塞赋值(硬件方式)
 

program的结束方式分为隐式结束和显示结束

        隐式结束:就是在执行完最后一个initial过程块自动结束仿真

        显示结束:实际情况中有些过程块会一直运行下去(forever),此时需要置入系统函数$exit()                            强行结束

progam 和 module 
    module为硬件盒子,progam为软件盒子,interface为软硬件的媒介

4 调试方法

  • 查看信号和波形   仿真前使用命令log -r /*保存波形
  • 通过设置断点查看软件部分的局部变量,程序会停留到断点这一行,还未执行该行。


 

————————————————
版权声明:本文为CSDN博主「持续学习_ing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_59670134/article/details/119118086

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值