Страница 26 из 27 Первая ... 1624252627 Последняя
Показано с 501 по 520 из 527

Тема: Open-Source USB транспорт на PIC32MZ

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

    По умолчанию Open-Source USB транспорт на PIC32MZ

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

    Причина разработки своего транспорта - отсутствие в продаже USB транспортов с I2S входом для использования АЦП. Кроме того, те транспорты что есть в продаже не устраивали по тем или иным причинам (либо плохо сделана плата, либо большое потребление).
    Раньше сдерживающим фактором было отсутствие uac2 драйверов. Однако с переходом на win10 с нативным драйвером данная проблема была решена.
    Ну и вообще, т.к. на дворе 21-ый век, то для меня не понятно - почему uac2 еще не перекочевал в открытый доступ. Данная публикация призвана исправить такое досадное упущение.

    Почему PIC32MZ: Преимущество перед ARM процессорами - встроенный USB HS мост и одновременно удобный компактный корпус с удобной распиновкой. А по сравнению с кмосом - низкое потребление: порядка 70..80мА максимум.

    Изначально планировал использовать фреймворк (harmony configurator), однако по ходу выяснилось, что данный фреймворк генерирует только USB AUDIO приложение для формата Class 1.
    Кроме того по форумам полно отзывов по касякам в фреймворке. Дорабатывать фреймворк оказалось крайне контр-продуктивно из-за жесточайшей инкапсуляции, громоздкого стека и отсутствия его описания.

    Намаявшись с фреймворком принял решение писать свой код с нуля. Но очень скоро обломался, т.к. выяснилось что для PIC32 процессоров описание USB моста полностью отсутствует! Т.е. микрочип предлагает только пользоваться их кривыми фреймворками.
    Однако на форуме микрочипа нашлись добрые люди, которые поделились исходниками своих проектов USB девайсов на PIC32MZ: https://www.microchip.com/forums/m1083508.aspx
    Пользуясь данными примерами, а так же методом тыка, удалось написать свой достаточно эффективный код (итоговый размер с оптимизацией gcc компилятора уровня 2 - менее 16кБт).
    Конечно код не такой красивый как в фреймворках, слабовата инкапсуляция. Зато, разобраться в нем и доработать под свои нужды гораздо проще. А главное проще обходить касяки периферии, которые как оказалось имеют место быть.
    В частности есть не описанные в эррате проблемы с DMA модулями.

    Что в итоге удалось реализовать на самом чипе, без обвеса дополнительными микросхемами:
    1. Вывод стандартного стерео: 32bit 768kHz (Правда драйвер не отображает частоты выше 384к, но по факту 768к выводит). И сам модуль I2S пика позволяет выводить данные с частотой не выше 384к. 768к вывести тоже можно, но каким-то нестандартным интерфейсом, типа QSPI или параллельным портом.
    2. Вывод многоканала: 8-каналов 32bit 192kHz (опробовал только в отладочном режиме, подробнее ниже).
    3. Стерео вход: 32bit 768kHz (опробовал по факту только 192, т.к. мой АЦП больше не выдает).
    4. Распознавание DoP формата и вывод из него стерео DSD-битстрима частотой до DSD256 включительно.
    5. До кучи - добавлено CDC устройство (виртуальный COM-порт) для обмена данными с транспортом (в проекте используется в отладочном виде, на любые принятые данные отвечает строкой "CDC is works").

    Вывод многоканала физически не реализован, т.к. изначально в транспорте он не предусматривался. Работу проверял в отладочном режиме, переключая на выход пары каналов по очереди (остальные каналы выводили данные в отладочные буферы).
    Весь описанный выше функционал реализован на DMA модулях, благодаря чему хватает небольшой тактовой частоты процессора (160МГц для работы многоканала + стерео-входа).
    Причем изначально вывод данных в I2S модули выполнялся на DMA с прерываниями. Однако, выяснилось, что прерывания DMA работаю криво, из-за чего модуль может самопроизвольно вырубаться.
    Описал проблему на форуме микрочипа (в конце ветки), но - глухо как в танке: https://www.microchip.com/forums/FindPost/1219136

    Пришлось выкручиваться по другому. В результате получилось даже лучше, т.к. передача данных между I2S буферами и FIFO данных получилась полностью аппаратной (DMA модули перегружаются автоматически в цикле).
    Кроме того, для дополнительного снижения потребления добавлено 3 режима с разной тактовой частотой, в зав-ти от кол-ва каналов и выбранной ЧД.
    В результате потребление от USB шины (контроллер + развязка) с питанием через step-down получилось от 40мА (стерео-вывод), до 55мА (8-каналов + стерео вход).
    Отмечу, что в режиме FS (uac1) потребление можно опустить еще ниже: до 20..30мА, что может быть актуально для портативного девайса.

    Проект сделан в IDE MPLabX 6.05, с компилятором CX32 v4.1. Проверялся только на win10. Актуальная схема транспорта ниже во вложении.
    Конечно, нативный uac2 драйвер в win10 достаточно корявый, легко ломается сам и еще легче ложит винду (хватает ошибки в дескрипторе). Но готовый проект значительно облегчает отладку USB девайса, достаточно выпилить лишний функционал из дескриптора и обработчика команд.
    Особенности конфигурации USB моста или DMA модуля я постарался подробно описать комментариями, но если у кого-то найдутся другие проблемы - можно обсудить в ветке ниже.
    Вложения Вложения
    Последний раз редактировалось dortonyan; 24.12.2022 в 14:13.

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ


    Offтопик:
    Тут цена адекватная на PIC32?

    https://trt.ru/Stock.php?Part=320&PartG=329

  3. #502
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    505

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Первые успехи с ASRC Есть проблемы (в реализации на PIC), но несколько тестов на реальном железе сделать удалось.

    Сейчас тестирую 2x оверсемплинг + ASRC. 88.2кГц->176.4кГц->192кГц:
    Нажмите на изображение для увеличения. 

