Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Звіт
з лабораторної роботи № 7
з дисципліни: “Проектування вбудованих комп’ютерних систем”
На тему: Проектування та дослідження операційних пристроїв вбудованих систем
Львів 2014
«Проектування та дослідження операційних пристроїв вбудованих систем»
Метою роботи є Проектування і перевірка роботи операційного пристрою з заданим викладачем набором характеристик.
Варіант.
09:
2
B
4
1
9
A
C
0
E
3
Хід роботи.
Запускаю програму
/.
Створюю новий проект.
/
Даю йому своє ім’я GRS_lab7.
Відкриваю новий аркуш графічного редактора.
За допомогою генератора ядер згенерувати арифметико-логічний пристрій (АЛП), даю йому своє ім’я:
/
Копіюю до каталога даного проекта і додаю до проекта усі файли регістрового файлу з попередньої лабораторної роботи:
/
Скопіювати до каталога даного проекта і додати до проекта VHDL-описи усіх ядер регістрового файлу, згенерованих у попередній роботі:
/
/
/
Проводжу компіляцію скопійованих схем та описів,
/
Виправляю помилки, які виникають під час компіляції, описів з попередньої лабораторної роботи :
/
Розміщую символи ядер регістрового файлу, буфера та АЛП на схемі,
під’єднюю вхідні та вихідні сигнали та контакти,
даю їм імена.
/
Компілюю файл із схемою:
/
Зберігаю створену схему під імям GRS_sch7.
Встановлюю схему як схему найвищого рівня (яка буде моделюватися):
/
Переходжу до режиму моделювання.
Взяти за основу командний файл з попередньої лабораторної роботи (6.do). Створити командний файл 7.do для моделювання процесу виконання такої задачі:
1 такт синхроімпульсів дорівнює 10 нс;
Подаю на входи Data послідовність з 8 двійкових кодів (K0, K1, … K7), які змінюються кожного такту по задньому фронту синхроімпульсів;
розрядність кодів повинна дорівнювати розрядності АЛУ, зменшеній на 4;
коди чисел утворюються з послідовності тетрад, яка відповідає варіанту роботи;
/
VIEW wave
restart
wave GRS_clk GRS_clr GRS_en_a GRS_en_b GRS_en_w GRS_en_i GRS_aa GRS_ab GRS_aw GRS_data GRS_ci GRS_m GRS_s GRS_co GRS_ov GRS_a GRS_b
wave U1/GRS_1__0/rgf/U1/Q U1/GRS_1__1/rgf/U1/Q U1/GRS_1__2/rgf/U1/Q U1/GRS_1__3/rgf/U1/Q U1/GRS_1__4/rgf/U1/Q U1/GRS_1__5/rgf/U1/Q U1/GRS_1__6/rgf/U1/Q U1/GRS_1__7/rgf/U1/Q
force -r 10 ns GRS_clk 0 0 ns, 1 5 ns
force GRS_clr 1 0 ns, 0 2 ns
force GRS_m 1 0 ns, 0 10 ns, 1 20ns, 0 30ns, 1 40ns, 1 50ns, 0 60ns, 1 70ns, 1 80ns, 0 90ns, 1 100ns,
force GRS_ci 0 0 ns,
force GRS_s 110 0ns, 000 10ns, 110 20ns, 000 30ns, 000 40ns, 110 50ns, 000 60ns, 000 70ns, 110 80ns, 000 90ns, 000 100ns,
force GRS_en_i 1 0 ns, 0 40ns, 1 50ns, 0 70ns, 1 80ns, 0 100ns
force GRS_en_a 0 0 ns, 1 40ns, 0 50ns, 1 70ns, 0 80ns, 1 100ns,
force GRS_en_b 0 0 ns, 1 10ns, 0 20ns, 1 30ns, 1 40ns, 0 50ns, 1 60ns, 1 70ns, 0 80ns, 1 90ns,
force GRS_en_w 1 0 ns, 0 110ns,
force GRS_aa 16#0 0 ns, 16#2 40ns, 16#4 70ns, 16#5 100ns,
force GRS_ab 16#0 0 ns, 16#1 10ns, 16#1 30ns, 16#3 40ns, 16#1 60ns, 16#7 70ns, 16#1 90ns, 16#7 100ns,
force GRS_aw 16#1 0 ns, 16#2 10ns, 16#1 20ns, 16#3 30ns, 16#7 40ns, 16#1 50ns, 16#4 60ns, 16#7 70ns, 16#1 80ns, 16#5 90ns, 16#7 100ns,
force GRS_data 16#2 0 ns, 16#B 10 ns, 16#4 20 ns, 16#1 30 ns, 16#9 50 ns, 16#A 60 ns, 16#C 80 ns, 16#0 90 ns
run 120 ns
Під’єднюю GRS_7.do-файл до проекту.
Проводжу моделювання схеми:
Промодельовую створену схему:
/
/
Опис Alu.
library IEEE;
use IEEE.std_logic_1164.all;
entity GRS_ALU is
port
(
A : in std_logic_vector(3 downto 0);
B : in std_logic_vector(3 downto 0);
S : in std_logic_vector(2 downto 0);
CI : in std_logic;
M : in std_logic;
CO : out std_logic;
OV : out std_logic;
Q : out std_logic_vector(3 downto 0)
);
end entity;
library IEEE;
use IEEE.std_logic_unsigned.all;
architecture alu_arch of GRS_ALU is
signal LOGIC_RESULT : std_logic_vector(3 downto 0);
signal ARITH_RESULT : std_logic_vector(3 downto 0);
signal CO_OUT: std_logic;
signal OV_OUT: std_logic;
constant ADD_M : std_logic_vector(2 downto 0) :="000";
constant LOAD_A : std_logic_vector(2 downto 0) :="110";
constant AND_S : std_logic_vector(2 downto 0) :="000";
begin
process (A, B, S)
begin
case S is
when AND_S => LOGIC_RESULT <= A and B;
when others => NULL;
end case;
end process;
process (A, B, CI, S)
variable C_TEMP : std_logic;
variable CO_TEMP : std_logic;
variable A_TEMP : std_logic_vector(3 downto 0);
variable B_TEMP : std_logic_vector(3 downto 0);
variable TEMP_R : std_logic_vector(3 downto 0);
begin
A_TEMP := (others => '0');
B_TEMP := (others => '0');
TEMP_R := (others => '0');
CO_TEMP := '0';
case S is
when ADD_M =>
A_TEMP := ('0' & A(2 downto 0));
B_TEMP := ('0' & B(2 downto 0));
TEMP_R := A_TEMP + B_TEMP + CI;
CO_TEMP := (A(3) and B(3)) or (TEMP_R(3) and (A(3) or B(3)));
when LOAD_A =>
A_TEMP := ('0' & A(2 downto 0));
B_TEMP := (others => '0');
TEMP_R := A_TEMP ;
CO_TEMP := TEMP_R(3) and A(3);
when others => NULL;
end case;
case S is
when ADD_M=>
C_TEMP:=A(3) xor B(3);
when others =>
C_TEMP:=A(3);
end case;
ARITH_RESULT <= (C_TEMP xor TEMP_R(3)) & TEMP_R(2 downto 0);
CO_OUT <= CO_TEMP;
OV_OUT <= CO_TEMP xor TEMP_R(3);
end process;
CO <= CO_OUT when M = '1' else '0';
OV <= OV_OUT when M = '1' else '0';
Q <= ARITH_RESULT when M = '1' else LOGIC_RESULT;
end architecture;
Висновки: на цій лабораторній роботі я навчився проектувати і перевіряти роботу операційного пристрою з заданим викладачем набором характеристик.