Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Лекция 2. Модельный процессор - общая структура, система команд, операционный автомат

Лекция 2. Модельный процессор - общая структура, система команд, операционный автомат (В.В. Подымов, М.С. Шуплецов - Лекции и семинары)

Описание файла

Файл "Лекция 2. Модельный процессор - общая структура, система команд, операционный автомат" внутри архива находится в папке "В.В. Подымов, М.С. Шуплецов - Лекции и семинары". PDF-файл из архива "В.В. Подымов, М.С. Шуплецов - Лекции и семинары", который расположен в категории "лекции и семинары". Всё это находится в предмете "пакеты проектирования сверхбольших интегральных схем" из седьмого семестра, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Пакеты проектированиясверхбольшихинтегральных схемЛекция 2Рассказывает:Подымов Владислав ВасильевичОсень 2016e-mail:valdus@yandex.ruЧем будем заниматься вближайшее времяПроектировать процессор(надо всё-таки заставить вас понять,что было в курсе “Языки описания схем”)процессорданныеданныеуправлениеинструкциипамятьКак и в курсе “Языки описания схем”, во всех понятиях и концепцияхбудем держаться близко к тому, что происходит в MIPSУстройство процессорапроцессорПроцессор читает из памяти инструкции, одну за одной,и исполняет ихпамятьИнструкция – это массив нолей и единиц фиксированной ширины, в котором сказано,●откуда взять значения данных●что сделать с этими данными●куда положить результатДоговоримся о ширине инструкций: 32бита[0000 0011 0101 0101 1101 1011 0000 1010] - это может быть инструкцией(с отсылкой к тому, что будет дальше, будем называть это машинным кодом инструкции)Устройство процессораВнешняя память – это очень медленное устройство по сравнению с процессоромЕсли ничего с этим не делать, то процессор будет работатьнастолько же медленно, насколько и памятьЧтобы процессор мог работать “в полную мощность”,обычно заводят несколько промежуточных уровней памятиЧем ближе (физически и логически) уровень памяти к процессору, тем●меньше объём памяти этого уровня●быстрее работает эта памятьСамая близкая к процессору память – это регистры (register)Регистр хранит массив нолей и единиц фиксированной шириныЧтобы жить было проще, будем (пока что) проектировать процессор,в котором из всех уровней памяти есть только регистрыНе путать срегистрамиVerilog (reg)!Устройство процессораr0r1...r31регистрыпроцессорДоговоримся о том, сколько регистров будет в процессоре и какова их ширина:●32 регистра(значит, для кодирования номера регистра нужно 5 бит)●ширина регистра – 32бита(такая же, как и ширина инструкции)Чтобы не усложнять себе жизнь, сейчас будем считать, что●у нас нет регистров специального назначения (например, выдающего всегда 0)●назначение всех регистров – только хранение данных согласно инструкциямУстройство процессораr0счётчик командr1...r31PCЧтобы знать, какую инструкцию обрабатывать следующей, процессордолжен где-то хранить информацию о смещении этой инструкции в памятиЭта информация хранится в счётчике команд (program counter)Счётчик команд хранит массив нолей и единиц –смещение в байтах следующей инструкции в памятиУстройство процессораr0r1...r31PCПосле исполнения инструкции счётчик увеличивается на 4(откуда взялось этомагическое число?)Если инструкция велит нарушить обычный порядок исполнения,то счётчик может изменяться по-другому (как велит инструкция)Договоримся о ширине счётчика команд:32 бита(такая же, как ширина регистра и ширина инструкции)Устройство процессораr0r1...r31PCАЛУЧасть инструкций производит арифметико-логические операции над числами:●сложить два числа●вычесть одно число из другого●произвести циклический сдвиг числа●...Такого рода операции производятся арифметико-логическим устройством (АЛУ)АЛУ – это комбинационная схема:результат операции немедленно получается на выходеУстройство процессораr0PCr1УУ...r31АЛУСогласно основному принципу проектированиясхем, процессор можно разделить на две половины:●операционный автомат(схема, по которой курсируют данные)(схема, нужным образом выставляющаяуправляющие сигналы, согласно которымданные преобразуются нужным образом)Регистры, счётчик команд и АЛУ содержат управляющие сигналы(например, “загрузить значение в регистр”)●управляющий автоматЭти сигналы выставляет отдельный блок – устройство управления (УУ)Устройство процессораr0PCr1УУ...r31АЛУВот такой процессор мы будем проектировать(по крайней мере поначалу)Теперь можно точно сказать, откуда процессор берёт данные и куда кладёт:●берёт из памяти, регистров и счётчика команд●кладёт в память, регистры и счётчик командА как процессор преобразует данные?Это зависит от того, под исполнение какого набора инструкций проектируется процессорЧто вас ждёт в ближайшее времяr0PCr1...r31АЛУНа ближайшем семинаре мы будем●строить операционный автомат совсем простого процессора●учиться проверять, правильно ли написан этот автомат,ещё до того, как написан управляющий автомат(так как в курсе “Языки описания схем” было мало практики,придётся здесь познавать всё заново)Формат инструкцийКаждая инструкция имеет короткую (ассемблерную) запись, напримерadd $t, $s1, $s2названиеаргументыЭта запись содержит название и аргументы(не более трёх аргументов)Ассемблерной записью определяется, как выглядяти что значат подмассивы машинной записиИнструкции делятся на группы по назначению и тому, как они исполняются:●R-тип(register)работает только со значениями регистров●I-тип(immediate)работает со значениями регистрови использует константу, явно заданную в инструкции●J-тип(jump)инструкции безусловного перехода;используют только константу из самой инструкции●...Инструкции R-типаВсе эти инструкции имеют такой формат:opcode6 битrs5 битrtrdshamtfunct5 бит5 бит5 бит6 бит●opcode●rs, rt– код операции; в нашем простом случае это массив [000000]и означает “это операция R-типа”– номера регистров, значения которых используются●rd– номер регистра, в который пишется значение●shamt– если это инструкция, согласно которой нужно сдвинуть массив битрегистра, то здесь записана константа: на сколько позиций сдвинуть●funct– код конкретной операции R-типаНебольшая ремарка:●регистр отождествляем с его номером, если ясно, что мы говорим про регистр●если r – регистр, то $r – значение, которое в нём хранится(как в ассемблерной записи)Инструкции R-типаopcode6 битrtrdshamtfunct5 бит5 бит5 бит6 битrs5 битАрифметические инструкции(знаковая арифметика с переполнением)Записать в rd значение $rs + $rtadd $rd, $rs, $rtКак это выглядит в машинном коде:000000rsrtrdxxxxxx100000xxxxxx100010двоичные записи номеров регистровЗаписать в rd значение $rs - $rtsub $rd, $rs, $rt000000rsrtrdИнструкции R-типаopcode6 битrs5 битrtrdshamtfunct5 бит5 бит5 бит6 битСдвиговые инструкцииsll $rd, $rs, shamtfunct = [000000]srl $rd, $rs, shamtfunct = [000010]sra $rd, $rs, shamtfunct = [000011]Взять значение $rs; сдвинуть его влево на shamt бит,заполняя правые биты нолями; результат записать в rdВзять значение $rs; сдвинуть его вправо на shamt бит,заполняя левые биты нолями; результат записать в rdВзять значение $rs; сдвинуть его вправо на shamt бит,заполняя левые биты знаком $rs (его левым битом);результат записать в rdИнструкции R-типаopcode6 битrs5 битrtrdshamtfunct5 бит5 бит5 бит6 битПобитовые логические инструкцииand $rd, $rs, $rtfunct = [10100]nor $rd, $rs, $rtfunct = [10111]xor $rd, $rs, $rtfunct = [10110]or $rd, $rs, $rtfunct = [10101]Записать в rd результат побитового применения операции (and, nor, xor, or)к значениям $rs, $rtИнструкции R-типаopcode6 битrs5 битrtrdshamtfunct5 бит5 бит5 бит6 битИнструкция сравнения знаковых чиселslt $rd, $rs, $rtfunct = [101010]если $rs < $rt, то записать в rd значение [00...001],иначе записать в rd значение [00..000]Есть и другие инструкции R-типа, например:●●беззнаковые аналоги знаковых операций●в ассемблерной записи в конец названия добавляется “u”●в funct правый бит становится “1” вместо “0”(например, sltu)операции, которые пока затрагиваться не будут(надеюсь, что и потом не будут)Инструкции I-типаВсе эти инструкции имеют такой формат:opcode6 битrs5 битrt5 битIMM16 бит●opcode– код операции●rs– номер регистра, значение которого используется●rt– номер регистра, в который пишется значение●IMM– константа, используемая в операцииИнструкции I-типаopcode6 битrs5 битrt5 битIMM16 битАрифметико-логические инструкцииaddi $rt, $rs, IMMopcode = [001000]addiu $rt, $rs, IMMopcode = [001001]andi $rt, $rs, IMMopcode = [001100]ori $rt, $rs, IMMopcode = [001101]slti $rt, $rs, IMMopcode = [001010]sltiu $rt, $rs, IMMopcode = [001011]Это аналоги R-операций, из названия которых удалено “i”,но вместо значения, записанного в регистр rt, берётся значение IMMВ беззнаковом случае IMM расширяется влево до 32 бит нолями, в знаковом - знакомИнструкции I-типаopcode6 битrtrs5 бит5 битIMM16 битИнструкции ветвленияbeq $rt, $rs, IMMЕсли $rt == $rs, то вместо PC += 4 сделай PC += (IMM << 2) + 4opcode = [000100]bne $rt, $rs, IMM(то есть IMM – это то, на сколько инструкцийследует продвинуться сверх положенного,если значения в регистрах совпадают)Если $rt != $rs, то вместо PC += 4 сделай PC += (IMM << 2) + 4opcode = [000101]Здесь есть небольшие расхождения с тем, как всё работает в MIPSИнструкции I-типаopcode6 битrtrs5 бит5 битIMM16 битИнструкции работы с памятьюlw $rt, IMM($rs)Загрузить в rt значение из памяти по смещениюopcode = [100011]sw $rt, IMM($rs)$rs + IMM байтСохранить значение $rt в памяти по смещениюopcode = [101011]$rs + IMM байтКак и раньше, есть ещё ряд инструкций, которые пока не затрагиваютсяИнструкции J-типаВсе эти инструкции имеют такой формат:ADDRopcode6 бит26 битСейчас нам нужна одна такая инструкция:j ADDRЗаписать в PC значение [0000 ADDR 00] – инструкция с этим смещениембудет выполнена следующейopcode = [000010]Здесь есть небольшие расхождения с тем, как всё работает в MIPSОперационный автоматпроцессораИ как же для этого всего построить операционный автомат?Начать нужно с того, что●внимательно посмотреть на все блоки процессора (и памяти),участвующие в пересылке и обработке данных●понять, какие входные/выходные сигналы нужны в этих блоках●разделить эти сигналы на управление и данные●соединить проводами и дополнительными блоками эти сигналы так,чтобы можно было, посылая нужные управляющие сигналы,заставить данные преобразовываться так, как требуется инструкциямиБлоки: регистрin32loadclock32И как это работает?outМожно считать, что так:А как определить, где здесь управление и где данные?Здесь и дальше чёрные стрелки – данные, а синие стрелки – управление(зелёная стрелка – clock – не управление, к ней подводится тактовый генератор)Блоки: набор регистровМожно из регистров соорудить более объёмный блок:rnum1rnum2wnum532rdata15532rdata232clock write wdataШины данных:●rnum1, rnum2 – номера регистров, значения которых используются инструкцией●wnum– номер регистра, в который производится запись по инструкцииБлоки: набор регистровМожно из регистров соорудить более объёмный блок:rnum1rnum2wnum532rdata15532rdata232clock write wdataШины данных:●rdata1, rdata2 – значения, хранящиеся в регистрах с номерами rnum1, rnum2●wdata– значение, которое нужно записать в регистр с номером wnumБлоки: набор регистровМожно из регистров соорудить более объёмный блок:rnum1rnum2wnum532553232clock write wdataСигналы управления:●writerdata1– нужно ли произвести записьА как это устроено внутри?Так же, как дальше будет в рисунке про памятьrdata2Блоки: счётчик команд“Вшивать” ли в него “+4”?Нет: тогда будет проблема с инструкциями ветвленияПроще сделать счётчик команд регистром,а логику изменения его значений реализовать отдельноin32loadclock32outБлоки: памятьВ реальности память имеет довольно нетривиальное устройствоНо так как мы не хотим заниматься ей отдельно,пока что можно её промоделировать как можно более простым блокомНужно определиться, какую функциональность мы хотим от памяти:●уметь читать из себя 32-битовые слова●уметь писать в себя 32-битовые слова●уметь ничего не писать в себяТогда нужны такие сигналы:●input [31:0] addr●output [31:0] odata– двоичная запись смещения,информацию по которому хотим прочитать или записать– сюда непрерывно выдаются данные по смещению raddr●input [31:0] idata– данные, которые мы хотим записать в память●input write– аналог сигнала clock в регистре: по его переднему фронтузаписываем данные idata по смещению addrИ как это разделить на данные и управление?Блоки: памятьidata32writeaddrclock3232А как это реализовать?odataidataНапример, так:А если хотим ещёупростить себежизнь, то можносделать две памяти:●одна – для данных●другая – для инструкцийr0r1...write(в ней нет write и idata, это будет простомультиплексор с кучей “вшитых” констант)мультиплексорodatar??addrБлоки: АЛУin132zerooutin232326opcodeА это как реализовать?Если не гнаться за эффективностью, то, например, вот так:Операционный автоматИ как теперь соединить эти блоки вместе?Это зависит от того, какой набор операций мы хотим, чтобы процессор поддерживалВ любом случае нужно соединить шинами все пары мест,где сигнал с данными генерируется и где он используетсяНапример, если у нас есть только инструкция add:+PC4инструкциирегистрыАЛУ(как именно шины разделяются на подшины, я тут не пишу – додумайте сами)Операционный автоматИ как теперь соединить эти блоки вместе?Это зависит от того, какой набор операций мы хотим, чтобы процессор поддерживалВ любом случае нужно соединить шинами все пары мест,где сигнал с данными генерируется и где он используетсяНемного сложнее, если у нас есть только инструкция lw:+PC4инструкциирегистрырасширитьАЛУданныеОперационный автоматИ как теперь соединить эти блоки вместе?Это зависит от того, какой набор операций мы хотим, чтобы процессор поддерживалВ любом случае нужно соединить шинами все пары мест,где сигнал с данными генерируется и где он используетсяЕщё немного сложнее, если у нас есть только инструкция beq:+PCмультиплексор+4инструкциирегистрырасширитьАЛУсдвинутьОперационный автоматА как быстро и не задумываясь построить операционный автомат длянескольких инструкций, если имеется автомат для каждой отдельно?Если потоки данных не конфликтуют (одинаковые или не пересекаются),то просто рисуем всё, что естьА если конфликтуют, то в точках конфликта можно поставить мультиплексоры,и пусть операционный автомат решает, кого когда выбирать+PCмультиплексор+4инструкциирегистрырасширитьАЛУсдвинутьОперационный автоматНапример, если хочется поддержать одновременно add и lw:+PC4инструкциирегистрыЭто addАЛУданныеОперационный автоматНапример, если хочется поддержать одновременно add и lw:+PC4инструкциирегистрырасширитьЭто lwАЛУданныеОперационный автоматНапример, если хочется поддержать одновременно add и lw:+PC4регистрыинструкцииμданныеАЛУμрасширитьЭто add и lwμ.

Свежие статьи
Популярно сейчас