Название:	dsp_structure.png 
Просмотров:	22 
Размер:	29.4 Кб 
ID:	474538

    По итогам моделирования получается лучше сначала делать 8х апсемплинг, так искажения будут пониже.
    Вот для сравнения модель с х8 оверсемплингом:
    Нажмите на изображение для увеличения. 

Название:	15khz_x8.png 
Просмотров:	30 
Размер:	53.1 Кб 
ID:	474539
    Гармоники на уровне ~-148дБ

    Модель с 4x оверсемплингом:
    Нажмите на изображение для увеличения. 

Название:	15khz_x4.png 
Просмотров:	27 
Размер:	56.1 Кб 
ID:	474540
    Гармоники на уровне ~-113дБ

    И то же самое, но в железе:
    Нажмите на изображение для увеличения. 

Название:	york_asrc_15kHz.png 
Просмотров:	29 
Размер:	98.0 Кб 
ID:	474541

    Та же гармоника на 30кГц, примерно -115дБ

    На 1.5кГц вообще красота:
    Нажмите на изображение для увеличения. 

Название:	york_asrc_1.5kHz.png 
Просмотров:	33 
Размер:	95.9 Кб 
ID:	474542

    В среднем сейчас один проход ASRC занимает 4.6мкс или ~880 инструкций/2 стерео отсчета. Используется сопроцессор для вычислений с плавающей точкой.
    Но это написано на С, так что есть большой потенциал для ускорения

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Обнадёживает.

  5. #504
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    505

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Этот версия, кстати, динамически рассчитывает задержки между семплами, по заданной входной и выходной частоте дискретизации. Т.е. может работать и на 50МГц/1024, нужно только указать частоту.

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

    Поэтому в случае с сетками 44.1/48 можно вообще половину вычислений сделать заранее и использовать LUT, т.к частоты имеют общий делитель и таблица получается относительно небольшая. С 50МГц/1024 так не получится и придется вычислять задержки и коэффициенты полинома каждый семпл. Но возможно даже так скорости хватит.

    Может быть и SPDIF принять получится
    Последний раз редактировалось eclipsevl; 06.06.2025 в 11:44.

  6. #505
    Завсегдатай Аватар для tomtit
    Регистрация
    23.06.2009
    Адрес
    пгт.Торонтовка
    Возраст
    66
    Сообщений
    1,041

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    А почему у ASRC такие искажения? Это же чистая математика, а пики на спектре того же порядка, как и y ES9039+Cosmos A/D.

  7. #506
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    505

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от tomtit Посмотреть сообщение
    А почему у ASRC такие искажения? Это же чистая математика, а пики на спектре того же порядка, как и y ES9039+Cosmos A/D.
    Погрешности аппроксимации полиномом + часть матеметики с фикс. точкой.
    Полином гарантированно совпадает с входными отсчетами, но между семплами всегда будет погрешность, причем величина погрешности зависит от "удаления" от исходного семпла и максимальна в точке 0.5 - ровно между отсчетами.

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    eclipsevl, Владислав, здорово!

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    По итогам моделирования получается лучше сначала делать 8х апсемплинг, так искажения будут пониже.
    А зачем отдельно делать апсемплинг и децимацию?
    Вроде же можно одновременно сделать интерполяцию+децимацию, а потом наложить на все это ФНЧ.
    Ряд коэф-тов изначально можно сделать избыточной длины (например под х128 оверсемплинг), чтобы точнее интерполировались.

  9. #508
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    505

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Интерполяцию нужно делать чтобы было достаточно точек для аппроксимации. На высоких частотах может быть пара точек на период и этого недостаточно для корректной аппроксимации.

    А вот децимацию отдельно можно и не делать, а сразу вычислять каждый N-й семпл в асрц. Если допустить что сигнал приходит уже с ограниченной полосой, а после интерполяции это так, то можно и не фильтровать сигнал после децимации. Конечно все равно будет наложение гармоник, но даже так они ниже -140дБ что вполне приемлемо.

    Вот если сигнал не ограничен по полосе на входе АСРЦ - тогда будут проблемы.

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Интерполяцию нужно делать чтобы было достаточно точек для аппроксимации. На высоких частотах может быть пара точек на период и этого недостаточно для корректной аппроксимации.
    Так я же выше написал, что ряд коэф-тов можно сделать и для более высокой частоты. Скажем - для 352,8кГц или для 705,6кГц. А на частоте 44,1кГц использовать из этого ряда только каждый 8-ой или каждый 16-ый коэф-т соот-но.
    Тогда коэффициентов для аппроксимации на частоте 44,1кГц будет кратно больше. Можно интерполировать точнее и без предварительного апсемплинга.

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    А вот децимацию отдельно можно и не делать, а сразу вычислять каждый N-й семпл в асрц.
    Ну я это и имел ввиду.

  11. #510
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    50
    Сообщений
    3,448

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Как софтверно получается именно ASRC вместо SRC?
    Есть PI регулятор, который постоянно считает ошибку реальной входной тактовой(или соотношение входной/выходной) частоты?
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от Openreel Посмотреть сообщение
    Как софтверно получается именно ASRC вместо SRC?
    Есть PI регулятор, который постоянно считает ошибку реальной входной тактовой(или соотношение входной/выходной) частоты?
    Да, что-то такое.

    Опробовал описанную здесь идею: обработку 4-х семплов одного канала в параллель 4-мя аккумуляторами.
    На 200МГц тактовой обсчет 4-х стерео семплов первого каскада 5842 теперь считается за 5,43мкс, т.е. около 1,36мк на семпл.
    Вот теперь вроде выжато все до капли.
    Вроде бы.
    По сравнению с первоначальным вариантом в 7,2мкс на семпл, производительность выросла в 5,3 раза. Неплохо так.

    Заодно реализовал идею Владислава: сделал чтение из USB фифо, без дма: прямо функцией аттенюатора. Тоже получается дополнительная экономия (сколько именно не считал, но в общем экономится больше сотни инструкций на пакет данных).

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    так держать.

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

    А можно будет выделить блок асрц в отдельный и переписать его на верилоге (тут может ИИ поможет?)? Хотелось бы его прикрутить к остальным блокам моего конвейера и спдиф модулю.

  14. #513
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    505

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от Openreel Посмотреть сообщение
    Как софтверно получается именно ASRC вместо SRC?
    Есть PI регулятор, который постоянно считает ошибку реальной входной тактовой(или соотношение входной/выходной) частоты?
    Пока еще нет, но можно прикрутить.
    Сейчас коэффициент пересчета фиксирован, 44.1/48. В случае с приемом/выдачей потока с ПК нет проблемы с несовпадением частот.
    Вот если принимать поток на МК и с него же выводить в другой домен по I2S - тогда нужно динамически измерять соотношение.
    Цитата Сообщение от dortonyan Посмотреть сообщение
    Опробовал описанную здесь идею: обработку 4-х семплов одного канала в параллель 4-мя аккумуляторами.
    На 200МГц тактовой обсчет 4-х стерео семплов первого каскада 5842 теперь считается за 5,43мкс, т.е. около 1,36мк на семпл.
    Вот теперь вроде выжато все до капли.
    Вроде бы.
    По сравнению с первоначальным вариантом в 7,2мкс на семпл, производительность выросла в 5,3 раза. Неплохо так.
    Супер! У меня обсчет пары сейчас до 4.3мкс примерно доведен, надо попробовать считать каналы отдельно


    Цитата Сообщение от Turbo_man Посмотреть сообщение
    А можно будет выделить блок асрц в отдельный и переписать его на верилоге (тут может ИИ поможет?)? Хотелось бы его прикрутить к остальным блокам моего конвейера и спдиф модулю.
    Написать можно, но для FPGA будет совсем другая архитектура. Та же математика, но нужно оптимизировать именно под ПЛИС.
    http://users.spa.aalto.fi/vpv/public...2_lagrange.pdf

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Замоделил модулятор с пониженными разрядностями. Оказалось, что эта мысль не такая уж и бредовая.
    Действительно, для устранения артефактов квантования в модуляторе достаточно иметь только первый аккумулятор полной разрядности. Остальные можно снизить до 16 бит и попробовать ускорить обсчет векторными инструкциями.
    Первого порядка на х64 оверсемплинге достаточно, чтобы обеспечивать линейность при снижении разрядности остальных звеньев даже ниже 16 бит.

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    И кто бы мог подумать, что PIC32 оказывается такой многофункциональный. Не без помощи умельцев, конечно.

  17. #516
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    505

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Замоделил модулятор с пониженными разрядностями. Оказалось, что эта мысль не такая уж и бредовая.

    Да, это все лучше как можно точнее замоделировать с учетом округлений.

    Довел ASRC с динамическим расчетом коэффициентов до <1мкс/отсчет, на 352.8->384 один фрейм (48 выходных стерео семплов) занимает 44.5мкс.
    Это все еще на C, но уже почти машинный код думаю еще чуть-чуть можно выжать если написать на asm.

    Но дальше уже нужно переходить на статический ASRC, там из расчетов будет только свертка и загрузка коэффициентов из LUT.

    Цитата Сообщение от dortonyan Посмотреть сообщение
    На 200МГц тактовой обсчет 4-х стерео семплов первого каскада 5842 теперь считается за 5,43мкс, т.е. около 1,36мк на семпл.
    Вот теперь вроде выжато все до капли.
    Вроде бы.
    А сколько на весь x8 интерполятор?

  18. #517
    Завсегдатай Аватар для Openreel
    Регистрация
    02.09.2006
    Адрес
    Санкт-Петербург
    Возраст
    50
    Сообщений
    3,448

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    Сейчас коэффициент пересчета фиксирован, 44.1/48. В случае с приемом/выдачей потока с ПК нет проблемы с несовпадением частот.
    Вот если принимать поток на МК и с него же выводить в другой домен по I2S - тогда нужно динамически измерять соотношение.
    Понял, спасибо.
    WBR, Michael.
    Цель расчетов - понимание, а не числа (с) Хемминг.

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

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от eclipsevl Посмотреть сообщение
    А сколько на весь x8 интерполятор?
    На 184МГц (как у вас) 4 семпла х8 интерполятора (чисто интерполяция, без округления на выходе и без РГ) - 12,44мкс на 4 семпла, или 3,11мкс/семпл.
    На 200МГц соот-но - 11,52 и 2,88.

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

    Запустил модулятор на векторных инструкциях:

    Обработка одного бита в стерео

    Код:
        // ----------- SDM bit 1 ---------------------------
        // acc1 L proc
        SUBU $t9, $v0, $t7
        ADDU $t0, $t0, $t9    
        // acc1 R proc
        SUBU $t9, $v1, $t8
        ADDU $t1, $t1, $t9
        // Pack 16bit data to 32bit vector
        PRECRQ.PH.W $t6, $t0, $t1
        // acc2 proc
        SHRA_R.PH	$t9, $t6, 1
        ADDU.PH	$t2, $t2, $t9
        SHRA_R.PH	$t9, $t3, 9
        SUBU.PH	$t2, $t2, $t9
        // acc3 proc
        SHRA_R.PH	$t9, $t2, 2
        ADDU.PH	$t3, $t3, $t9
        // acc4 proc
        SHRA_R.PH	$t9, $t3, 3
        ADDU.PH	$t4, $t4, $t9
        SHRA_R.PH	$t9, $t5, 5
        SUBU.PH	$t4, $t4, $t9
        // acc5 proc
        SHRA_R.PH	$t9, $t4, 4
        ADDU.PH	$t5, $t5, $t9
        // Update MDO proc
        ADDU.PH	$t6, $t6, $t2
        ADDU.PH	$t6, $t6, $t3
        ADDU.PH	$t6, $t6, $t4
        ADDU.PH	$t6, $t6, $t5
        // Extract 16bit data from 32bit vector
        PRECEQ.W.PHL $t7, $t6
        PRECEQ.W.PHR $t8, $t6
        // quantize output L
        SRA $t7, $t7, 31
        XOR $t7, $t7, $a3
        // quantize output R
        SRA $t8, $t8, 31
        XOR $t8, $t8, $a3
        // shift and load new bit in output bitsream register
        APPEND $s0, $t7, 1
        APPEND $s1, $t8, 1
    [свернуть]


    Работает отлично, как и в симуляторе:
    Нажмите на изображение для увеличения. 

