среда, 18 марта 2015 г.

Yuri Panchul's Digital Design and Computer Architecture test

Случайно обнаружил тест от Панчула. В этом тесте есть вопросы, касающиеся архитектуры MIPS: вопросы с номерами 4, 8, 9, 10. Я дал на них следующие ответы:
4  - d
8  - c
9  - e
10 - d

Short review of Britton's book

Закончил работу с книгой Britton'а MIPS Assembly Language Programming. Хочу поделиться впечатлениями от этой книги.
Большой плюс книги - наличие большого кол-ва упражнений по каждой теме.
В книге объясняется работа с симулятором Spim (правда, старой версии от 2003г).
Важно отметить, что на протяжении 8 первых глав предполагается, что идёт работа с процессором Simple Model.
Только в 9-ой главе вводится понятие конвейера и связанных с ним "подводных камней" (hazards).
Я делал упражнения в симуляторе MARS (почему, писал в одном из постов), но упражнения из 9 главы делал с помощью QtSpim, т.к. MARS не поддерживает конвейер.
Мне показалось, что в книге плохо представлен теоретический материал. Особенно по теме стека и подпрограмм.

воскресенье, 15 марта 2015 г.

Right shifting instruction in MIPS

В наборе инструкций MIPS32 имеются две инструкции для битового сдвига вправо: 1) sra - арифметический сдвиг; 2) srl - логический сдвиг.
При арифметическом сдвиге знак числа распространяется.
При описании операции >> в книгах по языку программирования Си указывается, что для чисел без знака будет использоваться логический сдвиг, а для чисел со знаком используемая операция зависит от реализации (в частности, от процессорной архитектуры, в которую транслируется код; есть ли там команда арифметического сдвига).

Написал маленькую тестовую программу на Си для проверки действий на процессорных архитектурах x86 и MIPS:
#include <stdio.h>
#include <inttypes.h>

int main ()
{
    int32_t val;
   
    val = 0x80000000;
   
    val = val >> 31;
   
    if (val == -1)  // -1 = 0xFFFFFFFF
      printf ("Arithetic shifting is used for right shifting\n");
    else
      printf ("Logical shifting is used for right shifting\n");
   
    return 0;
}


В двух вариантах архитектуры программа показала использование арифметического сдвига.

Solving of exercise 8.2 in Britton's book

В книге Britton от 2002 года в главе 8 есть упражнение 8.2:
"Write a function MUL32 (m, n, p, f) that will find the 32-bit product “p” of two arguments m and n. If the two’s complement representation of the product cannot be represented with 32 bits, then the error flag “f” should be set to 1 otherwise the error flag is set to 0. Pass all arguments on the stack."

Чтобы выполнить проверку на то, что за предеды 32 бит не выходит результат умножения, нужно использовать код псевдоинструкции mulo. И доработать этот код для установки флага f.

Посмотреть расшифровку псевдоинструкции mulo можно либо сделав тестовую программку в симуляторе MARS, либо посмотрев исходный код на слайде 15 учебных материалов.

понедельник, 9 марта 2015 г.

UART on GCW0

Сегодня проверил UART как описано в статье.
Всё получилось без проблем. Ниже несколько фотографий:





воскресенье, 8 марта 2015 г.

YAMON on Qemu

Попробовал сегодня запустить сборку монитора загрузки YAMON.
Сделал это для платформы Malta MIPS.
Для запуска выполнил следующую команду:
qemu-system-mipsel -M malta -nographic -bios yamon-02.22.bin
Результаты выполнения команды info представлены далее.

 
YAMON ROM Monitor, Revision 02.22.
Copyright (c) 1999-2007 MIPS Technologies, Inc. - All Rights Reserved.

For a list of available commands, type 'help'.

Compilation time =              May 24 2013  12:16:34 (pburton)
Board type/revision =           0x02 (Malta) / 0x00
Core board type/revision =      0x01 (CoreLV) / 0x00
System controller/revision =    Galileo / GT_64120A-B-0
FPGA revision =                 0x0000
MAC address =                   ff.ff.ff.ff.ff.ff
Board S/N =                     0123456789
PCI bus frequency =             33.33 MHz
Processor Company ID/options =  0x01 (MIPS Technologies, Inc.) / 0x00
Processor ID/revision =         0x93 (MIPS 24Kf) / 0x00
Endianness =                    Little
CPU/Bus frequency =             200 MHz / 419 MHz
Coherency =                     None
Flash memory size =             4 MByte
SDRAM size =                    128 MByte
First free SDRAM address =      0x800c32f0

Обнаружил в YAMON команду cp0. Она выводит содержимое регистров Coprocessor 0. Эта интересная команда. Результат её выполнения далее.

BadVAddr  = 0x00000000  CacheErr  = 0x00000000
Cause     = 0x40808000  Compare   = 0x00000000
Config    = 0x80000483  Config1   = 0x9e190c8f
Config2   = 0x80000000  Config3   = 0x00000000
Config7   = 0x00000000  Context   = 0x00000000
Count     = 0xe1497eb2  DDataLo   = 0x00000000
Debug     = 0x02008000  DEPC      = 0x00000000
DESAVE    = 0x00000000  DTagLo    = 0x00000000
EBase     = 0x80000000  EntryHi   = 0x00000000
EntryLo0  = 0x00000000  EntryLo1  = 0x00000000
EPC       = 0x80046458  ErrCtl    = 0x00000000
ErrorEPC  = 0x00000000  HWREna    = 0x00000000
IDataHi   = 0x00000000  IDataLo   = 0x00000000
Index     = 0x00000000  IntCtl    = 0xe0000000
ITagLo    = 0x00000000  L23DataHi = 0x00000000
L23DataLo = 0x00000000  L23TagLo  = 0x00000000
PageMask  = 0x00000000  PRId      = 0x00019300
Random    = 0x0000000d  SRSCtl    = 0x00000000
Status    = 0x24002c01  WatchHi0  = 0x00000000
WatchLo0  = 0x00000000  Wired     = 0x00000000

