0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何捕获后门路径信号的跳变?

sanyue7758 来源: 验证芯发现 2023-09-24 11:34 次阅读

使用后门方式测量时钟频率的需求来源更多是SOC验证的场景,由于SOC的规模较大,一次编译时间成本较高,在N个小时级别。如果采用前门方式,比如编写测量频率的module或者interface,一旦有新的测量需求则就需要TB重新连接时钟信号,重新编译环境。

此前的一篇文章,提出了一个问题:如何后门准确地捕获到信号地跳变沿?

如何捕获后门路径信号的跳变?

69b0daa2-5960-11ee-939d-92fbcf53809c.png

如果无法精确捕获到信号地跳变沿,那么也就无法"精确地"测量出时钟地频率。容易想到的办法,是可以使用如下的方法进行测量:

bitdut_value=1
//step1:找到信号低电平
while(dut_value)begin
hdl_read("xxx",dut_value)
#N
end

//step2:找到高电平,作为测量的第一个上升沿时刻
bitdut_value=0
//找到信号低电平
while(!dut_value)begin
hdl_read("xxx",dut_value)
#N
end

//step3:找到低电平,作为下降沿
...
//step4:找到高电平,作为测量的第二个上升沿。记录此时的仿真时间,减去step2的仿真时间,得到时钟周期
...

上述的代码需要考虑如下问题:

时钟频率,时钟频率的大小决定了两次后门读取的间隔,即上述代码中的#N,这也是后门方式测不准的来源。

timescale,dut信号的timescale和后门测量所在的scope的timescale可能并不一致。

那怎么解决测不准的问题?

第一次意识到这个问题,作者也曾一度陷入苦思冥想,始终找不到完美的解决办法。曾经也想过用#1step来进行step级别的delay,但也由于仿真器的差异、环境结构的差异,表现不够稳定。虽然已过去了近一年的时间,工作也换了新的公司,还好对此的思考没有停止。

最近终于开发出了clock_probe_pkg,一个可以使用后门方式,精确测量时钟频率的package。

请看下面的demo:

