Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение процессором PowerPC регистров ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
D-Luxe
Вопрос следующий: когда читаешь процессором PowerPC регистры из ПЛИС по шине PLB, сколько тактов занимает чтение, считая от времени вызова функции XIo_In32 до возврата этой функцией значения ?

И можно ли это значение свести к минимуму? Как?
Mad_max
Цитата(D-Luxe @ May 5 2011, 19:02) *
Вопрос следующий: когда читаешь процессором PowerPC регистры из ПЛИС по шине PLB, сколько тактов занимает чтение, считая от времени вызова функции XIo_In32 до возврата этой функцией значения ?

И можно ли это значение свести к минимуму? Как?

Быстрее чем позволяет спецификация plb нельзя,
а сколько тактов посмотрите там же.
D-Luxe
Цитата(Mad_max @ May 5 2011, 23:19) *
Быстрее чем позволяет спецификация plb нельзя,
а сколько тактов посмотрите там же.

В спецификации про это ни слова!
Mad_max
Цитата(D-Luxe @ May 6 2011, 17:46) *
В спецификации про это ни слова!

Хотите сказать, что в спецификации нет времянок общения master/slave ip c plb???
D-Luxe
Цитата(Mad_max @ May 6 2011, 19:05) *
Хотите сказать, что в спецификации нет времянок общения master/slave ip c plb???

На диаграммах порядка 15 тактов разница, на практике я опытным путем получил более 60 тактов. Поэтому интересно стало от чего это зависит.
Andrew Su
Цитата(D-Luxe @ May 6 2011, 18:23) *
На диаграммах порядка 15 тактов разница, на практике я опытным путем получил более 60 тактов. Поэтому интересно стало от чего это зависит.

Приветствую.
На шине есть сигналы IP2Bus_WrAck и IP2Bus_RdAck, которые сообщают шине(контроллеру шины) о том, что запись или чтение регистра
завершены. В простейшем случае эти сигналы можно сформировать из сигналов Bus2IP_WrCE и Bus2IP_RdCE (выборки записи и чтения) без задержки, а можно эти сигналы и задержать на какое-то количество тактов. Если IP2Bus_WrAck и IP2Bus_RdAck не будут сформированы по каким-то причинам в течении допустимого тайм-аута, то шина сама закончит операцию с установлением флага ошибки. Количество тактов тайм-аута и блокировка его использования выполняется в специальных регистрах шины. Подробно это можно прочитать например в прикрепленном файле (наверное это не последняя версия).
Поэтому количество тактов задержки может быть разным.
D-Luxe
Цитата(Andrew Su @ May 6 2011, 22:11) *
Приветствую.
На шине есть сигналы IP2Bus_WrAck и IP2Bus_RdAck, которые сообщают шине(контроллеру шины) о том, что запись или чтение регистра
завершены. В простейшем случае эти сигналы можно сформировать из сигналов Bus2IP_WrCE и Bus2IP_RdCE (выборки записи и чтения) без задержки, а можно эти сигналы и задержать на какое-то количество тактов. Если IP2Bus_WrAck и IP2Bus_RdAck не будут сформированы по каким-то причинам в течении допустимого тайм-аута, то шина сама закончит операцию с установлением флага ошибки. Количество тактов тайм-аута и блокировка его использования выполняется в специальных регистрах шины. Подробно это можно прочитать например в прикрепленном файле (наверное это не последняя версия).
Поэтому количество тактов задержки может быть разным.

То что ты сказал для меня не новость. Я говорю о немного другой ситуации, у меня в коде IP2Bus_RdAck <= Bus2IP_RdCE. Поэтому как понимаешь таймаута тут не возникает, процессор не ждет 128 тактов, ему сразу приходит RdAck. Мне интересно сколько тактов проходит между вызовом функции чтения регистра и возвратом этой функцией значения регистра.
Andrew Su
Добрый день.
Возможно сообщу уже известное, но вдруг пригодится.
В файле xio.c
/*****************************************************************************/
* Performs an input operation for a 32-bit memory location by reading from the
* specified address and returning the value read from that address.
* @param InAddress contains the address to perform the input operation at.
* @return
* The value read from the specified input address.
* @note
* None.
******************************************************************************/
u32 XIo_In32(XIo_Address InAddress)
{
/* read the contents of the I/O location and then synchronize the I/O such that the I/O operation completes before proceeding on*/
#ifdef __GNUC__
u32 IoContents;
__asm__ volatile ("eieio; lwz %0,0(%1)":"=r" (IoContents):"b"
(InAddress));
return IoContents;
#else
SYNCHRONIZE_IO;
return *(u32 *) InAddress;
#endif
}

в свою очередь (файл ppc440x5_um.pdf), команда процессора lwz RT, D(RA)
EA ← (RA|0) + EXTS(D)
(RT) ← MS(EA,4)
An effective address (EA) is formed by adding a displacement to a base address. The displacement is
obtained by sign-extending the 16-bit D field to 32 bits. The base address is 0 if the RA field is 0 and is the
contents of register RA otherwise.

The word at the EA is placed into register RT
К сожалению не нашел информации, сколько тактов команда занимает...
D-Luxe
Цитата(Andrew Su @ May 7 2011, 12:30) *
Добрый день.
Возможно сообщу уже известное, но вдруг пригодится.
В файле xio.c
/*****************************************************************************/
* Performs an input operation for a 32-bit memory location by reading from the
* specified address and returning the value read from that address.
* @param InAddress contains the address to perform the input operation at.
* @return
* The value read from the specified input address.
* @note
* None.
******************************************************************************/
u32 XIo_In32(XIo_Address InAddress)
{
/* read the contents of the I/O location and then synchronize the I/O such that the I/O operation completes before proceeding on*/
#ifdef __GNUC__
u32 IoContents;
__asm__ volatile ("eieio; lwz %0,0(%1)":"=r" (IoContents):"b"
(InAddress));
return IoContents;
#else
SYNCHRONIZE_IO;
return *(u32 *) InAddress;
#endif
}

в свою очередь (файл ppc440x5_um.pdf), команда процессора lwz RT, D(RA)
EA ← (RA|0) + EXTS(D)
(RT) ← MS(EA,4)
An effective address (EA) is formed by adding a displacement to a base address. The displacement is
obtained by sign-extending the 16-bit D field to 32 bits. The base address is 0 if the RA field is 0 and is the
contents of register RA otherwise.

The word at the EA is placed into register RT
К сожалению не нашел информации, сколько тактов команда занимает...

Спасибо! Не подумал даже до АСМ уровня копнуть. Попробуем найти сколько тактов выполняется.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.