Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсач docx80 / Kursach(173).docx
Скачиваний:
39
Добавлен:
07.08.2013
Размер:
633.44 Кб
Скачать

Задание

Спроектировать управляющий цифровой автомат, функционирующий согласно данной ГСА:

Абстрактный синтез

Q0

Z2

Q1

Q2

Q3

Q4

Q5

Q6

Z3

Z1

Q7

Q9

Q8

Z4

В случае автомата Мура, каждому состоянию соответствует определенный выходной сигнал, следовательно ГСА будет выглядеть следующим образом:

Таким образом, граф переходов данного автомата будет выглядеть следующим образом:

Q0

W0

Q1

W1

Q5

W5

Q6

W6

Q9

W9

-

-

Q8

W8

-

¬Z1

Z4

¬Z4

Q2

W2

Z1

Q7

W7

-

-

¬Z2

Q3

W3

Q4

W4

Z2

Z3

-

¬Z3

Структурный синтез

Т.к. в каждый момент для выбора следующего состояния нам необходим только один из сигналов Z, при помощи дешифратора произведем выборку одного из Z в зависимости от текущего состояния.

Карты Карно для d1, d2, d3, d4

VHDL-код

-------------------------------------------------------------------

library IEEE;

use IEEE.STD_LOGIC_1164.all;

-------------------------------------------------------------------

entity ID3 is

port ( A0,A1,A2,A3 : in bit;

O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15 : out bit);

end ID3;

-------------------------------------------------------------------

architecture arc of ID3 is

constant Delay : Time := 36 ns;

begin

process(A0, A1, A2, A3)

begin

if (A0='0') and (A1='0') and (A2='0') and (A3='0') then--0

O0<='0' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='0') and (A1='0') and (A2='0') and (A3='1') then--1

O0<='1' after Delay;

O1<='0' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='0') and (A1='0') and (A2='1') and (A3='0') then--2

O0<='1' after Delay;

O1<='1' after Delay;

O2<='0' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='0') and (A1='0') and (A2='1') and (A3='1') then--3

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='0' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='0') and (A1='1') and (A2='0') and (A3='0') then--4

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='0' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

else if (A0='0') and (A1='1') and (A2='0') and (A3='1') then--5

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='0' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='0') and (A1='1') and (A2='1') and (A3='0') then--6

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='0' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='0') and (A1='1') and (A2='1') and (A3='1') then--7

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='0' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='0') and (A2='0') and (A3='0') then--8

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='0' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='0') and (A2='0') and (A3='1') then--9

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='0' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='0') and (A2='1') and (A3='0') then--10

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='0' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='0') and (A2='1') and (A3='1') then--11

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='0' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='1') and (A2='0') and (A3='0') then--12

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='0' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='1') and (A2='0') and (A3='1') then--13

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='0' after Delay;

O14<='1' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='1') and (A2='1') and (A3='0') then--14

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='0' after Delay;

O15<='1' after Delay;

else if (A0='1') and (A1='1') and (A2='1') and (A3='1') then--15

O0<='1' after Delay;

O1<='1' after Delay;

O2<='1' after Delay;

O3<='1' after Delay;

O4<='1' after Delay;

O5<='1' after Delay;

O6<='1' after Delay;

O7<='1' after Delay;

O8<='1' after Delay;

O9<='1' after Delay;

O10<='1' after Delay;

O11<='1' after Delay;

O12<='1' after Delay;

O13<='1' after Delay;

O14<='1' after Delay;

O15<='0' after Delay;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity LA3 is

port ( I11,I12,I21,I22,I31,I32,I41,I42 : in bit;

O1,O2,O3,O4 : out bit);

end LA3;

-------------------------------------------------------------------

architecture arc of LA3 is

constant DelayOn : Time := 15 ns;

constant DelayOff : Time := 22 ns;

begin

process(I11,I12)

begin

if (I11='1') and (I12='1') then

O1<='0' after DelayOff;

else

O1<='1' after DelayOn;

end if;

end process;

process(I21,I22)

begin

if (I21='1') and (I22='1') then

O2<='0' after DelayOff;

else

O2<='1' after DelayOn;

end if;

end process;

process(I31,I32)

begin

if (I31='1') and (I32='1') then

O3<='0' after DelayOff;

else

O3<='1' after DelayOn;

end if;

end process;

process(I41,I42)

begin

if (I41='1') and (I42='1') then

O4<='0' after DelayOff;

else

O4<='1' after DelayOn;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity LA4 is

port ( I11,I12,I13,I21,I22,I23,I31,I32,I33 : in bit;

O1,O2,O3 : out bit);

end LA4;

-------------------------------------------------------------------

architecture arc of LA4 is

constant DelayOn : Time := 15 ns;

constant DelayOff : Time := 22 ns;

begin

process(I11,I12,I13)

begin

if (I11='1') and (I12='1') and (I13='1') then

O1<='0' after DelayOff;

else

O1<='1' after DelayOn;

end if;

end process;

process(I21,I22,I23)

begin

if (I21='1') and (I22='1') and (I23='1') then

O2<='0' after DelayOff;

else

O2<='1' after DelayOn;

