verilog-A建模针中遇到的问题
件内),只有开始半个周期是-1伏,后来却只在200mA浮动并且是锯齿波。问题出在哪呢。
analog begin
@(initial_step) begin
n=0; t=Tc/2; end
@(timer(t)) begin
n=!n;
t=t+Tc/2; end
V(ref)<+transition((n?v1:v0),td,tr,tf);
这个代码是参照一个例子写的,对verilog-A的语法还不熟。
看起来没有问题阿!
请注意 tc td tr tf的关系,是不是td trtf 太长了!
我td,tr,tf设的都是0,仿真的是理想情况啊
你的搞得太复杂了! 我没有看出来你的房拨周期怎么设定的!
其实最简单的就是 将abstime 引入程序就可以了吧
你的代码没有问题,我已经仿真验证!
我认为应该是 仿真设置的问题,请将td tr tf 设置一下,比如1n,然后仿真 就可以了!
问题是仿真器不知道在哪些地方信号会突然变化,如果用Spectre仿真,加一条语句可以解决问题的,我忘了是什么什么语句了,在帮助中找一下吧。
代码没问题
印象中我也遇到过这种问题。好像tr tf 不能为零的,你需要设置一个很小的值,但不能为零。microuser兄弟的解决方法应该是对的。
td,tr,tf可以是零的,我仿过没有问题的,小编可以自己拿个信号试试
上面我说了,加一条语句应该可以解决问题。我查了查Cadence中的手册,这条语句是$bound_step,例如,你可以试试:
- $bound_step(0.01*Tc);
谢谢大家的帮助!
我现在知道是什么问题了,瞬态仿真时我设的时间太长,系统默认的步长》方波的周期,当然采样不到正确的信号了。
希望大家也别范我这种低级错误了~
仿真时间太长害死人啊
学习中 哈哈
I met the same problem and I found I made the same mistake as #1
t=t+T/2? plase remove
的确仿真步长在仿vco或者环路稳定性的时候非常的重要 要仔细设置
学学习了,
哦,小细节的问题,学习了
bound_step()是一个限定仿真步长的语句,括号中给的数值限定了仿真步长的最大值。