`include "constants.vams"
`include "disciplines.vams"
module pi( clk0, clk90, clk180, clk270, clksyn, clkref, code0, code1, code2, code3, code ) ;
output clk0, clk90, clk180, clk270, code;
input clksyn, clkref ;
input code0, code1, code2, code3;
voltage clk0, clk90, clk180, clk270, clksyn, clkref, code ;
voltage code0, code1, code2, code3;
parameter real vcc = 1 from (0:inf);
//parameter real td = 0 from [0:inf);
//parameter real tr = 1p from [0:inf);
//parameter real tt = 0 from [0:inf);
parameter integer dir = 1 from [-1:+1] exclude 0;
parameter real clkfreq = 6e9 from (0:inf);
parameter real PI_step = 32;
integer c0, c1, c2, c3;
real resolution;
real clkperiod ;
integer validcode ;
analog begin
clkperiod = 1/clkfreq ;
resolution = clkperiod/PI_step;
@(cross(V(clksyn) - vcc/2 , dir)) begin
c0 = (V(code0)>vcc/2) ? 1:0;
c1 = (V(code1)>vcc/2) ? 1:0;
c2 = (V(code2)>vcc/2) ? 1:0;
c3 = (V(code3)>vcc/2) ? 1:0;
validcode = c0 + 2*c1 + 4*c2 + 8*c3 ;
end
V(clk0) <+ absdelay(V(clkref), validcode*resolution);
V(clk90) <+ absdelay(V(clkref), validcode*resolution+clkperiod/4);
V(clk180) <+ absdelay(V(clkref), validcode*resolution+clkperiod/2);
V(clk270) <+ absdelay(V(clkref), validcode*resolution+3*clkperiod/4);
V(code) <+ validcode;
end
endmodule
The above has no syntax error and it is able to run simulation.
However, if the input transition clkref & clksyn arrive at the same time, it produces error! How to solve this? add delay?
just tried out with other codes, it produced error