реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> SRAM и NIOS, Побайтное чтение.
b-volkov
сообщение Jan 14 2014, 10:40
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Как-то можно производить побайтное чтение с 8-битной внешней SRAM, подключенной через MM Tristate Slave? Независимо от типа указателя всегда производится считывание 4 байтов подряд. Запись происходит нормально, если *int, пишет 4 байта, если *char - один.
Если нужны какие-то скриншоты или листинги, выложу.
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Jan 14 2014, 12:53
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



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


Возможно это кэш балуется? Через IORD() наверное тоже не получится- он, вроде, по определению 32-разрядный. Может на уровне ассемблерных инструкций можно пошаманить.
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Jan 14 2014, 14:36
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



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

Кеша данных у меня нет, только инструкций. Через IORD() пробовал - то ж самое.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 14 2014, 15:54
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



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


А попробуйте создать проект из заготовок ниоса, называется "тестирование памяти". Там как раз тестируются и 32- и 16- и 8-бит операции чтения записи. Там не пробовали посмотреть шину при 8 -ми битных обращениях?
Там кстати видел функции что-то типа IORD8, IORD16, IORD32
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Jan 15 2014, 13:52
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



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

Да, есть там функция IORD_8DIRECT, но она тоже вызывает 4 цикла чтения, а возвращает один байт, номер которого указан в параметре.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 15 2014, 17:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а читать 32 бита, и вырезать маской? Во многих процах - кристаллах чтение так и сделано, может в "софтовом" тоже также сделали?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 16 2014, 04:08
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Golikov A. @ Jan 16 2014, 00:25) *
Во многих процах - кристаллах чтение так и сделано, может в "софтовом" тоже также сделали?

нет, там отдельные инструкции для байта/слова/дв. слова
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Jan 17 2014, 07:45
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



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

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

Go to the top of the page
 
+Quote Post
Raven
сообщение Jan 17 2014, 12:39
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 491
Регистрация: 16-01-05
Из: Санкт-Петербург
Пользователь №: 1 987



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

Уже подзабылось немного все, связанное с этими SOPC деталями, так что сильно не пинайте, если спрошу глупость. А какова у вас ширина порта MM Tri-State Slave, обращенная в сторону Avalon interconnect'а?
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Jan 17 2014, 13:17
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



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


32 бита, такая же, как и у Авалона
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 18 2014, 01:34
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



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

организовать можно. но подозреваю, что проблема не в инструкциях, для этого достаточно глянуть ассемблер. думаю, что это как-то связано с мостом, надо его в сигналтапе поглядеть (как чтение и запись байта происходят)
Go to the top of the page
 
+Quote Post
krux
сообщение Jan 18 2014, 17:34
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



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

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

Сообщение отредактировал krux - Jan 18 2014, 17:36


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Jan 20 2014, 06:51
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



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

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


Burst у меня выключен, если только по дефолту какая-то минимальная очередь все равно создается...
А вот сделать наружу 32 бита надо попробовать...
Go to the top of the page
 
+Quote Post
billidean
сообщение Jan 27 2014, 10:09
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



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

а вот зпись IOWR(EXTERNAL_MEM_0_BASE, 0, 0xAB); приведет действительно к записи 4-хбайтового слова.

Сообщение отредактировал billidean - Jan 27 2014, 10:12
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 21:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01463 секунд с 7
ELECTRONIX ©2004-2016