Всем доброго времени суток!
Помогите разобраться с оператором case и делителем частоты. Решил сделать делитель частоты,но такой,чтобы можно было изменять частоту при изменении некоторого 5 разрядного числа, назовем его fm1.
Может быть кому-то покажется странным, но вот мое творение для создания меандра:
нужно сделать так, чтобы при разных значениях fm1 выбирались разные значения переменной f15_1. Потом исходя из этого через выбранное количество отсчетов фронтов f50k формируются пички, и по ним в следующем процессе делается меандр.
Код
frequency1Hz: process (f50k, fm1)
variable f15: integer range 0 to 641:=0;
variable f15_1: integer range 0 to 641:=0;
begin
if Clr = '1' then
f15_1:=0;
f15:=0;
freq15<='0';
ELSIF true THEN
if rising_edge(f50k) THEN
if f15_1 = 0 then
case fm1 is -- выбор значений f15_1 при разных значениях fm1
when "00000" =>
f15_1 := 16;
when "00010" =>
f15_1 := 119;
when "00011" =>
f15_1 := 104;
when "00100" =>
f15_1 := 92;
when "00101" =>
f15_1 := 83;
when "00110" =>
f15_1 := 75;
when "10110" =>
f15_1 := 64;
when "00111" =>
f15_1 := 641;
when others => null;
end case;
end if;
if f15=0 then
f15 := f15_1; --присваиваем переменной выбранное значение
freq15<='1';
else
f15:=f15-1; -- отсчитываем назад до нуля и когда f15 снова станет 0, на длительность такта f50k появляется 1.
freq15<='0';
end if;
end if;
end if;
END PROCESS;
freq15Hz: process (f50k) --делаем меандр
begin
if clr='1' then
f15<='0';
elsif true then
if rising_edge (f50k) then
if freq15='1' then
if f15='0' then
f15<='1';
elsif true then
f15<='0';
end if;
end if;
end if;
end if;
end process;
Но все это к сожалению не работает. Пытаюсь все это реализовать на АPA300 в Libero. После синтеза и просмотра результата в ModelSim получается вот такая картина(.
Подскажите,пожалуйста,где ошибка,что не так, почему не работает!
Заранее благодарен)!
Эскизы прикрепленных изображений