addi II 1 7 марта Опубликовано 7 марта (изменено) · Жалоба Здравствуйте! Подскажите пожалуйста, как правильно передавать данные с UART на 32-х разрядную шину данных?, чтобы не передавать 3 нулевых байта Идея только одна, сделать что-то наподобие физического и виртуального адреса. Физический ссылается сразу на слово, то-есть на 4 байта, и виртуальный содержит адрес смещения в рамках слова(32 бит). Например, есть физический адрес на 32-х разрядной шине 0x05, по этом адресу содержаться 4 байта. Чтобы получить доступ к третьему байту нужно использовать следующий виртуальный адрес, - 0x0503, где старший байт 0x05 это базовый адрес, а 0x03 - адрес смешения. Проблема в том, что у меня 32-х разрядная физическая память и не хотелось бы ее транжирить, но общепринятого подхода я не знаю для подобного случая. Поэтому прошу подсказать какая общепринятая метода. Спасибо! П.С. Банков памяти нет, - это BRAM(Spartan7), 32 бита нужно для поддержания разрядности системного контроллера Изменено 7 марта пользователем addi II Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 87 8 марта Опубликовано 8 марта · Жалоба В 08.03.2024 в 02:32, addi II сказал: Банков памяти нет, - это BRAM(Spartan7), 32 бита нужно для поддержания разрядности системного контроллера Так в ПЛИС бы и писали, там это не раз обсуждалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 8 марта Опубликовано 8 марта · Жалоба Не совсем понятно, что именно вы хотите. Вам нужно укладывать 8-битные данные по 4 в 32-битные? Используйте ПЛИСовую память в асимметричном режиме: пишете по 8, читаете по 32. Только обратите внимание на порядок упаковки: у Xilinx она идёт слева направо. Ну и надо как-то обрабатывать количество данных, не кратное 4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 87 8 марта Опубликовано 8 марта · Жалоба В 08.03.2024 в 15:43, andrew_b сказал: Не совсем понятно, что именно вы хотите. Вам нужно укладывать 8-битные данные по 4 в 32-битные? Нет. У него с уарта прилетают не только чистые данные, но и все старты и стопы. И как бы извернуться так, чтобы ничего не делать и остались только данные, а всё остальное в /dev/null спускалось) я только не понял, что за три нулевых байта..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 8 марта Опубликовано 8 марта · Жалоба 2 часа назад, HardEgor сказал: У него с уарта прилетают не только чистые данные, но и все старты и стопы. Так это и не уарт тогда, а простой сдвиговый регистр))))))) 2 часа назад, HardEgor сказал: И как бы извернуться так, чтобы ничего не делать и остались только данные, а всё остальное в /dev/null спускалось) Так в нуль то и не должно спускаться, а обрабатываться логикой приемника уарта, иначе там каша-малаша будет, без какого-либо контроля переполнения и конца байта, вообщем получится мура полная... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 8 марта Опубликовано 8 марта · Жалоба 5 hours ago, HardEgor said: Нет. Да похоже, что таки да. 5 hours ago, HardEgor said: только не понял, что за три нулевых байта ТС читает по 32 бита. Поэтому надо к байту из уарта добавить три нулевых (ну или любых) байта. А это лишние накладные расходы при чтении. Лучше упаковывать по 4 байта. Я так понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 1 11 марта Опубликовано 11 марта · Жалоба Спасибо за поддержку! Кажется я нашел решение но оно имеет одно существенное ограничение По сути мою задачу выполняет настоящая двух портовая память на основе BRAM, порт А - 32-х битная шина, порт В - 8-ми битная, тогда при выделении одной и той же глубины будет автоматическое выравнивание. Но мне нужно еще применить ЕСС, и при ее выборе я не могу сделать из BRAM сделать настоящую двух портовую, только простую, которая дает одну и ту же разрядность на двух портах В связи с этим вопрос, - если использовать ECC и исправлять два бита, то сколько бит нужно выделять для 32-х разрядной шины данных и 8-ми разрядной? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться