Primula C Compiler     Xameleon Project        |        In English

Устройство выборки команд и управления шинами

Comment are off
На этом месте должна была быть статья о моделировании инструкций из диапазона 0x60-0x6f. Однако, открылись некоторые обстоятельства, о которых пойдёт дальнейшее повествование. Именно поэтому статья попадает в блог, а не в раздел новостей. Для демонстрации поведения должна была использоваться следующая программа на макро-ассемблере «Эверест»: Поведение программы должно было демонстрировать копирование части кода из внутреннего ПЗУ устройства в блок статической оперативной памяти ...
Дальше...

Закладки? Нет — очередное расширение системы команд

Comment are off
Мы погрязли в отладке следующих, ещё не перенесённых в конвейерную версию, инструкций. Сложность заключается в том, что при изменении схематики приходится заново прогонять все тесты и вместе с добавлением новой функциональности добиваться идентичного прохода уже пройденных тестов. В общем — рутина. Как только следующая инструкция пройдёт тесты, так сразу про это появится статья на нашем сайте. А пока немного отвлечёмся и поговорим о… закладках. Дело в том, что волею судь...
Дальше...

Горячий возврат из подпрограммы

Comment are off
Некоторые инструкции или их сочетание мы называем горячими инструкциями. Почему горячие? Это такие инструкции,  которые не делают полезную работу и могут являться результатом программной ошибки. В предыдущей статье я рассказывал о  работе конвейера и упомянул что пример должен зациклиться, но не объяснил почему. Понять, почему пример должен зациклиться, а так же отладить инструкцию RETURN нам поможет следующий пример. Засечка NOTCH перед инструкцией перехода послужит для сохранения адре...
Дальше...

Разработка конвейерной версии

Продолжает развиваться конвейерная версия ядра «Эверест». Текущий статус легче всего показать на следующем примере. Надо сказать что пример надуманный и при старте на реальном железе он должен попасть в бесконечный цикл. В случае симуляции этого кода подразумевается что он выполняется после включения питания или сброса устройства. Если вам интересно почему так произойдёт, смотрите пояснение в статье «Горячий возврат из подпрограммы». Ядро использует трёхс...
Дальше...

Контроллер SDRAM для Марсохода

Comment are off
Уважаемые друзья! Мы потратили много времени в поисках подходящиего контроллера для нашей SoC и в результате решили реализовать его самостоятельно, взяв за основу спецификацию на микросхему MT48LC4M16A2-75 компании Micron. Вот какое устройство у нас получилось: Мы реализовали 32-х битную шину данных (i_data — используется для записи данных в память, o_data — для чтения данных из памяти). Выход o_ready сигнализирует о готовности выполнения предыдущей операции и готовности принять...
Дальше...

Текущий статус проекта

Comment are off
На скриншоте показан момент отладки нового конвейеризированного процессорного ядра системы команд «Эверест». Моделирование производится программой ModelSim Starter Edition. Показанные волны соответствуют исполнению следующего участка кода: Этот код является типичным и используется, например, при инициализации списков. Если бы у процессора был компилятор, то вышеприведённый дамп мог бы соответсвовать следующему коду на языке Си: do { struct list_item * next_free = item + 1;...
Дальше...

Как измерить время с момента старта устройства

В предыдущей статье мы рассказали о новом расширении системы команд «Эверест». Теперь поведаем о том, как мы реализовали это расширение на языке описания аппаратуры. Ниже показан результат работы шестого пункта меню — печать количества тактов с момента старта устройства: Алгоритм работы довольно простой — при нажатии на клавишу «цифра шесть» на терминал выводится время, полученное преобразованием данных из счётчика тактов. Для решения этой зад...
Дальше...

Система команд «Эверест» версия 1 редакция 2

Comment are off
Второе расширение системы команд. Причиной расширения явилась потребность оптимизировать микрокод процессора. В результате удовлетворения этой потребности машинные инструкции из диапазона от 0xd0 до 0xd7 расширили семантику с помощью бита F (седьмой бит в третьем байте инструкции). На рисунке показаны возможные формы инструкций этого диапазона. Потребность расширить семантику возникла в результате анализа микро-кода, с помощью которого реализованы несколько инструкций системы ...
Дальше...

Карта инструкций процессора

Comment are off
Мы создали карту системы команд, поместив все реализованные инструкции процессора в таблицу размером 16×16 элементов. Первая строка это однобайтовые инструкции. Третья строка — двухбайтовые инструкции. Желтым фоном помещены зарезервированные коды операций (картинка кликабельна): Помимо введённых нами расширенных инструкций для поддержки многозадачности и взаимодействия задач, вы можете увидеть что многие инструкции повторяются. Инструкции повторяются, образуя при этом различн...
Дальше...

Расширение синтаксиса ассемблера

Comment are off
Мы уже говорили что некоторые тонкости системы команд «Эверест» спрятаны за ассемблерными макросами. Пока не готов компилятор Си, нам приходится много писать на ассемблере и приходится прилагать много усилий для реализации сложных алгоритмов. Одной из проблем является необходимость помнить за что отвечает каждый из использованных регистров. Поэтому было принято решение о введении алиасов для регистров. Простой пример — сторонний разработчик реализовал процедуру, ко...
Дальше...