end if;

end process;

process(I31,I32,I33)

begin

if (I31='1') and (I32='1') and (I33='1') then

O3<='0' after DelayOff;

else

O3<='1' after DelayOn;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity LA1 is

port ( I11,I12,I13,I14,I21,I22,I23,I24 : in bit;

O1,O2 : out bit);

end LA1;

-------------------------------------------------------------------

architecture arc of LA1 is

constant DelayOn : Time := 15 ns;

constant DelayOff : Time := 22 ns;

begin

process(I11,I12,I13,I14)

begin

if (I11='1') and (I12='1') and (I13='1') and (I14='1') then

O1<='0' after DelayOff;

else

O1<='1' after DelayOn;

end if;

end process;

process(I21,I22,I23,I24)

begin

if (I21='1') and (I22='1') and (I23='1') and (I24='1') then

O2<='0' after DelayOff;

else

O2<='1' after DelayOn;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity LE1 is

port ( I11,I12,I21,I22,I31,I32,I41,I42 : in bit;

O1,O2,O3,O4 : out bit);

end LE1;

-------------------------------------------------------------------

architecture arc of LE1 is

constant DelayOn : Time := 15 ns;

constant DelayOff : Time := 22 ns;

begin

process(I11,I12)

begin

if (I11='1') or (I12='1') then

O1<='0' after DelayOff;

else

O1<='1' after DelayOn;

end if;

end process;

process(I21,I22)

begin

if (I21='1') or (I22='1') then

O2<='0' after DelayOff;

else

O2<='1' after DelayOn;

end if;

end process;

process(I31,I32)

begin

if (I31='1') or (I32='1') then

O3<='0' after DelayOff;

else

O3<='1' after DelayOn;

end if;

end process;

process(I41,I42)

begin

if (I41='1') or (I42='1') then

O4<='0' after DelayOff;

else

O4<='1' after DelayOn;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity LE3 is

port ( I11,I12,I13,I14,I21,I22,I23,I24,E1,E2 : in bit;

O1,O2 : out bit);

end LE3;

-------------------------------------------------------------------

architecture arc of LE3 is

constant DelayOn : Time := 15 ns;

constant DelayOff : Time := 22 ns;

begin

process(I11,I12,I13,I14,E1)

begin

if ((I11='1') or (I12='1') or (I13='1') or (I14='1')) and (E1='1') then

O1<='0' after DelayOff;

else

O1<='1' after DelayOn;

end if;

end process;

process(I21,I22,I23,I24,E2)

begin

if ((I21='1') or (I22='1') or (I23='1') or (I24='1')) and (E2='1') then

O2<='0' after DelayOff;

else

O2<='1' after DelayOn;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity TM7 is

port ( D1,D2,D3,D4,C12,C34 : in bit;

Q1,nQ1,Q2,nQ2,Q3,nQ3,Q4,nQ4 : out bit);

end TM7;

-------------------------------------------------------------------

architecture arc of TM7 is

constant Delay : Time := 28 ns;

signal Q11,Q22,Q33,Q44 : bit;

begin

process (C12)

begin

