|
помогите с оператором case и делением частоты, не работает( |
|
|
|
Mar 17 2014, 15:25
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-02-14
Пользователь №: 80 654

|
Всем доброго времени суток! Помогите разобраться с оператором 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 получается вот такая картина(. Подскажите,пожалуйста,где ошибка,что не так, почему не работает! Заранее благодарен)!
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Mar 23 2014, 13:09
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-02-14
Пользователь №: 80 654

|
Написал вот такой код: там два процесса. Сначала делаем один меандр, потом по второму формируем другой. CODE frequancy8khz: process( f2_5) --частота f2_5 ранее сформированная частота из тактовой variable f8k: integer range 0 to 19 := 0; begin IF clr ='1' THEN f8k:=0; ELSIF rising_edge( f2_5 ) THEN IF f8k=0 THEN f8k:=19; else f8k:=f8k-1; end if; IF f8k>9 THEN freq8k<='1'; else freq8k<='0'; end if; end if;
end process;
f8k<=freq8k;
frequency15Hz_10: process (f8k) variable f15_10: integer range 0 to 11 :=0; BEGIN if clr ='1' THEN f15_10:=0; ELSIF rising_edge( f8k ) THEN if f15_10=0 THEN f15_10:=11; else f15_10:=f15_10-1; end if; IF f15_10>6 THEN freq15_10<='1'; else freq15_10<='0'; end if; end if;
END PROCESS;
Два одинаковых процесса,НО!!!! почему-то в одном (в первом процессе для частоты f8k) количество rising_edge(f2_5) считается правильно, т.е. по 10 на нулевое значение и на единичное значение сигнала freq8k. А во втором процессе почему то считает ровно в 2 раза меньше, чем указано. Как так? Помогите понять,почему так!?) На рисунке сигнал dfm1 - это переназванный сигнал f15_10, который должен отсчитывать по 6 rising_edge сигнала f256out1(f8k). Но он отсчитывает только по 3, в два раза меньше,чем надо.(( В чем дело,не пойму! Помогите,пожалуйста!;)
Сообщение отредактировал gethan - Mar 23 2014, 13:10
Эскизы прикрепленных изображений
|
|
|
|
Сообщений в этой теме
gethan помогите с оператором case и делением частоты Mar 17 2014, 15:25 cerg19 Если честно не совсем понял где сигнал fm управляе... Mar 17 2014, 15:47 gethan Цитата(cerg19 @ Mar 17 2014, 19:47) Если ... Mar 17 2014, 16:05 gethan Цитата(cerg19 @ Mar 17 2014, 19:47) Если ... Mar 17 2014, 17:19 tdocs.su Цитата(gethan @ Mar 17 2014, 19:25) Всем ... Mar 17 2014, 15:48 cerg19 с читабельным форматированием это значит примерно ... Mar 18 2014, 01:43 gethan Цитата(cerg19 @ Mar 18 2014, 05:43) с чит... Mar 18 2014, 02:14 Zerg1 Вот так не проще?
CODE
library IEEE;
use IEEE.STD... Mar 19 2014, 09:01  gethan Цитата(Zerg1 @ Mar 19 2014, 13:01) Вот та... Mar 19 2014, 15:21   Zerg1 У меня вот что рисует: Mar 19 2014, 17:51    gethan Цитата(Zerg1 @ Mar 19 2014, 21:51) У меня... Mar 19 2014, 18:44 Dmitriyspb Цитата(gethan @ Mar 17 2014, 19:25) Всем ... Mar 18 2014, 02:37 gethan Цитата(Dmitriyspb @ Mar 18 2014, 06:37) П... Mar 18 2014, 04:24  Dmitriyspb Цитата(gethan @ Mar 18 2014, 08:24) Спаси... Mar 18 2014, 04:47   gethan Цитата(Dmitriyspb @ Mar 18 2014, 08:47) А... Mar 18 2014, 05:42    Dmitriyspb Цитата(gethan @ Mar 18 2014, 09:33) Я так... Mar 18 2014, 05:44     gethan Цитата(Dmitriyspb @ Mar 18 2014, 09:44) Т... Mar 18 2014, 07:00      iosifk Цитата(gethan @ Mar 18 2014, 11:00) Подел... Mar 18 2014, 10:14       Dmitriyspb Цитата(iosifk @ Mar 18 2014, 14:14) На са... Mar 19 2014, 02:31    sazh Цитата(gethan @ Mar 18 2014, 08:42) Пытаю... Mar 18 2014, 06:09 Zerg1 Тогда вот так
CODE
library IEEE;
use IEEE.STD_LOGI... Mar 20 2014, 04:15 gethan Цитата(gethan @ Mar 17 2014, 19:25) Всем ... Mar 20 2014, 17:22 Dmitriyspb Цитата(gethan @ Mar 20 2014, 21:22) Может... Mar 21 2014, 02:45   sazh Цитата(Maverick @ Mar 24 2014, 07:07) Ста... Mar 24 2014, 04:29    Maverick Цитата(sazh @ Mar 24 2014, 06:29) Это не ... Mar 24 2014, 04:34 andrew_b Цитата(gethan @ Mar 23 2014, 17:09) Напис... Mar 24 2014, 06:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|