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

 
 
> помогите с оператором 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
Ответов
Dmitriyspb
сообщение Mar 18 2014, 02:37
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(gethan @ Mar 17 2014, 19:25) *
Всем доброго времени суток!
Помогите разобраться с оператором case и делителем частоты. Решил сделать делитель частоты,но такой,чтобы можно было изменять частоту при изменении некоторого 5 разрядного числа, назовем его fm1.

Может быть кому-то покажется странным, но вот мое творение для создания меандра:
нужно сделать так, чтобы при разных значениях fm1 выбирались разные значения переменной f15_1. Потом исходя из этого через выбранное количество отсчетов фронтов f50k формируются пички, и по ним в следующем процессе делается меандр.


Но все это к сожалению не работает. Пытаюсь все это реализовать на АPA300 в Libero. После синтеза и просмотра результата в ModelSim получается вот такая картина(.

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

Заранее благодарен)!


Приветствую 1111493779.gif
Прочел вопрос и проникся crying.gif
Чтобы быть кратким, то совсем недавно писал я подобный модуль. Писал я на verilog, и по своей структуре у меня получился n-ое кол-во делителей опорной частоты и мультиплексор. Очень просто и сердито=))) А мультиплексор выбирал выход одного из необходимых делителей частоты. По сути выбирался коэффициент деления опорной частоты. Хотя на вход мультиплексора можно засунуть что угодно.
ЭТА ИНФОРМАЦИЯ К СВЕДЕНИЮ АВТОРА=)) Я не стал разбираться с Вашим написанным кодом, НО КАК-ТО УЖ МНОГО НАПИСАНО=)) Мне кажется можно упростить. Возможно я не прав, не судите строго=)))


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
gethan
сообщение Mar 18 2014, 04:24
Сообщение #3


Участник
*

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



Цитата(Dmitriyspb @ Mar 18 2014, 06:37) *
Приветствую 1111493779.gif
Прочел вопрос и проникся crying.gif
Чтобы быть кратким, то совсем недавно писал я подобный модуль. Писал я на verilog, и по своей структуре у меня получился n-ое кол-во делителей опорной частоты и мультиплексор. Очень просто и сердито=))) А мультиплексор выбирал выход одного из необходимых делителей частоты. По сути выбирался коэффициент деления опорной частоты. Хотя на вход мультиплексора можно засунуть что угодно.
ЭТА ИНФОРМАЦИЯ К СВЕДЕНИЮ АВТОРА=)) Я не стал разбираться с Вашим написанным кодом, НО КАК-ТО УЖ МНОГО НАПИСАНО=)) Мне кажется можно упростить. Возможно я не прав, не судите строго=)))

Спасибо за информацию!Да, я согласен с Вами,что можно использовать N делителей частоты и мультиплексор, но как раз от этого и хочется уйти) А что если N будет настолько велико, что не хватит ресурсов ПЛИС?)
Не могли бы Вы поделиться кодом своего блока делителя частоты,вдруг это поможет?)спасибо))
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Mar 18 2014, 04:47
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(gethan @ Mar 18 2014, 08:24) *
Спасибо за информацию!Да, я согласен с Вами,что можно использовать N делителей частоты и мультиплексор, но как раз от этого и хочется уйти) А что если N будет настолько велико, что не хватит ресурсов ПЛИС?)
Не могли бы Вы поделиться кодом своего блока делителя частоты,вдруг это поможет?)спасибо))


На глаза попадется, отправлю=)
Там обычный счетчики, каждый из которого сбрасываются от разных констант....тем самым и получил различные длительности.

А если от этого уйти, тогда можно взять одЫн счетчик и сбрасывать его, сравнивая с переменной заданной величиной. Т.о. шаг деления будет равен периоду дискретизации опорной частоты.

Если есть ограниченный набор каких-то фиксированных некоррелированных частот, тогда просто мультиплексируем их.
Если есть возможность пользоваться опорной частотой, тогда можно реализовать на основе счетчика.

Цитата
А что если N будет настолько велико, что не хватит ресурсов ПЛИС?)