Название:	pic32_sony_sdm5_vector.png 
Просмотров:	39 
Размер:	98.4 Кб 
ID:	474653

    По кол-ву инструкций выигрыш получился примерно в полтора раза. Т.е. с разгоном по частоте можно обсчитать DSD128.

    P.S.
    Получается такой же трюк можно провернуть на FPGA, существенно сократив ресурсы на обсчет модулятора.

  20. #519
    Завсегдатай Аватар для antecom
    Регистрация
    10.02.2005
    Адрес
    Королев
    Возраст
    51
    Сообщений
    3,010

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Работает отлично, как и в симуляторе:
    А если подать сигнал полной шкалы, искажения сильно растут?
    Максим vmaudio@mail.ru

  21. #520
    Старый знакомый Аватар для eclipsevl
    Регистрация
    31.01.2009
    Адрес
    Гаага
    Возраст
    30
    Сообщений
    505

    По умолчанию Re: Open-Source USB транспорт на PIC32MZ

    Цитата Сообщение от dortonyan Посмотреть сообщение
    На 184МГц (как у вас) 4 семпла х8 интерполятора (чисто интерполяция, без округления на выходе и без РГ) - 12,44мкс на 4 семпла, или 3,11мкс/семпл.
    На 200МГц соот-но - 11,52 и 2,88.
    Отлично!
    Попробовал сегодня ASRC с LUT и только целочисленной арифметикой - выходит 25.7 мкс/фрейм, 535нс (103 такта) на стерео семпл. 352.4->384кГц, т.е. худший по времени вариант.
    Но 103 такта как-то многовато, пора переписывать на асме Хочется ближе к 50.

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

    Цитата Сообщение от dortonyan Посмотреть сообщение
    PRECEQ.W.PHL $t7, $t6
    PRECEQ.W.PHR $t8, $t6
    // quantize output L
    SRA $t7, $t7, 31
    XOR $t7, $t7, $a3
    // quantize output R
    SRA $t8, $t8, 31
    XOR $t8, $t8, $a3
    // shift and load new bit in output bitsream register
    APPEND $s0, $t7, 1
    APPEND $s1, $t8, 1
    А как насчет SHRA.PH? Тогда можно один XOR и одну операцию на сдвиг.
    И PRECEQ кстати тоже можно убрать, вместо этого делать APPEND одного канала, потом сдвиг вправо на 16, и снова APPEND для второго канала. Итого можно еще 3 инструкции убрать.

    А, t7 и t8 нужны в пером интеграторе… Тогда не так просто.

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

    Ну, одна инструкция PRECEQ сейчас точно лишняя
    Последний раз редактировалось eclipsevl; 10.06.2025 в 00:46.

Страница 26 из 27 Первая ... 1624252627 Последняя

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

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

Ваши права

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