реклама на сайте
подробности

 
 
> помогите с оператором case и делением частоты, не работает(
gethan
сообщение Mar 17 2014, 15:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 получается вот такая картина(.

Подскажите,пожалуйста,где ошибка,что не так, почему не работает!

Заранее благодарен)!
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gethan
сообщение Mar 23 2014, 13:09
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
sazh
сообщение Mar 24 2014, 03:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(gethan @ Mar 23 2014, 16:09) *
Написал вот такой код: там два процесса. Сначала делаем один меандр, потом по второму формируем другой.

Посмотрите в RTL что у Вас получилось.
Если б выложили файлы с тестбенчем, может кто и проанализировал. Как два взаимосвязанных счетчика реализовать.
Ох уж этот VHDL. Пора наверное что то подправить в консерватории.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Mar 24 2014, 04:07
Сообщение #4


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(sazh @ Mar 24 2014, 05:31) *
Ох уж этот VHDL. Пора наверное что то подправить в консерватории.

Старая поговорка гласит - "На вкус и цвет товарищей нет"
смысл затевать очередной халивар?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01428 секунд с 7
ELECTRONIX ©2004-2016