ЛР6 > Модернизация процессорного устройства

Содержание: Доработка процессорного модуля, созданного на предидущей работе. Расширение сиcтемы команд, подключение внешнего модуля памяти команд и других переферийных устройств

Теоретические сведения

    Целью данной лабораторной работы является доработка простого процессорного модуля, разработанного в лабораторной работе № 5. В данной работе мы избавимся от внешнего счетчика и расширим систему команд процессорного модуля (смотри таблицу 1).

Таблица 1. Расширение системы команд процессорного модуля

Команда ld (load) позволяет загрузить в регистр RX данные из ячейки памяти, адрес которой указан в регистре RY. Команда st (store) позволяет сохранить данные из регистра RX в ячейке памяти, адрес которой указан в регистре RY. Заключительная команда mvnz (move if not zero) – выполнение команды mv при соответствующем условии. Таким условием является неравенство 0 содержимого регистра G.

Структурная схема процессорного модуля показана на рисунке 2.

Рисунок 2. Структурная схема процессорного модуля

Как и в предыдущем варианте, регистры R0 – R6 выполняют функцию регистров общего назначения, а регистр R7 теперь выполняет функцию счетчика. Этот счетчик используется для формирования адреса ячейки памяти, по которому считывается очередная команда (в предыдущем задании для этой цели использовался внешний счетчик). В данном случае, регистр R7 выполняет функцию процессорного счетчика команд (program counter, PC). После установки процессора в исходное состояние (системный сброс) в РС записывается нулевой адрес. В начале выполнения каждой команды (в нулевом такте) содержимое РС используется как адрес для чтения очередной команды из блока памяти. Команда записывается в регистр IR, а значение РС увеличивается, указывая на адрес следующей команды (в случае выполнения команды mvi счетчик команд будет указывать на адрес хранения непосредственной константы, а после ее чтения – на адрес следующей команды). Для увеличения значения РС используется сигнал incr_pc, выполняющий функцию разрешения счета. В данном процессорном модуле имеется возможность непосредственной загрузки значения в счетчик команд с помощью инструкций mv или mvi (обращение к нему осуществляется как к регистру R7). В этом случае используется сигнал R7in для параллельной загрузки данных в этот регистр. Поэтому, процессорный модуль может переходить к выполнению команды, записанной в любой ячейке памяти. Естественно, содержимое счетчика команд можно сохранять в любом другом регистре с помощью команды mv. На рисунке 3 показан пример программы, в котором РС используется для организации цикла (знак % указывает на комментарии).

Рисунок 3. Пример программы на языке ассемблер

В данном примере команда mv R5,R7 записывает в РС адрес ячейки памяти, в которой располагается команда sub R4,R2. Команда mvnz R7,R5 заставляет исполнять команду sub до тех пор, пока содержимое регистра R4 не станет равно 0. Часто такие программы используются для формирования временных задержек.

Как показано на рисунке 2, в данном процессорном модуле присутствуют еще два дополнительных регистра. Регистр ADDR используется для хранения адреса обращения к внешнему устройству (например, блоку памяти). Регистр DOUT используется для хранения данных, которые процессор передает во внешнее устройство. Один из примеров использования регистра ADDR – хранение адреса ячейки памяти, к которой обращается процессор для чтения очередной команды. В этом случае, содержимое РС передается по шине Bus, и записывается в регистр ADDR, с которого затем поступает на блок памяти. С помощью этого же регистра процессор может считывать данные из любой ячейки памяти. И данные, и команды поступают на входную шину DIN процессора. Процессор имеет возможность сохранять данные во внешней ячейке памяти. Для этого, в регистр ADDR записывается адрес этой ячейки, в регистр DOUT – сохраняемые данные, и устанавливается в состояние логической «1» триггер W (write), разрешающий запись.

На рисунке 4 показан способ подключения данного процессорного модуля к блоку памяти и другим внешним устройствам. Изображенный на рисунке блок памяти поддерживает операции чтения и записи, имеет входные шины адреса и данных и входной сигнал разрешения записи (wr_en). Дополнительно, на блок памяти поступает сигнал тактовой частоты Clock, синхронизирующий входные сигналы addr, data и wr_en. Такой тип памяти носит название синхронное ОЗУ (synchronous RAM). На рисунке 4 изображен еще дополнительный внешний 16-разрядный регистр, который может быть подключен к внешним светодиодам LEDs. Для того, чтобы процессорный модуль мог обращаться и к блоку памяти, и к внешнему регистру, на схеме присутствуют ряд дополнительных логических элементов, выполняющих функцию дешифратора адреса.

Рисунок 4. Подключение процессорного модуля к блоку памяти

Если старшие разряды шины адреса А15А14А13А12 = 0000, процессор обращается к блоку памяти (используются n младших разрядов шины адреса). Если старшие разряды шины адреса А15А14А13А12 = 0001, тогда процессор обращается к внешнему регистру.

Задание 1

1. Создайте проект, реализующий модернизированное процессорное устройство. В качестве используемой микросхемы укажите EP2C35F672C6 семейства Cyclone II.

2. Проверьте работоспособность устройства с помощью моделирующей программы (функциональное моделирование).

3. Для реализации блока памяти используйте мегафункцию RAM: 1-PORT (папка Memory Compiler). Укажите в настройках, что данный блок памяти содержит 128 16-разрядных слов. Для инициализации блока памяти создайте файл inst_mem.mif.

4. Проверьте работоспособность проекта с помощью отладочного модуля DE2. Для подачи сигнала Run используйте переключатель SW17, для подачи сигнала Resetn – кнопку KEY0, для подачи сигнала Clock – внешний кварцевый генератор 50МГц. Подключите внешний регистр, показанный на рисунке 4, к светодиодам LEDR15 – LEDR0.

Задание 2

1. Добавьте к процессорному блоку дополнительное внешнее устройство – seg7_scroll. Устройство должно содержать регистры, непосредственно подключенные к семисегментным индикаторам модуля DE2.

2. Доработайте программу процессора (файл MIF) – процессор должен выводить надписи на семисегментные индикаторы.

3. Проверьте работоспособность проекта с помощью отладочного модуля DE2.

Задание 3

1. Добавьте к процессорному блоку дополнительное внешнее устройство – port_n. Устройство должно содержать регистры, непосредственно подключенные к переключателям SW модуля DE2.

2. Доработайте программу процессора (файл MIF) – процессор должен считывать состояние переключателей с помощью команды ld.

3. Проверьте работоспособность проекта с помощью отладочного модуля DE2.

Задание для самостоятельной работы

    Доработайте систему команд процессорного модуля – введите логические операторы (например – AND, OR и т.д.), команды сдвига, команды перехода. Проверьте работоспособность проекта с помощью моделирующей программы.