Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
VCO_GEN:
block
--------------------
signal startup : boolean := true;
signal startup_cnt : integer := 5;
--------------------
signal period : time := 0ps;
signal delta : time := 1ps;
--------------------
signal VCO_EN : boolean := false;signal VCO_FD0 : std_logic := '0';
signal VCO_FD1 : std_logic := '0';
--------------------
begin
--****************************
process begin
if CLKIN = '1' and CLKIN'event then
if startup_cnt /= 0 then
startup_cnt <= startup_cnt -1;
else
startup <= false;
VCO_EN <= not startup;
end if;
end if;
if MSEL'event or DF'event or period'event then
startup <= true;
startup_cnt <= 5;
VCO_EN <= false;
end if;
wait on CLKIN, MSEL, DF;
end process;
PLL_LOCKED <= '1' when not(startup) else '0';
process -- calculate period of input frequency
variable prv_time : time := 0ps;
variable cur_time : time := 0ps;
begin
wait until CLKIN = '1' and CLKIN'event;
prv_time := cur_time;
cur_time := now;
if not(startup) then
period <= now - prv_time;
end if;
end process;
process begin -- phase shifter
if DF = '0' then
delta <= period / conv_integer(unsigned(MSEL));
else
delta <= period / conv_integer(unsigned(MSEL)) / 2;
end if;
assert delta < 2.5ns
report "Frequency to large!! In module : */CMG/VCO_GEN"
severity FAILURE;
wait on MSEL, DF, period;
end process;
VCO <= not VCO after delta/2 when VCO_EN = true else '0' ;
--****************************
end block;
вот асерт вам скорее всего летел в ворнинги тока вы на него не смотрели