Страница 3 из 13 Первая 12345 ... Последняя
Показано с 41 по 60 из 243

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

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

    По умолчанию 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 
Просмотров:	226 
Размер:	17.0 Кб 
ID:	441606
    NTF шейпера на 1кГц сигнале:
    Нажмите на изображение для увеличения. 

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

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

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

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

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

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

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

    Может сделать иначе? 2 Д-триггера соединены последовательно. На вход 1го сигнал управления сетками. Оба триггера тактируются битклоком (или мастерклоком). Выход 1го и выход 2го триггеров подаём на элемент исключающего или. Его выход это сигнал сброса.

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

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

    Цитата Сообщение от And$er Посмотреть сообщение
    Написал модуль начального сброса и сброса при смене сеток частот для использования совместно с Вашим ЦФ в проекте с sm5865.
    Не очень понял, сброса чего и для чего?
    Для ЦФ сбросы не нужны, можно просто на ходу менять сетку. Стартовый сброс тоже не нужен. Там же в исхониках есть примеры, в них есть сигналы управления генераторами.
    Если мешают глитчи при переключении генераторов, то тогда нужно мьютить ЦАПы. (либо усложнять логику управления генераторами).
    Опишите лучше словами что хотите сделать, чтобы это можно было соотнести с кодом.
    Потому что сам код похож на нерабочий: rst_init устанавливется в единицу, только при условии, что rst_init равен единице, что невыполнимо. Или условия if/else неправильно описаны, расставьте begin/end для каждого из них.

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

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

    Речь идет о формировании сигналов сброса для самих ЦАПов sm5865. По задумке в алгоритме заложен начальный сброс при включении-появлении мастерклока, реализованный на счетчике (для обеспечения прописанной в даташите задержки между появлением на микросхеме ЦАП мастерклока и сигналом сброса), а также формирование сигнала сброса при переключении генераторов.

    В коде была ошибка, загрузил какую-то старую версию. В первом условии rst_init, конечно, должен сравниваться с нулем.
    Последний раз редактировалось And$er; 21.09.2023 в 12:56.
    Александр.

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

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

    Если моделится нормально, то наверное сойдет. Но лучше так:

    Скрытый текст

    Код:
    module RESET
    (
    input iCLK, iOSCSEL,
    output oRESET
    );
    
    // reset delay in iCLK clocks
    localparam DELAY = 250000;
    
    reg[17:0] rCNT = 0;
    reg rRESET = 1;
    reg[1:0] rOSC;
    
    assign oRESET = rRESET;
    
    always@ (posedge iCLK) begin
    	rOSC <= (rOSC << 1) | iOSCSEL;
    
    	if (rOSC[1] ^ rOSC[0]) rCNT <= 0;
    	else if (rCNT < DELAY) rCNT <= rCNT + 1;	
    
    	if (rCNT == (DELAY - 64)) rRESET <= 0;
    	else if (rCNT == DELAY) rRESET <= 1;
    end
    
    endmodule
    [свернуть]


    В моем примере задержка порядка 5мс (250000 тактов), в конце которой выполняется ресет длительностью 64 такта. Нужно учитывать, что генератор стартует не мгновенно, а с задержкой несколько мс.
    Ну и для надежности сигнал oscsel следует реклочить перед использованием, как в моем примере.
    Последний раз редактировалось dortonyan; 22.09.2023 в 11:50.

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

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

    Спасибо, Алексей! Попробую такой вариант.
    Александр.

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

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

    Сегодня запустил DF2 в режиме 32х с генераторами 1024fs в связке с sm5865cm. Использовал упрощенный вывод с непрерывным битклоком и 32 битами на слово. Все работает отлично. Ничего не измерял, просто весь вечер прослушал. Звучит отлично.
    Алексей, огромное спасибо! Жму руку!
    Хочется отдельно отметить организацию кода в этой версии. Все структурировано, понятно и отлично задокументировано. Принципиально ничего не менял, добавил просто несколько доп сигналов для независимого вывода на разные микросхемы ЦАП и модуль сброса при смене сеток частот, который обсуждался здесь ранее.

    Есть, правда один вопрос, есть ли смысл включать нойзшейпинг в ЦФ, при наличии такового в упомянутых микросхемах ЦАП?
    Александр.

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

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

    And$er, мои поздравления!

    Цитата Сообщение от And$er Посмотреть сообщение
    Есть, правда один вопрос, есть ли смысл включать нойзшейпинг в ЦФ, при наличии такового в упомянутых микросхемах ЦАП?
    Данные на выходе х32 интерполятора округляются до 24бит. Без дизера, просто суммированием 0,5LSB.
    Дальнейшее округление с дизером и шейпером выполняется только если используется разрядность ниже 24-х бит (т.е. для 5865 это не нужно). Поэтому, если задать разрядность выхода 24-х бита константой, то компилятор логику дизера и шейпера должен вырезать, т.к. она не используется.
    Но на всякий случай, чтобы не было лишнего расхода ресурсов, можно по входам разрешения дизера и шейпера задать нули: iSHPEN( 0 ), iDITHEN( 0 ).

    Цитата Сообщение от And$er Посмотреть сообщение
    Ничего не измерял, просто весь вечер прослушал. Звучит отлично.
    Надо бы конечно замерить, хотя бы для контроля. Ибо даже жесткие артефакты, типа переполнения, сходу не так-то просто услышать.

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

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

    После принудительного отключения шейпера и дизера прошивка стала занимать меньше на 169 LE

    Протестировал разные предустановки фильтра. Почему-то short играет очень тихо и с сильными искажениями.
    В предупреждениях компилятора фигурирует такое предупреждение:
    Код:
    Warning (10850): Verilog HDL warning at FIR_RAM.v(124): number of words (1359) in memory file does not match the number of elements in the address range [0:2047]
    Последний раз редактировалось And$er; 27.09.2023 в 07:33.
    Александр.

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

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

    Это предупреждение не критично.
    Проблема только с short? А остальные как?
    Под какую плис проект собирали, циклон?

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

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

    А у меня смена характеристики фильтра работала нормально налету. Меандр 1кГц давал увидеть разницу ПХ. Два типа давали практически одинаковые пх.

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

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

    Да, проблема только с short, остальные работают нормально.
    Собирал под Циклон EP1C3T100C8.

    Есть еще некоторые предупреждения компилятора и фиттера. Вечером закину, сейчас под рукой нет.
    Александр.

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

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

    Цитата Сообщение от And$er Посмотреть сообщение
    Да, проблема только с short, остальные работают нормально.
    Что-то очень странное.

    Цитата Сообщение от And$er Посмотреть сообщение
    Вечером закину, сейчас под рукой нет.
    Бросайте проект мне на мыло, гляну что там.

    Кстати, а ЦАП не может "сходить с ума" при переключении на ходу? Не пробовали задать short, а потом ресетнуть питание?

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

    Кстати, для 24-х бит данных на выходе можно еще и дополнительный аттенюатор отключать. Т.к. без дизера и шейпера переполнения не будет.
    Допилил код DATA_READ для автоматического отключения дизера, шейпера и аттенюатора при задании разрядности 24 бита.
    Заменил в заглавном посте.
    Последний раз редактировалось dortonyan; 28.09.2023 в 19:46.

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Бросайте проект мне на мыло, гляну что там.
    ОК
    Цитата Сообщение от dortonyan Посмотреть сообщение
    Кстати, а ЦАП не может "сходить с ума" при переключении на ходу? Не пробовали задать short, а потом ресетнуть питание?
    Именно так и делал.
    Александр.

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

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

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

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

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Попробовал собирать проект под фпга с выделенными блоками умножения и оказалось, что компилятор на модуль DATA_READ расходует отдельный умножитель. Поэтому заменил в коде умножение таблицей истинности.
    Странно, а у меня как было 8 в ДФ1, так и тут тоже 8 изначально. У меня проект под Циклон4.

    ---------- Сообщение добавлено 12:24 ---------- Предыдущее сообщение было 12:23 ----------

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Так же, после очередного моделирования выяснил, что для циклона лучше все таки включать триггеры на портах. Поправил в описании.
    Попробую тоже, сравню, может станет лучше.

    ---------- Сообщение добавлено 12:27 ---------- Предыдущее сообщение было 12:24 ----------

    А как назначается глобал клок? Что-то пока не нашёл.

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

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

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    А как назначается глобал клок? Что-то пока не нашёл.
    Володя, это определенные пины на циклоне, в дш написаны номера.

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

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

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Странно, а у меня как было 8 в ДФ1, так и тут тоже 8 изначально. У меня проект под Циклон4.
    От плис зависит. Это я пробовал собирать под lattice ice40 и Crosslink-Nx. Там синтезаторы поскромнее.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    Попробую тоже, сравню, может станет лучше.
    Для своего модуля вывода? Надо перепроверять в симуляторе. Зависит от логики.
    Если выходные сигналы пересинхронизированы, то так должно быть лучше. А при задании констрейнтов фронты должны выровняться идеально.
    Ну а если на выходах триггеров есть еще асинхронная логика, то могут быть варианты.

    Цитата Сообщение от Turbo_man Посмотреть сообщение
    А как назначается глобал клок? Что-то пока не нашёл.
    Для этого просто нужно выбрать для тактового входа iCLK пин с опцией глобального клока (как указано в описании DF2). Синтезатор сделает его глобальным самостоятельно, по умолчанию.
    Вручную глобальный клок можно только отключить (в квартусе это настраивается в опциях фиттера).

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

    Цитата Сообщение от Михаил45 Посмотреть сообщение
    Володя, это определенные пины на циклоне, в дш написаны номера.
    В ДШ лезть не обязательно, они и в пин планере помечены характерным значком с меандром. Тыкаешь в него мышью и во всплывающем коне весь функционал пина.

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

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

    Алексей, скажи пожалуйста, для подключения sai_out от df1 к новом фильтру , как переименовывать сигналы, они ведь не совсем идентичны?

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

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

    Кстати, да. Тоже хотел попробовать добавить.

    ---------- Сообщение добавлено 15:49 ---------- Предыдущее сообщение было 15:43 ----------

    Цитата Сообщение от Михаил45 Посмотреть сообщение
    Володя, это определенные пины на циклоне, в дш написаны номера.
    Спасибо. Понял, так и сделано. Я подумал ещё вручную что-то тоже нужно сделать.

    ---------- Сообщение добавлено 15:50 ---------- Предыдущее сообщение было 15:49 ----------

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Для этого просто нужно выбрать для тактового входа iCLK пин с опцией глобального клока (как указано в описании DF2). Синтезатор сделает его глобальным самостоятельно, по умолчанию.
    Спасибо.

    ---------- Сообщение добавлено 15:50 ---------- Предыдущее сообщение было 15:50 ----------

    Цитата Сообщение от dortonyan Посмотреть сообщение
    они и в пин планере помечены характерным значком с меандром.
    Да, это видел конечно.

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

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

    Цитата Сообщение от Михаил45 Посмотреть сообщение
    Алексей, скажи пожалуйста, для подключения sai_out от df1 к новом фильтру , как переименовывать сигналы, они ведь не совсем идентичны?
    Почти идентичны. Шина данных та же самая - 24 бита.
    Разница только в том, что для ядра DF1 нужен был синхронизирующий сигнал sai_out_load. Для DF2 он не нужен, соотв. выход в модуле sai_otuput просто не используется (никуда не подключается).
    Ну и параметр OVS_MAX для DF1 и DF2 отличается:
    Для DF1 это 2-х битный параметр, задающий оверсемплинг от 0 - х4 до 3 - х32.
    А для DF2 это 3-х битный параметр, задающий оверсемплинг от 0 - х1 до 5 - х32.
    Например, если нужен х16 оверсемплинг, то для ядра DF2 он задается 4, а для sai_output модуля DF1 - 3.
    Остальные параметры модуля sai_output с ядром ЦФ не связаны. Разрядности задаются независимо друг от друга. Например можно на 20бит ЦАП вывести 8 бит данные, или на 16 бит ЦАП вывести 10 бит данные.
    Разрядность ЦАП задается в модуле sai_output, а разрядность данных - параметрами ядра ЦФ.

Страница 3 из 13 Первая 12345 ... Последняя

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

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

Ваши права

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