Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
APKS_Metodichni_vkazivki_KR_-_2012.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
573.95 Кб
Скачать
  1. Інформаційний тракт процесора Gnome

Інформаційний тракт мікропроцесора, зображений на рис.1, складається з таких компонентів:

Восьмирозрядний мультиплексор M1, керований сигналом sel_data_ram, формує фізичну адресу комірки пам’яті на основі значення регістру PC (при звертанні до пам’яті програм) або регістру IX (при звертанні до пам’яті даних).

Індексний восьмирозрядний регістр IX використовується для зберігання адреси при звертанні до пам’яті даних. Завантаження регістра значенням із одного з РЗП Rg16 відбувається за сигналом write_ix_h (старші чотири розряди) або write_ix_l (чотири молодші розряди).

Семирозрядний РСП PC використовується для зберігання адреси поточної інструкції в пам’яті програм.

Семирозрядний мультиплексор M2, керований сигналом jump_pc, передає на вхід РСП PC значення регістру IX (при виконанні команди переходу)або регістру NPC (при переході до наступної команди).

РСП NPC (сім розрядів) використовується для проміжного зберігання обчисленої адреси наступної інструкції в пам’яті команд.

Суматор Sm+1 за сигналом inc_pc виконує інкремент значення адреси з лічильника команд.

Чотирирозрядний мультиплексор M4, керований сигналом ld_op, формує значення для запису до регістрового файлу Rg16, на основі значення РСП Acc або даних прочитаних із зовнішньої пам’яті даних.

Регістр зберігання поточної інструкції IR (вісім розрядів) за сигналом ld_ir заповнюється значенням із пам’яті програм за адресою PC.

Регістровий файл Rg16 містить 16 чотирирозрядних РЗП. Читання з пристрою відбувається постійно, за адресою IR[3..0]. За сигналом RgWrite дані з виходу мультиплексора M4 записуються за цією ж адресою.

Чотирирозрядний мультиплексор M3, керований сигналом Rg_op, передає на вхід АЛП ALU значення з регістрового файлу Rg16 або безпосередній операнд IR[3..0].

Рис. 1 Структурна схема інформаційного тракту мікропроцесора Gnome.

АЛП ALU - комбінаційний пристрій, керований трирозрядним кодом операції alu_op, може виконувати операції з описаної нижче множини. Пристрій містить РСП Acc (акумулятор, 4 розряди), C (біт ознаки переносу), Z (біт ознаки нульового результату). Результат обчислень зберігається у РСП Acc, вхідними операндами є РСП Acc та вихід мультиплексора M3.

В інформаційному тракті присутні повторювачі, інвертори та інші логічні елементи, які забезпечують формування керуючих сигналів та інформації на шині даних. Ці елементи не відображені на рис. 1.

Зовнішню пам’ять мікропроцесора Gnome поділено на пам’ять даних (128х4 біт) з адресами 80h-FFh та пам’ять програм (128х8 біт) з адресами 00h-7Fh.

  1. Проектування блоку основної пам’яті

Доповнимо package-file константами-мнемоніками кодів команд процесора:

-- File: PG13_package.vhd

-- Constants for Instruction Codes

CONSTANT CLEAR_C: std_logic_vector (7 DOWNTO 0):= "00000000";

CONSTANT SET_C: std_logic_vector (7 DOWNTO 0):= "00000001";

CONSTANT SKIP_C: std_logic_vector (7 DOWNTO 0):= "00000010";

CONSTANT SKIP_Z: std_logic_vector (7 DOWNTO 0):= "00000011";

CONSTANT JMP_IX: std_logic_vector (7 DOWNTO 0):= "00000100";

CONSTANT LDA_IMM: std_logic_vector (3 DOWNTO 0):= "0001";

CONSTANT ADDA_IMM: std_logic_vector (3 DOWNTO 0):= "0010";

CONSTANT STA_RG: std_logic_vector (3 DOWNTO 0):= "0011";

CONSTANT LDA_RG: std_logic_vector (3 DOWNTO 0):= "0100";

