Вариант 5
Описание файла
Документ из архива "Вариант 5", который расположен в категории "". Всё это находится в предмете "организация эвм" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "организация эвм и систем" в общих файлах.
Онлайн просмотр документа "Вариант 5"
Текст из документа "Вариант 5"
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«Московский государственный технический университет
имени Н.Э. Баумана»
(МГТУ им. Н.Э. Баумана)
Факультет «Робототехника и комплексная автоматизация» (РК)
Кафедра «Системы автоматизированного проектирования» (РК6)
Отчет
по домашним лабораторным работам
по дисциплине
«Организация ЭВМ и систем»
Вариант №5
Выполнил: Кошман А.А.
группа РК6-93
Москва 2012
Разработка VHDL-описания последовательных схем
с регулярной структурой
Тип синтезируемого устройства: Регистр сдвига на синхронных двухступенчатых
D-триггерах с запрещающими связями
-
Структурное описание
-
Компонент И-НЕ с двумя входами
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity NAND2 is
port (
X1: in STD_LOGIC;
X2: in STD_LOGIC;
Y: out STD_LOGIC
);
end NAND2;
architecture NAND2 of NAND2 is
begin
Y <= not (X1 and X2);
end NAND2;
-
Компонент И-НЕ с тремя входами
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity NAND3 is
port (
X1: in STD_LOGIC;
X2: in STD_LOGIC;
X3: in STD_LOGIC;
Y: out STD_LOGIC
);
end NAND3;
architecture NAND3 of NAND3 is
begin
Y <= not (X1 and X2 and X3);
end NAND3;
-
Синхронный двухступенчатый D-триггер с запрещающими связями
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity D is
port (
NSa: in STD_LOGIC;
D: in STD_LOGIC;
C: in STD_LOGIC;
NRa: in STD_LOGIC;
Q: out STD_LOGIC;
NQ: out STD_LOGIC
);
end D;
architecture D of D is
component NAND2
port (
X1: in STD_LOGIC;
X2: in STD_LOGIC;
Y: OUT STD_LOGIC
);
end component;
component NAND3
port (
X1: in STD_LOGIC;
X2: in STD_LOGIC;
X3: in STD_LOGIC;
Y: OUT STD_LOGIC
);
end component;
signal S: STD_LOGIC_VECTOR(1 to 8);
begin
E1: NAND2
port map (D, C, S(1));
E2: NAND2
port map (C, S(1), S(2));
E3: NAND3
port map (NSa, S(1), S(4), S(3));
E4: NAND3
port map (NRa, S(2), S(3), S(4));
E5: NAND3
port map (S(1), S(2), S(3), S(5));
E6: NAND3
port map (S(1), S(2), S(4), S(6));
E7: NAND3
port map (NSa, S(5), S(8), S(7));
E8: NAND3
port map (NRa, S(6), S(7), S(8));
Q <= S(7);
NQ <= S(8);
end D;
-
Регистр сдвига
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity RG is
generic (
N: integer := 4
);
port (
X_in: in STD_LOGIC_VECTOR(N downto 1);
X_serial: in STD_LOGIC;
Set: in STD_LOGIC;
Shift: in STD_LOGIC;
Reset: in STD_LOGIC;
Q_out: out STD_LOGIC_VECTOR(N downto 1)
);
end RG;
architecture RG of RG is
component D
port (
NSa: in STD_LOGIC;
D: in STD_LOGIC;
C: in STD_LOGIC;
NRa: in STD_LOGIC;
Q: out STD_LOGIC;
NQ: out STD_LOGIC
);
end component;
component NAND2
port (
X1: in STD_LOGIC;
X2: in STD_LOGIC;
Y: OUT STD_LOGIC
);
end component;
signal S,Q,NQ: STD_LOGIC_VECTOR(N downto 1);
begin
INPUT: for i in 1 to N generate
NUMi: NAND2
port map (Set, X_in(i), S(i));
end generate;
TRIG1: D
port map (S(1), X_serial, Shift, Reset, Q(1), NQ(1));
TRIGGERS: for i in 2 to N generate
TRIGi: D
port map (S(i), Q(i-1), Shift, Reset, Q(i), NQ(i));
end generate;
Q_out <= Q;
end RG;
-
Временные диаграммы
-
Поведенческое описание
-
VHDL-код
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity FUN_RG is
generic (
N : integer := 4
);
port(
X_in: in STD_LOGIC_VECTOR(N downto 1);
X_serial: in STD_LOGIC;
Set: in STD_LOGIC;
Shift: in STD_LOGIC;
Reset: in STD_LOGIC;
Q_out: out STD_LOGIC_VECTOR(N downto 1)
);
end FUN_RG;
architecture FUN_RG of FUN_RG is
signal state : STD_LOGIC_VECTOR(N downto 1);
begin
process(Set, Shift, Reset)
begin
if (Reset = '0') then
for i in 1 to N loop
state(i) <= '0';
end loop;
elsif (Set = '1') then
state <= X_in;
elsif(Shift = '0') and (Shift'last_value = '1') then
for i in N downto 2 loop
state(i) <= state(i-1);
end loop;
state(1) <= X_serial;
end if;
end process;
Q_out <= state;
end FUN_RG;
-
Временные диаграммы
Управляющие автоматы
Входные сигналы | Состояния | |||
a1 | a2 | a3 | a4 | |
z1 | a3 / w5 | a2 / w1 | a2 / w2 | a1 / w5 |
z2 | a4 / w5 | a2 / w5 | a4 / w3 | a3 / w3 |
z3 | a3 / w5 | a1 / w4 | a1 / w4 | a1 / w5 |
Таблица задания функционирования конечного автомата
Введем следующую кодировку входного и выходного алфавитов:
Входной сигнал | Двоичный код | Десятичное значение | Выходной сигнал | Двоичный код | Десятичное значение | |
z1 | 01 | 1 | w1 | 001 | 1 | |
z2 | 10 | 2 | w2 | 010 | 2 | |
z3 | 11 | 3 | w3 | 011 | 3 | |
w4 | 100 | 4 | ||||
w5 | 101 | 5 |
a2
01 / 001 10 / 101
11 / 100 01 / 010
a1
a3
01 / 10111 / 100
11 / 101
10 / 101 10 / 011
a4
10 / 01101 / 101
11 / 101
-
Поведенческое описание
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity Mealy is
port(
clock, reset: in STD_LOGIC;
data_in: in STD_LOGIC_VECTOR(0 to 1);
data_out: out STD_LOGIC_VECTOR(0 to 2)
);
end Mealy;
architecture Mealy of Mealy is
type state_values is (a1,a2,a3,a4);
signal pres_state, next_state: state_values;
begin
-- FSM register
statereg: process(clock, reset)
begin
if (reset = '0') then
pres_state <= a1;
elsif (clock'event and clock = '1') then
pres_state <= next_state;
end if;
end process statereg;
-- FSM combinational block
fsm: process(pres_state, data_in)
begin
case pres_state is
when a1 =>
case data_in is
when "01" | "11" => data_out <= "101";
next_state <= a3;
when "10" => data_out <= "101";
next_state <= a4;
when others => data_out <= "000";
next_state <= a1;
end case;
when a2 =>
case data_in is
when "01" => data_out <= "001";
next_state <= a2;
when "10" => data_out <= "101";
next_state <= a2;
when "11" => data_out <= "100";
next_state <= a1;
when others => data_out <= "000";
next_state <= a1;
end case;
when a3 =>
case data_in is
when "01" => data_out <= "010";
next_state <= a2;
when "10" => data_out <= "011";
next_state <= a4;
when "11" => data_out <= "100";
next_state <= a1;
when others => data_out <= "000";
next_state <= a1;
end case;
when a4 =>
case data_in is
when "01" | "11" => data_out <= "101";
next_state <= a1;
when "10" => data_out <= "011";
next_state <= a3;
when others => data_out <= "000";
next_state <= a1;
end case;
when others => data_out <= "000";
next_state <= a1;
end case;
end process fsm;
end Mealy;
-
Временные диаграммы