Содержание
Часть 1.Описание устройства и принципов его работы
1.1 Обоснование выбора темы
1.2 Краткое описание и возможные варианты исполнения
1.2.1 Подключение микросхемы ЦАП AD1851
1.2.1.1 Способ 1. Прерывание тактового сигнала
1.2.1.2 Способ 2. Использование регистра сдвига
1.2.1.3 Способ 3. Регистр сдвига для подключения по шине I2S
1.2.2 Подключение микросхемы ЦАП AD1852 (AD1853)
Часть 2.Схемная реализация
2.1 Определение требований к применяемым цифровыммикросхемам
2.2 Схемы электрическиепринципиальные
2.2.1 Схема устройства разделения потока данных дляподключения микросхемы ЦАП AD1851
2.2.2 Схема устройства разделения потока данных длямонофонического подключения микросхемы ЦАП AD1852 (AD1853)
2.2.3 Общие замечания к схемам
Часть 3.Временные диаграммы
3.1 Временная диаграмма работы устройства разделения данныхдля микросхемы ЦАП AD1851
3.2 Временная диаграмма работы устройства разделения данныхдля микросхемы ЦАП AD1852
Часть 4.Реализация схемы в проекте VHDL
Выводы
Часть 1.Описание устройства и принципов его работы/>/>/>/> 1.1Обоснование выбора темы
В последнее время техника и технологиястремительно развиваются. Эта область также не обходит и электронику. Каждыйдень выходят новые микросхемы и пополняется элементная база. Однако также впромышленности прослеживается тенденция упрощения и удешевления производства,что приводит к массовому выпуску дешевой, красочной и далеко не самого высокогокачества (если не сказать весьма низкого) аппаратуры. Эти тенденции такжезатрагивают и область аудиотехники.
К сожалению, человеку, желающемукачественно слушать любимые записи, сейчас приходится либо смириться свышесказанным, либо платить достаточно большие суммы за качественнуюаппаратуру. Есть правда и еще один вариант: эту аппаратуру можно собрать своимируками на современной элементной базе.
Одной из наиболее значимыхчастей аудио тракта (с учетом распространения цифрового аудио) бесспорноявляется ЦАП. От качества этого модуля напрямую будет зависеть качествополучаемого звукового сигнала. При этом для достижения желаемых результатовчасто приходится использовать микросхемы с отличающимися протоколами обменаинформацией. Таким образом, встает вопрос о преобразовании цифровых форматовданных.
Наиболее часто встречаетсяситуация, когда приемник цифрового сигнала способен выдавать данные в форматеIIS (наиболее универсальный и полнофункциональный формат), а микросхема ЦАПспособна принимать данные в формате Right Justifited. Также следует учесть то,что приемник сигнала выдает данные обоих стерео каналов по одной шине в товремя как наиболее качественные микросхемы ЦАП являются монофоническими. Именновопросу преобразования цифрового потока из формата IIS в Right Justifited содновременным разделением на каналы и посвящена половина данной курсовойработы. Вторая половина посвящена разделению каналов в случае использованиямонофонического включения стерео-ЦАП./>/>/>/> 1.2Краткое описание и возможные варианты исполнения
В рамках данной курсовой работыпредполагается использовать микросхемы ЦАП AD1851 (16bit mono) и AD1852 (24bit 192kHz stereo) производства Analog Devices./>/>/>/> 1.2.1 Подключение микросхемы ЦАП AD1851
Рассмотрим цифровой интерфейс AD1851:
Схематически внутреннееустройство микросхемы можно представить следующим образом:
/>
Рис.1. – Внутренняя структура AD1851
Согласно документации микросхемаимеет три цифровых входа: CLK, DATAи LE. Данные поступают во входной последовательныйрегистр сдвига через вход DATA и тактируются попереднему фронту сигнала CLK. Емкость входного регистрасоставляет 16 бит. Когда во входной регистр полностью загружены данные, позаднему фронту сигнала LE информация переносится впараллельный 16 битный регистр непосредственно модуля ЦАП, при этом выходнаявеличина (микросхема способна работать как в варианте с токовым выходом, так ив варианте с выходом по напряжению) обновляется и удерживается до следующегоперепада сигнала LE от высокого уровня к низкому.Временная диаграмма необходимых входных сигналов представлена на рисунке 2:
/>
Рис.2. – Временная диаграмма входных сигналов AD1851
Данный формат сигналов способнывыдавать практически все цифровые фильтры. В большинстве случаев они уже имеютвходы предустановки под микросхемы ЦАП различной разрядности и отдельные выводыданных (DOR, DOL) для микросхемправого и левого каналов.
Тем не менее, при желаниипостроить ЦАП без передискретизации (достаточно нашумевшее направление вобласти современного высококачественного аудио) от их применения приходитсяотказаться. При этом микросхемы ЦАП подключаются через согласующую логику кмикросхеме приемника цифровых данных.
Наиболее простым для работывыходным форматом данных цифровых приемников является формат Right Justifited:
/>
Рис.3. – формат передачи данных Right Justifited
В этом формате данные левого иправого каналов передаются последовательно по одному проводнику SDATA, данные какого именно канала передаются в данныймомент, определяет состояние сигнала LRCLK, тактовыеимпульсы передаются посредством сигнала SCLK. Первымипередаются данные левого канала (LRCLK=’1’), затемправого (LRCLK=’0’). Данные поступают в формате MSB First, ивыровнены относительно перепада сигнала LRCLK поправому (заднему) фронту.
Для правильного преобразованияданных необходимо загрузить данные каждого канала в свою микросхему ЦАП иодновременно подать сигнал обновления LE. В противном случае мы получим сдвигпо фазе между аналоговыми сигналами правого и левого каналов, зависящий отчастоты сигнала.
Классическийслучай описан Паулем Шкритеком в «Справочном руководстве по звуковойсхемотехнике», издательство «Мир», глава 17.7.1«Преобразователи Ц/А в мультиплексном режиме». Цитата: «Еслиданные на ЦАП двух каналов поступают со сдвигом во времени на dT, то междуканалами возникает сдвиг по фазе, зависящей от частоты: dF=360*f*dT». Идалее: «В случае, когда оба канала обслуживает один ЦАП, работающий свременным уплотнением, временной сдвиг в нормальных условиях составляетdT=T/2=11.3 мксек, что вызывает фазовый сдвиг между сигналами левого и правогоканала dF=82 градуса на частоте 20кГц».
Существует несколько способовсделать необходимое соединение./>/>/>/> 1.2.1.1 Способ 1. Прерываниетактового сигнала
Как уже известно, данные вмикросхеме ЦАП сначала попадают во входной последовательный регистр,тактируемые сигналом CLK. В формате Right Justifitedданные передаются выровненными по правому фронту сигнала LRCLK,данные левого канала первыми, данные правого канала последующими. Выходмикросхем ЦАП необходимо обновить по загрузке данных обоих каналов, т.е. понарастающему фронту сигнала LRCLK. При отсутствии сигналаCLK данные во входной регистр ЦАП грузиться не будут.При загрузке в регистр свыше 16 бит данных, во входном регистре остаются лишьпоследние 16 бит информации. Таким образом, необходимо загрузить данные левогоканала в одну микросхему ЦАП, затем прервать поступление тактовых импульсов нанее и дождаться загрузки данных правого канала во вторую микросхему. Сигналомобновления при этом будет инвертированный сигнал LRCLK.Он же будет управляющим для прерывателя тактовых импульсов. Входы данных обоихмикросхем ЦАП при таком включении параллелятся.
Данную операцию можно произвестис помощью всего одной логической микросхемы:
/>
Рис.4. – формирование сигналов методом прерывания тактовых импульсов
К сожалению, данный метод неявляется идеальным, поскольку некоторые микросхемы ЦАП отказываются работать втаком включении. Например, Алекс Петровский на своем сайте писал, что в такомвключении отказались работать микросхемы PCM1704 производства Burr-Brown и AD1856 производства Analog Devices.Это происходит восновном из-за требования непрерывности тактового сигнала или из-за повышеннойчувствительности логических цепей микросхемы к временным соотношениям междусигналами./>/>/>/>
1.2.1.2 Способ 2. Использованиерегистра сдвига
Для использования этого методатакже удобно воспользоваться выходным форматом Right Justifited приемникацифровых сигналов. При этом необходимо отметить, что стандартной длинойпоследовательности данных за один отсчет является 64 бита. При этом на каждыйканал приходится по 32 тактовых импульса. Первые 16 импульсов при этом неиспользуются, по оставшимся 16 передаются данные. При этом первый бит данныхправого канала передается через 32 тактовых импульса после первого бита данныхлевого канала. Таким образом, если задержать всю последовательность данных на32 тактовых импульса, то на выходе схемы задержки будут данные левого канала втот момент, когда в исходном сигнале будут передаваться данные правого канала.В качестве такой схемы очень удобно использовать 32 разрядный сдвиговыйрегистр. Обновление выхода микросхем ЦАП происходит по нарастающему фронтусигнала LRCLK. Схематически это можно изобразитьследующим образом:
/>
Рис.5. – использование 32 разрядного сдвигового регистра для разделения цифровогопотока/>/>/>/> 1.2.1.3 Способ 3. Регистр сдвигадля подключения по шине I2S
В некоторых случаях необходимопринимать данные не в формате Right Justifited, а в формате I2S. Такая необходимость возникает при построении ЦАП не в видеотдельного модуля, а как части готового проигрывателя компакт-дисков иликакого-либо другого цифрового аудио устройства. Помимо того данный форматпередачи обязательно поддерживается цифровыми приемниками и интерфейснымимикросхемами. Таким образом, один раз грамотно спроектированное решение дляподключения непосредственно на шину I2Sбудет не только наиболее правильным, а и наиболее универсальным. Устройство наоснове такого решения уже целесообразно выполнить в виде ПЛМ и в дальнейшемиспользовать как некий «черный ящик» выполняющий все необходимыепроцедуры.
Рассмотрим формат передачиданных I2S:
/>
Рис.6. – формат передачи данных I2S
В этом формате данные левого иправого каналов передаются последовательно по одному проводнику SDATA, данные какого именно канала передаются в данныймомент, определяет состояние сигнала LRCLK, тактовыеимпульсы передаются посредством сигнала SCLK. Первымипередаются данные левого канала (LRCLK=’0’), затемправого (LRCLK=’1’). Данные поступают в формате MSB First, ивыровнены относительно перепада сигнала LRCLK по левому(переднему) фронту и задержаны на 1 тактовый импульс.
Легко заметить, что данныйформат отличается от Right Justifited лишь выравниванием последовательностиданных и инвертированным состоянием сигнала LRCLK.Таким образом, для преобразования формата I2S к формату Right Justifited достаточно задержать всюпоследовательность данных на (32-[разрядность ЦАП]-1) тактовых импульса иинвертировать сигнал, определяющий данные какого канала передаются в настоящиймомент. Далее можно использовать уже имеющийся вариант со сдвиговым регистром.
С учетом того, что минимальнаяразрядность современных микросхем аудио ЦАП составляет 16 бит, использование 16битного сдвигового регистра позволяет выбором перемычки осуществлятьподключение ЦАП любой разрядности (от 16 до 24 бит) к 16 битному источникуданных без потери качества. Также возможно подключение источника сигналабольшей разрядности к микросхеме ЦАП меньшей разрядности с потерей толькомладших бит данных, что в некоторых случаях также может оказаться удобным,поскольку дает совместимость с новыми форматами.
Структурная схема такогопреобразователя форматов данных представлена на следующем рисунке:
/>
Рис.7. – универсальный сдвиговый регистр/>/>/>/> 1.2.2 Подключение микросхемы ЦАП AD1852 (AD1853)
Микросхема ЦАП AD1852представляет собой стереофонический дельта-сигма ЦАП с встроенным цифровымфильтром и выходом по напряжению. AD1853 отличается отнее лишь токовым выходом. Данные микросхемы поддерживают все существующие насегодняшний день наиболее популярные аудио форматы, включая 24bit192kHz, что делает их очень удобным решением дляпостроения универсального модуля ЦАП пригодного как для высококачественногопрослушивания аудио компакт-дисков, так и для просмотра фильмов в формате DVD.
Микросхемы изначально имеютдостаточно высокие качественные параметры и подключаются напрямую к шине I2S. Тем не менее, при желанииполучения максимального возможно качества, возможно дополнительное улучшениехарактеристик конечного устройства путем применения монофонического включенияданных микросхем. При этом необходимо в каждую микросхему дважды загружатьданные соответствующего ей канала, первый раз в исходном виде, второй раз винвертированном. Так же, как и в случае с подключением AD1851,необходимо следить за одновременностью поступления данных обоих каналов.
Монофоническое подключениемикросхемы AD1852 показано на следующем рисунке (взятоиз файла технической документации от Analog Devices):
/>
Рис.8. – монофоническое подключение AD1852
Для осуществления необходимыхманипуляций над данными составим устройство на основе регистра сдвига. Егообщая структурная схема приведена на рис. 9. Как видно из временной диаграммыработы, максимальный интервал времени, на протяжении которого необходимосохранять данные, составляет 1 фрейм, или 1 период сигнала LRCLK,или 64 периода сигнала SCLK. При этом инвертированныеданные сдвинуты на 32 периода сигнала SCLK относительноданных исходных. Данные разделяются следующим образом:
· Данные снимаются одновременно с несколькими временнымизадержками, нужная порция данных выбирается схемой выборки
/>
Рис.9. – структурная схема устройства разделения данных
· В тот момент времени, когда на входной шине передаются данныеправого канала, на выходе первого 32 разрядного сдвигового регистра будутнаходиться данные левого канала
· Во время передачи на входной шине данных левого канала на выходепервого сдвигового регистра будут данные правого канала предыдущего отсчета, ана выходе второго регистра еще только данные левого канала предыдущего отсчета
· Какие именно данные подавать на выходные шины, определяет схемавыборки (также по 1й на каждый канал)
· Управление инверторами и схемами выборки осуществляется отсигнала LRCLK
· Сам сигнал LRCLK на выходные шиныпоступает в инвертированном виде
/>/>/>/>Часть2. Схемная реализация/>/>/>/> 2.1Определение требований к применяемым цифровым микросхемам
Поскольку обработка данныхпроисходит лишь выбором необходимой последовательности и не предполагаетнепосредственного изменения битов информации в каждой посылке, данноеустройство не вносит искажений в выходной сигнал блока ЦАП прямым образом. Темне менее, следует учитывать, что музыкальный сигнал определяется не толькосодержанием пакетов данных, а и временем их прихода. Таким образом, необходимоучитывать частотные свойства применяемых микросхем. Необходимое минимальноебыстродействие регистров составляет 64Fs, а лучше иметьзапас в 3-4 раза. Для сигналов при просмотре фильмов в формате DVD Fsсоставляет 192 KHz. Следовательно, регистры должныработать с частотами не менее 13 MHz. С учетомжелательности запаса по быстродействию, следует выбирать микросхемы, способныеработать на частотах 40 MHz и выше.
Важно помнить, что данные нашине SDATA являются правильными во время нарастающегофронта импульса SCLK. Следовательно, загрузку в регистрнеобходимо также производить по нарастающему фронту.
Также при проектированиинеобходимо учитывать, что устройство должно быть легко повторяемым, т.е.желательно отказаться от применения дефицитных компонентов. В данном случае,проблема затрагивает только выбор сдвиговых регистров. Поскольку наиболеелегкодоступными являются регистры длиной 8 бит, именно их имеет смыслиспользовать при построении устройства.
Еще одним фактором, влияющим навыбор микросхем, является то, что практически все современные микросхемы ЦАП ицифровых приемников имеют входные и выходные цепи с КМОП уровнями.
С учетом всего, выше сказанного,останавливаемся на сдвиговом регистре 74HC164. Онпредставляет собой 8-битный сдвиговый регистр с параллельным выходом,выполненный по КМОП технологии и способный работать на частотах до 50 MHz. Функциональным аналогом данного регистра являетсямикросхема К155ИР8.
Логические микросхемы будемиспользовать также серии 74HC, что позволит избежатьпроблем согласования уровней. Быстродействие логических вентилей этой сериипозволяет работать на частотах до 100 MHz и выше./>/>/>/> 2.2Схемы электрические принципиальные/>/>/>/> 2.2.1 Схема устройства разделенияпотока данных для подключения микросхемы ЦАП AD1851
Входы и выходы на схемеобозначены так, как они обычно обозначаются у готовых микросхем цифровыхфильтров.
Для обеспечения устойчивостиданных во время загрузки, сигнал CLK для микросхем ЦАПинвертирован относительно сигнала SCLK, по которомупроисходит загрузка данных в регистры и сдвиг. Это позволяет загрузить данные вмикросхемы ЦАП в тот момент, когда на выходах регистров получены устойчивыесостояния данных. Для того чтобы при этом не возникало смещения между сигналом LE и DOR/DOL,сигнал LRCLK тактируется сигналом SCLK.Для этого используется D-триггер 74HC74,функциональным аналогом которого является микросхема К155ТМ2. Также в связи сподачей на микросхемы ЦАП инвертированного сигнала SCLKвозникает необходимость обеспечить дополнительное смещение всейпоследовательности входных данных еще на один клок.
/>
Рис.10. – схема электрическая принципиальная устройства разделения данных дляподключения микросхемы ЦАП AD1851
На входе установлены буферы намикросхеме 74HC04, время распространения сигнала длякоторой составляет 8nS, что является достаточно малойвеличиной и не отражается на быстродействии устройства в целом.
Конденсаторы C1-C16 устанавливаются непосредственно возле выводов питаниямикросхем. C1-C8 – конденсаторыс твердым электролитом SANYO Os-Con SA 10mx 6.3V, С9-С16 – керамическиеконденсаторы для поверхностного монтажа типоразмера 1206, емкостью 100n и группой ТКЕ X7R.Такой выбор обусловливает максимальную эффективность подавления помех попитанию при сохранении относительно невысокой стоимости устройства./>/>/>/> 2.2.2 Схема устройства разделенияпотока данных для монофонического подключения микросхемы ЦАП AD1852 (AD1853)
/>
Рис.11. – схема электрическая принципиальная устройства разделения данных длямонофонического подключения микросхемы ЦАП AD1852 (AD1853)
Входы и выходы на схемеобозначены подобно обозначениям на схеме из документации на AD1852.
Для обеспечения устойчивостиданных во время загрузки, сигнал BCLK_Oдля микросхем ЦАП инвертирован относительно сигнала BCLK,по которому происходит загрузка данных в регистры и сдвиг. Это позволяетзагрузить данные в микросхемы ЦАП в тот момент, когда на выходах регистровполучены устойчивые состояния данных. Для того чтобы при этом не возникалосмещения между сигналом LRCLK и SDATA_L/SDATA_R,сигнал LRCLK тактируется сигналом BCLK.Мультиплексоры на микросхемах DD10, DD11управляются уже тактированным сигналом LRCLK. Для этогоиспользуется D-триггер 74HC74,функциональным аналогом которого является микросхема К155ТМ2. Поскольку AD1852(AD1853) также используетсигнал MCLK (128Fs/256Fs/384Fs), который связан с сигналом BCLK, сигнал MCLK_Oтакже инвертирован. Также в связи с подачей на микросхемы ЦАП инвертированногосигнала SCLK возникает необходимость обеспечитьдополнительное смещение всей последовательности входных данных еще на один клок,что выполняется D-триггером DD12A.
При необходимости на входеустанавливаются буферные элементы.
Конденсаторы C1-C24 устанавливаются непосредственно возле выводов питаниямикросхем. C1-C12 –конденсаторы с твердым электролитом SANYO Os-Con SA 10m x 6.3V,С13-С24 – керамические конденсаторы для поверхностного монтажа типоразмера1206, емкостью 100n и группой ТКЕ X7R. Такой выбор обусловливает максимальную эффективностьподавления помех по питанию при сохранении относительно невысокой стоимостиустройства.
/>/>/>/>2.2.3Общие замечания к схемам
Вход схем RESETподключается к генератору сброса системы. Активным уровнем сброса являетсяуровень логического «0». Данный узел может быть выполнен, к примеру,на микросхеме ADM707.
Несмотря на то, что микросхемыЦАП часто имеют питание цифровой части 5 V, имеет смыслвыделить для них отдельный источник питания, а не использовать один источникдля схемы разделения цифрового потока и ЦАП одновременно. Это позволитуменьшить уровень помех, проникающих из цифровой части микросхемы ЦАП ваналоговую часть устройства и улучшит звучание системы.
/>/>/>/>Часть3. Временные диаграммы/>/> 3.1 Временная диаграмма работыустройства разделения данных для микросхемы ЦАП AD1851
/>
/>
Рис.12. — Временная диаграмма работы устройства разделения данных для микросхемыЦАП AD1851/>/>3.2 Временная диаграмма работыустройства разделения данных для микросхемы ЦАП AD1852
/>
/>
/>
Рис.13. — Временная диаграмма работы устройства разделения данных для микросхемыЦАП AD1852
/>/>/>/>Часть4. Реализация схемы в проекте VHDL
Поскольку полученные схемы невсегда удобно размещать в конечном устройстве ввиду их громоздкости, имеетсмысл создать проект на языке VHDL и составить код дляпрограммирования кристалла ПЛМ. Помимо значительного сокращения занимаемой наплате площади это позволит также поднять общее быстродействие модуля разделенияпотоков данных, снизить наводимые цифровые помехи, промоделировать устройствобез пайки.
Коды на языке VHDLпредставлены ниже с краткими пояснениями, где это необходимо.
Для начала выберем необходимыекомпоненты и составим их модели:
--Components.vhd
--16-bitSerial to Parallel Shift Register with asynchronous reset
libraryieee ;
useieee.std_logic_1164.all ;
entitySPREG16R is
port( RST: in std_logic ;
CLK: in std_logic ;
SI: in std_logic ;
Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8: out std_logic ;
Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0: out std_logic
);
endSPREG16R ;
architecturev1 of SPREG16R is
signalsreg16: std_logic_vector (15 downto 0) ;
begin
process(RST,CLK)
begin
ifRST = '1' then
sreg16 '0') ;
elsifCLK = '1' and CLK'event then
sreg16
endif ;
endprocess ;
Q15
Q14
Q13
Q12
Q11
Q10
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
endv1 ;
--32-bitSerial to Parallel Shift Register with asynchronous reset
libraryieee ;
useieee.std_logic_1164.all ;
entitySPREG32R is
port( RST: in std_logic ;
CLK: in std_logic ;
SI: in std_logic ;
Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24: out std_logic;
Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16: out std_logic;
Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8: out std_logic ;
Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0: out std_logic
);
endSPREG32R ;
architecturev1 of SPREG32R is
signalsreg32: std_logic_vector (31 downto 0) ;
begin
process(RST,CLK)
begin
ifRST = '1' then
sreg32 '0') ;
elsifCLK = '1' and CLK'event then
sreg32
endif ;
endprocess ;
Q31
Q30
Q29
Q28
Q27
Q26
Q25
Q24
Q23
Q22
Q21
Q20
Q19
Q18
Q17
Q16
Q15
Q14
Q13
Q12
Q11
Q10
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
endv1 ;
--64-bitSerial to Parallel Shift Register with asynchronous reset
libraryieee ;
useieee.std_logic_1164.all ;
entitySPREG64R is
port( RST: in std_logic ;
CLK: in std_logic ;
SI: in std_logic ;
Q63,Q62,Q61,Q60,Q59,Q58,Q57,Q56: out std_logic;
Q55,Q54,Q53,Q52,Q51,Q50,Q49,Q48: out std_logic;
Q47,Q46,Q45,Q44,Q43,Q42,Q41,Q40: out std_logic;
Q39,Q38,Q37,Q36,Q35,Q34,Q33,Q32: out std_logic;
Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24: out std_logic;
Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16: out std_logic;
Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8: out std_logic;
Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0: out std_logic
);
endSPREG64R ;
architecturev1 of SPREG64R is
signalsreg64: std_logic_vector (63 downto 0) ;
begin
process(RST,CLK)
begin
ifRST = '1' then
sreg64 '0') ;
elsifCLK = '1' and CLK'event then
sreg64
endif ;
endprocess ;
Q63
Q62
Q61
Q60
Q59
Q58
Q57
Q56
Q55
Q54
Q53
Q52
Q51
Q50
Q49
Q48
Q47
Q46
Q45
Q44
Q43
Q42
Q41
Q40
Q39
Q38
Q37
Q36
Q35
Q34
Q33
Q32
Q31
Q30
Q29
Q28
Q27
Q26
Q25
Q24
Q23
Q22
Q21
Q20
Q19
Q18
Q17
Q16
Q15
Q14
Q13
Q12
Q11
Q10
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
endv1 ;
— D Flip Flop w asynchronous reset
libraryieee ;
useieee.std_logic_1164.all ;
entityDFFR is
port(RST: in std_logic ;
CLK: in std_logic ;
D: in std_logic ;
Q: out std_logic ;
QN: out std_logic
);
endDFFR ;
architecturev1 of DFFR is
signaln1: std_logic ;
begin
process(RST,CLK)
begin
ifRST = '1' then
n1
elsif(CLK'event and CLK='1') then
n1
endif ;
endprocess ;
Q
QN
endv1 ;
— 2-input NAND
libraryieee ;
useieee.std_logic_1164.all ;
entityNAND2 is
port(
IN1,IN0: in std_logic ;
Z: out std_logic
);
endNAND2 ;
architecturev1 of NAND2 is
begin
Z
endv1 ;
— Inverter
libraryieee ;
useieee.std_logic_1164.all ;
entityINV is
port(
IN0: in std_logic ;
Z: out std_logic
);
endINV ;
architecturev1 of INV is
begin
Z
endv1 ;
— Buffer
libraryieee ;
useieee.std_logic_1164.all ;
entityBUF is
port(
IN0: in std_logic ;
Z: out std_logic
);
endBUF ;
architecturev1 of BUF is
begin
Z
endv1 ;
— 2-1 Multiplexer
libraryieee ;
useieee.std_logic_1164.all ;
entityMUX21 is
port(IN0,IN1,SEL: in std_logic ;
Z: out std_logic
);
endMUX21 ;
architecturev1 of MUX21 is
begin
Z
end;
— 4-1 Multiplexer
libraryieee ;
useieee.std_logic_1164.all ;
entityMUX41 is
port(IN0,IN1,IN2,IN3,SEL0,SEL1: in std_logic ;
Z: out std_logic
);
endMUX41 ;
architecturev1 of MUX41 is
signalSEL: std_logic_vector(1 downto 0) ;
begin
SEL
Z
IN1when SEL = «01» else
IN2when SEL = «10» else
IN3;
end;
Далее составим модели длякаждого устройства разделения данных, при этом дополнительно оптимизируем наборэлементов и соединений для получения наибольшего возможного соответствия междузадержками распространения выходных сигналов.
--DS1851.vhd
--DataSeparator for AD1851/AD1861/AD1862/AD1865 parallel DAC
libraryieee ;
useieee.std_logic_1164.all ;
entityDS1851 is
port(
RST: in std_logic;
SCLK: in std_logic;
SDATA: in std_logic;
LRCLK: in std_logic;
RL1: in std_logic;
RL0: in std_logic;
LE: out std_logic;
CLK: out std_logic;
DOL: out std_logic;
DOR: out std_logic
);
endDS1851;
architecturev1 of DS1851 is
componentSPREG16R
port( RST: in std_logic ;
CLK: in std_logic ;
SI: in std_logic ;
Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8: out std_logic ;
Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0: out std_logic
);
endcomponent ;
componentSPREG32R
port( RST: in std_logic ;
CLK: in std_logic ;
SI: in std_logic ;
Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24: out std_logic;
Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16: out std_logic;
Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8: out std_logic ;
Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0: out std_logic
);
endcomponent ;
componentDFFR
port(RST: in std_logic ;
CLK: in std_logic ;
D: in std_logic ;
Q: out std_logic ;
QN: out std_logic
);
endcomponent ;
componentINV
port(
IN0: in std_logic ;
Z: out std_logic
);
endcomponent;
componentBUF
port(
IN0: in std_logic ;
Z: out std_logic
);
endcomponent ;
componentMUX41
port(IN0,IN1,IN2,IN3,SEL0,SEL1: in std_logic ;
Z: out std_logic
);
endcomponent ;
signalnLRCLK, pLRCLK, nSCLK, pSCLK, nSDATA, pSDATA: std_logic;
signali24b, i20b, i18b, i16b: std_logic;
signalRESET, iDOL, iDOR, iCLK, iLE: std_logic;
begin
RSTI:INV port map (IN0 => RST, Z => RESET);
DD1A:INV port map (IN0 => SCLK, Z => nSCLK);
DD1D:INV port map (IN0=> nSCLK, Z => pSCLK);
DD1B:INV port map (IN0 => SDATA, Z => nSDATA);
DD1E:INV port map (IN0 => nSDATA, Z => pSDATA);
DD1C:INV port map (IN0 => LRCLK, Z => nLRCLK);
DD1F:INV port map (IN0 => nLRCLK, Z => pLRCLK);
CLKB:BUF port map (IN0 => nSCLK, Z => iCLK);
DD2:SPREG16R port map (RST => RESET, CLK => pSCLK, SI => pSDATA,
Q7=> i24b, Q11 => i20b, Q13 => i18b, Q15 => i16b);
DDMX:MUX41 port map (IN0 => i24b, IN1 => i20b, IN2 => i18b, IN3 => i16b,
SEL0=> RL0, SEL1 => RL1, Z => iDOR);
DD4:DFFR port map (RST => RESET, D => pLRCLK, CLK => pSCLK, Q => iLE);
DD5:SPREG32R port map (RST => RESET, CLK => pSCLK, SI => iDOR,
Q31=> iDOL);
BUFE:BUF port map (IN0 => iLE, Z => LE);
BUFC:BUF port map (IN0 => iCLK, Z => CLK);
BUFL:BUF port map (IN0 => iDOL, Z => DOL);
BUFR:BUF port map (IN0 => iDOR, Z => DOR);
endv1 ;
--DS1853.vhd
--DataSeparator for AD1852/AD1853 delta-sigma DAC
libraryieee ;
useieee.std_logic_1164.all ;
entityDS1853 is
port(
RST: in std_logic;
BCLK: in std_logic;
SDATA: in std_logic;
LRCLK: in std_logic;
MCLK: in std_logic;
BCLK_O: out std_logic;
LRCLK_O: out std_logic;
SDATA_L: out std_logic;
SDATA_R: out std_logic;
MCLK_O: out std_logic
);
endDS1853;
architecturev1 of DS1853 is
componentSPREG64R
port( RST: in std_logic ;
CLK: in std_logic ;
SI: in std_logic ;
Q63,Q62,Q61,Q60,Q59,Q58,Q57,Q56: out std_logic;
Q55,Q54,Q53,Q52,Q51,Q50,Q49,Q48: out std_logic;
Q47,Q46,Q45,Q44,Q43,Q42,Q41,Q40: out std_logic;
Q39,Q38,Q37,Q36,Q35,Q34,Q33,Q32: out std_logic;
Q31,Q30,Q29,Q28,Q27,Q26,Q25,Q24: out std_logic;
Q23,Q22,Q21,Q20,Q19,Q18,Q17,Q16: out std_logic;
Q15,Q14,Q13,Q12,Q11,Q10,Q9,Q8: out std_logic;
Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0: out std_logic
);
endcomponent ;
componentDFFR
port(RST: in std_logic ;
CLK: in std_logic ;
D: in std_logic ;
Q: out std_logic ;
QN: out std_logic
);
endcomponent ;
componentINV
port(
IN0: in std_logic ;
Z: out std_logic
);
endcomponent;
componentBUF
port(
IN0: in std_logic ;
Z: out std_logic
);
endcomponent ;
componentMUX21
port(IN0,IN1,SEL: in std_logic ;
Z: out std_logic
);
endcomponent ;
signaliBCLK, iSDATA, iLRCLK, iMCLK: std_logic;
signalRESET, nLRCLK, pLRCLK: std_logic;
signalo31, o63, o31n, o31p, o63n, bSDATA: std_logic;
begin
INBB:BUF port map (IN0 => BCLK, Z => iBCLK);
INBS:BUF port map (IN0 => SDATA, Z => bSDATA);
INBL:BUF port map (IN0 => LRCLK, Z => iLRCLK);
INBM:BUF port map (IN0 => MCLK, Z => iMCLK);
RSTI:INV port map (IN0 => RST, Z => RESET);
DD12A:DFFR port map (RST => RESET, D => iLRCLK,
CLK=> iBCLK, Q => pLRCLK, QN => nLRCLK);
DD12B:DFFR port map (RST => RESET, D => bSDATA,
CLK=> iBCLK, Q => iSDATA);
DD1:SPREG64R port map (RST => RESET, SI => iSDATA,
CLK=> iBCLK, Q31 => o31, Q63 => o63);
O31B:BUF port map (IN0 => o31, Z => o31p);
O31I:INV port map (IN0 => o31, Z => o31n);
O63I:INV port map (IN0 => o63, Z => o63n);
MUXL:MUX21 port map (IN0 => o63n, IN1 => o31p,
SEL=> pLRCLK, Z => SDATA_L);
MUXR:MUX21 port map (IN0 => o31n, IN1 => iSDATA,
SEL=> pLRCLK, Z => SDATA_R);
INVL:INV port map (IN0 => pLRCLK, Z => LRCLK_O);
INVB:INV port map (IN0 => iBCLK, Z => BCLK_O);
INVM:INV port map (IN0 => iMCLK, Z => MCLK_O);
endv1 ;
Далее необходимо составить коддля генератора отладочной последовательности.
--Tester1851.vhd
--Testsignal generator for DS1851
libraryieee ;
useieee.std_logic_1164.all ;
entityTester1851 is
port(
CLK: in std_logic
);
endTester1851;
architecturev1 of Tester1851 is
componentTS1851
port(
RST: out std_logic;
SCLK: in std_logic;
SDATA: out std_logic;
LRCLK: out std_logic
);
endcomponent ;
componentDS1851
port(
RST: in std_logic;
SCLK: in std_logic;
SDATA: in std_logic;
LRCLK: in std_logic;
RL1: in std_logic;
RL0: in std_logic;
LE: out std_logic;
CLK: out std_logic;
DOL: out std_logic;
DOR: out std_logic
);
endcomponent ;
componentBUF
port(
IN0: in std_logic ;
Z: out std_logic
);
endcomponent ;
signalSCLK, SDATA, LRCLK, RST: std_logic;
signalLD1, LD2, LD3, RD1, RD2, RD3, DSReg: std_logic_vector (31 downto 0);
begin
D0:BUF port map (IN0 => CLK, Z => SCLK);
D2:DS1851 port map (RST => RST, SCLK => SCLK,
SDATA=> SDATA, LRCLK => LRCLK,
RL1=> '1', RL0 => '1');
Test:process
begin
LD1
RD1
LD2
RD2
LD3
RD3
SDATA
LRCLK
RST
waitfor 50ns;
RST
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
LD1L:for i in 30 downto 0 loop
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop LD1L;
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
RD1L:for i in 30 downto 0 loop
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop RD1L;
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
LD2L:for i in 30 downto 0 loop
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop LD2L;
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
RD2L:for i in 30 downto 0 loop
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop RD2L;
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
LD3L:for i in 30 downto 0 loop
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop LD3L;
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
RD3L:for i in 30 downto 0 loop
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop RD3L;
waiton SCLK until SCLK='0';
DSReg
waitfor 10ns;
LRCLK
wait;
endprocess;
endv1;
--Tester1853.vhd
--Testsignal generator for DS1853
libraryieee ;
useieee.std_logic_1164.all ;
entityTester1853 is
port(
CLK: in std_logic
);
endTester1853;
architecturev1 of Tester1853 is
componentTS1853
port(
RST: out std_logic;
SCLK: in std_logic;
SDATA: out std_logic;
LRCLK: out std_logic
);
endcomponent ;
componentDS1853
port(
RST: in std_logic;
BCLK: in std_logic;
SDATA: in std_logic;
LRCLK: in std_logic;
MCLK: in std_logic;
BCLK_O: out std_logic;
LRCLK_O: out std_logic;
SDATA_L: out std_logic;
SDATA_R: out std_logic;
MCLK_O: out std_logic
);
endcomponent ;
componentBUF
port(
IN0: in std_logic ;
Z: out std_logic
);
endcomponent ;
signalBCLK, SDATA, LRCLK, RST: std_logic;
signalLD1, LD2, LD3, RD1, RD2, RD3, DSReg: std_logic_vector (31 downto 0);
begin
D0:BUF port map (IN0 => CLK, Z => BCLK);
D2:DS1853 port map (RST => RST, BCLK => BCLK,
SDATA=> SDATA, LRCLK => LRCLK,
MCLK=> BCLK);
Test:process
begin
LD1
RD1
LD2
RD2
LD3
RD3
SDATA
LRCLK
RST
waitfor 50ns;
RST
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
LD1L:for i in 30 downto 0 loop
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop LD1L;
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
RD1L:for i in 30 downto 0 loop
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop RD1L;
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
LD2L:for i in 30 downto 0 loop
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop LD2L;
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
RD2L:for i in 30 downto 0 loop
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop RD2L;
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
LD3L:for i in 30 downto 0 loop
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop LD3L;
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
LRCLK
SDATA
RD3L:for i in 30 downto 0 loop
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
SDATA
endloop RD3L;
waiton BCLK until BCLK='0';
DSReg
waitfor 10ns;
LRCLK
wait;
endprocess;
endv1;
/>/>/>/>Выводы
При выполнении работы былирассмотрены вопросы реализации разделения цифрового потока от приемника сигналаSPDIF (и/или AES/EBU) для подачи его непосредственно на микросхемы ЦАП. Изнабора наиболее часто используемых способов реализации были выбраны наиболееуниверсальные и лучшим образом отвечающие требованиям стандарта.
При схемной реализации былавыполнена оптимизация схемы для получения наилучших условий прохождениясигнала. Также была затронута проблема обеспечения качественной фильтрациипитания в аппаратуре с большим числом цифровых микросхем.
В результате выполнения работыбыли получены работающие схемы, пригодные к воплощению в готовом устройстве.Работа схем была промоделирована на языке VHDL. Помимо VHDL моделей был получен готовый код, пригодный для прошивкикристалла ПЛМ.
Тем не менее, основнымрезультатом работы следует считать закрепление знаний по дисциплинам «Прикладнаятеория цифровых автоматов», «Цифровая схемотехника» и «Моделированиена языке VHDL», а также повышение опыта работы ссоответствующими средствами и способами разработки.