`timescale1ps/1ps
moduletb;
importclock_probe_pkg::*;
regclk1,clk2,clk3;

initialbegin
clk1=0;
clk2=0;
clk3=0;
fork
foreverbegin#11;clk1=~clk1;end
foreverbegin#17;clk2=~clk2;end
foreverbegin#19;clk3=~clk3;end
join_none
end
initialbegin
realfreq1,freq2,freq3;
#100;
get_clock_freq("tb.clk1",freq1);
get_clock_freq("tb.clk2",freq2);
get_clock_freq("tb.clk3",freq3);
$display("freq1=%f,freq2=%f,freq3=%f",freq1,freq2,freq3);
$finish();
end
endmodule

仿真结果如下:

clock_probe_pkg:getclockhier:tb,2
clock_probe_pkg:getclockscopetimeunit:-12
clock_probe_pkg:@110.000000tb.clk1=0,0
clock_probe_pkg:@121.000000tb.clk1=1,1
clock_probe_pkg:@132.000000tb.clk1=0,2
probeclockfreqdone,freq=45454.545455@0
clock_probe_pkg:getclockhier:tb,2
clock_probe_pkg:getclockscopetimeunit:-12
clock_probe_pkg:@153.000000tb.clk2=1,0
clock_probe_pkg:@170.000000tb.clk2=0,1
clock_probe_pkg:@187.000000tb.clk2=1,2
probeclockfreqdone,freq=29411.764706@0
clock_probe_pkg:getclockhier:tb,2
clock_probe_pkg:getclockscopetimeunit:-12
clock_probe_pkg:@209.000000tb.clk3=1,0
clock_probe_pkg:@228.000000tb.clk3=0,1
clock_probe_pkg:@247.000000tb.clk3=1,2
probeclockfreqdone,freq=26315.789474@0
freq1=45454.545455,freq2=29411.764706,freq3=26315.789474
$finishcalledfromfile"testbench.sv",line26.
$finishatsimulationtime266

clock_probe_pkg可以自动识别时钟信号所在scope的timescale,而且仅有一个接口,方便使用。get_clock_freq:

taskget_clock_freq(stringpath,outputrealx_freq);
...
endtask

第一个参数为字符串类型的时钟信号的后门路径,第二个参数即为返回的时钟频率,单位为MHz。

clock_probe_pkg也是目前作者能找到的"完美"解决方案。虽然这个需求非常小众,可能也不一定能完全满足需求,可能后续还会更好的解决方案,但这个尝试的过程,作者觉得仍然是有意义的尝试,因为:

真理存在于寻求过程之中。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • soc
    soc
    +关注

    关注

    38

    文章

    4161

    浏览量

    218152
  • 信号
    +关注

    关注

    11

    文章

    2789

    浏览量

    76727
  • 时钟频率
    +关注

    关注

    0

    文章

    49

    浏览量

    20333
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68516
  • 高电平
    +关注

    关注

    6

    文章

    148

    浏览量

    21366

原文标题:耗时一年,终于测准了时钟频率

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    信号怎么测量频率切换时间

    随着技术发展,频电台、捷变频雷达、宽带频雷达等设备的频率范围越来越宽,频率切换时间越来越短,从而产生了两个测试难题.
    发表于 03-29 15:25 4574次阅读

    tc377调试pwm输入捕获,输入频率小于10hz时输入占空比就会的原因?

    我在调试pwm输入捕获遇到一个问题,我用的是tc377的板件,当输入频率小于10hz时输入占空比就会(0和输入占空比之间)您能帮我简单的分析一下是什么原因造成的吗?有什么解决方案,或者在初始化时有什么滤波的 结构体可以配置。
    发表于 03-05 06:39

    如何用LabVIEW检测下降沿

    如何用LabVIEW检测信号的下降沿并记录次数
    发表于 03-05 15:49

    如何用LabVIEW检测下降沿

    如何用LabVIEW检测信号的下降沿并记录次数
    发表于 03-05 15:51

    霍尔信号沿,并且能把捕获间隔的时长用通用定时器计数得到,但是捕获计数怎么差这么多?

    各位老师好,我想测一下电机霍尔信号的间隔时间是否一致,我现在捕获霍尔信号沿,并且能把捕获间隔
    发表于 05-21 20:41

    ADL5304接通电源时,输出信号,请问是什么原因?

    ADL5304输入端是光电二极管,二极管已经做了遮光处理(不漏光),但是接通电源时,ADL5304输出信号。下面有正常信号
    发表于 08-03 07:57

    AD2S1210位置信号

    使用AD2S1210进行位置读取,在恒转速模式下,串口模式SPI读取的位置信号(12位)偶尔会出现异常跳,如附件显示(读取的位置误差,两个数据之间的时间为100us,单位弧度)。
    发表于 11-25 19:47

    什么是捕获?如何去输入捕获模式

    捕获和比较捕获什么是捕获所谓捕获就是通过检测捕获通道上的边沿信号。在边沿
    发表于 07-16 15:22

    什么是输入捕获?STM32输入捕获

    ,简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的
    发表于 01-06 07:54

    采用AD603对传感器接收到的信号放大时,遇到信号怎么解决?

    采用AD603对传感器接收到的信号放大时,遇到信号问题。采用AD603进行程控放大,把前面的串扰缩小, 对有效信号进行放大,在有效
    发表于 11-14 06:07

    SOC时序分析中的

      点是所有重要时序分析工具中的一个重要概念。点被时序分析工具用来计算设计节点上的时延与过渡值。
    发表于 09-15 10:48 1727次阅读
    SOC时序分析中的<b class='flag-5'>跳</b><b class='flag-5'>变</b>点

    基于时频投影的信号分选研究

    提出一种基于时频投影的信号分选算法。从频域投影信号分选出潜在信号频率集合。根据
    发表于 06-21 17:42 20次下载
    基于时频投影的<b class='flag-5'>跳</b>频<b class='flag-5'>信号</b>分选研究

    基于双谱频率估计的快捕获方法

    ,BFE)的捕获方法。该方法通过重构解信号,计算重构信号的双谱(三阶自相关函数的傅里叶变换)来估计当前
    发表于 12-21 10:16 7次下载

    多FPGA解决航天测控信号捕获问题的方案

    多片FPGA组成的星形系统可解决频和直接序列混合扩频(FHDS)卫星测控信号大时延差高动态条件下的快速捕获问题。捕获搜索时采用1“主”+N“副”形式的Multi-FPGA组分时进行多
    发表于 11-16 15:11 1678次阅读
    多FPGA解决航天测控<b class='flag-5'>信号</b>的<b class='flag-5'>捕获</b>问题的方案

    如何在不间断测试中抓捕记录信号?与之解决办法

     工程师在日常测试中,是否有遇到产品不稳定经常被干扰、偶发性问题又抓不到这样的技术问题?例如时序的波动、幅值的等。如何在连续不间断的测试中抓捕并记录这些
    的头像 发表于 03-11 17:10 2414次阅读