Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: плата Digilent Nexus 3 (Xilinx Spartan 6) + ЦАП R-2R = искажения
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Блондин
Доброго времени суток всем!
Есть плата от Xilinx c ПЛИС Spartan 6 на борту (плата Digilent Nexus 3). Возникла потребность сделать простой DDS генератор, используя плату и самодельный ЦАП r-2r (6 бит, звуковые частоты, речь). ЦАП подключается через стандартные штырьковые разъемы к плате.

Схема ЦАП проста: r-2r цепь, потом RC-цепь (ФНЧ первого порядка), затем повторитель на ОУ ad8656 (одна половинка).
Для ПЛИС использую среду ISE WebPack 13.2

Собственно, неприятностей две:
1. DDS IP-core v.4 никак не хочет моделироваться в ISim. Тактовый сигнал идет на IP-блок, но на выходе DDS лог.1 по всем 6 битам. Что я делаю не так? Или это известный косяк симулятора? Схема top level проста - сам блок и вх/вых пины.
Нажмите для просмотра прикрепленного файла
Все проверки в среде ISE схема проходит, разумеется.

2. Несмотря на вышеописанную ситуацию, после физического размещения схемы DDS на кристалле, она заработала. Осциллографом наблюдаю на выходах платы (входах ЦАП) то, что и должно для синуса (см. картинки).

НО на выходе самого ЦАП - чушь полная.
Нажмите для просмотра прикрепленного файла

Сначала я думал, что это инверсия фазы выходного сигнала у ОУ (размах сигнала на входе ОУ большой, конечно, он rail-to-rail, в даташите сказано, что нет инверсии фазы). Отключил вход ОУ, тыкнулся осциллом после ФНЧ - та же картина.

И тут я заметил, что на осциллограммах логических сигналов - помеха в виде выходного сигнала, синуса. (завалены лог. уровни).
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

В чем может быть проблема? Неудачная разводка платы (ставил кондеры на землю по питанию - не помогло)? Не учел токоограничительные резисторы и диоды на выводах ПЛИС? (они по 200 Ом, а цап 2к-1к). ОУ возбуждается?

Вроде делов-то, на МК цап r-2r работают на ура, судя по поиску в гугле. Тут-то что? Как-то даже стыдно.

Подскажите, пожалуйста, куда копать? Или перенаправьте в более подходящую ветку форума.
Спасибо!

Прикрепляю картинки (скрины с осциллографа, плату, и схему отладочной платы с ПЛИС).

Схема
Нажмите для просмотра прикрепленного файла

Плата
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Lmx2315
..а в каком формате выводите данные на ЦАП , в знаковом или беззнаковом?
bugdesigner
То, что форма цифровых сигналов немного искажена не проблема. Гонит dds. Попробуйте для начала написать простой генератор пилы и убедитесь, что железо работает.
Timmy
Токоограничительные резиторы, и выходное сопротивление пинов FPGA(оно может быть порядка 20Ом), конечно, нужно было учесть, но таких искажений от этого не будет. Думаю, проблема в том, что DDS даёт знаковый синус, а для R-2R нужен беззнаковый, и надо его соответственно преобразовать(просто инвертировать старший бит, если не ошибаюсь ).
Блондин
Конечно, первым делом слелал пилу, все было отлично.

Елки-палки...ну и олень я. Конечно, выход-то знаковый у DDS.

Спасибо! Попробую завтра.

Цитата(Timmy @ Sep 14 2015, 00:18) *
Токоограничительные резиторы, и выходное сопротивление пинов FPGA(оно может быть порядка 20Ом), конечно, нужно было учесть, но таких искажений от этого не будет. Думаю, проблема в том, что DDS даёт знаковый синус, а для R-2R нужен беззнаковый, и надо его соответственно преобразовать(просто инвертировать старший бит, если не ошибаюсь ).

А по первому вопросу (не могу промоделить DDS v.4 в ISim) что можете посоветовать?
Тип памяти DDS (distributed/block) менял, не помогло.
bugdesigner
Цитата(Timmy @ Sep 14 2015, 00:18) *
и надо его соответственно преобразовать(просто инвертировать старший бит, если не ошибаюсь ).
Превратить код в беззнаковый можно на сумматоре - сложить с константой равной в нашем случае 32 (2^5). Простой инверсией битов ничего не выйдет.
Timmy
Цитата(Блондин @ Sep 14 2015, 01:17) *
А по первому вопросу (не могу промоделить DDS v.4 в ISim) что можете посоветовать?
Могу посоветовать использовать ModelSim sm.gif .
Цитата(bugdesigner @ Sep 14 2015, 06:30) *
Превратить код в беззнаковый можно на сумматоре - сложить с константой равной в нашем случае 32 (2^5). Простой инверсией битов ничего не выйдет.
Так 32+шестиразрядное число это и есть инверсия старшего бита, если не использовать перенос.
Lerk
Цитата(bugdesigner @ Sep 14 2015, 06:30) *
Превратить код в беззнаковый можно на сумматоре - сложить с константой равной в нашем случае 32 (2^5). Простой инверсией битов ничего не выйдет.


Вообще, операция 2's complement почти легально меняется на 1's complement, что есть банальный xor. А если фазу на вход PSM(phase-to-sine mapper) генерировать самостоятельно, то там также меняется 2's comp на 1's comp и получается сильная экономия вентилей.
bugdesigner
Цитата(Timmy @ Sep 14 2015, 08:53) *
.
Так 32+шестиразрядное число это и есть инверсия старшего бита, если не использовать перенос.

Да, согласен, протупил sm.gif
Блондин
Проблема с работой DDS решена - конечно, переводом выхода DDS в беззнаковый формат smile3046.gif

Проблема с моделированием в ISim - пока нет, роюсь в гугле.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.