суббота, 28 февраля 2015 г.

MIPS Assembler on real hardware

Сегодня я попробовал примеры программ на языке ассемблера для ОС Linux для процессоров MIPS.
У меня есть устройство GCW0.
Я на нём проверил первые две программы из статьи.
Первый пример вообще без проблем смог собрать и запустить.
Со вторым была проблема со ссылками на заголовочные файлы.
Ссылки на заголовочные файлы для моего cross toolchain не заработали. Я поиском нашёл пути к заголовочным файлам с такими же именами в моём toolchain, и программа начала собираться. Вот какие пути у меня оказались для файлов:
#include "sys/regdef.h"
#include "asm/unistd.h"
Ниже пример выполнения второй программы на GCW0.

01.03.2015г. выполнил 3 и 4 программы-примеры на реальном оборудовании. Всё работает корректно. Есть замечание по программе 3, там в стеке выделяется 4 байта под временную переменную. К этой переменной должна идти адресация как 0(sp), а идёт адресация как 4(sp). Что не правильно, т.к. обращение идёт к тем данным, которые были выделеные в стеке до 4 байт под локальную переменную.
Небольшое резюме по примерам.
Первый пример показывает как без стартового и завершающего кода для языка Си писать программы для Linux на языке ассемблера. Начиная со второго примера при сборке используется стартоый и завершающий код Си, что подтверждается точкой входа main. В четвёртом примере вызывается функция стандартной библиотеки Си printf.

воскресенье, 22 февраля 2015 г.

MIPS-based devices

На веб-сайте linux-mips есть БД устройств на базе процессоров MIPS.
Описание сетевых чипов и устройств на из базе (используют MIPS CPU) присутствует на веб-сайте wikidevi.

GL.iNet

Есть такое популярное устройство, используемое для DIY - TP-Link WR703 (MR3020). Базовый элемент - SoC AR9331. Сейчас используется плата разработки IoT.
Так вот недавно я обнаружил устройство, которое выполняет такие же функции как устройства TP-Link, но изначально предполагают своё использвание в DIY: есть сразу UART, выведены GPIO, прошивка OpenWRT с доработанным U-boot. Это GL.iNet. Информация на веб-сайте OpenWRT об этом устройстве. Есть один минус для меня - это не предоставлена схемотехника устройства, не понятно, где на плате находится JTAG и выведен ли он вообще.

суббота, 21 февраля 2015 г.

MARS better than QtSpim

Изучил Интернет на наличие обучающих материалов по MIPS Assembly Language. Оказалось очень много материалов, книг и лекций. Получается так, что архитектура MIPS очень популярна при изучении архитектуры компьютера и программированию на языке ассемблера. 
Реальное оборудование в этих курсах практически не используется. Вместо него используются программы-симуляторы вычислительных систем на базе процессоров MIPS.
В большинстве книг и курсов до 2005 года описывается использование SPIM. С 2010 года существует QtSpim, версия с ГИП, которая имеет возможность запуска на трёх ведущих десктопных ОС. 
Но с 2005 года ведётся разработка ещё одного симулятора под названием MARS. Эта программа в современных курсах уже упоминается как программа, имеющая преимущества перед SPIM (QtSpim).
Я занимаюсь изучением MIPS Assembler Language и попробовал обе эти программы. Я считаю, что QtSpim очень неудобен, MARS более удобен.
Вот то, что для меня в MARS удобнее:
1) наличие встроенного редактора исходного текста с подсветкой синтаксиса;
2) удобное расположение компонентов главного экрана: большую часть экрана в режиме симулятора занимает представление сегмента text, под ним удобно расположено представление сегмента data, регистры с правой стороны, также в главном окне помещается область ввода/вывода.

QtSpim выглядит недоработанным. Я имею опыт работы с Qt. Если появится свободное время, попробую помочь этому проекту.

На данный момент однозначно MARS!

четверг, 12 февраля 2015 г.

MIPS Assembley Language

Начал изучать язык ассемблера для архитектуры MIPS по книге MIPS Assembly Language Programming. В книге есть достаточное кол-во упражнений для закрепления материала.

There is a discussion about MIPS for education computer architecture - https://news.ycombinator.com/item?id=7614362.

понедельник, 2 февраля 2015 г.

Information recources

В данной заметке будут располагаться ссылки на статьи, книги и др. информационные ресурсы.

Simulators and assemblers:
1) QtSpim
2) MARS

Lectures and exercises:
1) Computer Architecture and Assembly Language - MIPS Assembly language, MARS recommended, good explanation of data representation.
2) Review of system call in MIPS Linux.

MIPS-based devices:
1) Обзор устройств под управлением ОС OpenWRT;

Other:
1) Very good information resource (not only Linux port to MIPS) - linux-mips.

Targets of this blog

Информация в блоге будет представлена на русском языке.
В последнее время заинтересовался устройствами на базе процессоров с архитектурой MIPS. Она мне кажется перспективной. Целей этого блога несколько.
1. Упорядочивать накапливаемую мной информацию в этом направлении.
2. Делиться найденными мной материалами.
3. Описывать различные устройства, которые построены на базе процессоров с архитектурой MIPS.

Для тех, кто читает и будет читать блог. Комментарии и замечания очень приветствуются, т.к. я являюсь новичком в этом направлении. Мои мысли могут не являться правильными.