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

 
 
> синтез частоты, не работает(
mcaffee
сообщение Mar 11 2013, 19:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 9-10-12
Пользователь №: 73 873



Всем доброго времени суток!
На работе пытаемся организовать такой процесс(синтез частоты путем DDS) :через spi загружается 40 разрядный входной код. Этот код поступает в сумматор. С выхода сумматора от получившейся суммы берутся 10 старших разрядов и они сравниваются с таблицей синусов. На выходе соответственно получается 10 разрядов кода синуса. Предполагается далее подать это на цап и увидеть синус. Но возникла проблема.( При проверки правильности работы плис обнаружилось,что сумматор работает правильно,это подтвердилось проверкой на осциллографе и в ModelSIm, а вот сравнение по таблице синусов дает сбой( Выдает неправильные значения из таблицы,некоторых в таблице даже нет! Очень странно(
Вот фрагменты кода, отвечающего за сравнение по таблице синусов:
Код
mkk : PROCESS  ( clock )
        
    BEGIN
        if Clr = '1' then
         sout <= "0000000000";
          ELSIF true THEN
        IF rising_edge( clock ) THEN
        case S_out2(39 downto 30) is

        when "0000000000" =>
        sout <= "0000000000";

        when "0000000001" =>
        sout <= "0000000011";

        when "0000000010" =>
        sout <= "0000000110";

........и т.д. всего 1024 раза

       when "1111111111"=>
        Sout <= "1111111011";

        when others => null;
       END CASE;
  
        END IF;
        END IF;
vihod <= Sout;
    END PROCESS;

vihod подается на выходной порт и по нему смотрится итоговый результат.
Сумматор также складывает с каждым приходящим фронтом (rising_edge) тактовой частоты.
Была попытка разнести суммирование и сравнение по фронту и спаду такта,но она тоже не привела к 100% улучшению. Если так сделать, например, суммирование по фронту, а сравнение по спаду, то в итоге получались правильные результаты из таблицы синусов,но только на пол периода. Точнее,когда у нас идет спад, должно появляться значение из таблицы синусов,но оно появлялось неверным, а при фронте такта появляется верное значение из таблицы синусов,хотя оно вообще появляться не должно!в коде прописано,что сравнение по спаду!Как так?Помогите разобраться!;)
Причина редактирования: используйте теги для оформления кода (с) модератор
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
iosifk
сообщение Mar 12 2013, 07:38
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(mcaffee @ Mar 11 2013, 23:23) *
С выхода сумматора от получившейся суммы берутся 10 старших разрядов и они сравниваются с таблицей синусов.

Можно в таблицу загрузить разность между синусом и линейной частью - "горбушку", а синус получать на сумматоре...
И вместо case поставить блок памяти + сумматор...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Maverick
сообщение Mar 12 2013, 08:04
Сообщение #3


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

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



Есть замечательная книга: U. Meyer-Baese "Digital Signal Processing with Field Programmable Gate Arrays". В ней, в главе 2.8 (3rd edition) подробно расписан CORDIC с примерами на VHDL. Рекомендую.

Еще здесь гляньте, может поможет....


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

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



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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 06:31
Рейтинг@Mail.ru


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