И сново здравствуйте!
Предистория:
Первая ветка и ее окончание
Вторая ветка и ее окончание
Третья ветка и ее окончание
Полезности:
10.pdf - читать обязательно!
И сново здравствуйте!
Предистория:
Первая ветка и ее окончание
Вторая ветка и ее окончание
Третья ветка и ее окончание
Полезности:
10.pdf - читать обязательно!
Последний раз редактировалось Konkere; 19.02.2012 в 01:15. Причина: Ссылки поправил.
Особенность этой ситуации в том, что используется моновключение AD1853 по следующей схеме с соответствующим запараллеливанием токовых выходов:
В итоге получаем что один канал со смещенной шкалой в 1LSB, а другой нет, насколько это критично, я пока проверить не могу, просто хотел обратить на это внимание. По ресурсам, у меня получилось всего 19 макроячеек на эту функцию и все разделение помещалось в 128.
19 макроячеек на дополнение до двух? А каким образом Вы прибавление единицы к сэмплу делаете?
I{oT, Я реализовывал формирование потока данных для 1853 следующим образом: по перепаду WCK сдвиговый регистр (24 бит) начинает принимать данные с SDATA, по второму перепаду WCK данные из первого регистра записываются во второй с помощью параллельной загрузки, цикл повторяется. Одновременно с этим второй регистр(24 бит, каждый для своего канала) начинает отправлять принятые данные в 1853. Одновременно выезжающие биты из регистра записываются в него же, но уже инвертированные и снова отправляются в 1853. Если интересно, я могу восстановить проект в квартусе.
eclipsevl, а каким образом организована обработка 16/24 битных данных? На одну микросхему идут 16 бит с младшими нулями, а на другую - с младшими единицами, то есть уже 24 бит?
Я взял за основу функции "tc", "inv", "incr_vec" отсюда http://www.vlsiip.com/intel/fun_pkg.vhdl. Переработал их под свои нужды, развернул все циклы, в итоге получился такой монстрик на 24битовый семпл:
twos_comp.txt
Последний раз редактировалось Aclii; 27.12.2010 в 17:35.
eclipsev, Было бы интересно взглянуть, kotov.irk@gmail.com
Как только восстановлю, отправлю.
Так это безразлично. Ведь ИМС принимает данные, исходя из конкретного установленного формата. Если, например, она ждет I2S 16 Bit, то после перепада LRCK и последующего такта BCLK, ее интересуют только 16 бит данных, а остальное игнорируется.
eclipsevl, а сюда можете проект выложить?
Спасибо! Посмотрю код. Только с VHDL у меня взаимное непонимание: я не понимаю, как на нем описывать конкретные логические функции, а VHDL не понимает, что мне от него нужно.![]()
Aclii, у Вас нет кода, где присоединена эта библиотека? Никак не получается ее использовать.![]()
Если вы по вложенный "twos_comp.txt", то попробуйте прописать в коде подключение заголовочных файлов, должно помочь.
саму библиотеку http://www.vlsiip.com/intel/fun_pkg.vhdl я не использовал, так как не было необходимости.Код:library ieee; use ieee.std_logic_1164.all; use work.bitw.all;
Теперь другая проблема. Quartus сообщает о несоответствии типа данных. В библиотеке возвращается тип UNSIGNED, а компоненту необходимо назначать STD_LOGIC_VECTOR. Но это, скорее, по причине моего незнания VHDL.
На что я обратил внимание. У Вас же библиотечный модуль и принимает и возвращает данные в параллельном виде. То есть, их нужно перевести в последовательные. Как Вы умудряетесь здесь уложиться в 19 макроячеек? Хотя бы алгоритм.Просто я не вижу иного метода, как перезагрузка данных в отдельный регистр, либо мультиплексирование параллельной цепи по счетчику.
Я в своем варианте по мотивам Lynx29 просто инвертировал данные для второго канала, без сумматора. ИМХО сдвиг на 1 единицу младшего разряда абсолютно несущественен. Делал сдвиговый регистр для входящих данных на 64 ячейки с параллельным переносом в два 32-битных, последовательный вход которых соединялся с собственным выходом через инвертор для получения данных второго канала 1853. По причине незнания VHDL просто рисовал схему. Если кому интересно, вот что получилось. ПЛИС EPM570 бралась с запасом. PS. У меня ПЛИС работает мастером, получая данные от SRC в слэйве (всегда 24 бит) и от процессора по SPI (выбор 16 или 24, при 16 младшие 8 обнуляются), отсюда лишние мультиплексоры, плюс расширитель ввода-вывода процессора, просто не обращайте внимания.
f40m570.rar
Lexus, вот кусочек кода, который использует вышеприведенные функции, по сути это часть моего текущего варианта реализации разделения I2S на 2 AD1853 (без дополнительных сервисных функций конфигурации), сразу скажу - в железе я его пока не проверял, будет возможность только после НГ, но в симуляторе все работает как надо. По ресурсам весь модуль занимает 143 макроячейки, помню что удавалось уместить все в 128, но потом просто перешел на EPM256 из-за добавляемого функционала.
I2S.txt
В общем, я тут немного почитал и решил отказаться от этого типа инверсии в пользу простого инвертирования - смещение в 1 LSB выглядит куда меньшим злом чем, попытки обойти инвертирование с дополнением до двухкода минимального значения шкалы(-FS), которое при этом дает само себя, этот пост меня окончательно убедил http://www.diyhifi.org/forums/viewto...p=22179#p22179.
Последний раз редактировалось Aclii; 28.12.2010 в 17:39.
Я первый раз вижу в Quartus такую схему. Он ее открывал секунд 10. Это титанический труд!
Offтопик:
В свое время я отказался от составления схем, так как они становились все сложнее и сложнее. Отказался в пользу AHDL. Чего и Вам советую. Язык предельно прост, позволяя описывать триггеры, регистры, мультиплексоры, примитивы и т.д., сохраняя при этом возможность использования условных операторов. Синхронный счетчик описывается несколькими строчками, когда схема займет целую страницу даже для простого варианта. Как и Вы, VHDL я не знаю. Разве что, могу простые описания составить. VHDL является языком высокого уровня, а потому работать предстоит не с цифровой схемой, как в AHDL, но с языком. Например, если в схеме в конкретном месте необходимо выделить триггер, в AHDL просто добавляете его и описываете входы/выходы, а в VHDL, в зависимости от описания, компилятор сам либо выделит триггер, либо обойдется без него.
Aclii, в любом случае смещение 1 LSB несущественно. Даже для 16-и разрядного потока это приведет к смещению постоянного напряжения на выходе ЦАП величиной в микровольты. Дополнение до двух, да, корректно в центре шкалы и некорректно при переносе с +FS в -FS, так как для -FS значений на единицу больше. Можно было бы использовать дополнение до двух, но проект неоправданно разрастается.
Народ, а на каком чипе реализуется USB вход для цапа 24/192 ? Никак не могу найти.
Хотя они точно есть.
Не на теноре ли?
Касаюсь струн, держу суперсимметрию.
Почему до сих пор не снята с производства AD1856? 1860 и 1864 сняты.
Offтопик:
Kolbaskin, почитай статьи АДВ... Пиплу и 14 бит за глаза нынче.
Последний раз редактировалось Denisius; 05.01.2011 в 01:16.
Касаюсь струн, держу суперсимметрию.
Социальные закладки