Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Преобразование данных 16 бит в 24 бит
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
torik
Всем привет.

Q8.1, SOPC...
Шина данных с памятью - 16 бит, необходимо из нее читать(записывать) видео 24 бит. Шина авалон "автоматически" не может преобразовать из 16 в 24, значит надо сделать преобразование самому (попроавьте, если я чего-то не знаю).

Как правильно реализовать сие преобразование, где подглядеть?
Methane
Цитата(torik @ Feb 9 2009, 09:20) *
Всем привет.

Q8.1, SOPC...
Шина данных с памятью - 16 бит, необходимо из нее читать(записывать) видео 24 бит. Шина авалон "автоматически" не может преобразовать из 16 в 24, значит надо сделать преобразование самому (попроавьте, если я чего-то не знаю).

Как правильно реализовать сие преобразование, где подглядеть?

Можно расширить до 32 байт (байт на альфа-канал или просто пустой) можно и 24 до 16 ужать. Можно и последовательно читать.
Serhiy_UA
Цитата(torik @ Feb 9 2009, 10:20) *
Как правильно реализовать сие преобразование, где подглядеть?

Т.е. нужно два 24-разрядных слова плотно записать (считать) в три соседних 16-разрядных слова?
Если так, то или программно путем перекомпоновки, или аппаратно. Во втором случае между памятью и Nios нужна внешняя схема с FSM.
per_aspera_ad_astra
Если тактов хватает, то можно через общее кратное, через 8 битную FIFO. Вся логика это 2 счетчика (один до 3-х второй до 2-х) и никаких FSM. Самое главное это лишнего чего не прочитать из нее, а для этого нужно флаги заполненности правильно запрограммировать, чтобы быть уверенным, что в FIFO есть больше или хотя бы два байта.
torik
Цитата
Т.е. нужно два 24-разрядных слова плотно записать (считать) в три соседних 16-разрядных слова?
Если так, то или программно путем перекомпоновки, или аппаратно. Во втором случае между памятью и Nios нужна внешняя схема с FSM.

Никакого программно - как вы себе представляете программную перекомпоновку видео с помощью ниоса? А что это за схема FSM?

Цитата
Можно расширить до 32 байт (байт на альфа-канал или просто пустой) можно и 24 до 16 ужать. Можно и последовательно читать.


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

Цитата
Если тактов хватает, то можно через общее кратное, через 8 битную FIFO. Вся логика это 2 счетчика (один до 3-х второй до 2-х) и никаких FSM. Самое главное это лишнего чего не прочитать из нее, а для этого нужно флаги заполненности правильно запрограммировать, чтобы быть уверенным, что в FIFO есть больше или хотя бы два байта.

Через 8бит FIFO, это, как я понял, сперва нужно преобразовать в последовательный код? Частоты слишком высокие...
Methane
Цитата(torik @ Feb 9 2009, 10:26) *
нехочется расширять до 32 байт, т.к. это требует увеличения полосы пропускания памяти (а ведеопотоков будет несколько)...


А какие проблемы вообще?
1. Вычитали R0G0
2, вычитали B0,R1 -> R0G0B0
3. вычитали G1B1 -> R1G1B1
4. вычитали R2G2
5. вычитали B2R3 -> R2G2B2
6. вычитали G3B3 -> R3G3B3
итд.
des00
Цитата(torik @ Feb 9 2009, 02:26) *
Через 8бит FIFO, это, как я понял, сперва нужно преобразовать в последовательный код? Частоты слишком высокие...


это пишете по 16, а читаете 3 такта по 8.
или пишете по 16, читаете по 32 + на выходе фифо логика склеевания (но этот вариант более опасен, если что ошибка может размножиться).
torik
Цитата
А какие проблемы вообще?
1. Вычитали R0G0
2, вычитали B0,R1 -> R0G0B0
3. вычитали G1B1 -> R1G1B1
4. вычитали R2G2
5. вычитали B2R3 -> R2G2B2
6. вычитали G3B3 -> R3G3B3
итд.


представьте себе это в коде...

Цитата
это пишете по 16, а читаете 3 такта по 8.

т.к. данные видео 24 бит параллельно, то частота при чтении по 8 бит в 3 раза выше...
des00
Цитата(torik @ Feb 9 2009, 02:46) *
представьте себе это в коде...


элементарно, 1 регистр + 3 мультиплексора и flip-flop.

Цитата
т.к. данные видео 24 бит параллельно, то частота при чтении по 8 бит в 3 раза выше...


а вы как хотели, чудес то не бывает %)
torik
Сейчас преобразую 16 в 24, надо всего лишь в 1.5 раза больше частоту. Правда как-то пока корявенько код выглядит...
Methane
Цитата(torik @ Feb 9 2009, 14:37) *
Сейчас преобразую 16 в 24, надо всего лишь в 1.5 раза больше частоту. Правда как-то пока корявенько код выглядит...

Не понял. Частота меняться не должна!
Допустим у вас частота видео 10мегагерц, а частота внутрненней шины 100 мегагерц.

Короче делайте три FIFO: На R,G и B. Для простоты по 256 байт каждое. Делайте схемму которая будет выгребать данные из ФИФА с частотой 10 мегапикселей в секунду. Разумеется делая паузы на кадровые и строчные импульсы.
Потом сдлайте флаг опустошения FIFO (сами посчитаете сколько нужно).

Как только fifo пустое "более чем" ваш видеоконтроллер должен подключиться к шине, и в режиме burstа выгребать данные, со скоростью 100*16 бит в секунду. На лету он должен их преобразовывать в 24 бита, и отправлять в FIFO.

Я понятно выражаюсь?:
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.