Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Операторы блокировки и разблокировки регистров и 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 выполняются следующие действия:
Оператор 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 может быть представлен в одном из следующих форматов:
Если аргумент 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 с.) |