Страница 1 из 14 12311 ... Последняя
Показано с 1 по 20 из 264

Тема: DF2 - Вторая версия DIY ЦФ

  1. #1
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,619

    По умолчанию DF2 - Вторая версия DIY ЦФ

    Итак, обещанный проект нового ЦФ.
    Опыт прошлой ветки показал, что вопросы построения ЦФ сводятся к конкретному проекту. Поэтому решил создать отдельную.

    Исходная ветка с обсуждением различных реализаций ЦФ здесь.
    Ветка про ЦФ DF1 здесь.

    С момента публикации прошлой версии ЦФ прокачал скилл по верилогу, поэтому новый ЦФ выполнен проще, и с более сложной арифметикой. В частности добавлены опции шейпера и дополнительного апсемплера, что позволяет выводить данные в том числе на малоразрядные ЦАП, типа AK4499EX.
    Получив определенный опыт понял о чем писал Сергей Агеев (на счет реализации умножителей и многовходовых сумматоров на FPGA). Если правильно выбирать длину конвейера, то нет смысла изобретать оригинальную схему умножителя. Компилятор синтезирует лучше.
    То же самое касается описания сумматоров: использование многовходовых сумматоров оптимизируется лучше, чем ручная разбивка на двух-входовые.

    В отличие от предыдущего проекта, новый делался как заготовка для самостоятельного применения и доработки под свои задачи. Поэтому все режимы досконально не тестировались, и проект выкладывается "как есть" в версии альфа.
    В исходниках есть только пара примеров: для FPGA cyclone и lcmxo2.
    Описание содержит краткое перечисление основных параметров, а так же инструкцию по самостоятельной сборке проекта и генерации собственных коэф-тов в MatLab.
    Картинок много, текста мало. Все как мы любим.
    Утилита и ее исходник для автоматизированной конверсии коэф-тов в формат верилога прилагается.
    Так же прилагаются матлабовские модели всех каскадов фильтра, архив со сгенерированными коэф-тами фильтров, примененных в проекте и симулинк-модель. Для запуска симулинк-модели нужен матлаб версии r2018b.

    - 25.09.2023 - Добавил MatLab модель шейпера в симулинке. На этот раз версии r2013b. В 2018-ом матлабе че-то намудрили со спектроанализатором, и в нем амплитуда сигнала получается зависима от порядка шейпера, или от кратности оверсемплинга.

    - 27.09.2023 - Правка шейпера 3-го порядка

    Шейпер 3-го порядка в проекте выполнен по схеме:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132616551.png 
Просмотров:	236 
Размер:	17.0 Кб 
ID:	441606
    NTF шейпера на 1кГц сигнале:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132509846.png 
Просмотров:	233 
Размер:	29.1 Кб 
ID:	441605
    Данный шейпер оптимизирован для работы на невысокой частоте семплирования (х16..х32) и с разрядностью данных не менее 7..8 бит.
    На работы на более высоких ЧД при меньшей разрядности данных можно упростить коэф-т шейпера, улучшив SNR и сэкономив на логике. Для этого исключается слагаемое Gain3 (по схеме симулинка):
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_132931529.png 
Просмотров:	198 
Размер:	17.0 Кб 
ID:	441607
    В проекте это слагаемое находится в файле DATA_READ.v:
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_133349302.png 
Просмотров:	220 
Размер:	20.6 Кб 
ID:	441609
    Данное слагаемое отклоняет значение коэф-та от 3-х, создавая дополнительный полюс на NTF. После упрощения коэф-та NTF шейпера принимает вид классического модулятора 3-го порядка.
    Нажмите на изображение для увеличения. 

