关于verilog中$time的用法

在SoC PLL替换仿真过程中,发现利用$time计算时钟周期出现分频问题。初始设置为1ns时间单位,调整为1ps后,lock信号变为不定态。经排查,发现缺少等待时间控制导致X态。修正时间控制后,lock信号恢复正常,但依然分频,原因是$time计算错误。进一步检查发现,timescale修改未生效是因为VCS仿真命令行参数timescale_override设定了固定的时间单位。修正该参数后,仿真结果符合预期,实现4倍频。
摘要由CSDN通过智能技术生成

最近有个小任务,需要把原来SoC中的PLL替换一下,然后就想仿真看一下能不能用。
因为仿真时用的是行为模型,它有一个参考时钟采集频率的模块,后面会拿来计算一个周期多长。
如下所示:
real current;
real clkref_cycle;

initial begin
current<=0.0000;
clkref_cycle<=10000.0000;
end

always @ (posedge clkref) begin
current<= $time;
clkref_cycle<= $time - current;
end
然后是(cycle/反馈分频系数N)跟固定值比大小。
如果<a,则为固定值x;
如果a< 且<b,则保持原值;
如果>b,则为固定值y。
得到的这个结果就是某个时钟的时钟周期。

而$time是用来返回当前系统时间的,64位整数的形式,常用于仿真时,与"`timescale 时间单位/时间精度"中的"时间单位"有关系。

第一次修改,我就直接修改了时间单位,从原来的1ns改为了1ps,以及相应的时钟周期25M
和操作延时,然后分频系数与模型自带的仿真tb里一致,是4倍频,其余都保持与自带的一致。

结果是:变成了分频,而且lock信号为不定态。
追查原因是等待时间控制没有给定,所以造成 X态,导致lock信号变为X态。

第二次修改,修改了给定时间控制。

结果是:l

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落秋_Edge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值