Операторы блокировки и разблокировки регистров и FIFO 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операторы блокировки и разблокировки регистров и FIFO



Для создания потактовых моделей в PPDL предусмотрен следующий набор операторов блокировки-разблокировки:

1. lock – заблокировать доступ к ресурсу.

2. unlock – разблокировка доступа к ресурсу

3. ilink(resource, delay) – привязка времени разблокирования ресурса другому блокируемому ресурсу с именем resource. Блокируемый ресурс будет разблокирован через delay тактов после разблокировки ресурса resource

4. is_locked – возвращает 1, если доступ к ресурсу заблокирован, 0 – в противном случае

5. check – останавливает процесс выполнения инструкции до момента разблокировки ресурса. По сути является аналогом конструкции while(resource.is_locked) wait;

 

 

Операторы блокировки-разблокировки не как не влияют на операции чтения-записи соответствующих ресурсов, а только позволяют управлять задержками и инкрементацией счетчика тактов.  

Wait - ожидание следующего такта

При вызове оператора wait выполняются следующие действия:

  1. Счетчик тактов увеличивается на 1
  2. Обновляются регистры

Оператор idx – индекс списка или аргумента инструкции

       В случае, когда аргумент arg инструкции определен как массив значений элементов процессора (регистров, ФИФО, флагов или ячеек памяти), то при использовании arg в выражении будет возвращаться или присваиваться значение элемента списка. Для получения доступу к численному значению аргумента, то есть к значению соответствующих бит поля команд, предусмотрен оператор idx. Например, если определен список:

Arglist rlist,{ “r0”, “r1”, “r2”, “r3”,}, {r[0], r[1], r[2], r[3],}

… и задан аргумент инструкции:

       int2 reg_arg = rlist;

 

… то при описании функциональности команды в конструкции типа a = reg_arg будет возвращаться значение одного из регистров из списка rlist, а в контрукции a = idx(reg_arg) номер этого регистра, то есть значение двух бит из опкода команд, соответствующих аргументу reg_arg.

 

Конвейер

Формат

       PIPE {stage1,stage2};

Аргументы

stage1, stage2 – перечисление символьных названий ступеней конвейера

 

Описание

Конвейер инструкций предназначен для описания потактового разбиения инструкций. Разделяют два типа конвейера – конвейер инструкций и конвейер непосредственно процессора.

 

 Пример

       PIPE {pa,pb};

Данный конвейер состоит из ступеней: pa и pb.

 

 

Набор инструкций

Формат

ISET Name

{

   // описание конвейера

PIPE …

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

INST …

}

Аргументы

       Name – название набора инструкций.

Описание

       Описание процессора в PPDL может содержать один или несколько наборов инструкций. Каждый набор инструкций имеет свое уникальное имя (Name). Внутри блока описания инструкций описываются инструкции, их ассемблерное представление, бинарный код и семантика, а также конвейер инструкций. При генерации программного симулятора  

Функции

 

Массив аргументов инструкции

Формат

       ArgList Name, “assembly_template”,{arg1, arg2, arg3 };

       ArgList Name, { “arg1”, “ arg2”,” arg3” };

 

Аргументы

       Name – имя аргумента

       “ assembly _ template ” – шаблон аргумента для представления в ассемблере. Данный параметр опускается, если список аргументов составляют ассемблерные конструкции (имена в кавычках). Кроме того, при описании шаблона можно использовать зарезервированное выражение “$a”, которое означает ассемблерное имя объекта. В этом случае каждый элемент списка должен иметь ассемблерное имя.

       arg 1, arg 2 – список аргументов. Элементы списка могут быть двух типов: регистры или ассемблерные имена (в кавычках).

 

Пример

// список из младших регистров массива r[8]

// в ассемблере элемент списка RL будет выглядеть как: rl_r[idx]

ArgList RL,"rl_$a",{r[0],r[1],r[2],r[3]};

 

 

// список аргументов - математических логических или сдвиговых операций

ArgList arithm,{"ADD","SUB","OR","XOR","AND","NOT","RSH","LSH","MUL"};

 

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

Формат

INST Assembly_template,(OpCode_Descr)

disasm

{

disasm_directives;

}

assembler

{

assembler_directives;

}

 

