Продолжаю обновлять коллекцию блоков на Verilog-A.
Сейчас мне понадобился компаратор
Что нам нужно от компаратора обычно?
- Уровень лог единицы
- Скорость спада/нарастания (Slew Rate)
- Гистерезис
Погнали:
// VerilogA for TBSarge, Comparator, veriloga `include "constants.vams" `include "disciplines.vams" module Comparator(InP, InN, Out, gnd); input InP, InN; output Out; inout gnd; electrical InP, InN, gnd; electrical Out; parameter real Vdd = 3.3; parameter real Hist = 0.05; parameter real Front = 1; integer comptrig; analog begin @(cross(V(InP)-V(InN), +1)) comptrig = 1; @(cross(V(InP)-V(InN)-Hist, -1)) comptrig = 0; V(Out,gnd) <+ transition(comptrig ? Vdd:0, 0, Front); end endmodule
Со Slew Rate я решил не парится, а просто задавать время нарастания спада, для примера, пусть у нас Vdd = 3.3 В, фронт 600 нс, гистерезис 500 мВ
И в обратную сторону:
Гистерезис присутствует! 🙂
Вводим в привычку, блок можно слить в репе.