这里把利用 verilog-a 模型实现迟滞比较器的方法记录一下。
关于迟滞比较器,在实际的模型的构建中主要是考虑利用 @cross 语句来确定不同的翻转点, 这里需要注意的是初态的设置以保证翻转的触发。具体的 verilog-a model 描述如下
// VerilogA for comparator with hysteresis `include "constants.vams" `include "disciplines.vams" module comparator (out,inp,inn); inout inp, inn; output out; electrical inp, inn, out; parameter real offset = 0; // Offset voltage (V) parameter real hyst = 100m from [0:inf); // Hysteresis (V) parameter real thrlo = offset - 0.5*hyst; // Lower threshold voltage (V) parameter real thrhi = offset + 0.5*hyst; // Upper threshold voltage (V) parameter real vh=3.3; parameter real vl=0; parameter real ttol = 2p; parameter real td=20p; parameter real tt=10p; real n; analog begin @(initial_step) begin if (V(inp,inn)>=offset) n=1; else n=0 ; end @(cross(V(inp,inn)-thrhi, 1, ttol)) n = 1; @(cross(V(inp,inn)-thrlo, -1, ttol)) n = 0; V(out) <+ transition(n ? vh : vl, td, tt); end endmodule
这里的主要问题是模型只能用于瞬态的分析,考虑到迟滞比较器的应用情况,上面的模型基本还是够用的。我们可以通过仿真来看下模型是否工作,对其做瞬态分析(输入信号的缓慢斜升/降),可以绘制得到下面的迟滞窗口,可见工作正常
请问可以给一个strong arm latch 的模型吗?
关注作者了。我这个小白找到了一个大神的博客呀!大神有没有什么交流群,让小弟我觐见一下
我想问下 您这个初始状态是怎么而设置的?还有仿真的时候是如何设置的呢?我参照这个写了一段程序,但是仿真结果总出不来,不知道是什么原因啊~
上面说的个初始状态那就是 model中的 @(initial_step) 部分。仿真的话,当时用的 cadence 版本里面的dc分析还没有迟滞分析的选项,所以用的是瞬态仿真,就是比较器一端接Vdc, 一端用Vpwl 做个先上升后下将的电压,最后在波形窗口里面把这个Vpwl作为x轴。
就是说 初始状态要设为“tran”,然后进行瞬态分析,是不?我做的dc分析出来结果始终为零。我再试试哈~O(∩_∩)O谢谢