Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
Національний університет “Львівська політехніка”
Інститут екології, природоохоронної діяльності та туризму
ім. В’ячеслава Чорновола
КАФЕДРА ЗАГАЛЬНОЇ ЕКОЛОГІЇ
ТА ЕКОІНФОРМАЦІЙНИХ СИСТЕМ
Розрахункова робота
з дисципліни
Автоматизація проектування
комп’ютерних систем
Мета розрахункової роботи: здобути навики аналізу HDL-описів обчислювальних вузлів для подальшого їх використанням при проектуванні комп’ютерних систем.
HDL реалізація АЛП має наступний вигляд:
-- File: ALU.vhd
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_arith.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY ALU IS
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 ALU;
ARCHITECTURE behavioral OF ALU IS
-- Constants responding ALU operations
CONSTANT NOP_OP: std_logic_vector (2 DOWNTO 0):= "000";
CONSTANT LOAD_OP: std_logic_vector (2 DOWNTO 0):= "001";
CONSTANT ADD_OP: std_logic_vector (2 DOWNTO 0):= "010";
CONSTANT XOR_OP: std_logic_vector (2 DOWNTO 0):= "011";
CONSTANT AND_OP: std_logic_vector (2 DOWNTO 0):= "100";
CONSTANT SET_C_OP: std_logic_vector (2 DOWNTO 0):= "101";
CONSTANT CLR_C_OP: std_logic_vector (2 DOWNTO 0):= "110";
BEGIN
PROCESS (curr_acc, curr_b, curr_carry, curr_zero, alu_op)
VARIABLE sum : std_logic_vector (4 DOWNTO 0);
BEGIN
CASE alu_op IS
WHEN NOP_OP =>
next_acc <= curr_acc;
next_carry <= curr_carry;
next_zero <= curr_zero;
WHEN XOR_OP=>
next_acc <= curr_acc XOR curr_b;
next_carry <= curr_carry;
next_zero <= curr_zero;
WHEN ADD_OP =>
sum := ('0'& curr_acc)+('0' & curr_b)+("0000" & curr_carry);
next_acc <= sum (3 DOWNTO 0);
next_carry <= sum (4);
next_zero <= curr_zero;
WHEN LOAD_OP =>
next_acc <= curr_b;
next_carry <= curr_carry;
next_zero <= curr_zero;
WHEN AND_OP =>
next_acc <= curr_acc;
next_carry <= curr_carry;
next_zero <= NOT((curr_acc(3) AND curr_b(3))
OR (curr_acc(2) AND curr_b(2))
OR (curr_acc(1) AND curr_b(1))
OR (curr_acc(0) AND curr_b(0)));
WHEN SET_C_OP =>
next_acc <= curr_acc;
next_carry <= '1';
next_zero <= curr_zero;
WHEN CLR_C_OP =>
next_acc <= curr_acc;
next_carry <= '0';
next_zero <= curr_zero;
WHEN OTHERS =>
next_acc <= curr_acc;
next_carry <= curr_carry;
next_zero <= curr_zero;
END CASE;
END PROCESS;
END behavioral;
Завдання на розрахункову роботу:
Доповнити наведений код коментарями що пояснюють його роботу
Пояснити роботу АЛП при наступних вхідних сигналах
alu_op – порядковий номер студента в групі (1 до 6, далі по колу, 7=1)
curr_acc – рівне кількості літер в імені студента (1 до 15, далі по колу, 16=1)
curr_b – рівне кількості літер в прізвищі студента (1 до 15, далі по колу, 16=1)
curr_carry – «1», якщо кількість літер в імені студента парна, інакше «0»
curr_ zero – «1», якщо кількість літер в прізвищі студента парна, інакше «0»
Пояснити роботу АЛП при тих же вхідних сигналах, що і в п.2, але значення alu_op збільшити на 3.
Виконання завданння
Студент Миколів Василь, № в журналі 14.
alu_op =001 (2)
curr_acc = 0110 (6 літери)
curr_b = 0111 (7 літер)
curr_carry – 1 (парна кількість)
curr_ zero – 1 (парна кількість)
Основу АЛП складає процес PROCESS зі списком чутливості (curr_acc, curr_b, curr_carry, curr_zero, alu_op)
Процес виконується при зміні будь-якого з сигналів із списку чутливості.
Оголошена Змінна
VARIABLE sum : std_logic_vector (4 DOWNTO 0);
Типу масив з 4 однорозрядних елементів (4 біти).
Оператор вибору CASE аналізує значення вхідного сигналу alu_op. В нашому випадку
alu_op = "001"; або
alu_op = LOAD_OP (задана константою для покращення читабельності).
Тому буде вибрано блок операторів
WHEN LOAD_OP =>
next_acc <=’0111’;
-- присвоїти сигналу next_acc значення вхідного сигналу curr_b;
-- в результаті виконання операції вмістиме акумулятора зміниться і буде рівне «0111»
next_carry <= curr_carry ;
-- присвоїти сигналу next_carry значення вхідного сигналу curr_carry;
-- в результаті виконання операції ознака переносу не зміниться і буде рівною «1»
next_zero <= curr_ zero;
-- присвоїти сигналу next_ zero значення вхідного сигналу curr_ zero;
-- в результаті виконання операції ознака нульового результату не зміниться і буде рівна «1»
Висновок: Команда АЛП LOAD_OP в акумулятор поміщає значення з входу curr_b, ознаки переносу при цьому не змінюються.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!