LINUX.ORG.RU

Шина данных процессора


0

1

Изучаю ПЛИС и Verilog и никак не могу понять как работает шина данных процессора. Я пока представляю себе её так: есть 2 регистра шириной N бит, один из них адресный, второй - для данных. Процессор после декодирования команды кладёт в адресный регистр адрес памяти или периферии, а в регистр данных - данные. А каждый модуль периферии (включая контроллер памяти) следит за адресным регистром и если он равен диапазону адресов устройства, то забирает данные и что-то делает. В случае же если ядро хочет прочитать данные, то оно как-то это указывает (отдельным битовым регистром или же одним из битов адреса) и на следующем такте в регистре данных окажется то, что нужно.

Собственно не понятно:

1) Как периферия поймёт, что пришло время забирать адрес из шины адреса? Ведь логика периферии может начать сравнивать адрес перед тем, как логика ядра положит его (тем более что декодирование инструкции скорее всего будет сложнее, чем логика периферии). Проблему можно решить тем, что периферия работает по отрицательному фронту клока, а ядро по положительному, но это скорее всего не оптимальное решение.

2) Получается, что на чтение будет уходить 2 такта - на первом положили адрес, а на втором считали. Это опять же кажется не оптимальным.

Скорее всего я просто не понимаю банальных принципов работы ПЛИС, поэтому хочу чтобы меня ткнули в них носом.

★★★★★

периферия работает по отрицательному фронту клока, а ядро по положительному

По сути, примерно так оно и работает, передатчик данные выставляет на отрицательном фронте, а приёмник фиксирует на положительном

qbe
()
Ответ на: комментарий от qbe

Как в этом случае борются с тем фактом, что чтение данных от периферии займёт 2 клока (на отрицательном фронте первого процессор выставит на шину адрес, на положительном второго устройство считает данные, на отрицательном второго процессор заберёт данные)?

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Ты здесь вообще совместил две операции в одну :)

Операция чтения: Процессор выставляет на ША адрес, выдаёт отрицательный фронт сигнала /RD. По этому фронту память защёлкивает адрес производит его декодирование и выставляет на ШД данные. По положительному фронту /RD процессор производит считывание данных, а память освобождает ШД.

Операция записи: Процессор выставляет на ША адрес, на ШД - данные для записи, и выдаёт задний фронт /WR. Память по этому фронту фиксирует адрес и данные, а по заднему фронту завершается операция записи в ячейку. Здесь же процессор освобождает ШД.

Это мы рассмотрели доступ к статической памяти. С динамической памятью цикл шины получается чуть длиннее, т.к. добавляются ещё такты /RAS и /CAS - шина адреса мультиплексируется, и адрес в память передаётся двумя словами - адрес строки в такте /RAS и адрес столбца в такте /CAS.

Да, память - штука медленная, поэтому для повышения скорости современный процессор работает на большей тактовой частоте, чем частота шины. Плюс используется вычислительный конвейер.

qbe
()
Ответ на: комментарий от KivApple

А периферия работает ещё медленнее, чем память, и даже умеет запрашивать у процессора дополнительное время на обработку запроса - активирует специальный сигнал /WAIT, который заставляет процессор растягивать циклы /RD и /WR

qbe
()

Собственно не понятно

Берёшь мануал на любой процессор (лучше простой и древний). Там всё подробно описано.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.