Continue to Site

# Help me understand this verilog-A code

Status
Not open for further replies.

#### dragonfury

##### Member level 4
This is a code for a comparator

"
module comparator(sigin, sigref, sigout);
input sigin, sigref;
output sigout;
electrical sigin, sigref, sigout;
parameter real sigout_high = 2.5;
parameter real sigout_low = 0;
parameter real sigin_offset = 0;
parameter real comp_slope =1;

analog begin

@ ( initial_step ) begin
if (sigout_high <= sigout_low) begin
$display("Range specification error. sigout_high = (%E) less than sigout_low = (%E).\n", sigout_high, sigout_low );$finish;
end
end

V(sigout) <+ 0.5 * (sigout_high - sigout_low)
* tanh(comp_slope*(V(sigin, sigref)- sigin_offset))
+ (sigout_high + sigout_low)/2;

"

I need to understand the following part of the code.
V(sigout) <+ 0.5 * (sigout_high - sigout_low)
* tanh(comp_slope*(V(sigin, sigref)- sigin_offset))
+ (sigout_high + sigout_low)/2;

Just want to know what it is this part doing exactly
Regards

It's very easy kindergarden level mathematics.

Consider y=S*tanh(A*x)

If A*x=+inf then y=+S
If A*x=-inf then y=-S
If A*x=0 then y=0

dy/dx=S*A*{sech(A*x)}**2

sech(0)=1 so dy/dx at x=0 is S*A

From these, V(sigout) is from sigout_low to sigout_high and is centered at (sigout_high+sigout_low)/2.

Slope at V(sigin, sigref)=sigin_offset is 0.5*(sigout_high - sigout_low)*comp_slope.

Last edited:

Status
Not open for further replies.