Ветвления в микро-ЭВМ (Лаб практикум) / Laba70_quartus
.docЛабораторная работа № 7.1
"Ветвления в микро-ЭВМ"
Часть 1 (Просветительная)
В учебном микрокомпьютере (мУК) реализуется естественный порядок следования команд в программе с начального адреса SADR = 2 до конечного адреса моделируемого процесса. Изменение естественного порядка осуществляется с помощью команд ветвления JMP, вызова / возврата к подпрограммам CALL / RET и по команде останова HLT. Ветвления и вызовы могут быть безусловными и условными, зависящими от заданных в алгоритме условий, например, от состояния флажков регистре флагов regFR. мУК Формат этих команд представлен на рисунке: COP – Code Operation, CFL – Code Flags.
Старший байт – Код команды |
Младший байт – Код адреса |
|
Код операции (COP) |
Код условий (CFL) |
Адрес перехода (ADR) |
15 12 11 8 7 0
Кодирование команд ветвления представлено в таблице 1.
№ пп. |
Assembler format |
Comments |
COP |
CFL |
ADR |
1. |
Jmp adr |
Переход по адресу adr безусловный |
0001 |
0000 |
adr |
2. |
Jz adr |
Переход на adr при z=0, иначе продолжить |
0001 |
0001 |
-“- |
3. |
Js adr |
–––-“–––-“––– при s=0, –––“–––-“–––-“––- |
0001 |
0010 |
-“- |
4. |
Jc adr |
–––-“–––-“––– при z=0, –––“–––-“–––-“––- |
|
|
|
5. |
Jo adr |
–––-“–––-“––– при z=0, –––“–––-“–––-“––- |
|
|
|
6. |
Call adr |
Вызов подпрограммы с adr безусловный |
|
|
|
7. |
Cz adr |
–––-“––– с adr при z=0, –––-“–––-“–––-“–– |
|
|
|
8. |
Cs adr |
–––-“–––-“–––- при z=0, –––“–––-“–––-“–– |
|
|
|
9. |
Cc adr |
–––-“–––-“ ––- при z=0, –––-“–––-“–––-“–– |
|
|
|
10. |
Co adr |
–––-“–––-“ ––- при z=0, –––-“–––-“–––-“–– |
|
|
|
11. |
Ret adr |
Возврат из подпрограммы безусловный |
|
|
|
12. |
Rz adr |
–––-“–––-“ ––- при z=0, –––-“–––-“–––-“–– |
|
|
|
13. |
Rs adr |
–––-“–––-“ ––- при z=0, –––-“–––-“–––-“–– |
|
|
|
14. |
Rc adr |
–––-“–––-“ ––- при z=0, –––-“–––-“–––-“–– |
|
|
|
15. |
Ro adr |
–––-“–––-“ ––- при z=0, –––-“–––-“–––-“–– |
|
|
|
Рассмотрим аппаратную реализацию команды безусловного перехода jmp adr с кодом команды 10h; здесь COP=01, CFL=00. Состояние мУК после фазы выборки команды jmp adr следующее.
В регистре кода операции команды IR уже сохранён COP=01 и в регистре адреса операнда AR находится второй байт команды ADR=CFL=00. В регистре указателе команд IP содержится адрес этого второго байта команды. Далее должна следовать фаза выполнения jmp-команды faexjmp (подобно фазе выполнения snd-команды faexesnd).
Все exe-фазы всех команд начинаются с момента времени Dca8 (см. Unidrive. bdf).
Из модуля faexjmp необходимо управлять следующими действиями:
α) Передать содержимое регистра AR (равное полю ADR команды) в регистр IP;
β) Продолжить выполнение программы с нового адреса
Для выполнения α) и β) действий в модуле faexjmp необходимо выработать следующие селектирующие и стробирующие сигналы:
-
Меандр selJadr, разрешающий ввод содержимого регистра AR со входа Jadr[7..0] в регистр IP;
-
Строб takJMP, предназначенный для записи в регистр IP данных со входа Jadr[7..0].
Происходит это с использованием схемы faexjmp.bdf:
Передача данных из регистра AR в регистр IP производится через входные пины Jadr[7..0] блока blkregIP по шине AR[7..0], что отмечена на фрагменте схемы мУК красным цветом.
Внутри блока blkregIP проход данных контролируется мультиплексором muxSADR
Мультиплексор muxSADR(MUX2X8.DOC) селектирует выборку адреса сигналом selSadr: если selSadr = 1 на выход мультиплексора Y выдаётся значение со входа А: Y [7..0] = A[7..0]=Sadr[7..0]; если selSadr=0, на выход поступает значение со входа В: Y [7..0] = В[7..0]=Jadr[7..0].
Эти адреса: Sadr[7..0] или Jadr[7..0] поступают на вход DIN[7..0] модуля автоинкрементирующегося регистра inc_regIP(inc_reg.doc) и записываются в регистр IP по стробу clkn = (Ipclkn v (! takSadr)). При отсутствии внешних адресов Sadr[7..0], Jadr[7..], когда (selSadr & selJadr) = 0, в регистр IP записывается по стробу IPclkn содержимое регистра IP увеличенное на +1.
Часть 1 (Исполнительная)
Cледует собрать и отладить схему notejmp.bdf(см. notejmp.doc), поддерживающую выполнение команд JMP adr в соответствии с рекомендациями части 1.
ЗАМЕЧАНИЕ. Обновлённый мУК notejmp.bdf программно совместим с notesnd.bdf снизу-вверх и поддерживает выполнение команды snd ADR, что легко проверяется на стенде через notejmp.vwf = notesndt.vwf на СОС - звуках.
Проверка работы команд jmp adr производится визуально.
Для озвучивания создаётся программа работы мУК’а в файле rom_jmp.mif. Этот файл легко получить путём редактирования файла rom_sos.mif, как показано в файле rom_howj.txt.
Места JMP’ov в СОС-последовательности показаны на рисунке:
________________________________
_______ | Всего 25 us |
Jmp/ 0F \ |_______________________ ___|
Д_Д_↑ Д _ К↓К К__Д_ Д__Д______ ==> Д Д К К Д Д Д К К
| ↑ ↓ ↓
2 6 8 a c e 10 12 16 1a 1e 22 26
3 7 9 b d f 11 13 17 1b 1f 23 27 Двухджамповая последовательность.
\_______________________Jmp 0D приведена на следующей странице
Изготовленный файл rom_jmp.txt сохраняем в рабочей директории проекта, как rom_jmp.mif. Именно его следует использовать для инициализации РОМ-ЗУ при звуковом моделировании.
Напоминание. РОМ/РАМ-ЗУ перезагружается новым или измененным mif-файлом после перекомпиляции блока памяти, инициализируемого этим файлом.
Проверить работу команды jmp ADR можно визуально с помощью двух сигналов: selnJMP и IP]7..0], вводимых в схему notejmp.bdf. Назовём новую схему для джампов notejmpt.bdf. Символ notejmpt.bdf = notejmp.bdf + pinout( IP]7..0], selJADR ).
Симуляторные воздействия для notejmpt формируются в файле notejmpt.vwf = notesndt.vwf + pin_out(IP[7..0] + selJadr). Здесь хорошо видеть и проверять адресные переходы: 08-09/0F/ 10-11 при T= 4.72 us и 26-27/0D/ 0E-0F.при T= 20.14 us.
Импульсно-меандровая разборка для vwf-портретов выполнения команд безусловного перехода jmp adr приводится в Деталях JUMP’a.
Времяграмма двух джампов из примера инициализации памяти rom_jmpt.mif (ДДКК ДДД КК)
Часть 1 (Приёмо-сдаточная)
По первой части работы реализовать ДДК-последовательность в соответствии с нижеследующей таблицей вариантов, расположив по нужным адресам команды JMP. Пример расположения нужных JMP’ов для последовательности ДДКК ДДД КК приведен на рисунке в предыдущей части данной работы.
При реализации переходов обратите внимание на указание адреса перехода:
Поскольку далее после faexjmp будет следовать инкремент указателя IP, адрес перехода в командах перехода должен быть уменьшен на 1 и равен (adr – 1). Эта операция выполняется программистом или ассемблером автоматически.
ВАРИАНТЫ ЗАДАНИЙ К ЛАБОРАТОРНОЙ РАБОТЕ № 7
№ вар. |
Resclk |
Puskclk |
Clkin |
Cnt4dca |
Favybrx |
Вариант последовательности |
1 |
DFF |
TTFE |
Nandltch |
7468 + 74137 |
Enadff |
Д ККК ККК КК |
2 |
DFFE |
TTF |
Norltch |
7469 + 74138 |
T470 |
ККК ДДД ККК |
3 |
LATCH |
SRFE |
Enadff |
7490 + 74139 |
7471 |
ККК ДДД ДДД |
4 |
JKFF |
SRF |
7470 |
7492 + 74154 |
7472 |
ДДД ККК ККК |
5 |
JKFE |
JKFE |
7471 |
74160 + 74155 |
7473 |
ДДД ККК ДДД |
6 |
SRF |
JKF |
7472 |
74168 + 74156 |
7474 |
ДДД ДДД ККК |
7 |
SRFE |
LATCH |
7473 |
74169 + 7493 |
7476 |
ДДД ДДД ДДД |
8 |
TTF |
DFFE |
7474 |
74196 + 16mux |
7478 |
ККК ККК ККК |
9 |
TTFE |
DFF |
7475 |
741196+16ndmux |
74107 |
ДД ККК ККК К |