{

 

Decode_instruction_functionality

stage1:

Instruction_functionality_stage1

stage2:    

Instruction_functionality_stage2

}

Аргументы

Assembly_template - шаблон представления инструкции в ассемблере

 

OpCode_Descr – описание формата кода команды, см главу «Формат кода команды»

 

disasm – описание операций над аргументами (полями инструкции), на этапе дизассемблирования инструкции. Например, если имеется конструкция:

INST " $GRk = $GRi R>> $shift_arg;",(32, int3 Grk=gr,int5 shift_arg,…)

disasm

{

shift_arg = (shift_arg*(0 - 1)) & 31;

}

…то в функции дизассемблировании при нахождении кода, соответствующего инструкции «$GRk = $GRi R>> $shift_arg» перед генерации строки ассемблерной мнемоники аргумент shift_arg будет умножен на 0-1 по модулю 31.

 

Assembler – описание операций над аргументами (полями инструкции), на этапе ассемблирования инструкции. После того как текстовой представление инструкции распознано и сформирован образ инструкции в бинарном виде в поле assembler_directives можно задать операции модификации значений полей инструкций, например задать что значение старших 2-x битов поля X кода инструкции равны младшим битам поля Y:

assembler { X = (X&0x0F)|((Y&3)<<4); }

 

 

stage1,stage2 – имена ступеней конвейера исполнения инструкций.

 

 

Instruction_functionality_stageX – поведенческое описание команды на ступени конвейера stageX

 

Decode_instruction_functionality – поведенческое описание команды на этапе декодирования.

 

 

Формат кода команды

Код команды инструкции можно записать в одном из вариантов:

(Inst_size,

arg_size_1, argval_1 [ = List_or_iset],

arg_size_2, argval_2 [ = List_or_iset]

...

arg_size_N, argval_N RELOC_TYPE)

или

(Inst_size,

Type_1 argval_1[ = List_or_iset],

Type_2 argval_2 [ = List_or_iset],

...

Type_N argval_N [ = List_or_iset])

 

 

Inst_size – размер инструкции

arg_size_N - размер N- го аргумента в битах

argval_N – значение N-го аргумента.

Type_N – тип аргумента (вместо размера аргумента в битах). Допустимы только целочисленные типы int1 – intN.

 

Аргумент arg_val может быть представлен в одном из следующих форматов:

  1. В виде целочисленной константы, представленной в десятичном, шестнадцатеричном или двоичном виде
  2. В виде имени. В таком случае при описании семантики команды это имя можно использовать в качестве аргумента операции. В ассемблере данная конструкция будет представлена как численный аргумент команды
  3. В формате “name = list”, где name это имя аргумента инструкции (по аналогии с п.2) а list это название списка аргументов или массива регистров. В ассемблере данная конструкция будет представлена как ассемблерное имя одного из аргументов списка или в виде элемента массива регистров.
  4. В формате “name= iset”, где iset – имя ранее определенного набора инструкций. В ассемблере конструкция $name будет представлена как вложенная ассемблерная инструкция. На этапе декодирования, бинарный код, соответствующий полю name будет декодирован как вложенная инструкция. Такая вложенная инструкция декодируется в процессе декодирования основной инструкции и затем исполняется параллельно с основной. Это дает возможность строить иерархию наборов инструкций и организовывать «длинное» слово команды, которое (слово) включает в себя несколько параллельно исполняющихся инструкций.

 

Если аргумент arg_val представляется в виде целочисленной константы, то допустимо дополнительная спецификации типа релокации метки. Тип релокации метки определяет, как рассчитывать значение константы относительно адреса метки. В PPDL предусмотрено два типа релокации – абсолютная, при которой в код инструкции вставляется абсолютный адрес метки, и релокация относительно счетчика команд. Абсолютная релокация задается по умолчанию. Для задания относительной релокации используется ключевое слово RELOC_PC. Например, при описании аргумента

int32 branch_addr RELOC_PC

 

Адрес метки будет записан как смещение относительно адреса инструкции.

 

Пример описания формата инструкции

INST "ADD $1,$2,$3",

(32,

4,0,4,src1=r,4,src2=r,4,dst=r,4,0,12,0)



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 95; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.66.178 (0.016 с.)