CONSTANT ADDA_RG: std_logic_vector (3 DOWNTO 0):= "0101";

CONSTANT XORA_RG: std_logic_vector (3 DOWNTO 0):= "0110";

CONSTANT TESTA_RG: std_logic_vector (3 DOWNTO 0):= "0111";

CONSTANT STORE: std_logic_vector (3 DOWNTO 0):= "1000";

CONSTANT LOAD: std_logic_vector (3 DOWNTO 0):= "1001";

CONSTANT SET_IXH: std_logic_vector (3 DOWNTO 0):= "1010";

CONSTANT SET_IXL: std_logic_vector (3 DOWNTO 0):= "1011";

Створимо HDL-опис блоку пам’яті Memory.vhd, з інтерфейсом:

address: IN std_logic_vector(7 DOWNTO 0);

data: INOUT std_logic_vector(7 DOWNTO 0);

csb: IN std_logic;

oeb: IN std_logic;

web: IN std_logic);

підключимо потрібні ресурси:

LIBRARY IEEE;

USE IEEE.std_logic_1164.ALL;

USE IEEE.std_logic_arith.ALL;

USE IEEE.std_logic_unsigned.ALL;

USE WORK.pg13_package.ALL;

Оголосимо тип даних – масив з 256 комірок, розміром 8 біт кожна:

TYPE MEM256x8 IS ARRAY (0 to 255) OF std_logic_vector (7 DOWNTO 0);

Реалізуємо роботу памяті у вигляді процесу

RAM_and_ROM:PROCESS(address, csb, web, oeb)

В процесі оголосимо наступні змінні:

VARIABLE mem_array: MEM256x8;

VARIABLE sel :std_logic_vector (1 DOWNTO 0);

Для запису тестової програми (описаної в наступному розділі) до пам’яті, ініціалізуємо початкові комірки пам’яті

mem_array(0):="00010100"; -- LDA_IMM "0100" ACC:=4

mem_array(1):="00110001"; -- STA_RG1 RG1:=4

mem_array(2):="10010010"; -- LOAD_RG2 Rg2:=Mem(0)=4

mem_array(3):="00000001"; -- SET_C C:=1

mem_array(4):="00000010"; -- SKIP_C -----------

mem_array(5):="00000100"; -- JUMP IX |

mem_array(6):="00000000"; -- CLR_C C:=0 <----

mem_array(7):="00100001"; -- ADDA IMM "0001" ACC:=4+1=5

mem_array(8):="01110001"; -- TESTA_RG1 Z:=0

mem_array(9):="00000011"; -- SKIP_Z

mem_array(10):="01010011"; -- ADDA_RG3 ACC:=5+0=5

mem_array(11):="01100001"; -- XORA_RG1 ACC:=5 xor 4=1

mem_array(12):="00110011"; -- STA_RG3 RG3:=ACC=1

mem_array(13):="10100011"; -- SET_IXH RG3 IX:=16

mem_array(14):="10110011"; -- SET_IXL RG3 IX:=17

mem_array(15):="10000001"; -- STORE_RG1 Mem(17):=Rg1=4

mem_array(16):="01000001"; -- LDA RG1 ACC:=Rg1:=4

Далі реалізуємо

  • Активування блоку пам’яті сигналом csb (ChipSelectBlock)

  • Читання з пам’яті за заданою адресою при активному сигналі oeb (OutputEnableBlock) та неактивному web (writeEnableBlock).

  • Запис до пам’яті за заданою адресою при активному сигналі web та неактивному oeb

  • Відключення блоку пам’яті від шини даних (Z-стан) при інших значеннях керуючих сигналів csb, oeb, web.

IF csb ='1' THEN data <= "ZZZZZZZZ";

ELSE

sel:= web & oeb;

CASE sel IS

WHEN "01" =>

data <= mem_array(CONV_INTEGER(address));

WHEN "10" =>

mem_array (CONV_INTEGER(address)):= data;

WHEN OTHERS =>

data <="ZZZZZZZZ";

END CASE;

END IF;

Промоделюємо роботу блоку пам’яті за допомогою часової діаграми.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]