- •«Пермский национальный исследовательский политехнический университет»
- •«Встроенные микропроцессорные системы»
- •Составитель о.В. Гончаровский
- •Оглавление
- •2. Программное обеспечение встроенных систем ……….
- •Введение
- •Аппаратные средства встроенных систем
- •Организация аппаратных средств встроенных
- •1.2. Элементы архитектуры процессоров встроенных систем
- •1.2.1. Множество команд
- •1.2.3.1. Адресное пространство
- •1.2.3.2. Порядок байт
- •1. 2.3.3. Когерентность памяти
- •1. 2.3.4. Защита памяти
- •1. 2. 4. Модель прерываний
- •1.2. 5.Модель управления памятью
- •1.2.5.1. Страничная организация памяти
- •1.2.5.2. Сегментация памяти
- •1.3. Типы процессоров
- •1.4. Формы параллелизма в процессорах
- •1.4.1. Конвейеризация
- •1.4.2. Параллелизм уровня команд
- •1.5.Технологии памяти
- •1.5.1. Оперативная память
- •1.5.1. 1. Статическое озу
- •1.5.2. Постоянное запоминающее устройство (rom)
- •1.6. Иерархия памяти
- •1.6.1. Распределение или карта памяти
- •1.6.2. Блокнотная и кэш память
- •1.6.2.2. Ассоциативная по множеству кэш-память
- •1.6.2.3. Обновление кэш-памяти.
- •1.6.2.4. Протокол когерентности кэширования с обратной записью
- •1.7. Магистраль микропроцессорной системы
- •1.8. Базовые устройства ввода-вывода встроенных систем
- •1.8.1. Порты ввода-вывода общего назначения
- •1.7.2. Таймер-счетчик
- •1.8.3. Импульсно-кодовая модуляция.
- •1.8.4. Многоканальный аналого-цифровой преобразователь
- •1.9. Базовые последовательные интерфейсы ввода-вывода
- •1.9.2. Последовательный интерфейс spi
- •1.9.4.1. Введение в usb
- •1.9.4.2. Интерфейс Open Host Controller для usb
- •Вопросы для самопроверки
- •Модуль 2
- •1.10. Язык проектирования аппаратуры vhdl
- •1.10.2. Введение в vhdl
- •1.10.2.1. Программирование на vhdl для моделирования и синтеза [22]
- •1.10.2.3. Операторы присваивание и process [22]
- •1.10.2.4. Цикл моделирования vhdl
- •1.10.2.5. Многозначная логика и стандарт ieee 1164
- •1.11. Проектирование устройств ввода-вывода и контроллеров
- •1.12. Интегрированная среда разработки аппаратных средств
- •Вопросы для самопроверки
- •Модуль 3
- •2. Программное обеспечение встроенных систем
- •2.1 Модель вычислений
- •2.2 Автомат с конечным числом состояний
- •2.3. Асинхронный язык проектирования sdl
- •2.4. Синхронный язык проектирования Lustre
- •2.5. Многозадачность.
- •2.5.1. Язык программирования Си
- •2.5.2. Потоки
- •2.5.2.1. Реализация потоков
- •2.5.2.2. Взаимное исключение
- •2.5.2.3. Взаимная блокировка
- •2.5.2.4. Модели непротиворечивости памяти
- •2.5.2.5. Проблемы с потоками
- •2.5.3. Процессы и передача сообщений
- •2.6. Интегрированная среда разработки прикладного программного
- •2.6.2. Комплект программ Telelogic Tau sdl Suite
- •2.6.3. Средства разработки программного обеспечения
- •2.7.1. Моделирование, эмуляция и макетирование
- •2.7.2. Формальная верификация
- •2.7.3. Оценка производительности
- •2.7.3.1. Оценка wcet
- •2.7.3.2. Исчисление реального времени
- •2.7.4. Модели энергии и мощности
- •2.7.5. Тепловая модель
- •Задания
- •1. Конвейеризация
- •2. Иерархия памяти
- •3. Базовые устройства ввода-вывода встроенных систем
- •5. Многозадачность
- •6. Валидация и оценка проекта
- •Заключение
- •Библиографический список
- •Встроенные микропроцессорные системы
Задания
1. Конвейеризация
Рассмотрим таблицу распределения конвейера на рис.8. Предположим, что процессор располагает логикой продвижения, которая способна сказать, что команда A записывает в тот же регистр, из которого читает команда B и, следовательно, результат, записанный командой A, может быть прямо продвинут в АЛУ не дожидаясь завершения записи. Предположим, что логика продвижения не тратит времени.
Дать исправленную таблицу распределения. Сколько циклов потеряют пузыри?
2. Иерархия памяти
1. Рассмотрим функцию compute_variance для вычисления дисперсии целых чисел из массива data.
1
int
data[N]; 2 3
int
compute_variance()
{ 4
int
sum1
= 0, sum2 = 0, result; 5
int
i; 6 7
for(i=0;
i < N; i++) { 8
sum1 += data[i]; 9
} 10
sum1 /= N; 11 12
for(i=0;
i < N; i++) { 13
sum2 += data[i] * data[i]; 14
} 15
sum2
/= N; 16 17
result
= (sum2 - sum1*sum1); 18 19
return
result; 20
}
Предположим, что программа выполняется на 32-разрядном процессоре с кэш прямого отображения с параметрами (m; S; E; B) = (32; 8; 1; 8). Сделаем следующие допущения:
• целое представляется 4 байтами;
• sum1, sum2, result, и I сохраняются в регистрах;
• data сохраняется в памяти, начиная с адреса 0x0;
Необходимо ответить на следующие вопросы:
1) Рассмотрим случай, когда N = 16. Сколько промахов кэш будет в этом случае?
2) Предположим N = 32. Вычислить новое значение числа промахов.
3) Рассмотрим выполнение для N = 16 и 2-входовой кэш с параметрами
(m; S; E; B) = (32; 8; 2; 4). Сколько промахов кэш будет в этом случае?
2. Кэш использует среднюю часть бит адреса как множество индексов, а старшую как тэг. Почему так сделано? Как изменится производительность кэш, если средние биты использовать как тэг, а старшие как индекс?
3. Рассмотрим программу на Си и упрощенное отображение памяти 16-разрядного микроконтроллера как показано на рисунке.
Предположим, что стек растет сверху (область D) и что программные и статические переменные располагаются внизу (область С) области программ и данных. Также предположим, что все адресное пространство имеет физическую память, ассоциированную с ней.
Можно допустить, что в этой системе целые являются 16-битными, нет операционной системы, защиты памяти и что программа была откомпилирована и загружена в область C памяти.
1) Для каждой переменной n, m, и a показать, где в памяти (A, B, C, или D) переменные будут сохраняться.
2) Определить, что будет делать программа, если содержимое адреса 0x0010 при старте равно 0.
3) Определить, что будет делать программа, если содержимое адреса 0x0010 при старте равно 1.