Перейти к содержанию
    

Прошу оценить стоимость разработки

Прошу оценить стоимость разработки цифрового приёмника (DDC) на VHDL без использования сторонних ip-ядер. Состав приёмника – NCO, комплексный смеситель, каскады дециматоров на КИХ фильтрах, управление по AXI шине. Приёмник умеет перестраивать все или выбранные фазы (смесителя и дециматоров) по синхросигналу. Также умеет перестраивать коэффициенты децимации на лету, по командам с axi. Работает на максимальной для выбранного кристалла частоте. К IP ядру прилагается gui для расчёта фильтров со встроенной мат. оптимизацией по критерию полоса/подавление.

Схема не классическая – CIC + корректор, а на основе КИХ с симметричной реализацией фильтров, в результате довольно компактный приёмник - при прореживании в 256 раз довольно двух каскадов, 6 умножителей, 700 триггеров, 500 LUT, 6 BRAM на 2 кбайт. АЧХ как на картинке.

 

image.jpg

 

Рад услышать любое мнение!

 

 

post-2741-1465581550_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По стоимости не подскажу. Напишите по пунктам ключевые особенности, чего нельзя реализовать (по ресурсам, быстродействию, структуре) с помощью стандартных средств и дополнительных программ (Matlab например). Для NCO Вы используете только табличное преобразование или есть алгоритмы аппроксимации? Сколько на него в отдельности уходит ресурсов? Какая разрядность NCO по фазе? Какие используются алгоритмы оптимизации при нахождении коэффициентов фильтра? Каким образом эти алгоритмы учитывают фиксированную разрядность коэффициентов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По стоимости не подскажу. Напишите по пунктам ключевые особенности, чего нельзя реализовать (по ресурсам, быстродействию, структуре) с помощью стандартных средств и дополнительных программ (Matlab например). Для NCO Вы используете только табличное преобразование или есть алгоритмы аппроксимации? Сколько на него в отдельности уходит ресурсов? Какая разрядность NCO по фазе? Какие используются алгоритмы оптимизации при нахождении коэффициентов фильтра? Каким образом эти алгоритмы учитывают фиксированную разрядность коэффициентов?

В Xilinx ip нет перестройки децимации/усиления на лету, например, нет синхронизации. NCO табличный, хотя раньше был с коррекцией в ряд Тейлора на 20 бит, за ненадобностью отвалился в пользу менее ресурсоёмкого.

Оптимизация идёт по эффективной шумовой полосе, затем по полосе пропускания/ослаблению в полосе запирания, там есть всегда точка оптимума для конечной разрядности умножителей. Фиксированная разрядность не учитывается, там КИХ, а не БИХ фильтры, особой нужды нет. Округление результата симметричное для простоты, хотя сейчас уже, как слышал, используют комплексное.

 

iprium что-то подобное продаёт за 3K евро в нетлистах, разработка с нуля, думаю дороже должна быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5-7K

А, если не секрет, сколько времени займёт такая разработка у специалиста с опытом?

Можно в ЛС.

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А, если не секрет, сколько времени займёт такая разработка у специалиста с опытом?

Можно в ЛС.

 

Спасибо!

Мне сложно судить, т.к. в библиотеке разработок описанные вещи у меня есть. В целом подобный каркас "NCO, комплексный смеситель, каскады дециматоров на КИХ фильтрах" мне скидать часа 4. Если под "управление по AXI шине" понималась AXI Lite то еще часа 4 сделать мост для управления. Если полноценный AXI то это разбираться надо в его тонкостях.

 

Сложность вот в этом "Работает на максимальной для выбранного кристалла частоте" - это подразумевает по сути создание RPM макроса ну или широкое использование примитивов целевой ПЛИС. Может времени занять до 2-3 недель.

 

Вся фишка вот в этом " К IP ядру прилагается gui для расчёта фильтров со встроенной мат. оптимизацией по критерию полоса/подавление." Судя по картинке, софт работает и кодогенератором, а это сложнее. Вот такое сделать я не возьмусь. Т.к. под PC давно не пишу. Но думаю что месяц-два займет.

 

NCO табличный, хотя раньше был с коррекцией в ряд Тейлора на 20 бит, за ненадобностью отвалился в пользу менее ресурсоёмкого.

NCO или DDS ? Всегда считал что DDS = NCO + преобразователь синуса/косинуса

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

NCO или DDS ? Всегда считал что DDS = NCO + преобразователь синуса/косинуса

А мне казалось, что это одно и то же :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нет синхронизации.

Сигналы готовности нельзя использовать для синхронизации? Или есть какие-то особенности?

 

Фиксированная разрядность не учитывается, там КИХ, а не БИХ фильтры, особой нужды нет.

Нет, речь конечно не о БИХ, а об алгоритме оптимизации целевой функции при нахождении коэффициентов КИХ фильтра. Понятно, что она будет сильно нелинейной, при ограничении разрядности.

 

