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

8 битные данные с UART на 32-х разрядную шину

Здравствуйте!

 

Подскажите пожалуйста, как правильно передавать данные с UART на 32-х разрядную шину данных?, чтобы не передавать 3 нулевых байта

Идея только одна, сделать что-то наподобие физического и виртуального адреса.

Физический ссылается сразу на слово, то-есть на 4 байта, и виртуальный содержит адрес смещения в рамках слова(32 бит).

Например, есть физический адрес на 32-х разрядной шине 0x05, по этом адресу содержаться 4 байта.

Чтобы получить доступ к третьему байту нужно использовать следующий виртуальный адрес,  - 0x0503, где старший байт 0x05 это базовый адрес, а 0x03 - адрес смешения.

Проблема в том, что у меня 32-х разрядная физическая память и не хотелось бы ее транжирить, но общепринятого подхода я не знаю для подобного случая.

Поэтому прошу подсказать какая общепринятая метода.

Спасибо!

 

П.С.

Банков памяти нет, - это BRAM(Spartan7), 32 бита нужно для поддержания разрядности системного контроллера 

Изменено пользователем addi II

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


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

В 08.03.2024 в 02:32, addi II сказал:

Банков памяти нет, - это BRAM(Spartan7), 32 бита нужно для поддержания разрядности системного контроллера 

Так в ПЛИС бы и писали, там это не раз обсуждалось.

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


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

Не совсем понятно, что именно вы хотите. Вам нужно укладывать 8-битные данные по 4 в 32-битные? Используйте ПЛИСовую память в асимметричном режиме: пишете по 8, читаете по 32. Только обратите внимание на порядок упаковки: у Xilinx она идёт слева направо. Ну и надо как-то обрабатывать количество данных, не кратное 4.

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


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

В 08.03.2024 в 15:43, andrew_b сказал:

Не совсем понятно, что именно вы хотите. Вам нужно укладывать 8-битные данные по 4 в 32-битные?

Нет. У него с уарта прилетают не только чистые данные, но и все старты и стопы. И как бы извернуться так, чтобы ничего не делать и остались только данные, а всё остальное в /dev/null спускалось) я только не понял, что за три нулевых байта.....

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


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

2 часа назад, HardEgor сказал:

У него с уарта прилетают не только чистые данные, но и все старты и стопы.

Так это и не уарт тогда, а простой сдвиговый регистр)))))))

2 часа назад, HardEgor сказал:

И как бы извернуться так, чтобы ничего не делать и остались только данные, а всё остальное в /dev/null спускалось)

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

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


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

5 hours ago, HardEgor said:

Нет.

Да похоже, что таки да.

5 hours ago, HardEgor said:

только не понял, что за три нулевых байта

ТС читает по 32 бита. Поэтому надо к байту из уарта добавить три нулевых (ну или любых) байта. А это лишние накладные расходы при чтении. Лучше упаковывать по 4 байта. Я так понял.

 

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


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

Спасибо за поддержку!

Кажется я нашел решение но оно имеет одно существенное ограничение

По сути мою задачу выполняет настоящая двух портовая память на основе BRAM, порт А - 32-х битная шина, порт В - 8-ми битная, тогда при выделении одной и той же глубины будет автоматическое выравнивание.

Но мне нужно еще применить ЕСС, и при ее выборе я не могу сделать из BRAM сделать настоящую двух портовую, только простую, которая дает одну и ту же разрядность на двух портах

В связи с этим вопрос, - если использовать ECC и исправлять два бита, то сколько бит нужно выделять для 32-х разрядной шины данных и 8-ми разрядной?

 

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


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

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

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

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

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

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

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

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

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

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