Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SRAM и NIOS
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
b-volkov
Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Запись происходит нормально, если *int, пишет 4 байта, если *char - один.
Если нужны какие-то скриншоты или листинги, выложу.
alexadmin
Цитата(b-volkov @ Jan 14 2014, 14:40) *
Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Запись происходит нормально, если *int, пишет 4 байта, если *char - один.
Если нужны какие-то скриншоты или листинги, выложу.


Возможно это кэш балуется? Через IORD() наверное тоже не получится- он, вроде, по определению 32-разрядный. Может на уровне ассемблерных инструкций можно пошаманить.
b-volkov
Цитата(alexadmin @ Jan 14 2014, 16:53) *
Возможно это кэш балуется? Через IORD() наверное тоже не получится- он, вроде, по определению 32-разрядный. Может на уровне ассемблерных инструкций можно пошаманить.

Кеша данных у меня нет, только инструкций. Через IORD() пробовал - то ж самое.
alexPec
Цитата(b-volkov @ Jan 14 2014, 14:40) *
Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Запись происходит нормально, если *int, пишет 4 байта, если *char - один.
Если нужны какие-то скриншоты или листинги, выложу.


А попробуйте создать проект из заготовок ниоса, называется "тестирование памяти". Там как раз тестируются и 32- и 16- и 8-бит операции чтения записи. Там не пробовали посмотреть шину при 8 -ми битных обращениях?
Там кстати видел функции что-то типа IORD8, IORD16, IORD32
b-volkov
Цитата(alexPec @ Jan 14 2014, 19:54) *
А попробуйте создать проект из заготовок ниоса, называется "тестирование памяти". Там как раз тестируются и 32- и 16- и 8-бит операции чтения записи. Там не пробовали посмотреть шину при 8 -ми битных обращениях?
Там кстати видел функции что-то типа IORD8, IORD16, IORD32

Да, есть там функция IORD_8DIRECT, но она тоже вызывает 4 цикла чтения, а возвращает один байт, номер которого указан в параметре.
Golikov A.
а читать 32 бита, и вырезать маской? Во многих процах - кристаллах чтение так и сделано, может в "софтовом" тоже также сделали?
vadimuzzz
Цитата(Golikov A. @ Jan 16 2014, 00:25) *
Во многих процах - кристаллах чтение так и сделано, может в "софтовом" тоже также сделали?

нет, там отдельные инструкции для байта/слова/дв. слова
b-volkov
Цитата(vadimuzzz @ Jan 16 2014, 08:08) *
нет, там отдельные инструкции для байта/слова/дв. слова

Так все-таки возможно организовать побайтное чтение, или только "считал 4 байта и выкинул лишнее" ? Если бы я подключал просто SRAM, да фиг с ним, но я подключаю W3150, а там приходится читать кучу 8-ми и 16-ти битных значений. В результате, что бы считать , например, 16-битное значение, расположенное в одной тетраде, приходится эту тераду считвывать два раза. Или для каждого регистра делать свою функцию чтения с учетом его расположения относительно тетрад.

Raven
Цитата(b-volkov @ Jan 14 2014, 14:40) *
Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд.

Уже подзабылось немного все, связанное с этими SOPC деталями, так что сильно не пинайте, если спрошу глупость. А какова у вас ширина порта MM Tri-State Slave, обращенная в сторону Avalon interconnect'а?
b-volkov
Цитата(Raven @ Jan 17 2014, 16:39) *
Уже подзабылось немного все, связанное с этими SOPC деталями, так что сильно не пинайте, если спрошу глупость. А какова у вас ширина порта MM Tri-State Slave, обращенная в сторону Avalon interconnect'а?


32 бита, такая же, как и у Авалона
vadimuzzz
Цитата(b-volkov @ Jan 17 2014, 14:45) *
Так все-таки возможно организовать побайтное чтение, или только "считал 4 байта и выкинул лишнее" ? Если бы я подключал просто SRAM, да фиг с ним, но я подключаю W3150, а там приходится читать кучу 8-ми и 16-ти битных значений. В результате, что бы считать , например, 16-битное значение, расположенное в одной тетраде, приходится эту тераду считвывать два раза. Или для каждого регистра делать свою функцию чтения с учетом его расположения относительно тетрад.

организовать можно. но подозреваю, что проблема не в инструкциях, для этого достаточно глянуть ассемблер. думаю, что это как-то связано с мостом, надо его в сигналтапе поглядеть (как чтение и запись байта происходят)
krux
мыслей две:
первая - в Avalon-MM шина адреса адресует сразу 32бита = 4 байта.
В код не лазил, не вникал, но предполагаю, внутри тристейт-контроллера для экономии адресного пространства 4 последовательных байта со стороны SRAM мапятся в один адрес
если смотреть со стороны Avalon.
в этом случае для соответствия "одно обращение- одно чтение" можно имитировать что у вас SRAM 32-битный, подключив только первый байт. При этом замапленная область адресов раздуется в 4 раза.

вторая мысль связана с тем что 4 байта - это типовой размер burst-а на шине Avalon.
b-volkov
Цитата(krux @ Jan 18 2014, 21:34) *
мыслей две:
первая - в Avalon-MM шина адреса адресует сразу 32бита = 4 байта.
В код не лазил, не вникал, но предполагаю, внутри тристейт-контроллера для экономии адресного пространства 4 последовательных байта со стороны SRAM мапятся в один адрес
если смотреть со стороны Avalon.
в этом случае для соответствия "одно обращение- одно чтение" можно имитировать что у вас SRAM 32-битный, подключив только первый байт. При этом замапленная область адресов раздуется в 4 раза.

вторая мысль связана с тем что 4 байта - это типовой размер burst-а на шине Avalon.


Burst у меня выключен, если только по дефолту какая-то минимальная очередь все равно создается...
А вот сделать наружу 32 бита надо попробовать...
billidean
НИОС при записи/чтении по Авалону использует 32-хбитную шину, но при этом он оперирует шиной BYTEENABLE, адресация всегда остается 4-байтовой.
Используя типы данных можно заставить его писать и по 8 бит.
Например:
Код
alt_u8 temp_8 = 0xab;
IOWR(EXTERNAL_MEM_0_BASE, 0, temp);

а вот зпись IOWR(EXTERNAL_MEM_0_BASE, 0, 0xAB); приведет действительно к записи 4-хбайтового слова.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.