Сложность вот в этом "Работает на максимальной для выбранного кристалла частоте" - это подразумевает по сути создание RPM макроса ну или широкое использование примитивов целевой ПЛИС.

Присоединяюсь к вопросу об оптимизации по максимальной частоте: примитивы, RPM или Hard Macros? На vhdl согласен, разработчик в области ЦОС должен иметь в запасе набор своих ядер, позволяющий реализовать приемник с каскадной децимацией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сигналы готовности нельзя использовать для синхронизации? Или есть какие-то особенности?

 

 

Нет, речь конечно не о БИХ, а об алгоритме оптимизации целевой функции при нахождении коэффициентов КИХ фильтра. Понятно, что она будет сильно нелинейной, при ограничении разрядности.

 

 

Присоединяюсь к вопросу об оптимизации по максимальной частоте: примитивы, RPM или Hard Macros? На vhdl согласен, разработчик в области ЦОС должен иметь в запасе набор своих ядер, позволяющий реализовать приемник с каскадной децимацией.

 

Под синхронизацией подразумевается сигнал, который устанавливает начальную фазу DDS и (или) перезапускает прореживание, то есть если прореживаем в 256 раз, 255 точек выкидываются, вот он и определяет с какой точки начинаем выкидывать лишнее, грубо говоря.

Для частоты сделано на примитивах, если каналов много и кристалл сильно заполнен добавляются area constraint, но не всегда обязательно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под синхронизацией подразумевается сигнал, который устанавливает начальную фазу DDS и (или) перезапускает прореживание

Для NCO достаточно сброса, для фильтра можно сделать пропуск нескольких отсчетов данных, чтобы подогнать фазу выходного сигнала под требуемую (чтобы избежать звона фильтра).

 

Схема не классическая – CIC + корректор, а на основе КИХ с симметричной реализацией фильтров, в результате довольно компактный приёмник - при прореживании в 256 раз довольно двух каскадов, 6 умножителей, 700 триггеров, 500 LUT, 6 BRAM на 2 кбайт.

На CIC давно никто не делает, КИХ - классика. Правильно ли я понимаю:

Аккумулятор фазы - на распределенной логике

1 BRAM - преобразователь из угла в sin/cos

2 DSP - квадратурный смеситель

4 BRAM - память на данные для двух фильтров

1 BRAM - память на коэфф. для двух фильтров

4 DSP - MAC в двух фильтрах

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для NCO достаточно сброса, для фильтра можно сделать пропуск нескольких отсчетов данных, чтобы подогнать фазу выходного сигнала под требуемую (чтобы избежать звона фильтра).

 

 

На CIC давно никто не делает, КИХ - классика. Правильно ли я понимаю:

Аккумулятор фазы - на распределенной логике

1 BRAM - преобразователь из угла в sin/cos

2 DSP - квадратурный смеситель

4 BRAM - память на данные для двух фильтров

1 BRAM - память на коэфф. для двух фильтров

4 DSP - MAC в двух фильтрах

1 BRAM - таблица, 1 BRAM - входное FIFO, 2 BRAM - память данных с сим. выходом, 2 BRAM - память коэффициентов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

NCO или DDS ? Всегда считал что DDS = NCO + преобразователь синуса/косинуса

 

DDS = NCO + ЦАП

NCO = PA + PAC

где

PA - Phase Accumulator, PAC - Phase-to-Amplitude Convervter

 

Не претендую на истину, но вроде всегда так было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 BRAM - таблица, 1 BRAM - входное FIFO, 2 BRAM - память данных с сим. выходом, 2 BRAM - память коэффициентов.

Хорошо оптимизировано. Память коэффициентов под разные степени децимации? Чем определяется необходимость во входном FIFO? На усиление тратится отдельный такт в ущерб порядка? Какова необходимость в смене усиления на лету?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошо оптимизировано. Память коэффициентов под разные степени децимации? Чем определяется необходимость во входном FIFO? На усиление тратится отдельный такт в ущерб порядка? Какова необходимость в смене усиления на лету?

 

Память коэффициентов грузится со второго порта для смены коэффициента децимации. FIFO потому что приёмник работает на своей частоте (макс для кристалла), а данные приходят с АЦП напрямую на частоте АЦП. То есть смена клокового домена + джиттер компенсатор. Сделано для удобства пользования.

Фильтр всегда усиливает в зависимости от коэффициента децимации, т.к. масштаб коэффициентов выбирается исходя из разрядности умножителей, так что нужен баррел шифтер для сдвига выхода при смене коэффициента децимации (у меня это называется изменением усиления фильтра).

Такт тратится только в Spartan-6 для симметричного округления, в S6 нет его поддержки в DSP слайсах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошо сделанная работа, со своей стороны мог бы рекомендовать потенциальному работодателю.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...