адресация памяти SDRAM

Тема в разделе "WASM.BEGINNERS", создана пользователем DemonP, 19 фев 2007.

  1. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    Стоит такая задача: надо рассчитать номер банка, сегмента и ячейки SDRAM если известен только адрес ОП, выдающийся процессором (я так подозреваю, что это - физический адрес памяти :) )
    А = 15А5:В67Е.

    ЗЫ сразу извиняюсь за возможный оффтоп, но я перелазил по куче книг и факов, задавал вопросы на форумах железячников, но никто мне ничего не ответил....
    не в delphimasters.ru идти....) хотя.... и там уже был!
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    DemonP
    Видать давно я не был на delphimasters.ru раз там тебя не видел.
    Так адрес какой известен? Физический или виртуальный. А если виртуальный то какая ОС? Если адрес физический, то ни о каком сегменте и речи быть не может. А если виртуальный то собственно сегмент должен быть задан. Хотя бы тем что он лежит в DS, ES, CS. Раз адрес виртуальный не плохо бы убедиться а вообще-то он есть в памяти. Не ну тут по любому надо через таблицу страниц, смотреть какому физическому адресу принадлежит виртуальный. Далее как выясним, какой физический адрес, то смотришь какая у тебя стоит память. Сколько банков. Кстати планки памяти также банками называют. Но наверно все-таки имелось ввиду на сколько банков делится планка памяти. Ну тогда надо читать SPD из планок и там смотреть сколько банков и прочие характеристики памяти(число строчек, столбцов, банков).

    А = 15А5:В67Е. - это что пример? Походу ты в досе. Тогда
    сегмент это 15А5h смещение В67Еh
    Линейный адрес 15А5h*10h+В67Еh

    Давай конкретнее что тебе там нужно, а то ничего не понятно.
     
  3. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    насколько я понял, разделение на банки, сегменты и тд зависит от самих модулей памяти. это плохо, т.к. это неизвестно. а нет ли каких нибудь стандартных параметров?
    адрес , думаю, дан именно физический, т.к. я где-то видел, что ОП - это синоним физич.
    дан он, конечно в довольно странном виде.
    после сложения со сдвигом получается 210СЕ или 10 0001 0000 1100 1110.
    поскольку линейный практически всегда совпадает с физическим, то думаю, разницы нет...

    тут кстати, 2 варианта есть: принять физический как есть (ну там в 16битном режиме адрес 20битный) или дописать нолики слева до 32х разрядов.

    а вот как из физического получить требуемое???
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    DemonP
    Еще раз говорю сегменты, к физической организации SDRAM не имеют отношение. Стандартных параметров нет. И что значит не известно. Если у тебя память SDRAM то она оснащена SPD блоком в котором записаны параметры.
    Как считать это отдельный разговор.

    Насколько я понял речь идет про реальный режим с его сегментной моделью. Тогда первое число это сегмент второе смещение. После сложения со сдвигом получается как раз линейный адрес, и он будет физическим.
    Собственно число в 20бит тебе лучше записать как 32битное число. Так как с 32битным оперировать проще.

    Какое-то странное задание.

    Если делать для произвольной платформы. То нужно читать данные из SPD. Для начало нужно найти SMBus контролер.
    Чтобы узнать базовый порт SMBus, нужно опробовать найти класс PCI устройства. Работает на большинстве материнских карт, на старых картах определяется иначе.

    Код (Text):
    1.         mov     ax, 0xB103      ;найти
    2.         mov     ecx, 0x0C0500   ;класс SMBus устройства
    3.         mov     si, 0
    4.         int     0x1A
    5.          jnc    @sm1
    6.           ret
    7. @sm1:
    8.         mov     di, 0x20        ;номер читаемого регистра
    9.         mov     ax, 0xB109      ;читать WORD значение
    10.         int     0x1A
    11.         and     cx, 0xFFFE
    12.         mov     dx, cx
    Код (Text):
    1. Function ReadSMBus(SMBusAddr, Addr:integer):Byte;
    2. var a:Byte;
    3. begin
    4. asm
    5. mov dx,SMBUsAddr
    6. mov cx,Addr
    7.  
    8. @loc_E92F7:
    9. in  al,dx   {+0 Читаем регистр статуса}
    10. out 0EBh,al {Задержка}
    11. out dx,al   {+0 Пишем в регистр статуса, что обнуляет его}
    12.  
    13. and al,0BFh
    14. or  al,al
    15. jnz @loc_E92F7 {Ждем пока контролер не освободиться???}
    16.  
    17. add dx,4    {+4 Регистр адреса нулевой бит определяет запись или четение 1=Read 0=Write}
    18. mov al,ch
    19. or  al,1
    20. out dx,al
    21. mov al,cl
    22. dec dx      {+3 Регистр команды, для EEPROM это адрес ячейки}
    23. out dx,al
    24. dec dx      {+2 Регистр Host Controler регистр задает способ передачи}
    25. mov al,48h  {Способ передачи с Byte Data 010b }
    26. out dx,al
    27.  
    28. out 0EBh,al {Задержка}
    29.  
    30. xor cx,cx
    31. sub dx,2    {+0  регистр статуса}
    32.  
    33. @loc_E931C: {Порядок проверок важен!!!}
    34.  
    35. in al,dx
    36. out 0EBh,al {Задержка}
    37. test al,4   {ошибочки устройства}
    38. jnz  @loc_E932D
    39. test al,2   {Произошло прерывание}
    40. jz  @loc_E932B
    41. test al,80  {данные пришли}
    42. jnz  @loc_E932D
    43. @loc_E932B:
    44.  
    45. loop @loc_E931C
    46. @loc_E932D:
    47. out dx,al   {+0 Пишем в регистр статуса, что обнуляет его}
    48. add dx,5    {+5 Регистр данных Date0}
    49. in al,dx
    50. mov a,al
    51. end
    52. ReadSMBus:=a;
    53. end;
    Для SPD отводиться адреса 50h-54h нас интересует первый.
    Тут у меня Addr - это и адрес устройства и адрес ячейки SPD.
    addr=50h*200h+xxh


    17d -число банков
    31d -размер банков
    ....
    Подробнее читаем в
    PC SDRAM Serial Presence Detect (SPD)
    Specification
     
  5. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    вот что я откопал:

    на схеме указана разбивка
    (закачат так, т.к. не нашел, как рисунок вставлять в пост сразу..(( )

    так вот, мне теперь не понятно только назначение 8-го бита в адресе колонки (S)

    в физическом адресе биты 21-22 указывают на сегменты памяти....
    если это они, то почему только 1 бит?
    а если банк памяти определяет сегмент, то зачем в физ. адресе держать их одновременно? тогда и там можно было обойтися 1-битной адресацией сегмента!
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    DemonP
    Сколько раз повторять сегмент это логическая структура. И вобще сегментаня модель была придумана для того чтобы имея два 16 разрядных регистра обращаться к большему объему памяти. И на шину она ни как выставляется. На шину выставляется линейный адресс. BS - скорее всего Banck Select выбор банка. Картинка знакомая. Но где ее видел не помню.
     
  7. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    Розподіл розрядів адресного коду процесора для адресації модуля пам'яті SDRAM наведений на рис.1а.
    ............
    Наступні дев’ять бітів адресного коду A19-A11 визначають адресу рядка. Біт BS (A20) є бітом вибору, що визначає, до якого з двох внутрішніх SDRAM банків виробляється звернення. Два SS біти (A22-A21) визначають, до якого з чотирьох сегментів звертаються. Дев’ять старших бітів А31-А22 складають область старших адрес і використовуються дешифратором адреси контролера пам'яті для того, щоб визначити, до якої частини карти віртуальної пам'яті відбувається звернення. Ці адреси можуть належати іншим модулям пам'яті, або визначати сторінки віртуальної пам'яті, що знаходяться в зовнішній пам'яті.

    это оттуда же!
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Возможное объяснение назначения битов SS и S можно найти в книге Касперски "ля-ля: Эффективное использование памяти". Дело в том, что схема преобразования адреса зависит не только от чипа SDRAM, но и от контроллера памяти, который должен уметь работать с разными чипами, т.е. с разными размерами адреса столбца и строки. Поэтому в (некоторых) контроллерах может использоваться как раз такая упрощенно-усложненная ;) схема дешифрации, когда под адрес столбца изначально отводится фиксированное кол-во младших бит (в рассм.сл. = 8), а если реальный размер этого адреса для конкретного чипа больше, то дополнительно берутся 1-2 старших бита SS после битов адреса строки. Поэтому бит(ы) S адреса строки м.б. таким дополнительным битом, но почему в данном сл. показан 1 бит, а не 2 - х.з. ;) Добавление старших битов SS к адресу столбца ес-но приводит к сегментации памяти чипа, поэтому биты SS можно назвать битами выбора сегмента
    PS: Кроме внутренних банков чипа, есть еще и "внешние" банки модулей памяти, за которые отвечают самие старшие биты адреса