[systemverilog]2_interface_clocking

1.interface

(1)interface可以在硬件环境和软件环境中传递,例如作为module的端口列表,也可以作为软件方法的形式参数。

(2)interface的优势

  • 将有关信号封装在同个接口中,如果需要新添加信号,只需要在接口中定义这个信号,对于设计和验证环境都便于维护和使用。

  • 由于接口既可以在硬件世界(module)中使用,又可以在软件世界(class)中使用。在软件世界中不能例化interface,但可以用指针找到interface的实例及其变量。

  • interface定义和module类似,它可以定义端口,也可以定义双相信号;可以使用initial和always,也可以定义function和task;在interface的端口列表中只需要定义时钟、复位等公用信号,或者不定义任何端口信号,转而在变量列表中定义各个需要跟DUT和TB连接的logic变量,为了简单,推荐使用logic来定义变量。

  • interface可以结合parameter(参数化方式)提高复用性。

(3)interface和module的不同

module中可以例化module和interface,但是interface不能例化module。

(4)interface的例化


2.竞争问题

(1)竞争冒险问题(例子)

  • 当显示a=1时,b也会显示1。

  • a会综合成4bit的reg,b综合为wire。

  • 一拍中,b总和a的值一样。

(2)

  • 在仿真行为中,为尽量避免时序电路中时钟和驱动信号的时序竞争问题,需要给出尽量明确的驱动时序和采样时序。

  • 为了避免在RTL仿真行为中发生的信号竞争问题,建议通过非阻塞赋值或者特定的信号延迟来解决同步的问题。


3.delta-cycle与time-slot

(1)简述

  • 默认情况下,时钟对于组合电路的驱动会添加一个无限最小时间(delta-cycle)的延迟,而该延迟无法用绝对时间单位衡量,它要比最小时间单位精度还小。一般最小时间为1ps。

  • 在一个时间片(time-slot)中可以发生很多事情,时间片中包含了无数个delta-cycle。

  • 仿真器中敲入命令"run 0",即是让仿真器运行一个delta-cycle的时间。

(2)例子

在45ns处,clk1在上升沿采样d1的数值为1,clk2在45ns处采样的数值2。

(3)在仿真软件中查看delta-cycle

(4)

其实就是说clk2是由clk1赋值的,而赋值的时总是延迟个delta-cycle,所以用clk1采样和用clk2采样则不同。


4.避免采样的竞争问题


5.利用clocking (时序块)解决采样和驱动问题

(1)clocking可用在interface、program和module中,常见在interface中。

  • clocking中列举的信号不是自己定义的,而是应该由interface或者其它声明clocking的模块定义的。

  • clocking在声明完名字之后,应该伴随着定义默认的采样事件,即"default input/output event"。如果没有定义,则会默认地在clocking采样事件前的1step对输入进行采样,在采样事件后的#0(时钟片)对输出进行驱动。

  • 除了定义默认的采样和驱动事件,也可以在定义信号方向时,用新的采样事件对默认事件做覆盖。

  • 可定义多个clocking,且同个变量在不同的clocking中定义不同的方向。

(2)clocking的定义:

  • 第一行定义了一个clocking块bus,由clocking的上升沿来驱动和采样;

  • 第二行指出了在clocking块中所有的信号默认情况下会在clocking事件(clocking上升沿)的前10ns对其进行输入采样,在事件的后2ns进行输出驱动;

  • 第三行是声明了要对其采样的三个输入信号data, ready和enable信号,这三个信号作为输入,它们的采样事件即采用了默认输入事件(clock1上升沿前的10ns)。

  • 第四行声明了要驱动的ack信号,而驱动该信号的事件是时钟clock1的下降沿,即覆盖了原有的默认输出事件(上升沿的后2ns);

  • 第五行的addr,也采用了自身定义的采样事件,即clock1上升沿前的1step.文里的1step会使得采样发生在clock1上升沿的上一个时间片采样区域,即可以保证采样到的毅据是上一个时钟周期的数据。

