Saturday, August 31, 2013

CPU: Виртуальная память не обязана быть сложной

Это третья статья на тему процессора. Все статьи по теме - тут: label-CPU

Современный процессор должен иметь встроенный MMU, иначе это будет микроконтроллер какой-то.
C MMU можно делать много всяких полезных штук - виртуализацию, защиту, можно запускать Linux и ворочать огромными объемами памяти имея небольшое количество RAM.

Thursday, August 29, 2013

Регистры: Как это сделаю я.

Это вторая статья про самодельный процессор, который я задумал.
Все статьи собраны тут: label-CPU

Каким мог бы быть регистровый файл моего garage-made процессора?

  1. Небольшим. Т. к. у нас FPGA, и к тому же надо как-то менее заратно переключать потоки.
  2. Дружественным к компилятору. Внутри процедуры хочется иметь много взаимозаменяемых прямо адресуемых регистров. При входе в процедуру хочется иметь автоматическое резервирование пространства в регистровом файле.
  3. Автоматическим. Операции резервирования/освобождения должен делать процессор, а не приложение.
  4. Универсальным. Все типы данных - integer ALU, FPU, SIMD processing unit - должны обрабатываться в одном универсальном регистровом файле.

В качестве первого приближения:
В режиме пользователя доступны 32 32-разрядных регистра r0..r31 (позже мы сделаем их 64-разрядными).
4  из них - глобальные и не вращаются:
  • r31 - Program Counter - указатель текущей исполняемой инструкции.
  • r30 - Stack Pointer - Вершина стека.
  • r29 - TLS Pointer - Указатель на статический блок, уникальный для каждого потока. 
  • r28 - Data Segment - Указатель на статические данные, разделяемые между потоками.
r0..r27 - вращающийся регистровый стек на 28 регистров.

Wednesday, August 28, 2013

CPU of my dream (ru)

Я собираюсь поиграть в FPGA, и сделать простой и удобный процессор.
Некоторые решения будут оригинальными, но большинство - будут нещадно заимствоваться из разных интересных архитектур.

Начну пожалуй со сбора требований и пожеланий.

Регистры, регистры, регистры, регистры!

Прикладная архитектура процессора с точки зрения программиста крутится вокруг регистров и операций над ними.

Рассмотрим регистры общего назначения.
Если их много, человеку, компилятору и планировщику есть где разгуляться:
  • Не надо бесконечно перебрасывать обрабатываемые данные между памятью и регистрами.
  • Можно выполнять одновременно несколько независимых операций.
  • Можно анроллить циклы.
  • Можно уменьшить потребление стека при вызовах процедур.
Словом, много регистров - это хорошо.

Monday, August 26, 2013

Just a Test

+console
echo "Hello world

Работает!

Привет. Я - кодер Андрейко, а это мой новый блог.
Не знаю зачем, но пусть будет.

Мои интересы - программирование: компиляторы, процессоры, пользовательский интерфейс и всякие фреймворки, а также микроконтрллеры, и верилог.
Мои языки - C++, Java, хотя мне давно все равно на чем писать.


Jeez, it works!

Hi there, I'm Andrey the coder, and this is my new blog.
If i need it? I haven't decided yet. But why not.

I'm working on compilers, GUI frameworks as well as microcontrollers, and VHDL.
My primary programming languages are C++ and Java, and to be honest, the language is just a tool.