Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: COMPLETION на запрос MRd
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
Костян
Дано, запрос чтения памяти со стороны PC
MRd:
CODE
000000001 0060000F
F60001000


Подробнее по полям:
Length = 1 DW
Requester ID = 0x60
Last DW BE = 0x0
first DW BE = 0xF
Address = 0xF6001000


Как коректно сформировать ответ CpLD c 1 DW?

Не понятны поля :
Lenght (такой же , как и у Mrd ?)
Byte Count (настолько я понял из пояснений на это поля, в данном случае 0 ? )
Lower Address (первые биты адресса 0xF6001000 ?)
Completer ID (любой ? )

dsmv
Цитата(Костян @ Aug 9 2011, 16:15) *
Как коректно сформировать ответ CpLD c 1 DW?

Не понятны поля :
Lenght (такой же , как и у Mrd ?)
Byte Count (настолько я понял из пояснений на это поля, в данном случае 0 ? )
Lower Address (первые биты адресса 0xF6001000 ?)
Completer ID (любой ? )


Lenght = 1
Byte Count = 4
Lower Address - в соответствии с BE - для адреса 0xF6001000 - должен быть 0.

completer_id - это идентификатор устройства в системе PCI Express, собирается из полей cfg_bus_number, cfg_device_number, cfg_function_number.

Код
  completer_id     <= (cfg_bus_number_c &
                       cfg_device_number_c &
                       cfg_function_number_c );
Костян
QUOTE (dsmv @ Aug 10 2011, 03:07) *
Byte Count = 4

спасибо. тогда я не совсем понимаю значение Byte Count. Он же показывает оставшееся число байт, почему оно 4 ?
dsmv
Цитата(Костян @ Aug 10 2011, 09:51) *
спасибо. тогда я не совсем понимаю значение Byte Count. Он же показывает оставшееся число байт, почему оно 4 ?


Вопрос коварный. Но всё-таки для ответа с DW=1 должно быть 4.
См. Table 2-21: PCI EXPRESS BASE SPECIFICATION, REV. 1.1

Если на запрос чтения размером N возвращается несколько ответов, то byte_count формируется так:
1. N
2. N - <число байт в ответе 1>
3. N - <число байт в ответе 1 и ответе 2 >
и т.д.
Костян
QUOTE (dsmv @ Aug 10 2011, 08:08) *
Вопрос коварный. Но всё-таки для ответа с DW=1 должно быть 4.
См. Table 2-21: PCI EXPRESS BASE SPECIFICATION, REV. 1.1

Если на запрос чтения размером N возвращается несколько ответов, то byte_count формируется так:
1. N
2. N - <число байт в ответе 1>
3. N - <число байт в ответе 1 и ответе 2 >
и т.д.

а вот где собака зарыта. спасибо. понятно. т.е считаем кол-во оставщихся байт еще до отправки cpld
Костян
Интересный эффект. Читает ровно 5 раз верно, на шестой дает 0xFFFFFFFF. И это до тех пор, пока не перезагрузить ОС.
В chipscope заметно, что все запросы WRd идентичны. Соответственно все ответы CplD тоже

Читаем при помощи windriver:

CODE
    DWORD size = 1;

    DWORD *data = (PDWORD) malloc(size*sizeof(ULONGLONG));


    if (WDC_ReadAddrBlock(deviceHandle, addrSpace, 0, size*sizeof(DWORD), data, WDC_MODE_32, WDC_ADDR_RW_DEFAULT)) {
        printf("ERROR: WDC_ReadAddrBlock\n");
        goto Exit;

    }


Критично ли время ответа CplD на запрос MRd, в каких пределах оно должно находится ?
dsmv
Цитата(Костян @ Aug 11 2011, 11:17) *
Критично ли время ответа CplD на запрос MRd, в каких пределах оно должно находится ?


Странно. Вроде всё правильно. Время не критично, оно может быть намного больше.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.