CONSTANT MAXPOW = 100;
CONSTANT HALF_MAXPOW = MAXPOW / 2;
CONSTANT WIDTHAD = CEIL(LOG2(MAXPOW));
SUBDESIGN S2PWM
(
Clk : INPUT;
Power[WIDTHAD-1..0] : INPUT;
PWM : OUTPUT;
)
VARIABLE
Value[WIDTHAD..0] : DFF;
Phase[WIDTHAD..0] : DFF;
Delta[WIDTHAD..0] : NODE;
BEGIN
Value[].clk = Clk;
Phase[].clk = Clk;
if Phase[] == 0 then
Phase[] = MAXPOW - 1;
Delta[] = HALF_MAXPOW;
else
Phase[] = Phase[] - 1;
if Value[WIDTHAD] then
Delta[] = Value[] + MAXPOW;
else
Delta[] = Value[];
end if;
end if;
Value[] = Delta[] - (0, Power[]);
PWM = Value[WIDTHAD];
END;