Автор работы: Пользователь скрыл имя, 18 Января 2015 в 21:12, лабораторная работа
Задание:
Часть 1. С использованием девятизначного алфавита STD_LOGIC составить VHDL-модель и провести моделирование триггера двумя способами:
по логической схеме триггера (структурное описание);
по таблице функционирования триггера (алгоритмическое описание).
Министерство образования Республики Беларусь
Учреждение образования
Белорусский государственный университет информатики
и радиоэлектроники
Факультет заочного обучения
Кафедра электронных вычислительных средств
Отчет по лабораторной работе № 3
по дисциплине: «Основы проектирования
электронных вычислительных средств»
Описание и моделирование триггеров и конечных автоматов
Вариант 9
|
|
2014
Цель работы: Изучить VHDL-модель D-триггера и составить VHDL-модель конечного автомата.
Ход работы
Задание:
Часть 1. С использованием девятизначного алфавита STD_LOGIC составить VHDL-модель и провести моделирование триггера двумя способами:
Сравнить результаты моделирования.
Часть 2. С использованием перечислимых типов составить VHDL-модель конечного автомата и провести моделирование двумя способами:
1. Составить структурное (с использованием оператора port map) описание триггера. Использовать задержки логических элементов 2 ns – 5 ns.
2. Составить алгоритмическое
3. Составить тестирующую
4. Провести моделирование обоих описаний в одной тестирующей программе.
5. Сравнить результаты моделирования.
6. Составить описание конечного автомата.
7. Составить тестирующую
1. Триггер: D-триггер с инверсным синхросигналом
Рис. 1. D-триггер с инверсным синхросигналом
Таблица функционирования
D-триггера с инверсным синхросигналом
D |
C |
Q |
- |
0 |
(D) |
- |
1 |
N |
Через “-” обозначено любое из (0,1) значение сигнала; в квадратных скобках показывается изменение сигнала (обычно синхросигнала), например, через [01] обозначается передний фронт сигнала (сигнал меняется из 0 в 1); через [10] обозначается задний фронт сигнала (сигнал меняется из 1 в 0); символ N обозначает неизменяемое (предыдущее) значение сигнала; символ ^ является знаком инверсии (отрицания).
VHDL-код схемы
library IEEE;
use IEEE.std_logic_1164.all;
entity num1 is
port (D,C:in std_logic ; q: inout std_logic);
end num1;
architecture structure of num1 is
begin
process (C)
begin
if (C='0') then q<=D after 3 ns;
end if;
end process;
end structure;
Тестирующая программа
library IEEE;
use IEEE.std_logic_1164.all;
entity Test_add1 is end Test_add1;
architecture Behavior of test_add1 is
component num1
port (D,C:in std_logic ; q: inout std_logic);
end component;
signal D,C,q:std_logic;
begin
p0 : num1 port map (D=> D,C=> D,q=> D);
D <= '0',
'1' after 50 ns,
'0' after 100 ns,
'1' after 150 ns,
'0' after 200 ns,
'1' after 250 ns,
'0' after 300 ns;
C <= '1',
'0' after 25 ns,
'1' after 50 ns,
'0' after 75 ns,
'1' after 100 ns,
'0' after 150 ns,
'1' after 175 ns,
'0' after 225 ns,
'1' after 250 ns,
'0' after 275 ns;
end Behavior;
Временная диаграмма
Рисунок 2. Временная диаграмма, соответствующая тестирующей программе
Часть 2. VHDL-модель конечного автомата
Конечный автомат Мура.
Алфавит состояний A = {a11, a2, a3}. Начальное состояние автомата a1. Входной алфавит Z = {z1, z22, z3}. Выходной алфавит W = {w11, w22 ,w33}.
Таблица функционирования
конечного автомата Мура
Входные сигналы |
Состояния |
||||
a11 |
a2 |
a3 | |||
z1 |
a3 |
a2 |
a11 | ||
z22 |
a11 |
a2 |
a3 | ||
z3 |
a3 |
a11 |
a3 | ||
w33 |
w11 |
w22 |
Выходные сигналы |
VHDL-код схемы
package State is
type Ast is (a11,a2,a3);
type Zin is (z1,z22,z3);
type Wout is (w11,w22,w33);
end State;
package body State is
end State;
use work.State.all;
entity Mur is
port (z : in Zin;
r_state,clk: in bit;
w: out Wout);
end Mur;
architecture strMur of Mur is
signal n_state, a_state: Ast;
begin
po: process (a_state,z)
begin
case a_state is
when a11=>
if (z=z1) then n_state <=a3;
elsif (z=z22) then n_state<=a11;
elsif (z=z3) then n_state<=a3;
end if;
w<=w33;
when a2=>
if (z=z1) then n_state <=a2;
elsif (z=z22) then n_state<=a2;
elsif (z=z3) then n_state<=a11;
end if;
w<=w11;
when a3=>
if (z=z1) then n_state <=a11;
elsif (z=z22) then n_state<=a3;
elsif (z=z3) then n_state<=a3;
end if;
w<=w22;
end case;
end process;
Stat: process(r_state,clk)
begin
if(r_state='1') then a_state<=a11;
elsif clk'event and clk='1' then
a_state<=n_state;
end if;
end process Stat;
end;
Тестирующая программа
use work.State.all;
entity test_Mur is
end;
architecture strtest of test_Mur is
component Mur
port (z : in Zin;
r_state,clk: in bit;
w: out Wout);
end component;
signal z: Zin;
signal w: Wout;
signal r_state,clk:bit;
begin
po: Mur port map (z,r_state,clk,w);
z<= z1, z22 after 100 ns,
z3 after 200 ns,
z1 after 300 ns,
z22 after 400 ns,
z3 after 500 ns;
clk<='0', '1' after 50 ns,
'0' after 200 ns,
'1' after 250 ns,
'0' after 300 ns,
'1' after 350 ns;
r_state<='0', '1' after 300 ns;
end;
Временная диаграмма
Рисунок 3. Временная диаграмма, соответствующая тестирующей программе
Вывод: составил алгоритмическое описание триггера - работает корректно. Составил VHDL-модель конечного автомата и провеламоделирование - работает корректно.
vlib work
vcom l4myr.vhd
vsim Mur
add wave *
view wave
force z z1, z22 50ns, z3 100ns -repeat 150ns
force clk '0', '1' 25ns -repeat 50ns
force r_state '0', '1' 300ns
run 500 ns
Информация о работе Описание и моделирование триггеров и конечных автоматов