ShiphT (10.11.2005 10:12, просмотров: 1) ответил jaga-jaga на ARM плюсы и минусы
Ответ: >>ARM не read-modify-write архитектура, поэтому чтобы изменить данные, необходимо
>>загрузить слово(а) в рабочий регистр(ы), произвести некоторые действия и
>>выгрузить данные обратно, а значит для выполнения простейших действий требуется
>>несколько команд - загрузка указателя на данные, загрузка данных в
>>регистры, работа с данными, выгрузка данных в память.
А кто из популярных контроллеров имеет атомарные инструкции такого рода? Из заявленных разработчиками как RISC-машина - ни один. Только у некоторых CISC. А сколько времени (тактов) требуется на выполнение такой инструкции?
И вообще подходя к вопросу о растактовке. Для классических машин (без дополнительных "ускоротелей" площадью в 10 площадей ядра типа как в PentiumIV).
Операция в ALU - 1 такт. Без комментариев.
Чтение из памяти - 2 такта. Такт на выставление адреса на шину ивыжидание времени выборки и такт на само чтение с шины данных. Приведи более быстрый.
Запись в память - 2-3 такта. Такт на выставление адреса на шине и выборка адреса. Такт на выдачу данных на шину и подача сигнала записи, такт на саму запись в памяти. Последний такт может расходоваться независимо от ядра. Т.е. команда может выполняться 2 такта, но тогда следующая, если она тоже лезет в память, получит от контроллера памяти HALT на 1 такт. LPC2xxx получает HALT на 1 такт в конце каждой команды записи в память. Так проще для машин, могущих выполнять код из SRAM.
При работе с Flash - работай на частоте до 20 МГц - растактовка будет таже. В противном случае лучше перейти к абсолютному времени:
Чтение 32(16,8)бит слова из Флешь - около 100нс при настройках частоты ядра кратной (примерно) 20 МГц. Покажешь флешь бысрее?
Насчет SFR - есть такой момент у Филипса. (Кстати, у Атмела это 4 и 3 такта соответственно). за секунду проц выполняет 50 млн. команд. Сколько из них составляет работа с SFR?
Переход - 2 такта минимум у любого проца.
Насчет латентности прерываний: Да, есть такой момент - но нельзя же быть идеальным во всем =)). К тому-же, вход-выход прерывания составляет как правило не более 0.01 от общего времени работы (не считая времени выполнения самого прерывания конечно). Что достаточно мало чтобы этим пунктом пренебречь. АРМ процессор - это уже не мелкий перриферийный контроллер для управления какой-нибудь задвижкой на большой скорости - для этого есть копеечные ПИКи и иже с ними, если нужа скорость - ПЛИС. К тому-же вот в приведенной статье указана цифра в 1.2 мкС для 41 МГц. Посчитаем в 1мкс для 60 =) Ну и пусть будет 50 команд (примерно 60 тактов) для дейсвия (реакции) на прерывание, т.е. еще 1 мкс. Итого - 2 мкс максимальное время реакции на прерывание. (когда софт даст ответные действия на вознишее прерывание). Считаем для другого популярного мк - AVR на 20 МГц. 5 тактов на влет в прерывание. 3 такта на переход по вектору, тактов 40 на сохранение контекста (у АРМ для этого исспользуются теневые регистры - он избавлен от этого), ну и те-же 60 тактов для ответной реакции. (считаем что его архитектура позволяет выполнить то же количество действий за такое-же кол-во команд). Итого около 100 тактов, что при 20 МГц будет 5 мкс. - более чем в 2 раза дольше =))). Так что несмотря на свою высокую латентность в тактах, в абсолютном времени получается как правило быстрее у АРМ - все-таки частота ядра уже другого порядка...