Название:	изображение_2023-09-27_133125636.png 
Просмотров:	228 
Размер:	26.8 Кб 
ID:	441608
    Можно также это слагаемое не удалять, а менять его величину (увеличивать сдвиг), двигая тем самым полюс NTF.
    [свернуть]

    - 28.09.2023 - Отрефакторил модули DATA_READ и SAI_OUTPUT. Поправил описание.
    - 05.10.2023 - Поправил DF_CONTROL. Поправил описание.
    Вложения Вложения
    Последний раз редактировалось dortonyan; 05.10.2023 в 22:16.

  2. #2
    Завсегдатай Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    _________________
    Евгений

  3. #3
    Завсегдатай Аватар для Serge_L
    Регистрация
    12.09.2008
    Адрес
    Калуга
    Возраст
    49
    Сообщений
    2,953

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Офигеть!
    Это просто джиттер какой-то! (с) momitko

  4. #4
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,825

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  5. #5
    Старый знакомый Аватар для dee-jan
    Регистрация
    09.07.2009
    Адрес
    BLR
    Возраст
    43
    Сообщений
    929

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Я эту круть уже попробовать успел. Фильтры выбираются, цапы управляются.
    Респект Алексею как всегда
    Даже обкатали PCM58 на 32х. Он смог на 44.1х32 разогнаться, на 48к увы.
    Но устаканивается ток уже плохо, линейность страдает.
    Прикрепил спады разных ЦФ-normal -6db, sharp, short, slow.
    Sharp правда версия от старого DF1.
    -90дб версию на Найквисте не покажу
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Normal-6db.png 
Просмотров:	171 
Размер:	149.2 Кб 
ID:	441289   Нажмите на изображение для увеличения. 

Название:	Sharp_old.png 
Просмотров:	152 
Размер:	148.3 Кб 
ID:	441290   Нажмите на изображение для увеличения. 

Название:	Short_new.png 
Просмотров:	130 
Размер:	150.0 Кб 
ID:	441291   Нажмите на изображение для увеличения. 

Название:	slow.png 
Просмотров:	137 
Размер:	150.2 Кб 
ID:	441293  

    Сергей.

  6. #6
    Завсегдатай Аватар для Михаил45
    Регистрация
    09.03.2007
    Адрес
    Санкт-Петербург
    Возраст
    63
    Сообщений
    2,130

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Алексей спасибо! Поддерживаешь творчество и жизнь на форуме.

  7. #7
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,655

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Спасибо за проект. Будем пробовать.
    А я уже хотел спрашивать где дф2?

  8. #8
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,619

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Всем Пользуйтесь на здоровье.
    Я только не ручаюсь за то что не найдется касяков. Тестировать такой функционал очень накладно и муторно.
    SPI, например, пока что проверял только в симуляторе.
    Ну и теоретически может возникнуть вопрос с возбудом CIC интерполятора. Я толком и не понял отчего так получается. То ли компилятор диамонда что-то оптимизирует не туда....
    Пока что реклок конфигурационных сигналов проблему решает, дальше колупать неахота.
    Для тестов задал х4 CIC интерполятор плюс х4 основной ЦФ. Получается х16 оверсемплинг. Работает нормально.

  9. #9
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,655

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от dee-jan Посмотреть сообщение
    Даже обкатали PCM58 на 32х. Он смог на 44.1х32 разогнаться, на 48к увы.
    А сколько битклоков на семпл вы выставляли? При 24 битклоках, например, PCM1702P точно работает на х32 в обеих сетках.

  10. #10
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,619

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    А я уже хотел спрашивать где дф2?
    ЦФ работает давно. Описалово, даже такое поверхностное, много времени заняло.
    А без описания такое мало кому надо. Кто разбирается по коду - может и сам написать себе ЦФ.

    ---------- Сообщение добавлено 21:07 ---------- Предыдущее сообщение было 21:04 ----------

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    А сколько битклоков на семпл вы выставляли? При 24 битклоках PCM1702P точно работает на х32 в обеих сетках.
    Около 23.
    Для максимального растягивания фрейма я сделал "финт ушами": для модуля SAI_OUTPUT добавил х2 умножитель тактовой на триггере, и задал деление на 3. Получилось относительно тактовой деление на 1,5.
    Скважность битклока получилась не 50/50, но и не сильно кривая, около 40/60..45/55, не кривее: Нажмите на изображение для увеличения. 

