Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМТ_Методичка.doc
Скачиваний:
21
Добавлен:
15.03.2015
Размер:
107.01 Кб
Скачать
  1. Лабораторная работа № 5.

    1. Исследование счетчиков.

Цель работы: изучение функционирования схем синхронных счетчиков. Сравнительный анализ синхронных счетчиков.

В работе предлагаются для изучения VHDL - программы двоичных четырехразрядных счетчиков: суммирующего, вычитающего и реверсивного. По диаграммам работы проверяется порядок счета счетчиков. Реверсивный счетчик проектируется для работы в кристалле Cyclone EP1C6T144C8.

    1. Порядок выполнения работы.

  1. Создать новый проект, открыть VHDL- файл и записать программу 5.1, отражающую функционирование синхронного суммирующего счетчика. Сохранить файл и установить его старшим в иерархии. Откомпилировать файл.

  2. Построить временные диаграммы работы счетчика, задав интервал синхроимпульсов 20нс. Сохраненный временной(.vwf) файл не хранится по умолчанию в корзине симулятора, поэтому симуляция должна следовать по пути: Processing – Simulator Tool – через поиск … находите необходимый файл – Start. По окончании симуляции нажмите Report и проанализируйте результат..

  3. Открыть новый VHDL - файл и записать программу 5.2, отражающую функционирование синхронного вычитающего счетчика. Сохранить файл под новым именем, установить его старшим в иерархии и откомпилировать.

  4. По методике, изложенной в п.2 построить временные диаграммы работы счетчика, задав интервал синхроимпульсов 20нс.

  5. Открыть новый VHDL - файл и записать программу 5.3, отражающую функционирование синхронного реверсивного счетчика. Сохранить файл под новым именем, установить его старшим в иерархии и откомпилировать.

  6. Построить временные диаграммы работы счетчика. Тактовая частота аналогична первому варианту, интервал реверса – 650нс.

Вернувшись в файл VHDL, cоздать библиотечный модуль реверсивного счетчика.

  1. Из папки материалы, пользуясь методикой, описанной в п. лабораторной работы №3 записать в свой проект 3 файла antiring, multiplexor и decoder и создать для каждого библиотечный модуль. В новом файле графического редактора объединить модули счетчика с вновь созданными модулями периферийных устройств. Синхросигнал завести от кнопки через модуль antiring, выходы счетчика соединить со входами data0[..] модуля multiplexor, вход clk модуля multiplexor обозначить теми же буквами, что записаны в примитиве input для входа clock модуля antiring. Выходы columns модуля multiplexor поименовать col[3..0], отдельно вывести output, назвав его col[0]. В таблице изменить WIDTH на 4, выходы данных модуля multiplexor связать со входами данных модуля decoder. Выходы модуля decoder вывести через output. Реверс установить от любого тумблера через input. Сохранить файл, установить его старшим в иерархии и откомпилировать.

  2. Произвести разводку в кристалл для полученного проекта. Контакты кнопки – pin 59, 60.

  3. Запрограммировать кристалл и убедиться в правильности работы схемы.

Отчёт должен содержать: программы функционирования счётчиков и временные диаграммы их работы.

Программа 5.1

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt44 is

port(

clk: in std_logic;

ena : in std_logic;

res : in std_logic;

q: out std_logic_vector(3 downto 0)

);

end cnt44;

architecture arch of cnt44 is

signal cnt: std_logic_vector(3 downto 0);

begin

process (clk,res)

begin

if (res = '0') then cnt<=(others=>'0');

elsif(rising_edge(clk)) then

if(ena ='1') then

cnt <=cnt + "0001";

end if;

end if;

end process;

q <= cnt;

end arch;

Программа 5.2

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt441 is

port(

clk: in std_logic;

ena : in std_logic;

res : in std_logic;

q: out std_logic_vector(3 downto 0)

);

end cnt441;

architecture arch of cnt441 is

signal cnt: std_logic_vector(3 downto 0);

begin

process (clk,res)

begin

if (res = '0') then cnt<=(others=>'0');

elsif(rising_edge(clk)) then

if(ena ='1') then

cnt <=cnt - "0001";

end if;

end if;

end process;

q <= cnt;

end arch;

Программа 5.3

llibrary ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt442 is

port(

clk: in std_logic;

ena : in std_logic;

res : in std_logic;

rev : in std_logic;

q: out std_logic_vector(3 downto 0)

);

end cnt442;

architecture arch of cnt442 is

signal cnt: std_logic_vector(3 downto 0);

begin

process (clk,res)

begin

if (res = '0') then cnt<=(others=>'0');

elsif(rising_edge(clk)) then

if(ena ='1') then

if (rev ='0') then

cnt <=cnt + "0001";

elsif (rev='1') then

cnt <=cnt - "0001";

end if;

end if;

end if;

end process;

q <= cnt;

end arch;