if (C12'event) and (C12='0') then

Q11<=D1 after Delay;

Q22<=D2 after Delay;

end if;

end process;

process (C34)

begin

if (C34'event) and (C34='0') then

Q33<=D3 after Delay;

Q44<=D4 after Delay;

end if;

end process;

Q1<=Q11;

Q2<=Q22;

Q3<=Q33;

Q4<=Q44;

nQ1 <= not Q11;

nQ2 <= not Q22;

nQ3 <= not Q33;

nQ4 <= not Q44;

end arc;

-------------------------------------------------------------------

entity LN1 is

port (I1,I2,I3,I4,I5,I6 : in bit;

O1,O2,O3,O4,O5,O6 : out bit);

end LN1;

-------------------------------------------------------------------

architecture arc of LN1 is

constant DelayOn : Time := 15 ns;

constant DelayOff : Time := 22 ns;

begin

process (I1)

begin

if (I1='0') then

O1<= not I1 after DelayOn;

else

O1<= not I1 after DelayOff;

end if;

end process;

process (I2)

begin

if (I2='0') then

O2<= not I2 after DelayOn;

else

O2<= not I2 after DelayOff;

end if;

end process;

process (I3)

begin

if (I3='0') then

O3<= not I3 after DelayOn;

else

O3<= not I3 after DelayOff;

end if;

end process;

process (I4)

begin

if (I4='0') then

O4<= not I4 after DelayOn;

else

O4<= not I4 after DelayOff;

end if;

end process;

process (I5)

begin

if (I5='0') then

O5<= not I5 after DelayOn;

else

O5<= not I5 after DelayOff;

end if;

end process;

process (I6)

begin

if (I6='0') then

O6<= not I6 after DelayOn;

else

O6<= not I6 after DelayOff;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity LL1 is

port ( I11,I12,I21,I22,I31,I32,I41,I42 : in bit;

O1,O2,O3,O4 : out bit);

end LL1;

-------------------------------------------------------------------

architecture arc of LL1 is

constant DelayOn : Time := 15 ns;

constant DelayOff : Time := 22 ns;

begin

process(I11,I12)

begin

if (I11='1') or (I12='1') then

O1<='1' after DelayOff;

else

O1<='0' after DelayOn;

end if;

end process;

process(I21,I22)

begin

if (I21='1') or (I22='1') then

O2<='1' after DelayOff;

else

O2<='0' after DelayOn;

end if;

end process;

process(I31,I32)

begin

if (I31='1') or (I32='1') then

O3<='1' after DelayOff;

else

O3<='0' after DelayOn;

end if;

end process;

process(I41,I42)

begin

if (I41='1') or (I42='1') then

O4<='1' after DelayOff;

else

O4<='0' after DelayOn;

end if;

end process;

end arc;

-------------------------------------------------------------------

entity circuit is

port ( z1,z2,z3,z4,CLK :in bit;

y1,y2,y3,y4: out bit);

end circuit;

-------------------------------------------------------------------

architecture arc of circuit is

component ID3 is

port ( A0,A1,A2,A3 : in bit;

O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15 : out bit);

end component;

component LA3 is

port ( I11,I12,I21,I22,I31,I32,I41,I42 : in bit;

O1,O2,O3,O4 : out bit);

end component;

component LA4 is

port ( I11,I12,I13,I21,I22,I23,I31,I32,I33 : in bit;

O1,O2,O3 : out bit);

end component;

component LA1 is

port ( I11,I12,I13,I14,I21,I22,I23,I24 : in bit;

O1,O2 : out bit);

end component;

component TM7 is

port ( D1,D2,D3,D4,C12,C34 : in bit;

Q1,nQ1,Q2,nQ2,Q3,nQ3,Q4,nQ4 : out bit);

end component;

component LE1 is

port ( I11,I12,I21,I22,I31,I32,I41,I42 : in bit;

O1,O2,O3,O4 : out bit);

end component;

component LE3 is

port ( I11,I12,I13,I14,I21,I22,I23,I24,E1,E2 : in bit;

O1,O2 : out bit);

end component;

component LN1 is

port (I1,I2,I3,I4,I5,I6 : in bit;

O1,O2,O3,O4,O5,O6 : out bit);

end component;

component LL1 is

port ( I11,I12,I21,I22,I31,I32,I41,I42 : in bit;

O1,O2,O3,O4 : out bit);

end component;

signal O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15 : bit;

signal iz1,iz2,iz3,iz4,z,nz : bit;

signal emo1,emo2,emo3,emo4,emo5,emo6,emo7,emo8 : bit;

signal D1,D2,D3,D4, D21,D2241,D23, D31,D32,D33, D42,D43,D44,D45,D46,D4p1,D4p2 : bit;

signal Q1,nQ1,Q2,nQ2,Q3,nQ3,Q4,nQ4 :bit;

begin

mem : TM7 port map (D1,D2,D3,D4,CLK,CLK,Q1,nQ1,Q2,nQ2,Q3,nQ3,Q4,nQ4);

des : ID3 port map (Q1,Q2,Q3,Q4,O0,O1,O2,O3,O4,O5,O6,O7,O8,O9,O10,O11,O12,O13,O14,O15);

ilin24 : LE1 port map (O0,z1,O3,z2,O5,z3,O7,z4,iz1,iz2,iz3,iz4);

ilin42 : LE3 port map (iz1,iz2,iz3,iz4,nQ2,nQ3,nQ4,'0','1','1',z,D1);

i42 : LA1 port map (Q2,nQ3,Q4,z, nQ1,nQ2,nQ4,z, D32,D33);

i331 : LA4 port map (nQ1,nQ4,nz, Q2,Q3,z, nQ2,Q3,nz, D43,D44,D45);

i332 : LA4 port map (D31,D32,D33, D21,D2241,D23, nQ2,Q3,Q4, D3,D2,D23);

i333 : LA4 port map (D43,D44,D45, D2241,D42,D46, Q2,nQ3,nz, D4p1,D4p2,D46);

i24 : LA3 port map (Q2,nQ3, Q2,nQ4, Q3,nQ4, Q3,nQ4, D21,D2241,D42,D31);

not6 : LN1 port map (z,'1','1','1','1','1',nz,emo1,emo2,emo3,emo4,emo5);

ili24 : LL1 port map (D4p1,D4p2, '1','1', '1','1', '1','1', D4,emo6,emo7,emo8);

y1<=Q1;

y2<=Q2;

y3<=Q3;

y4<=Q4;

end arc;

-------------------------------------------------------------------

entity test1 is

end test1;

-------------------------------------------------------------------

architecture arc1 of test1 is

component circuit is

port ( z1,z2,z3,z4,CLK :in bit;

y1,y2,y3,y4: out bit);

end component;

signal CLK,y1,y2,y3,y4 :bit;

begin

Avtomat : circuit port map('0','0','0','0',CLK,y1,y2,y3,y4);

process

begin

wait for 500 ns;

for i in 0 to 10000 loop

CLK <= '0';

wait for 150 ns;

CLK <= '1';

wait for 150 ns;

end loop;

end process;

end arc1;

Соседние файлы в папке курсач docx80