Название:	image_2023_09_11T20_13_50_597Z.png 
Просмотров:	147 
Размер:	27.7 Кб 
ID:	441294

  11. #11
    Частый гость Аватар для карабас123
    Регистрация
    31.12.2007
    Адрес
    Ижевск
    Возраст
    59
    Сообщений
    115

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    сильная работа

  12. #12
    Старый знакомый Аватар для And$er
    Регистрация
    29.09.2007
    Адрес
    г. Москва
    Возраст
    49
    Сообщений
    952

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Алексей, очень круто и большое спасибо, что делитесь своими разработками!
    Буду пробовать новый фильтр в своем проекте с sm5865.
    Александр.

  13. #13
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,655

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Интегрировал DF2_FIR_CORE к себе вместо DF1. Пошёл проверять в железе.
    Непривычно как-то без выходного LRCKO.

  14. #14
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,619

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Интегрировал DF2_FIR_CORE к себе вместо DF1
    При сборке с двух проектов главное внимательно с конфигурационными входами. Например, в проекте DF1 параметр OVS_MAX = 0 - это х4 оверсемплинг, а в проекте DF2 - это уже х1.
    Ну и я бы делал наоборот: за основу лучше бы взял DF2, заменив только модуль вывода (SAI_OUTPUT) модулем из старого проекта, если надо конвейерный вывод.

  15. #15
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,655

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    главное внимательно с конфигурационными входами.
    Да, конечно.

    Сразу вопрос почему у тебя:
    /***** Output Data Bus ***********/
    output signed[23:0] QL, QR,
    а не
    /***** Output Data Bus ***********/
    output signed[iODW-1:0] QL, QR,

    ведь тут-то есть:
    /***** Input Data Bus ************/
    input signed[DW-1:0] DL, DR,

    ---------- Сообщение добавлено 13:56 ---------- Предыдущее сообщение было 13:52 ----------

    И почему DW сразу 27 бит? Таких источников ведь нет.

  16. #16
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,619

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Во-первых, так параметризировать нельзя. В квадратных скобках допускаются только константы.
    А во-вторых - параметризировать разрядность выходной шины нет смысла, лишнее усложнение. Компилятор сам отрежет до скольки надо.

    ---------- Сообщение добавлено 14:00 ---------- Предыдущее сообщение было 13:56 ----------

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    И почему DW сразу 27 бит? Таких источников ведь нет.
    Это разрядность шины данных, в которой выполняется расчет х32 интерполятора, и до которой округляются промежуточные вычисления.
    С разрядностью входных данных она не связана. Входные данные любой разрядности приводятся к разрядности шины.
    Ну и помним, что в шине старший бит отведен на переполнение, поэтому "полезная" разрядность фактически 26 бит.
    На латтисе в 2000 ячеек ее больше задать не получится, а на 1-ом самом мелком циклоне можно увеличить до 31 (с соотв. увеличением разрядности аккумулятора).

  17. #17
    Завсегдатай Аватар для maxssau
    Регистрация
    15.08.2015
    Адрес
    Самара
    Возраст
    40
    Сообщений
    2,624

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    dortonyan, а вторая версия влезет в EP1C3T100? я купил все деталюшки для первой
    _________________
    Евгений

  18. #18
    Завсегдатай Аватар для Turbo_man
    Регистрация
    06.04.2010
    Адрес
    Moscow
    Сообщений
    5,655

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Так мои входные 24 бит как привести в соответствие с твоими 27ю? Старшие 3 бита повторяют 24(23)й?

    ---------- Сообщение добавлено 14:22 ---------- Предыдущее сообщение было 14:20 ----------

    Пока фигня получилась у меня. Забыл, что тут нет ОВ представления и с битностью аут.

  19. #19
    Старый знакомый Аватар для dee-jan
    Регистрация
    09.07.2009
    Адрес
    BLR
    Возраст
    43
    Сообщений
    929

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от maxssau Посмотреть сообщение
    а вторая версия влезет в EP1C3T100? я купил все деталюшки для первой
    Влазит. У меня на 58 все влезло.
    2530 из 2910 блоков занято. Память почти вся ушла. Битность вся максимальная.
    Сергей.

  20. #20
    Завсегдатай
    Автор темы
    Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,619

    По умолчанию Re: DF2 - Вторая версия DIY ЦФ

    Цитата Сообщение от maxssau Посмотреть сообщение
    dortonyan, а вторая версия влезет в EP1C3T100?
    Со свистом.
    В первый циклон влезает ЦФ + CIC апсемплер + шейпер 3-го порядка. Но это если выводить на малоразярдный ЦАП, типа AK4499EX, или россыпной какой. А если не использовать апсемплеры и обойтись шейпером 1-го порядка, то еще куча ресурсов остается.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Так мои входные 24 бит как привести в соответствие с твоими 27ю? Старшие 3 бита повторяют 24(23)й?
    Дополняешь 24 бита старшим на переполнение (копия 24 бита) - получаешь 25 бит. Далее 25 - соотносится с 27, 24 - с 26 и т.д.
    На верилоге примерно так:
    wire signed[23:0] iD;
    wire signed[26:0] wD = iD;
    wire signed[26:0] wLD = wD << 2;
    Последний раз редактировалось dortonyan; 19.09.2023 в 21:25.

Страница 1 из 14 12311 ... Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •