b-volkov 0 14 января, 2014 Опубликовано 14 января, 2014 · Жалоба Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Запись происходит нормально, если *int, пишет 4 байта, если *char - один. Если нужны какие-то скриншоты или листинги, выложу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 14 января, 2014 Опубликовано 14 января, 2014 · Жалоба Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Запись происходит нормально, если *int, пишет 4 байта, если *char - один. Если нужны какие-то скриншоты или листинги, выложу. Возможно это кэш балуется? Через IORD() наверное тоже не получится- он, вроде, по определению 32-разрядный. Может на уровне ассемблерных инструкций можно пошаманить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
b-volkov 0 14 января, 2014 Опубликовано 14 января, 2014 · Жалоба Возможно это кэш балуется? Через IORD() наверное тоже не получится- он, вроде, по определению 32-разрядный. Может на уровне ассемблерных инструкций можно пошаманить. Кеша данных у меня нет, только инструкций. Через IORD() пробовал - то ж самое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 14 января, 2014 Опубликовано 14 января, 2014 · Жалоба Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Запись происходит нормально, если *int, пишет 4 байта, если *char - один. Если нужны какие-то скриншоты или листинги, выложу. А попробуйте создать проект из заготовок ниоса, называется "тестирование памяти". Там как раз тестируются и 32- и 16- и 8-бит операции чтения записи. Там не пробовали посмотреть шину при 8 -ми битных обращениях? Там кстати видел функции что-то типа IORD8, IORD16, IORD32 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
b-volkov 0 15 января, 2014 Опубликовано 15 января, 2014 · Жалоба А попробуйте создать проект из заготовок ниоса, называется "тестирование памяти". Там как раз тестируются и 32- и 16- и 8-бит операции чтения записи. Там не пробовали посмотреть шину при 8 -ми битных обращениях? Там кстати видел функции что-то типа IORD8, IORD16, IORD32 Да, есть там функция IORD_8DIRECT, но она тоже вызывает 4 цикла чтения, а возвращает один байт, номер которого указан в параметре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 15 января, 2014 Опубликовано 15 января, 2014 · Жалоба а читать 32 бита, и вырезать маской? Во многих процах - кристаллах чтение так и сделано, может в "софтовом" тоже также сделали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Во многих процах - кристаллах чтение так и сделано, может в "софтовом" тоже также сделали? нет, там отдельные инструкции для байта/слова/дв. слова Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
b-volkov 0 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба нет, там отдельные инструкции для байта/слова/дв. слова Так все-таки возможно организовать побайтное чтение, или только "считал 4 байта и выкинул лишнее" ? Если бы я подключал просто SRAM, да фиг с ним, но я подключаю W3150, а там приходится читать кучу 8-ми и 16-ти битных значений. В результате, что бы считать , например, 16-битное значение, расположенное в одной тетраде, приходится эту тераду считвывать два раза. Или для каждого регистра делать свою функцию чтения с учетом его расположения относительно тетрад. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 8 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Уже подзабылось немного все, связанное с этими SOPC деталями, так что сильно не пинайте, если спрошу глупость. А какова у вас ширина порта MM Tri-State Slave, обращенная в сторону Avalon interconnect'а? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
b-volkov 0 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба Уже подзабылось немного все, связанное с этими SOPC деталями, так что сильно не пинайте, если спрошу глупость. А какова у вас ширина порта MM Tri-State Slave, обращенная в сторону Avalon interconnect'а? 32 бита, такая же, как и у Авалона Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 18 января, 2014 Опубликовано 18 января, 2014 · Жалоба Так все-таки возможно организовать побайтное чтение, или только "считал 4 байта и выкинул лишнее" ? Если бы я подключал просто SRAM, да фиг с ним, но я подключаю W3150, а там приходится читать кучу 8-ми и 16-ти битных значений. В результате, что бы считать , например, 16-битное значение, расположенное в одной тетраде, приходится эту тераду считвывать два раза. Или для каждого регистра делать свою функцию чтения с учетом его расположения относительно тетрад. организовать можно. но подозреваю, что проблема не в инструкциях, для этого достаточно глянуть ассемблер. думаю, что это как-то связано с мостом, надо его в сигналтапе поглядеть (как чтение и запись байта происходят) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 18 января, 2014 Опубликовано 18 января, 2014 (изменено) · Жалоба мыслей две: первая - в Avalon-MM шина адреса адресует сразу 32бита = 4 байта. В код не лазил, не вникал, но предполагаю, внутри тристейт-контроллера для экономии адресного пространства 4 последовательных байта со стороны SRAM мапятся в один адрес если смотреть со стороны Avalon. в этом случае для соответствия "одно обращение- одно чтение" можно имитировать что у вас SRAM 32-битный, подключив только первый байт. При этом замапленная область адресов раздуется в 4 раза. вторая мысль связана с тем что 4 байта - это типовой размер burst-а на шине Avalon. Изменено 18 января, 2014 пользователем krux Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
b-volkov 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба мыслей две: первая - в Avalon-MM шина адреса адресует сразу 32бита = 4 байта. В код не лазил, не вникал, но предполагаю, внутри тристейт-контроллера для экономии адресного пространства 4 последовательных байта со стороны SRAM мапятся в один адрес если смотреть со стороны Avalon. в этом случае для соответствия "одно обращение- одно чтение" можно имитировать что у вас SRAM 32-битный, подключив только первый байт. При этом замапленная область адресов раздуется в 4 раза. вторая мысль связана с тем что 4 байта - это типовой размер burst-а на шине Avalon. Burst у меня выключен, если только по дефолту какая-то минимальная очередь все равно создается... А вот сделать наружу 32 бита надо попробовать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 27 января, 2014 Опубликовано 27 января, 2014 (изменено) · Жалоба НИОС при записи/чтении по Авалону использует 32-хбитную шину, но при этом он оперирует шиной BYTEENABLE, адресация всегда остается 4-байтовой. Используя типы данных можно заставить его писать и по 8 бит. Например: alt_u8 temp_8 = 0xab; IOWR(EXTERNAL_MEM_0_BASE, 0, temp); а вот зпись IOWR(EXTERNAL_MEM_0_BASE, 0, 0xAB); приведет действительно к записи 4-хбайтового слова. Изменено 27 января, 2014 пользователем billidean Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться