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

SV——Clocking block的应用

在system verilog中,clocking block是一种简化时钟域信号同步和采样的机制。可以帮助验证工程师简化复杂时序问题,尤其是在测试平台中,既要对信号进行驱动,又要对信号进行采样。

clocking block块一般有以下应用场景:

(1)Driver:用于将激励信号驱动到DUT;

(2)Monitor:用于从DUT采样信号并传递给环境中的其他组件;

举例:

假设我们有一组APB接口,包含时钟pclk,复位信号presetn,输入信号(站在DUT的角度)psel、penable、pwrite、paddr、pwdata,输出信号(站在DUT的角度)prdata、pready、pslverr;

则可以定义如下的clocking_block来供driver和monitor使用;

interface apb_if (input bit pclk, input bit presetn);
    logic        psel    ;
    logic        penable ;
    logic        pwrite  ;
    logic [31:0] paddr   ;
    logic [31:0] pwdata  ;
    logic        pready  ;
    logic [31:0] prdata  ;
    logic        pslverr ;

    // 定义用于 Driver 的 clocking block
    clocking drv_cb @(posedge clk);
        default input #1step output #1;// 默认输入延迟1步,输出延迟1时间单位
        output psel    ;               // 驱动 psel   (站在drv视角)
        output penable ;               // 驱动 penable(站在drv视角)
        output pwrite  ;               // 驱动 pwrite (站在drv视角)
        output paddr   ;               // 驱动 paddr  (站在drv视角)
        output pwdata  ;               // 驱动 pwdata (站在drv视角)
        input  pready  ;               // 采样 pready  (站在drv视角)
        input  prdata  ;               // 采样 prdata  (站在drv视角)
        input  pslverr ;               // 采样 pslverr (站在drv视角)
    endclocking

    // 定义用于 Monitor 的 clocking block
    clocking mon_cb @(posedge clk);
        default input #1step;
        input  psel    ;               // 采样 psel   (站在mon视角)
        input  penable ;               // 采样 penable(站在mon视角)
        input  pwrite  ;               // 采样 pwrite (站在mon视角)
        input  paddr   ;               // 采样 paddr  (站在mon视角)
        input  pwdata  ;               // 采样 pwdata (站在mon视角)
        input  pready  ;               // 采样 pready  (站在mon视角)
        input  prdata  ;               // 采样 prdata  (站在mon视角)
        input  pslverr ;               // 采样 pslverr (站在mon视角)
    endclocking
endinterface

注意:

(1)实际应用clocking block时,我们往往会通过波形发现,对于采样信号,环境中使用的clocking_block块的值 = 时钟上升沿后的值,这是因为clocking_block块中的信号采用(阻塞赋值=)的方式,信号值的变化在active区域执行,因此从波形上观察,仿佛是时钟沿后的值有效一样,在下例中,pslverr为1的时刻是567ns,正是这一现象;

但如果查看的是接口的logic信号,而不是mon_cb内的信号,则无此困扰,如下:

因此建议,环境中引用mon_cb中的信号,但查看波形时,观察interface中的logic信号;

相关文章:

  • Spring Boot2.0之十 使用自定义注解、Json序列化器实现自动转换字典类型字段
  • 【Linux】Linux常用命令
  • Spring Boot 项目中如何在 `pom.xml` 文件中引入本地 JAR 包
  • 「JVS更新日志」低代码、企业会议、智能BI、智能排产2.26更新说明
  • 使用TortoiseGit配合BeyondCompare实现在Git仓库中比对二进制文件
  • QML Text部件的使用
  • JavaScript系列(90)--前端脚手架开发
  • 用Golang与WebAssembly构建高性能Web应用:详解`syscall/js`包
  • 大语言加持的闭环端到端自动驾驶模型 学习笔记纯干货
  • Linux:权限
  • pyrender 自动计算相机 pose
  • 机器学习——李航(实验)笔记第一二章
  • 电子元器件识别图大全、符号对照表
  • 【TCAD】Sentaurus 中的“陷阱trap”仿真设置
  • 对象存储之Ceph
  • halcon三维点云数据处理(二十八)reconstruct_3d_object_model_for_matching
  • 笔记20250226
  • Ubuntu22中的bash脚本记录
  • 【Linux 进程状态】—— 从创建到消亡的全生命周期
  • QT初学——helloworld
  • 刘永明|在从普及到提高中发展新大众文艺
  • 脑血管支架:救命神器还是定时炸弹?听听医生的大实话
  • 王毅人民日报撰文:共商发展振兴,共建中拉命运共同体
  • 加强战略矿产出口全链条管控工作部署会召开
  • 新疆交通运输厅厅长西尔艾力·外力履新吐鲁番市市长候选人
  • 人民时评:莫让“假俗乱”讲解侵蚀“文博热”