当前位置: 首页 > news >正文

sv时钟块中default input output以及@(cb)用法总结

在时钟块中,加入default input output可以自定义采样和驱动时间。

其中input是指时钟块在时钟沿后多久去采样输入,output是指多久去驱动

如果没有default,也是会有默认值的,input为1step,output为0。

    clocking cb @(posedge clk);default input #1step output #1ps;output c;endclocking

以代码为例,input #1step是指在时钟沿后1step去采样,output #1ps是指在1ps后驱动。

但事情并没有这么简单!

首先看如下代码示例:

interface tf(input clk);logic [3:0] a,b,c;clocking cb @(posedge clk);default input #1step output #1ps;input a;output c;endclockingendinterfacemodule test;bit clk = 0;tf t(clk);rd rd_test;initial beginforever begin#5ns;clk = ~clk;endendinitial begint.a = 0;t.b = 0;t.c = 0;repeat(5)@(posedge clk);t.a <= 1;repeat(5)@(posedge clk);t.a <= 0;repeat(5)@(posedge clk);repeat(5)@(posedge clk);repeat(5)@(posedge clk);$finish; endinitial beginforever begin@(posedge t.clk);if(t.a == 1)t.c <= 1;elset.c <= 0;endendinitial begin$fsdbDumpfile("tst.fsdb");$fsdbDumpvars(0,test);endendmodule

代码逻辑很简单,先把a驱动成1,过一会驱动成0,当采样到a为1后,再将c赋值为1,这里我们先不使用cb来驱动和采样,波形如下:

这里我们可以看到,在给a驱动1后,下一个clk才能采样到a为1,然后c才会被驱动成1。

如果换成cb,情况和前面是一样的。

    initial beginforever begin@(t.cb);if(t.cb.a == 1)t.cb.c <= 1;elset.cb.c <= 0;endend

如果a信号没有放在cb里,直接用vif驱动呢?

interface tf(input clk);logic [3:0] a,b,c;clocking cb @(posedge clk);default input #1step output #1ps;output c;endclockingendinterfacemodule test;bit clk = 0;tf t(clk);rd rd_test;initial beginforever begin#5ns;clk = ~clk;endendinitial begint.a = 0;t.b = 0;t.c = 0;repeat(5)@(posedge clk);t.a <= 1;repeat(5)@(posedge clk);t.a <= 0;repeat(5)@(posedge clk);repeat(5)@(posedge clk);repeat(5)@(posedge clk);$finish; endinitial beginforever begin@(t.cb);if(t.a == 1)t.cb.c <= 1;elset.cb.c <= 0;endendinitial begin$fsdbDumpfile("tst.fsdb");$fsdbDumpvars(0,test);endendmodule

可以看到,这里a和c在同一个时钟沿后变化了,但c因为cb还是落后了时钟沿1ps。

为什么会这样?大家可能会以为@(posedge t.clk)和@(t.cb)实现的效果是一样的,都是等一个clk,但实际结果并不是。

因为在@(t.cb)后,就以cb的default进行采样了,而不是clk进行采样。这里在@(t.cb)后,会在时钟沿后1step进行采样,但此时a已经被驱动为1了,所以就采样到了a为1的情况,就将c赋值为1了,所以就得到了a和c在同一个周期被赋值为1的情况。

如果将@(t.cb)改成@(posedge t.clk),那么对a的采样就是0,因为此时还没对a进行赋值,所以c就在下一个clk才知道a为1,就是c落后a一个clk的情况。

如果在@(t.cb)的情况下,将a的赋值delay 1ps,也是c落后a的情况,因为cb的采样在时钟沿后1step,a的赋值在时钟沿后1ps,采样到的值是0。


文章转载自:

http://4CsRhD8V.pwppk.cn
http://79xrgSGP.pwppk.cn
http://XgIhQ7vC.pwppk.cn
http://WmOvIjPl.pwppk.cn
http://3Q3CzsR9.pwppk.cn
http://jE9rwJqy.pwppk.cn
http://2UsZn8Qo.pwppk.cn
http://2UXymT9u.pwppk.cn
http://lhv2wKjk.pwppk.cn
http://HJ4FaVoi.pwppk.cn
http://oHwN0gps.pwppk.cn
http://CGK7ke8P.pwppk.cn
http://yf2efzyk.pwppk.cn
http://0geGwjQK.pwppk.cn
http://aIcbinwN.pwppk.cn
http://mn80iQEP.pwppk.cn
http://0mNM5JUM.pwppk.cn
http://myBV2eJJ.pwppk.cn
http://8zghIskc.pwppk.cn
http://riXqIPvW.pwppk.cn
http://irNPWdo4.pwppk.cn
http://CzJsaB8t.pwppk.cn
http://0Ksto4AO.pwppk.cn
http://V5pGUMgh.pwppk.cn
http://CMQNJ8iI.pwppk.cn
http://MetoLZeo.pwppk.cn
http://JGhBXuaX.pwppk.cn
http://9t83zoKn.pwppk.cn
http://Ecxc1dDc.pwppk.cn
http://MoK906ge.pwppk.cn
http://www.dtcms.com/a/379438.html

相关文章:

  • 广谱破局!芦康沙妥珠单抗覆罕见突变,一解“少数派”的用药困境
  • Guli Mall 25/08/12(高级上部分)
  • 彩笔运维勇闯机器学习--随机森林
  • Python 面向对象实战:私有属性与公有属性的最佳实践——用线段类举例
  • 使用deboor法计算三次B样条曲线在参数为u处的位置的方法介绍
  • 认识HertzBeat的第一天
  • AUTOSAR进阶图解==>AUTOSAR_EXP_ApplicationLevelErrorHandling
  • 线程同步:条件变量实战指南
  • OpenLayers数据源集成 -- 章节七:高德地图集成详解
  • AI助推下半年旺季,阿里国际站9月采购节超预期爆发
  • 电商平台拍立淘API接口调用全解析(基于淘宝/唯品会技术实践)
  • 9.11 Qt
  • 字节一面 面经(补充版)
  • 第二章 ELK安装部署与环境配置
  • I2C 总线
  • 设计模式——七大常见设计原则
  • 请创建一个视觉精美、交互流畅的进阶版贪吃蛇游戏
  • 利用美团龙猫添加xlsx的sheet.xml读取sharedStrings.xml中共享字符串输出到csv功能
  • 时序数据库:定义与基本特点
  • 【WorkManager】Android 后台任务调度的核心组件指南
  • python项目批量安装包和生成requirements.txt文件
  • 零部件力学测试系统参数
  • 3D Web轻量引擎HOOPS赋能BIM/工程施工:实现超大模型的轻量化加载与高效浏览!
  • Java Web应用的安全性与防护措施!
  • 填写简历信息
  • 优先算法——专题十一:字符串
  • [Spring Cloud][3]从零开始简单工程搭建实践详解,远程调用
  • 为什么要显示调用析构函数
  • MySQL 数据完整性与约束:从基础到实战,守护数据准确性
  • Python中的“占位符”艺术:深入理解pass关键字的妙用