Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 153; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.005 с.) |