(3)利用clocking采样的例子

三个initial是并行的,第一个直接采样;第二个是在上升沿处采样;只有第三个是用clocking采样的(第二个不是)。

(4)利用clocking驱动的例子

同样地,利用clocking块通过一种类似于物理保持时间"的驱动方式,可以实现时钟沿叠加偏移量的延迟驱动效果。


6.测试的开始与结束

(1)仿真可以没有其他的激励,但是要有复位和时钟。

(2)即是只给设计提供复位和时钟信号,整个仿真也会一直持续下去。


7.用系统函数调用方法结束:

(1)$finish():结束仿真

(2)$stop:暂停仿真

8.program隐式结束

(1)SV将每个program作为一个独立的测试,利用program来自动结束。

(2)如果TB中只有一个program,则会在执行完该program中最后一个initial过程块后自动结束仿真。如果TB中有多个program,那么等待所有program中最后一个initial过程块完成后,才能结束仿真。

(3)例子

(4)遇到有的program中的initial语句块会一直运行下去,就可在目标program内置入系统函数$exit(),强制结束。待该program结束后,仿真器仍会等待其他program执行完毕后再结束仿真。

(5)program可以用来帮忙消除采样竞争问题以及自动结束测试用例。

(6)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 枚举类型 23 字符串 25 1.2 过程块和方法 27 initial和always 30 function逻辑电路 33 task时序电路 35 动态 静态变量 39 1.3 设计例化和连接 45 第二章 验证的方法 393 动态仿真 395 静态检查 397 虚拟模型 403 硬件加速 405 效能验证 408 性能验证 410 第三章 SV组件实现 99 3.1 接口 100 什么是interface 101 接口的优势 108 3.2 采样和数据驱动 112 竞争问题 113 接口中的时序块clocking 123 利于clocking的驱动 133 3.3 测试的开始和结束 136 仿真开始 139 program隐式结束 143 program显式结束 145 软件域program 147 3.4 调试方法 150 第四章 验证的计划 166 4.1 计划概述 166 4.2 计划的内容 173 4.3 计划的实现 185 4.4 计划的进程评估 194 第五章 验证的管理 277 6.1 验证的周期检查 277 6.2 管理三要素 291 6.3 验证的收敛 303 6.4 问题追踪 314 6.5 团队建设 321 6.6 验证的专业化 330 第六章 验证平台的结构 48 2.1 测试平台 49 2.2 硬件设计描述 55 MCDF接口描述 58 MCDF接口时序 62 MCDF寄存器描述 65 2.3 激励发生器 67 channel initiator 72 register initiator 73 2.4 监测器 74 2.5 比较器 81 2.6 验证结构 95 第七章 激励发生封装:类 209 5.1 概述 209 5.2 类的成员 233 5.3 类的继承 245 三种类型权限 protected/local/public 247 this super 253 成员覆盖 257 5.4 句柄的使用 263 5.5 包的使用 269 第八章 激励发生的随机化 340 7.1 随机约束和分布 340 权重分布 353 条件约束 355 7.2 约束块控制 358 7.3 随机函数 366 7.4 数组约束 373 7.5 随机控制 388 第九章 线程与通信 432 9.1 线程的使用 432 9.2 线程的控制 441 三个fork...join 443 等待衍生线程 451 停止线程disable 451 9.3 线程的通信 458 第十章 进程评估:覆盖率 495 10.1 覆盖率类型 495 10.2 功能覆盖策略 510 10.3 覆盖组 516 10.4 数据采样 524 10.5 覆盖选项 544 10.6 数据分析 550 第十一章 SV语言核心进阶 552 11.1 类型转换 552 11.2 虚方法 564 11.3 对象拷贝 575 11.4 回调函数 584 11.5 参数化的类 590 第十二章 UVM简介 392 8.2 UVM简介 414 8.3 UVM组件 420 8.4 UVM环境 425

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值