- PVSM.RU - https://www.pvsm.ru -
Всем привет! В данной статье речь пойдет о подключении микросхем АЦП к кристаллам ПЛИС. Будут рассмотрены основные особенности соединения узлов схем, представлены современные АЦП и их характеристики. В статье будут даны практические советы по быстрому и правильному подключению АЦП к ПЛИС с минимальными временными затратами. Кроме того, речь пойдет о принципах подключения тех или иных АЦП, будет рассмотрен входной буфер ПЛИС и его базовые компоненты – триггеры, узлы задержки IODELAY, сериализаторы ISERDES и т.д. Более детально с примерами программного кода на языке VHDL будет проведен обзор основных элементов, требуемых для качественного приёма данных от АЦП. Это входной буфер, узел упаковки данных для одноканальных и многоканальных систем, модуль синхронизации и передачи данных на базе FIFO, узел программирования АЦП по интерфейсу SPI, узел синтеза частоты данных – MMCM/PLL. Также в статье будет представлен обзор законченных устройств (в стандарте FMC) от ведущих зарубежных и отечественных производителей аналоговых и цифровых схем. В конце статьи вы найдете ссылку на исходные коды универсального узла приёмника данных от многоканальных схем АЦП. Код простой и гибкий в конфигурировании, он представлен на языке VHDL и заточен на микросхемы ПЛИС Xilinx 7 серии и выше, но может быть применен и в других кристаллах ПЛИС.
АЦП применяются для широкого класса задач радиотехники – в любых устройствах, где требуется преобразовать аналоговый сигнал в цифровую форму. Они могут использоваться в аудио- и видео-системах, применяются в задачах гидроакустики и гидросвязи (низкая частота дискретизации, высокая разрядность данных), в устройствах преобразования радиочастотного диапазона (схемы DDC/DUC), в радиолокации и радионавигации (высокие частоты дискретизации, средняя разрядность данных). АЦП применяются в цифровых вольтметрах и мультиметрах, в платах видеовхода компьютеров, видеокамерах, системах распознавания речи и звуковых устройствах. Быстрые АЦП используются в осциллографах и спектроанализаторах, применяются в лабораторном оборудовании и медицинской технике. Очень часто АЦП используется в задачах сбора и обработки данных на высоких скоростях.
Как видно, микросхемы АЦП – неотъемлемая часть аналого-цифровых устройств. В современном мире очень непросто найти устройство, в котором бы отсутствовали АЦП. Классический вид АЦП представлен на следующем рисунке.
Это упрощенная схема, взятая из даташита на микросхему AD9684. Она содержит два дифференциальных аналоговых входа VINA и VINB, вход тактовой частоты CLK, управление по интерфейсу SPI, выходную шину в параллельной форме D0-D13, точки напряжения питания различных узлов микросхемы, блок синхронизации SYNC и другие управляющие сигналы.
Очевидно, что микросхемы АЦП характеризуется набором определенных параметров, от которых зависит конечный выбор пользователя и который определяет область применения АЦП. По цифровой части – это скорость передачи данных (эффективная тактовая частота), которая может находиться в диапазоне от нескольких десятков кГц до нескольких ГГц. Разрядность данных на выходе АЦП – в современных устройствах от 8 до 32 бит данных. Со стороны аналоговых характеристик – это отношение сигнал-шум (SNR) и динамический диапазон, свободный от паразитных составляющих (SFDR), выражаемые, как правило, в децибелах (типовые уровни SNR лежат в пределах 70-80 дБ, а уровни SFDR в районе 90 дБ). Немаловажными параметрами при выборе АЦП являются – рассеиваемая мощность (Вт), количество каналов в одном корпусе, интерфейс обмена с цифровым узлом и, разумеется, стоимость компонента.
Рассмотрим современные быстродействующие АЦП и их характеристики на примере таблицы, взятой с известного сайта Analog Devices – гиганта в области производства всевозможных микросхем АЦП и ЦАП. В таблицу для удобства сведены самые важные характеристики микросхем, они разделены по типу интерфейса обмена с цифровым устройством и выстроены по скорости передачи информации (тактовой частоте) от большего значения к меньшему.
В таблице представлены 4 топовые микросхемы, передающие данные в параллельной форме по стандарту LVDS. Разрядность данных 14-16, каналов 1-2, максимальная частота дискретизации 500МГц. Средние значения SNR и SFDR – 70 dBFS и 90 dBc, соответственно. Для некоторых микросхем с последовательной шиной передачи данных (Serial) характеристики практически схожие. Для современных микросхем АЦП, которые используют интерфейс передачи JESD204B и подключаются к ПЛИС через гигабитные линии, тактовые частоты значительно выше, но аналоговые характеристики несколько хуже (по меньшей мере из-за того, что разрядность цифровых данных ниже – 12 и 14 бит). В данной статье не будет рассматриваться подключение АЦП к кристаллам FPGA через гигабитные линии. Я остановлюсь на простом и хорошо изученном варианте подключения микросхем – последовательная и параллельная шина с интерфейсами передачи данных типа LVTTL, LVDS, LVCMOS, LVPECL. В частности, интересен способ передачи данных по LVDS шине, который отличается простотой трассировки печатных плат, дешевизной исполнения, низким уровнем помех и рассеиваемой мощности, а также высокой скоростью передачи данных. Для приема данных по последовательной шине в ПЛИС используются сериалайзеры / десериалайзеры. Для параллельной шины все намного проще и данные принимаются как есть.
В ходе работы по сопряжению аналоговых и цифровых устройств мне приходилось осваивать следующие микросхемы АЦП. Это уже устаревшие, но всё еще используемые – AD9224, AD6644ST-65, AD9244, LCT2207, ADS5474, AD9432BST-105, AD7475BR, микросхемы современного уровня – AD9430BSV, ADS54RF, AD9467, ADC12D1800, AD9680 и другие. Поскольку область моей работы лишь частично связана с аналоговой схемотехникой, я вряд ли расскажу вам о способах улучшениях характеристик законченных аналого-цифровых модулей. Также я не смогу дать советы по качественному построению аналоговых трактов и методике выбора тех или иных компонентов схемы для достижения наилучших аналоговых показателей (SNR, SFDR). Но на вопросы подключения АЦП к кристаллам FPGA и дальнейшей обработки данных я постараюсь ответить в рамках данной статьи.
На следующих рисунках будут представлены современные примеры законченных и качественных модулей аналого-цифрового преобразования данных от российских и зарубежных производителей. Все они имеют один или несколько аналоговых входов подключения и разъем-переходник FMC (FPGA Mezzanine Card) для подключения к несущей плате, на которой устанавливается обработчик данных (как правило, это FPGA). FMC – это один из основных стандартов для подключение изделий по модульной архитектуре. На мезонинный модуль (mezzanine board) зачастую устанавливается аналоговая часть, а на несущий модуль (carier board) устанавливается центральное устройство, осуществляющее обработку данных – это одна или несколько ПЛИС и/или сигнальные процессоры. Из зарубежных производителей устройств следует выделить две лидирующие фирмы-производителя – это 4dsp и hitechglobal. Из отечественных производителей гугл в первых строках поиска выдает ЗАО «Скан инжиниринг Телеком», ЗАО «Инструментальные системы» и другие. Автор статьи не несет ответственности за представленные модули и не использует статью в целях рекламы продукта той или иной фирмы.
HTG-ADC16. Обладает следующими характеристиками (взяты с официального сайта):
FMC104: 4-Channel 250 MSPS @ 14-bit. Характеристики (некоторые удалены за избыточностью информации):
Особенность модуля – четыре канала АЦП, напряжение питания 1.8В (используются HP-банки FPGA Xilinx).
FMC120: 4-Channel 250 MSPS @ 14-bit. Характеристики:
FMC140: 4-channel 16-bit 370MSPS A/D. Обладает следующими характеристиками:
Особенность модуля – 4 высокоскоростных канала АЦП, разрядность данных 16 бит, обмен по интерфейсу JESB204B.
Модуль SFM-4A1000. Характеристики:
Особенность модуля – отечественная разработка, 4 высокоскоростных канала АЦП, полоса 2ГГц, обмен по интерфейсу JESB204B.
Модуль FMC212x4GDA. Характеристики:
Особенность модуля – 2 высокоскоростных канала АЦП, полоса сигнала до 2ГГц, обмен по интерфейсу JESB204B, встроенные микросхемы DDC, 4 канала ЦАП.
Модуль FMC816x250M. Характеристики:
Особенность модуля – 8 каналов АЦП, сдвоенный модуль.
Как видно, многие из модулей аналого-цифрового преобразования в стандарте FMC похожи и обладают практически идентичными характеристиками, которые определяются установленными микросхемами АЦП и ЦАП. Окончательный выбор того или иного модуля определяется задачей, которую требуется решить конечному пользователю.
Перейдем к основному разделу статьи – подключение микросхем АЦП к кристаллам ПЛИС. Рассмотрим подключение АЦП по параллельной и последовательной шине, с интерфейсами передачи данных – LVTTL, LVCMOS, LVDS. В статье не будет рассмотрено подключение АЦП по интерфейсу JESD204B, поскольку это материал отдельной темы, который займет не одну полноценную статью. Кроме того, JESD204B существенно отличается в реализации от «классических» вариантов подключения микросхем АЦП и требует более детального рассмотрения.
Как известно, банки (группы пинов) ввода/вывода ПЛИС могут конфигурироваться на различное напряжение питания, границы которого определяются производителем кристаллов. В современных ПЛИС типа Xilinx диапазон подаваемых напряжений зависит от типа банка. Существует два основных типа банка (Xilinx) – HP (высокопроизводительные) и HR (банки с большим числом пинов). Например, в микросхемах 7 серии Xilinx диапазон напряжений для банков HR – от 1.2 до 3.3В, а для банков HP – от 1.2 до 1.8В. Помимо этого, пины банков могут программироваться на широкий диапазон стандартных интерфейсов передачи данных, но конечный выбор стандарта определяется двумя правилами: напряжение питания банка ПЛИС и способ подключения удаленного устройства и ПЛИС. С другой стороны, немаловажным фактором выбора напряжения питания банка ПЛИС является семейство кристаллов. Так, для Kintex-7 возможно использовать стандарт LVDS 25 и питать банк напряжением 2.5В, а для многих микросхем ПЛИС Virtex-7 стандарт подключения исключительно LVDS 18, и банк запитывается напряжением 1.8В. В связи с этим, возникает проблема сопряжения некоторых аналоговых модулей и несущих плат с разными семействами ПЛИС. Поэтому при покупке у стороннего производителя модуля АЦП и/или несущей платы нужно убедиться, что они совместимы по стандарту и напряжению питания. Как правило, интерфейс передачи данных прописывается в файле ограничений (UCF или XDC), а не в исходных кодах проекта, что обеспечивает гибкость конфигурации и повторное использование файлов исходных кодов в других проектах.
Структурная схема файла верхнего уровня проекта (а также внутренних блоков, используемых для приёма данных от микросхем АЦП по стандарту LVTTL / LVCMOS / LVDS) представлена на следующем рисунке.
Она включает следующие элементы:
Помимо этих узлов, на верхнем уровне используется модуль синтеза частоты на основе MMCM – стандартный ресурс ПЛИС. Также для управления задержками в узлах IODELAY применяется компонент IDELAYCTRL.
Основные параметры файла верхнего уровня, от которых зависит конфигурация схемы в ПЛИС:
И некоторые другие параметры.
Часть код файла верхнего уровня приёмника АЦП выглядит примерно следующим образом:
xFIFO: CTRL_FIFO_CONFIG
generic map (
DATA_WIDTH => PACK_OUT,
ADDR_WIDTH => FIFO_ADDR
)
port map (
reset => reset,
wr_clk => clk_pack,
rd_clk => sys_clk,
data_i => do_pack,
data_o => do_fifo,
rd_en => cs_fifo,
wr_en => dv_pack,
empty => ef_fifo,
full => ff_fifo
);
Здесь подключается узел FIFO для синхронизации данных с системной шиной устройства. Программирование задержек для IODELAY в многоканальной и многоразрядной схеме буфера выглядит следующим образом:
---- Data delays ----
x_dat_dd <= x_dat_do(conv_integer(unsigned(dl_chan))) when rising_edge(dl_clk);
x_dat_in(conv_integer(unsigned(dl_chan)))(conv_integer(unsigned(dl_muxs))) <= dl_dat_in when rising_edge(dl_clk);
x_dat_ce(conv_integer(unsigned(dl_chan)))(conv_integer(unsigned(dl_muxs))) <= dl_dat_ce when rising_edge(dl_clk);
x_dat_ld(conv_integer(unsigned(dl_chan)))(conv_integer(unsigned(dl_muxs))) <= dl_dat_ld when rising_edge(dl_clk);
Где dl_chan — выбранный канал АЦП, dl_muxs — выбранный разряд АЦП. Это сделано для независимого программирования каждого бита данных.
Рассмотрим каждый узел детально.
Замечание: для подключения ПЛИС и ЦАП (цифро-аналоговых преобразователей) ситуация зеркальна. Необходимо сделать все тоже самое, но в обратном порядке. В рамках данной статьи подключение ПЛИС к ЦАП не рассматривается.
Содержит первичные элементы подключения между внешними сигналами печатной платы и логикой ПЛИС. Это буфер IPAD от контакта ПЛИС к логике входного буфера IOBUF. В зависимости от интерфейса передачи данных буфер может быть дифференциальный – IBUFDS и однополярный – IBUF. Для многих буферов возможна жесткая привязка к требуемому стандарту, либо возможна установка типа выходного сигнала через атрибуты. Например, для IBUFDS с помощью атрибута IOSTANDARD можно заранее в исходных кодах определить и задать стандарт «LVDS_25».
Следом за буфером устанавливается узел регулирования задержки прохождения сигнала IODELAY для выравнивания фронтов параллельной шины данных и первичного согласования многоканальных узлов подключения АЦП к ПЛИС. IODELAY – программируемый ресурс ПЛИС, величина задержки может быть фиксирована и определяться установкой по умолчанию, либо программироваться в диапазоне от 0 до 31 условных величин времени (цифра определяется даташитом на микросхему ПЛИС). Программирование осуществляется примитивным образом с помощью нескольких сигналов. Останавливаться на детальном разборе алгоритма программирования не будем, за дополнительной информацией можно обратиться к документу из списка литературы в конце статьи. Для узлов IODELAY необходимо подключать специальный узел контроля задержек IDELAYCTRL, который в режиме реального времени калибрует задержки для каждого тактового региона ПЛИС. Для устранения влияния температуры кристалла, напряжения питания и загруженности ПЛИС, узел IDELAYCTRL тактируется независимым сигналом REFCLK. Этот тактовый сигнал обеспечивает равную величину задержки (TAP) во всех узлах IODELAY каждого тактового региона ПЛИС. Если в каждом тактовом регионе необходимы свои величины подстройки – в кристалле ПЛИС инициализируются несколько узлов IDELAYCTRL. Тактовый сигнал REFCLK может подаваться с внешнего генератора, установленного вне ПЛИС, либо может быть получен путем синтеза частоты в узле MMCM кристалла ПЛИС.
Следом за узлом задержки IODELAY возможна установка FD триггера, если режим передачи данных DATA_RATE = «SDR». Этот триггер опционально помещается во входной буфер и тактируется частотой АЦП, сопровождающей данные с аналогового модуля. В режиме DATA_RATE = «DDR» триггер заменяется на усложненный вариант IDDR, который имеет один вход данных и два выхода. С выхода возможна выдача данных в нескольких режимах, но на практике я использовал только один – это «SAME_EDGE_PIPELINED», при котором данные с выхода Q1 и Q2 выдаются по одному и тому же фронту тактового сигнала.
Ну и наконец, самый интересный вариант – это подключение узла IODELAY к модулю десериализации данных ISERDES. Узел сериалайзера – сложный элемент входного буфера ПЛИС, он содержит следующие опции:
Тактирование узла осуществляется несколькими сигналами – это сигнал на высокой частоте принимаемых данных CLK и сигнал CLKDIV, деленный на число, определяемое параметром DATA_WIDTH. Деление может происходить вне ПЛИС, но на практике используются синтезаторы частоты в самом кристалле ПЛИС, которые носят название MMCM. Таким образом, на вход узла ISERDES поступает последовательный сигнал на частоте CLK, а на выходе узла ISERDES получается параллельный поток данных на сниженной частоте CLKDIV = CLK / DATA_WIDTH. Тактовую частоту можно поделить с помощью регионального буфера BUFR, значение коэффициента деления BUFR_DIVIDE = 1-8, или на узле синтезатора частоты MMCM, программируемого в широком диапазоне.
Для устранения эффекта совпадения фронта тактовой частоты и данных не всегда хватает узлов IODELAY и подстройки частоты в MMCM. Зачастую приходится искать альтернативные пути решения этой проблемы. К счастью, это решение было найдено моим коллегой, о чем он недавно рассказал в своей статье (Полезные свойства джиттера [1]).
Все перечисленные выше узлы (за исключением MMCM) входят в состав входного буфера ПЛИС и не занимают логических ресурсов кристалла. С выхода FD / IDDR / ISERDES данные поступают уже на логические элементы – это триггер или FIFO небольшого размера для первичной пересинхронизации данных на частоту, полученную после прохождения частоты дискретизации АЦП в узле MMCM. В некоторых случаях пересинхронизация не используется, а данные синхронизируются напрямую частотой дискретизации АЦП. На следующем рисунке приведена временная диаграмма обработки последовательных данных с микросхемы АЦП на устройстве ISERDES. Показана входная тактовая частота, последовательная форма входных данных и преобразованные данные в параллельный код.
Таким образом, в зависимости от конфигурации, во входном буфере возможно три пути прохождения сигнала, как показано на рисунке:
A) режим SDR — данные принимаются по параллельной шине, для каждого бита данных используется свой буфер ПЛИС,
B) режим DDR — данные принимаются по параллельной шине, данные тактируются удвоенной частотой.
C) режим SERDES — данные принимаются по последовательной шине
Этот узел используется в одноканальных и многоканальных схемах приема данных от АЦП. Основное его назначение – упаковать данные в удобный формат внутренней шины, используемый внутри ПЛИС. Разрядность внутренней шины определяется разработчиком или корпоративным стандартом. Типовые значения разрядности на выходе упаковщика – 32, 64, 128, 256, 512 бит данных. В некоторых случаях упаковщик не может быть сконфигурирован. Это зависит от количества входных каналов, разрядности входной и выходной шины данных упаковщика. Например, для четырехканального источника с разрядностью входных данных = 16 бит невозможно организовать перепаковщик с выходной шиной разрядностью менее WOUT = WIN * NCHAN = 16 * 4 = 64 бит. Для одноканального источника данных с той же разрядностью на входе и выходе данные будут последовательно упакованы пачками по 16 бит в разрядную сетки 64 бита. То есть первый отсчет АЦП займет битовое поле [15:0], второй отсчет – [31:16], третий – [47:32], а четвертый – [63:48]. Далее отсчеты циклически будут занимать битовые поля от младшего к старшему в выходной сетке данных. Другой пример. Используется 2 канала данных, разрядности на входе и выходе остаются те же самые – 16 и 64 бит соответственно. Если система сбора данных на удаленном устройстве включает только один канал, то упаковка происходит, как показано в примере выше, причем неважно, какой из каналов включен. Если система сбора включает оба канала, то данные упаковываются попарно от младшей части разрядной сетки к старшей. Первый отсчет первого канала займет позицию [15:0], первый отсчет второго канала займет позицию [31:16], второй отсчет первого канала – [47:32], второй отсчет второго канала – [63:48]. Как показала практика, это самый удобный вариант упаковки данных при многоканальной обработке, в случае отключения тех или иных каналов передачи. Замечание: количество каналов должно быть кратно степени двойки – 1, 2, 4, 8 и т.д. Может показаться, что этот узел – сложный в реализации и понимании, но после нескольких применений в своих проектах вы найдете для себя, что ничего сложного и необычного здесь нет.
На следующем рисунке приведены временные диаграммы работы узла упаковщика данных в режиме: NCHAN = 1, WIN = 8, WOUT = 32.
Красными линиями показан процесс упаковки данных на выходную шину, которая сопровождается сигналом разрешения DVAL = 1 после приёма 4 отсчетов данных.
Этот узел строится на базе примитивной схемы FIFO и имеет одно важное и простое назначение – преобразование потока данных с частоты дискретизации CLK_ADC на частоту обработки или частоту работы внутренней шины устройства SYS_CLK (системная тактовая частота). Для простоты можно создать узел FIFO в Xilinx Core Generator, но в идеале лучше написать свой модуль, который будет гибок в конфигурации на произвольную ширину шины (FIFO_WIDTH) и глубину памяти (FIFO_DEPTH). На следующем рисунке приведены временные диаграммы работы узла FIFO, показаны входные и выходные данные, а также флаги пустого (empty) и полного (full) FIFO. Следует отметить, что для нормальной работы FIFO АЦП флаг заполненности FULL должен быть всегда равен 0, что говорит о правильности принятия данных от АЦП и отсутствии переполнения. Если флаг FULL = 1, то скорость приема данных удаленным обработчиком недостаточна, либо скорость работы АЦП слишком велика для выбранной системы.
На следующем рисунке изображено схематическое представление узла FIFO в среде Plan Ahead.
Видно, что FIFO строится на базе двухпортовой памяти. На шины адреса памяти отправляются данные в коде Грея — на схеме это два узла для чтения и записи. Это позволяет снизить битовую ошибку на высоких частотах, т.к. соседние значения в коде Грея отличаются всего лишь одной битовой позицией. Логика флагов FIFO определяется значениями в модулях счетчика Грея, а для увеличения тактовой частоты узла на выходе используются регистры.
Возникает вопрос — а куда дальше идут собранные и упакованные данные? Ответ прост: с помощью интерфейсов PCI / PCIe, USB, Ethernet, SRIO, SATA данные достигают конечной цели, где проходят последующую обработку и где осуществляется сбор всей информации. До этого звена внутри ПЛИС может находиться узел цифровой обработки сигналов (DSP), например — DDC, DUC, FFT / IFFT и т. д. Кроме того, данные могут буферизироваться на внешней памяти большого объема, типа DDR3 / DDR4. Это частый приём, который применяется для обработки большого потока информации на высоких скоростях. В данном случае внешняя память имитирует FIFO большого размера. Для соединения ПЛИС с внешней памятью применяются специальные контроллеры, которые, как правило, доступны и открыты для использования. В случае Xilinx они находятся в IP Core Generator.
Помимо прочего, разработчику необходимо создать собственный конечный автомат управления всеми ресурсами приёмника АЦП: это конфигурация задержек в IODELAY, программирование синтезатора частоты MMCM, передача команд по SPI на АЦП и ЦАП модули, управление началом и концом сбора данных с АЦП, управление количеством активных каналов, использование внешней памяти DDR и многое другое. У всех это своя уникальная архитектура, но базовые принципы остаются одинаковыми. На фирме, в которой я работаю, используются узлы управления под названием "тетрады". Подробно о них рассказывал мой коллега здесь [2].
Как правило, управление аналоговым модулем осуществляется через SPI-подобные интерфейсы. Реализовать SPI-интерфейс под силу любому студенту старшего курса, в программе которого есть изучение программируемой логики и ПЛИС. Заострять внимание на узле SPI я не буду. В конце статьи в качестве примера приведен исходный код управления удаленной микросхемой HI-6131, которая обрабатывает сообщения в формате MIL-STD-1553. Код не параметризируемый и заточен конкретно на выбранную микросхему. Для разминки вы можете написать свой узел SPI, который будет конфигурироваться на разные параметры. Временная диаграмма управления по SPI-интерфейсу имеет следующий вид:
Исходный код всех компонентов и узлов представлен на языке VHDL и предназначен для микросхем FPGA Xilinx 7 серии (и выше). Исходные коды открыты для использования и доступны по ссылке на гитхабе — см. здесь [3]. Все компоненты по возможности сделаны гибкими в конфигурации и не требуют существенного вмешательства в исходный код (за исключением узла SPI — простите, было лень). К сожалению, невозможно подстроиться под все существующие решения, но данный пример успешно отработал для всех аналоговых модулей, с которыми я работал.
Например, операции чтения и записи в FIFO, а также подключение узлов преобразования двоичного кода в код Грея выглядит следующим образом:
---- Read data ----
pr_rd: process(rd_clk) begin
if (rising_edge(rd_clk)) then
if (rd_en = '1' and xempty = '0') then
data_o <= Mem(conv_integer(pNextWordToRead));
end if;
end if;
end process;
---- Write data ----
pr_wr: process (wr_clk) begin
if (rising_edge(wr_clk)) then
if (wr_en = '1' and xfull = '0') then
Mem(conv_integer(pNextWordToWrite)) <= data_i;
end if;
end if;
end process;
---- Gray counters ----
xGray_WR : rtl_gray_count
generic map ( COUNTER_WIDTH => ADDR_WIDTH )
port map (
cnt => pNextWordToWrite,
ena => NextWriteAddressEn,
rst => reset,
clk => wr_clk
);
xGray_RD : rtl_gray_count
generic map ( COUNTER_WIDTH => ADDR_WIDTH )
port map (
cnt => pNextWordToRead,
ena => NextReadAddressEn,
rst => reset,
clk => rd_clk
);
и т.д.
Продолжение следует...
Автор: capitanov
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/203276
Ссылки в тексте:
[1] Полезные свойства джиттера: https://habrahabr.ru/post/309944/
[2] здесь: https://habrahabr.ru/post/309136/
[3] гитхабе — см. здесь: https://github.com/capitanov/adc_configurator/
[4] Источник: https://habrahabr.ru/post/313692/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.