МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІНСТИТУТ КОМП’ЮТЕРНИХ ТЕХНОЛОГІЙ, АВТОМАТИКИ ТА МЕТРОЛОГІЇ
/
ЛАБОРАТОРНА РОБОТА №6
З ПРЕДМЕТУ «Моделювання комп’ютерних систем»
На тему: «Проектування постійного запам'ятовуючого пристрою»
Мета роботи: Вивчити принципи роботи постійного запам'ятовуючого пристрою (ПЗП). Отримати навички застосування масивів при створенні проектів у Active-HDL.
Теоретична частина
В VHDL масив інтерпретується як тип, значення якого складається з ряду елементів єдиного підтипу. Кожен елемент масиву відрізняється своїм індексом або рядом індексів (в багатовимірних масивах). Індекс масиву повинен мати порядковий тип і знаходитись в області допустимих значень. Таким чином, перш ніж застосовувати масив у VHDL, необхідно задекларувати тип масиву, а потім задекларувати масив як об'єкт:
type array_type_name is array index_range of element_type;
variable array_name: array_type_name [:= initial_values];
Приклад одновимірного масиву:
type A is array (5 downto 0) of bit;
variable B : A := "011001";
Для багатовимірного масиву порядок і структура оголошення масиву залишаються така ж сама, наприклад
type A is array (1 to 3, 1 to 2) of integer;
variable B : A := ((0 , 1),(5 , 2),(7, 8));
У наведених прикладах замість ключового слова variable може стояти signal або constant.
При декларуванні типу масиву дозволяється не визначати його розмірність. Такі типи масивів називаються необмеженими. В цьому випадку розмірність вказується при декларуванні масиву, як об'єкта:
type arr_type is array (index_type range <>) of elements_type;
variable arr_name: arr_type (index_range) [:= initial_val];
де index_type - тип індексів масиву (integer, natural, і т.п.).
Багатовимірні необмежені масиви і їх типи оголошуються аналогічно. Наприклад:
type multy is array (integer range <>, bit range <>, ... , boolean range <>) of elements_type;
Постановка задачі
Запам'ятовуючі пристрої (ЗП) цифрової техніки призначені для запису, зберігання та видачі інформації, що представляється у вигляді цифрового коду. При цьому є і така інформація, яка не повинна змінюватись, наприклад, константи, табличні значення, коефіцієнти перетворень і т.ін. Така інформація записується у постійний запам'ятовуючий пристрій, для якого дозволяється тільки зчитування інформації, яка в нього занесена.
В ПЗП за кожною n-розрядною адресою записане одне завчасно визначене m-вимірне слово. Таким чином, ПЗП є перетворювачем коду адреси в код слова, тобто комбінаційною схемою з n входами та m виходами.
Накопичувач ПЗП апаратно виконується у вигляді системи взаємно-перпендикулярних шин, на перетині яких або присутній (логічна 1), або відсутній (логічний 0) елемент, що пов'язує між собою відповідні горизонтальну та вертикальну шини. Вибірка слів виконується за допомогою дешифратора.
/
Порядок виконання роботи:
Створити новий проект в Active-HDL.
Описати інтерфейс ПЗП, що має наступні порти:
вхідний 4-розрядний порт адреси ПЗП Addr типуstd_logic_vector,
вхідний порт дозволо зчитування ПЗП CEO типуstd_logic:
вихідний 4-розрядний порт даних Dout типуstd_logic_vector.
/
/
/
Визначити тип масиву даних, які будуть зберігатись в ПЗП.
Сформувати масив даних ПЗП як масив констант.
Описати процес виборки даних з ПЗП.
Скомпілювати та промоделювати процес вибірки даних. Результати моделювання представити у вигляді часових діаграм та у табличній формі за допомогою List Viewer.
Підготувати звіт до захисту.
Код програми ПЗП:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity Device_ROM is
port(
CEO : in STD_LOGIC;
Addr : in STD_LOGIC_VECTOR(3 downto 0);
Dout : out STD_LOGIC_VECTOR(3 downto 0)
);
end Device_ROM;
architecture Device_ROM of Device_ROM is
begin
process (Addr)
type ROM_array is array (15 downto 0) of STD_LOGIC_VECTOR(3 downto 0);
constant ROM_memory:ROM_array:= ("0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111");
begin
if CEO = '1' then
Dout<=ROM_memory(Conv_Integer(Addr));
end if;
end process;
end Device_ROM;
/
Часова діаграма роботи ПЗП.
Висновок: Виконуючи дану лабораторну роботу, я вивчив принципи роботи постійного запам'ятовуючого пристрою (ПЗП), а також навчився пороектувати за допомогою коду VHDL. Отримав навички застосування масивів при створенні проектів у Active-HDL.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity my_ROM is
port(
CEO : in STD_LOGIC;
Addr : in STD_LOGIC_VECTOR(5 downto 0);
Dout : out STD_LOGIC_VECTOR(1 downto 0)
);
end my_ROM;
architecture my_ROM of my_ROM is
begin
process (Addr)
type ROM_array is array (63 downto 0) of STD_LOGIC_VECTOR(1 downto 0);
constant ROM_memory:ROM_array:= ("00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11",
"00","01","10","11");
begin
if CEO = '1' then
Dout<=ROM_memory(Conv_Integer(Addr));
else Dout<="ZZ";
end if;
end process;
end my_ROM;
1 0ns,0 6400ns