А у Вас та как?????????????????????=)))))))))))))))))))
Или вы собираетесь торговать этим модулем=)?!

Тут можно извращаться по разному. Я предлагаю самое простое. Какая задача та у Вас? Если вы отметили, что
Цитата
изменять частоту при изменении некоторого 5 разрядного числа

тогда у вас не более 32-х номиналов частот. У вас FPGA или CPLD?
Возьмите счетчик и сравнивайте его состояние с переменной величиной. Пусть он считает до 1... до 3 и т.д. В результате вы получите импульсную последовательность следующую с разной частотой.


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
gethan
сообщение Mar 18 2014, 05:42
Сообщение #5


Участник
*

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



Цитата(Dmitriyspb @ Mar 18 2014, 08:47) *
А если от этого уйти, тогда можно взять одЫн счетчик и сбрасывать его, сравнивая с переменной заданной величиной. Т.о. шаг деления будет равен периоду дискретизации опорной частоты.

Я так и пытаюсь сделать)сначала переменной присваиваю значение, которое выбирается из case,а затем работаю с выбранным значением. Как формируется меандр у меня: если переменная равно нулю,то ей присваивается значение N , и некому сигналу '1' на время равному одному такту опорной частоты. Затем происходит уменьшение N до нуля и все заново) и потом по 'пичкам' формируем меандр. Может быть и сложновато,но работало,пока не добавил case(( и где ошибка не вижу к сожалению...Помогите увидетьsm.gif

Цитата(Dmitriyspb @ Mar 18 2014, 08:47) *
Если есть ограниченный набор каких-то фиксированных некоррелированных частот, тогда просто мультиплексируем их.
Если есть возможность пользоваться опорной частотой, тогда можно реализовать на основе счетчика.

Все частоты, которые хочется получить, формируются из опорной. Вся проблема,наверное,в неправильной работе case((

Цитата(Dmitriyspb @ Mar 18 2014, 08:47) *
Если вы отметили, что

тогда у вас не более 32-х номиналов частот. У вас FPGA или CPLD?
Возьмите счетчик и сравнивайте его состояние с переменной величиной. Пусть он считает до 1... до 3 и т.д. В результате вы получите импульсную последовательность следующую с разной частотой.

Пытаюсь все это реализовать на Actel APA 300. 5 разрядное число приведено как пример.оно мб и больше)спасибо за ответы и советыsm.gif
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Mar 18 2014, 05:44
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(gethan @ Mar 18 2014, 09:33) *
Я так и пытаюсь сделать)сначала переменной присваиваю значение, которое выбирается из case,а затем работаю с выбранным значением. Как формируется меандр у меня: если переменная равно нулю,то ей присваивается значение N , и некому сигналу '1' на время равному одному такту опорной частоты. Затем происходит уменьшение N до нуля и все заново) и потом по 'пичкам' формируем меандр. Может быть и сложновато,но работало,пока не добавил case(( и где ошибка не вижу к сожалению...Помогите увидетьsm.gif


Все частоты, которые хочется получить, формируются из опорной. Вся проблема,наверное,в неправильной работе case((


Там все проще=)) Ладно, ищите ошибку... если уверены что все именно так стоит оставить=)

Код там примитивный 10 - 20 строк=) Счетчик (5 разрядов) + компаратор + формирователь меандра (триггер с обратной связью через инвертор).
6 триггеров + логика.

А вы такой листинг программы залупили=))

ModelSim вам в таком случае в помощь=))


--------------------
Победа - это когда N раз упал и N+1 раз встал.
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
||- - 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
- - gethan   Написал вот такой код: там два процесса. Сначала д...   Mar 23 2014, 13:09
- - sazh   Цитата(gethan @ Mar 23 2014, 16:09) Напис...   Mar 24 2014, 03:31
|- - Maverick   Цитата(sazh @ Mar 24 2014, 05:31) Ох уж э...   Mar 24 2014, 04:07
|- - 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 - 16:20
Рейтинг@Mail.ru


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