Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Звіт
з лабораторної роботи № 6
з дисципліни: “Проектування вбудованих комп’ютерних систем”
На тему: «Проектування та дослідження регістрових файлів вбудованих систем»
Львів 2014
«Проектування та дослідження регістрових файлів вбудованих систем»
Метою роботи є Проектування і перевірка роботи регістрового файлу з заданою викладачем конфігурацією.
Регістровий файл повинен мати 2 виходи QA та QB обидва з трьома станами. Розрядність кожного з виходів повинна збігатися з заданою розрядністю регістрів.
Регістровий файл повинен мати вхід даних DI. Розрядність входe повинна збігатися з заданою розрядністю регістрів.
Регістровий файл повинен мати 3 адресні входи:
aa – адреса регістра, з якого будуть читатися дані на вихід QA,
ab – адреса регістра, з якого будуть читатися дані на вихід QB,
aw – адреса регістра, до якого буде здійснюватися запис даних з входу DI.
Регістровий файл повинен мати 3 входи дозволу:
en_a – дозвіл видачі даних на вихід QA (при відсутності сигналу en_a вихід QA повинен бути в третьому стані),
en_b – дозвіл видачі даних на вихід QB (при відсутності сигналу en_b вихід QB повинен бути в третьому стані),
en_w – дозвіл запису з входу DI.
Регістровий файл повинен мати входи синхрімпульсів CLK та асинхронного скиду CLR.
Регістровий файл повинен забезпечувати одночасні запис та читання на обидва виходи з будь-якого регістра.
Таблиця параметрів регістрового файлу, які використовуються в різних варіантах лабораторної роботи, наведена нижче.
Варіанти роботи
Кількість регістрів у файлі
Розрядність кожного з регістрів, біт
4
8
12
16
20
24
28
32
4
1
2
3
4
5
6
7
8
8
9
10
11
12
13
14
21
22
16
15
16
17
18
23
24
25
26
32
19
20
27
28
29
30
31
32
Хід роботи.
Запускаю програму:
/.
Створюю новий проект.
Задаю йому своє ім’я GRS_lab6.
Відкриваю новий аркуш графічного редактора.
За допомогою генератора ядер генерую регістр заданої розрядності, що спрацьовує по фронту, задаю йому своє ім’я:
/
За допомогою генератора ядер генерую вихідний буфер із трйома станами заданої розрядності, задаю йому своє ім’я:
/
За допомогою генератора ядер генерую дешифратор з кількістю виходів, яка відповідає кількості регістрів у регістровому файлі, задаю йому своє ім’я:
/
Проводжу компіляцію створених ядер,
розміщую символи ядер регістра та буфера на аркуші,
під’єднюю вхідні та вихідні сигнали та контакти,
задаю їм імена (розрядність шин повинна збігатися з розрядністю регістра і буферів),
/
відкомпільовую файл із схемою,
зберігаю створену схему ( Gl_RgBuf):
Відкриваю новий аркуш графічного редактора.
Для візуальної перевірки розміщую на ньому символ дешифратора та щойно утворений символ регістра з двома виходами, з яких буде складатися регістровий файл.
/
Згенеровую VHDL-опис регістрового файлу користуючись конструкцією Generate мови VHDL.
Відкриваю заготовку VHDL-опису:
/
Додаю опис до проекту:
/
Задаю ім’я опису:
/
Вхідні та вихідні контакти (порти) не задавати:
/
У створеній заготовці описуюю внутрішню схему регістрового файла з необхідною кількістю регістрів.
------------------------------------------------Опис бібліотеки
library IEEE;
use IEEE.STD_LOGIC_1164.all;
library GRS_Lab6;
------------------------------------------Опис регістрового вайлу як одного цілого та його контактів
entity GRS_RgBuf_8x4 is
port(
GRS_clk : in STD_LOGIC;
GRS_clr : in STD_LOGIC;
GRS_en_a : in STD_LOGIC;
GRS_en_b : in STD_LOGIC;
GRS_en_w : in STD_LOGIC;
GRS_aa : in STD_LOGIC_VECTOR(2 downto 0);
GRS_ab : in STD_LOGIC_VECTOR(2 downto 0);
GRS_aw : in STD_LOGIC_VECTOR(2 downto 0);
GRS_data : in STD_LOGIC_VECTOR(3 downto 0);
GRS_qa : out STD_LOGIC_VECTOR(3 downto 0);
GRS_qb : out STD_LOGIC_VECTOR(3 downto 0)
);
end GRS_RgBuf_8x4;
------------------------------------------------------- Опис архітектури та її складових частин
architecture GRS_RgBuf_8x4 of GRS_RgBuf_8x4 is
------------------------------------------------------- Опис компонентів, які є в складі регістрового файлу
component GRS_DC3to8
port (
I : in STD_LOGIC;
S : in STD_LOGIC_VECTOR(2 downto 0);
O : out STD_LOGIC_VECTOR(7 downto 0)
);
end component;
component GRS_RgBuf
port (
GRS_clk : in STD_LOGIC;
GRS_clr : in STD_LOGIC;
GRS_data : in STD_LOGIC_VECTOR(3 downto 0);
GRS_ena : in STD_LOGIC;
GRS_enb : in STD_LOGIC;
GRS_load : in STD_LOGIC;
GRS_qa : out STD_LOGIC_VECTOR(3 downto 0);
GRS_qb : out STD_LOGIC_VECTOR(3 downto 0)
);
end component;
-------------------------------------------------------------- Опис внутрішніх звязків (сигналів)
signal GRS_ena : STD_LOGIC_VECTOR (7 downto 0);
signal GRS_enb : STD_LOGIC_VECTOR (7 downto 0);
signal GRS_enw : STD_LOGIC_VECTOR (7 downto 0);
------------------------------------------------------------- Початок опису архітектури
begin
------------------------------------------------------------- Опис 3-ч дешифраторів
U1 : GRS_DC3to8
port map(
I => GRS_en_a,
O => GRS_ena,
S => GRS_aa
);
U2 : GRS_DC3to8
port map(
I => GRS_en_b,
O => GRS_enb,
S => GRS_ab
);
U3 : GRS_DC3to8
port map(
I => GRS_en_w,
O => GRS_enw,
S => GRS_aw
);
------------------------------ Опис генератора необхідної кількості регістрів з буферами та їхніх звязків
GRS_1:
for i in 0 to 7 generate
rgf : GRS_RgBuf
port map(
GRS_clk => GRS_clk,
GRS_clr => GRS_clr,
GRS_data => GRS_data,
GRS_ena => GRS_ena(i),
GRS_enb => GRS_enb(i),
GRS_load => GRS_enw(i),
GRS_qa => GRS_qa,
GRS_qb => GRS_qb
);
end generate;
----------------------------------------------- Закінчення опису
end GRS_RgBuf_8x4;
Відкомпільовую опис схеми.
Відкриваю новий аркуш графічного редактора.
розміщую символ регістрового файла на аркуші,
під’єднюю вхідні та вихідні сигнали та контакти,
датю їм імена,
відкомпільовую файл із схемою,
зберігаю створену схему:
/
Встановлюю схему як схему найвищого рівня (яка буде моделюватися),
Переходжу до режима моделювання.
Створюю командний файл 6.do для моделювання такої послідовності:
1 цикл запису або читання триває 10 нс,
послідовно занести довільну інформацію до останніх 4-х регістрів файлу,
через 4 цикли синхроімпульсів після закінчення останнього запису прочитати вміст 4-х останніх регістрів регістрового файлу, на вихід QA послідовно прочитати вміст регістрів з парними номерами, одночасно на вихід QB послідовно прочитати вміст регістрів з непарними номерами.
На екран, як окремі сигнали, вивести внутришні виходи 4-х останніх регістрів,
/
#------------------------------------------------begin----------------------------------
VIEW wave
restart
wave GRS_clk GRS_clr GRS_en_a GRS_en_b GRS_en_w GRS_aa GRS_ab GRS_aw GRS_data GRS_qa GRS_qb
wave 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_en_a 0 0 ns, 1 50 ns, 0 70 ns
force GRS_en_b 0 0 ns, 1 50 ns, 0 70 ns
force GRS_en_w 1 0 ns, 0 40 ns
force GRS_aa 16#0 0 ns, 16#4 50 ns, 16#6 60 ns, 16#0 70 ns
force GRS_ab 16#0 0 ns, 16#5 50 ns, 16#7 60 ns 16#0 70 ns
force GRS_aw 16#4 0 ns, 16#5 10 ns, 16#6 20 ns, 16#7 30 ns, 16#0 40 ns
force GRS_data 16#0ab 0 ns, 16#0bc 10 ns, 16#0cd 20 ns, 16#0de 30 ns
run 100 ns
#------------------------------------------------end----------------------------------
Під’єднюю 6.do-файл до проекту.
Проводжу моделювання схеми.
/
Висновки: на цій лабораторній роботі я навчився проектувати і перевіряти роботу регістрових файлів.