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

  1. Створити інтерфейс операційного пристрою з наступними портами:

ENTITY Datapath IS

PORT(clock: IN std_logic;

reset: IN std_logic;

data: INOUT std_logic_vector(7 DOWNTO 0);

address:OUT std_logic_vector(7 DOWNTO 0);

csb: OUT std_logic;

oeb: OUT std_logic;

web: OUT std_logic;

write: IN std_logic;

read: IN std_logic;

inc_pc: IN std_logic;

jump_pc:IN std_logic;

ld_ir: IN std_logic;

sel_dm: IN std_logic;

alu_op: IN std_logic_vector(2 DOWNTO 0);

ld_op: IN std_logic;

data_out:IN std_logic;

Z_st: OUT std_logic;

C_st: OUT std_logic;

IR_data:OUT std_logic_vector(7 DOWNTO 0);

Rg_op: IN std_logic;

write_ixh: IN std_logic;

write_ixl: IN std_logic;

RgWrite: IN std_logic);

END Datapath;

  1. В блоці ARCHITECTURE (до оператора BEGIN) задекларувати наступні сигнали:

SIGNAL IR, next_IR, IX, next_IX :std_logic_vector(7 DOWNTO 0);

SIGNAL ACC, next_ACC, B :std_logic_vector(3 DOWNTO 0);

SIGNAL Z, next_Z, C, next_C :std_logic;

SIGNAL PC, next_PC :std_logic_vector(7 DOWNTO 0);

SIGNAL RgNum, RgIn, RgOut: std_logic_vector(3 DOWNTO 0);

  1. А також використання створених раніше компонентів – АЛП та Блоку регістрів:

-- Use Component ALU----------------------------------

COMPONENT ALU

PORT(curr_acc: IN std_logic_vector(3 DOWNTO 0);

curr_b: IN std_logic_vector(3 DOWNTO 0);

curr_carry: IN std_logic;

curr_zero: IN std_logic;

alu_op: IN std_logic_vector(2 DOWNTO 0);

next_acc: OUT std_logic_vector(3 DOWNTO 0);

next_carry: OUT std_logic;

next_zero: OUT std_logic);

END COMPONENT;

-- Use Component Register File------------------------

COMPONENT Regs16 is

port(clk: in STD_LOGIC;

reset: in STD_LOGIC;

Addr: in STD_LOGIC_VECTOR (3 downto 0);

DataIn: in STD_LOGIC_VECTOR (3 downto 0);

DataOut:out STD_LOGIC_VECTOR (3 downto 0);

write1: in STD_LOGIC);

end COMPONENT;

  1. Після оператора BEGIN реалізуємо елементи операційного пристрою:

-- Мультиплексор M1

address <= IX WHEN sel_dm='1'

ELSE PC;

-- Завантаження інструкції в Регістр IR:

next_IR <= data WHEN ld_ir='1'

ELSE IR;

-- Шинний формувач B1 реалізує вивід даних на шину, або z-стан на виході

data <= "0000" & B WHEN data_out='1'

ELSE "ZZZZZZZZ";

-- Завантаження Регістру PC, Мультиплексор M2, Суматор Sm

next_PC <= IX WHEN jump_pc='1'

ELSE PC+1 WHEN inc_pc='1'

ELSE PC;

-- Мультиплексор M4

RgIn <= data(3 DOWNTO 0) WHEN ld_op='1'

ELSE ACC;

-- Мультиплексор M3

B <= RgOut WHEN Rg_op='1'

ELSE IR (3 DOWNTO 0);

-- Регістр IX

next_IX <= B & IX (3 DOWNTO 0) WHEN write_ixh='1'

ELSE IX (7 DOWNTO 4) & B WHEN write_ixl='1'

ELSE IX;

-- Передача Коду інструкції та прапорців АЛП до пристрою керування

C_st <= C;

Z_st <= Z;

IR_data <= IR;

-- Вибір номера регістру з тіла інструкції

RgNum <= IR (3 DOWNTO 0);

  1. Процес, що реалізує початковий скид регістрів, та оновлення регістрів за тактовим імпульсом:

reg_impl:PROCESS (clock, reset)

BEGIN

IF reset='1' THEN

PC <= "00000000";

IR <= "00000000";

ACC <= "0000";

IX <= "00000000";

C <= '0';

Z <= '0';

ELSIF (clock='1' AND clock'EVENT) THEN

PC <= next_PC;

IR <= next_IR;

ACC <= next_ACC;

IX <= next_Ix;

C <= next_C;

Z <= next_Z;

END IF;

END PROCESS;

  1. Для під єднання компонентів використати оператор PORT MAP:

ALU_Connection: ALU

PORT MAP(curr_acc => ACC,

curr_b => B,

curr_carry => C,

curr_zero => Z,

alu_op => alu_op,

next_acc => next_ACC,

next_carry => next_C,

next_zero => next_Z);

Regs16_Connection: Regs16

PORT MAP(clk => clock,

reset => reset,

Addr => IR(3 DOWNTO 0),

DataIn => RgIn,

write1 => RgWrite,

DataOut => RgOut);

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