Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Топ:
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2022-09-12 | 27 |
5.00
из
|
Заказать работу |
|
|
Байтовые синхронные коммуникационные порты реализованы в соответствии с [1, раздел 10]. Для эмуляции порта реализован класс COMBlock. Данный класс имеет собственную реализацию функции Operate, которая запускается на каждый такт процессора. Таким образом порт может работать независимо от ядра процессора параллельно с ядром.
Взаимодействие порта с ядром осуществляется через регистры ICAX, ICCX, OCAX, OCCX (X – номер порта). Указатели на регистры ядра при инициализации передаются объекту – порту. Все операции внутри порта осуществляются в соответствии со значениями регистров.
Порты ввода/вывода общего назначения
Порты ввода/вывода общего назначения реализованы в соответствии с [1, раздел 11].
Работа портов эмулируется посредством регистров ядра NM6406 IOP и IOPCR. Кроме того, ядро предоставляет две интерфейсные функции:
1) uint64 WritePIO(uint8 val) – запись в порт общего назначения;
2) uint8 NM6405::ReadPIO() – чтение из порта общего назначения.
Данные функции позволяют корректно читать данные из порта и писать данные в порт со стороны внешних по отношению к ядру устройств. При записи и чтении порта с помощью данных функций учитывается режим работы каждого бита порта. При записи с помощью WritePIO изменяются только те биты, которые за программированы на ввод, при этом биты, запрограммированные на «вывод» не изменяются. При чтении значения порта биты, запрограммированные на «ввод» всегда равны нулю.
Кэш-память команд
Кэш-память команд моделируется классом InsCache. Класс InsCache реализует интерфейс iMemInterface. При чтении инструкций, ядро процессора вызывает функцию ReadMem экземпляра класса InsCache. В зависимости от режима работы и состояния кэш-памяти инструкция читается либо из внутренней кэш-памяти, либо осуществляется обращение по шине. Задержка (функция SetMemLock) также рассчитывается в зависимости от того, из какой память было осуществлено чтение команды.
|
Блок упаковки-распаковки векторов данных
Блок упаковки-распаковки векторов данных эмулируется классом TPuBlock. Класс TPuBlock реализует интерфейс iMemInterface и функционирует в соответствии с [2, раздел 4].
Блок перехватывает запросы на чтение или запись данных по шинам и, в зависимости от режима работы либо транслирует запросы шине, либо осуществляет потоковую упаковку или распаковку данных в зависимости от состояния регистров блока.
7 Модуль ввода/вывода ‑ SEMIHOSTING
Назначение модуля
Модуль позволяет ПО Nero Matrix (далее NM) работать с файлами на хосте, на котором запускается эмулятор. Данный модуль позволяет реализовать библиотеку stdio, с помощью которой приложения для NM, запускаемые на эмуляторе, могут открывать файлы на чтение и на запись, читать из файлов, записывать в файлы, а также работать со стандартными потоками stdin, stdout, stderror.
Исполнение модуля
С точки зрения программиста модуль выполнен в качестве периферийного устройства, регистры которого доступны как ячейки памяти по заданному адресу. Начальный адрес регистров модуля (адрес первого регистра) может быть определён в конфигурационном файле. Адрес модуля по умолчанию равен 0xFF000000.
Регистры и команды
Модуль управляется посредством последовательной записи в его регистры. Все регистры имеют размер 32 бита. Список регистров приведён в таблице 7.3.1:
Таблица 7.3.1 ‑ Список регистров
Смещение регистра | Описание | Примечание |
0x0 | Регистр команды | 1 |
0x1 | Первый аргумент команды | |
0x2 | Второй аргумент команды | |
0x3 | Третий аргумент команды | |
0x4 | Четвёртый аргумент |
Примечание 1 ‑ в регистр команды заносится команда, которую должен исполнить модуль. Поскольку модуль начинает работать сразу после загрузки в него команды, команда должна быть загружена после записи в регистры всех необходимых аргументов.
|
За исключением команды fclose все функции модуля возвращают значение. Возвращаемое значение находится в регистре команд.
Список доступных команд с описанием аргументов приведен в таблице 7.3.2.
Таблица 7.3.2 ‑ Список доступных команд
Код команды | 0x1 | Примечание |
Описание команды | semi_fopen – открытие файла | |
Аргумент 1 | Адрес строки –имени файла | |
Аргумент 2 | способ открытия файла 1- чтение бинарного файла 2- чтение текстового файла 3- запись бинарного файла 4- запись текстового файла | |
Аргумент 3 | - | |
Аргумент 4 | - | |
Возвращаемое значение | Дескриптор файла | |
Код команды | 0x2 | |
Описание команды | semi_fclose | |
Аргумент 1 | Дескриптор файла | |
Аргумент 2 | ||
Аргумент 3 | ||
Аргумент 4 | ||
Возвращаемое значение | Нет | |
Код команды | 0x3 | |
Описание команды | semi_fread – чтение данных из файла | |
Аргумент 1 | Указатель на буфер памяти для чтения | |
Аргумент 2 | Размер элемента для чтения | 1 |
Аргумент 3 | Кол-во элемента для чтения | 1 |
Аргумент 4 | Дескриптор файлов | |
Возвращаемое значение | Количество прочитанных байтов |
Продолжение таблицы 7.3.2
Код команды | 0x4 | |
Описание команды | semi_fwrite – запись данных в файл | |
Аргумент 1 | Указатель на буфер памяти для записи | |
Аргумент 2 | Размер элемента для записи | 1 |
Аргумент 3 | Кол-во элементов для записи | 1 |
Аргумент 4 | Дескриптор файлов | |
Возвращаемое значение | Количество записанных байтов | |
Код команды | 0x5 | |
Описание команды | semi_fseek – смещение позиции в файле | |
Аргумент 1 | Дескриптор файла | |
Аргумент 2 | Смещение (значение интерпретируется как знаковое) | |
Аргумент 3 | Позиция, относительно которой вычисляется смещение 1 – Относительно начала файла 2 – Относительно текущей позиции 3 – Относительно конца файла | |
Аргумент 4 | ||
Возвращаемое значение | 0 – в случае успешного смещения 1 – в случае ошибки | |
Код команды | 0xA | |
Описание команды | exit– окончание работы программы и выход из симулятора | |
Аргумент 1 | Возвращаемое значение | |
Возвращаемое значение | Значение, переданное в качестве аргумента в функцию exit. Если трассировщик вызван с функцией –rv то данное значение будет передано в виде результата работы трассировщика |
|
Примечание 1 ‑ понятие «размер элемента» и «количество элементов» определяются как в описании соответствующих функций в stdio.
|
|
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!