Смекни!
smekni.com

Светодинамические установки (стр. 10 из 10)

architecture BEHAV of counter_IE8 is -- тело архитектуры

-- описание портов компонентов счетчика

component TFF is

generic (T1S, T0R, T1C, T0C: time:=1 ns);

port (S: in bit:='1'; C, R: in bit:='0';

Q: inout bit:='0';

NQ: inout bit:='1');

end component;

component NAND8 is

port(IN1,IN2,IN3,IN4,IN5,IN6,IN7,IN8: in bit;

Y: out bit);

end component;

component NAND6 is

port(IN1,IN2,IN3,IN4,IN5,IN6: in bit;

Y: out bit);

end component;

component NAND4 is

port(IN1,IN2,IN3,IN4: in bit;

Y: out bit);

end component;

component NAND2 is

port(IN1,IN2: in bit;

Y: out bit);

end component;

component \NOT\ is

port(IN1: in bit;

Y: out bit);

end component;

signal n1,n2,n3,Q1,Q2,Q3,Q4,Q5,Q6,c1,c2,c3,c4,c5,c6: bit; -- описание сигналов

begin -- описание связей компонентов, входящих в counter_IE8

DD1: \NOT\ port map(Clock_IE8,n1);

DD2: \NOT\ port map(n1,c1);

DD3: \NOT\ port map(Reset_IE8,n2);

DD4: TFF port map ('1',c1,n2,Q1);

DD5: NAND2 port map(n1,Q1,c2);

DD6: TFF port map('1',c2,n2,Q2);

DD7: NAND4 port map (n1,n1,Q2,Q1,c3);

DD8: TFF port map('1',c3,n2,Q3);

DD9: NAND4 port map(n1,Q3,Q2,Q1,c4);

DD10: TFF port map('1',c4,n2,Q4);

DD11: NAND6 port map(n1,n1,Q4,Q3,Q2,Q1,c5);

DD12: TFF port map('1',c5,n2,Q5);

DD13: NAND6 port map(n1,Q5,Q4,Q3,Q2,Q1,c6);

DD14: TFF port map('1',c6,n2,Q6);

DD15: NAND8 port map(Q1,Q2,Q3,Q4,Q5,Q6,Q6,n1,n3);

P<=n3;

end BEHAV;

------------ Текст программы четырехразрядного реверсивного счетчика, аналога микросхемы К155ИЕ7

entity TSH is -- элемент задержки с инверсией входного сигнала

port(IN1: in bit;

Y: out bit);

end TSH;

architecture beh of TSH is

begin

Y <= not (IN1) after 2 ns;

end beh;

entity counter_IE7 is -- описание портов счетчика

port(Reset_IE7,CV: in bit;

reverse: inout bit;

Q: out bit_vector (4 downto 1));

end counter_IE7;

architecture BEHAV of counter_IE7 is -- тело архитектуры счетчика

-- описание входящих в счетчик компонентов

component TFF is

generic (T1S, T0R, T1C, T0C: time:=0 ns);

port (S: in bit:='1'; C, R: in bit:='0';

Q: inout bit:='0';

NQ: inout bit:='1');

end component;

component NAND6 is

port(IN1, IN2, IN3, IN4, IN5, IN6: in bit;

Y : out bit);

end component;

component &bsol;NOT&bsol; is

port(IN1: in bit;

Y: out bit);

end component;

component AND2 is

port(IN1, IN2: in bit;

Y: out bit);

end component;

component NAND3 is

port(IN1, IN2, IN3: in bit;

Y: out bit);

end component;

component NAND4 is

port(IN1, IN2, IN3, IN4: in bit;

Y: out bit);

end component;

component NAND2 is

port(IN1, IN2: in bit;

Y: out bit);

end component;

component TSH is

port(IN1: in bit;

Y: out bit);

end component;

-- описание внутренних сигналов счетчика

signal n1,n2,n3,n4,n5,n6,n7,n8,s1,s2,s3,s4,r1,r2,r3,r4,c1,c2,c3,c4,Q1,NQ1,Q2, NQ2,Q3, NQ3,Q4,NQ4,PE,P: bit;

begin -- описание связей компонентов, входящих в counter_IE7

DD1: &bsol;NOT&bsol; port map(CV,n1);

DD2: &bsol;NOT&bsol; port map(Reset_IE7,n2);

DD3: NAND2 port map(n2,n8,s1);

DD4: &bsol;NOT&bsol; port map(n1,c1);

DD5: AND2 port map(n2,n3,r1);

DD6: NAND2 port map(n8,s1,n3);

DD7: TFF port map(s1,c1,r1,Q1,NQ1);

DD8: &bsol;NOT&bsol; port map(n8,n4);

DD9: NAND2 port map(n1,Q1,c2);

DD10: AND2 port map(n2,n4,r2);

DD11: TFF port map('1',c2,r2,Q2,NQ2);

DD12: &bsol;NOT&bsol; port map(n8,n5);

DD13: NAND3 port map(n1,Q1,Q2,c3);

DD14: AND2 port map(n2,n5,r3);

DD15: TFF port map('1',c3,r3,Q3,NQ3);

DD16: &bsol;NOT&bsol; port map(n8,n6);

DD17: NAND4 port map(n1,Q1,Q2,Q3,c4);

DD18: AND2 port map(n2,n6,r4);

DD19: TFF port map('1',c4,r4,Q4,NQ4);

DD20: NAND6 port map(Q1,n1,Q2,Q3,Q4,n1,n7);

DD21: &bsol;NOT&bsol; port map(PE,n8);

DD22: TSH port map(P,reverse);

DD23: TSH port map(reverse,PE);

Q(1)<=Q1;

Q(2)<=Q2;

Q(3)<=Q3;

Q(4)<=Q4;

P<=n7;

end BEHAV;

----- Текст программы формирователя кода -----

entity NAND2 is -- текст программы элемента И-НЕ на два входа

port(IN1, IN2: in bit;

Y: out bit);

end NAND2;

architecture beh of NAND2 is

begin

Y <= IN1 nand IN2;

end beh;

entity TSH is -- текст программы элемента задержки с инверсией

port(IN1: in bit;

Y: out bit);

end TSH;

architecture beh of TSH is

begin

Y <= not (IN1) after 2 ns;

end beh;

entity Formirovatel is -- описание портов формирователя

port (Input: in bit;

Output: out bit);

end Formirovatel;

architecture BEHAV of Formirovatel is -- тело архитектуры

-- описание компонентов формирователя

component NAND2 is

port(IN1, IN2: in bit;

Y: out bit);

end component;

component TSH is

port(IN1: in bit;

Y: out bit);

end component;

signal o1,o2,o3,o4: bit; -- описание внутренних сигналов

begin -- описание связей компонентов, входящих в формирователь кода

DD1: TSH port map(Input,o1);

DD2: TSH port map(o1,o2);

DD3: TSH port map(o2,o3);

DD4: NAND2 port map(Input,o3,o4);

DD5: NAND2 port map(o4,o4,Output);

end BEHAV;

----- Текст программы сдвигового регистра,

аналога микросхемы К155ИР11

entity sdvig_reg is -- описание портов сдвигового регистра

port(R,C,A,nA,P: in bit;

D: in bit_vector (4 downto 1);

Q: out bit_vector (4 downto 1));

end sdvig_reg;

architecture BEHAV of sdvig_reg is -- тело архитектуры регистра

-- описание компонентов, входящих в сдвиговый регистр

component &bsol;NOT&bsol; is

port(IN1: in bit;

Y: out bit);

end component;

component NAND2 is

port(IN1,IN2: in bit;

Y: out bit);

end component;

component Mux_4 is

port(i: in bit_vector (4 downto 1);

sel: in bit_vector (2 downto 1);

s: out bit);

end component;

component DFF is

generic (T1S, T0R, T1C, T0C: time:=0 ns);

port (S: in bit:='1'; C,D,R: in bit:='0';

Q: inout bit:='0';

NQ: inout bit:='1');

end component;

-- описание внутренних сигналов регистра

signal i1,i2,i3,i4: bit_vector (4 downto 1);

signal sel: bit_vector (2 downto 1);

signal s1,s2,v,do1,do2,do3,do4,Qo1,Qo2,Qo3,Qo4,nQo1,nQo2,nQo3,nQo4: bit;

begin -- описание связей компонентов, входящих в сдвиговый регистр

DD1: NAND2 port map (A,P,s1);

DD2: NAND2 port map (nA,P,s2);

DD3: &bsol;NOT&bsol; port map (C,v);

DD4: Mux_4 port map (i4,sel,do4);

DD5: Mux_4 port map (i3,sel,do3);

DD6: Mux_4 port map (i2,sel,do2);

DD7: Mux_4 port map (i1,sel,do1);

DD8: DFF port map ('1',v,do1,R,Qo4,nQo4);

DD9: DFF port map ('1',v,do2,R,Qo3,nQo3);

DD10: DFF port map ('1',v,do3,R,Qo2,nQo2);

DD11: DFF port map ('1',v,do4,R,Qo1,nQo1);

sel(1) <= s1;

sel(2) <= s2;

i1(1) <= Qo4;

i1(2) <= Qo3;

i1(3) <= Qo1;

i1(4) <= D(4);

i2(1) <= Qo3;

i2(2) <= Qo2;

i2(3) <= Qo4;

i2(4) <= D(3);

i3(1) <= Qo2;

i3(2) <= Qo1;

i3(3) <= Qo3;

i3(4) <= D(2);

i4(1) <= Qo1;

i4(2) <= Qo4;

i4(3) <= Qo2;

i4(4) <= D(1);

Q(1)<=Qo1;

Q(2)<=Qo2;

Q(3)<=Qo3;

Q(4)<=Qo4;

end BEHAV;

----- Текст программы генератора импульсов -----

entity generator is

port (apr: inout bit:='0');

end generator;

architecture BEHAV of generator is

begin

apr <= not apr after 5 ns;

end architecture;

-- Текст программы двухразрядного мультиплексора на 4 входа --

entity Mux_4 is

port(i: in bit_vector (4 downto 1);

sel: in bit_vector (2 downto 1);

s: out bit);

end Mux_4;

architecture BEHAV of Mux_4 is

begin

with sel select

s <= i(1) when “00”,

i(2) when “01”,

i(3) when “10”,

i(4) when “11”;

end BEHAV;

----- Текст программы Т-триггера с асинхронными инверсными S и R входами -----

entity TFF is

generic (T1S, T0R, T1C, T0C: time:=1 ns);

port (S: in bit:='1'; C, R: in bit:='0';

Q: inout bit:='0';

NQ: inout bit:='1');

end TFF;

architecture BEHAVIOR of TFF is

begin

process (S,C,R)

variable T: bit:='0';

variable DELAY: time:= 1 ns;

begin

assert not (S='0' and R='0')

report "одновременный 0 на S и R входе Т-триггера"

severity warning;

if S='0' and R='1' then T:='1';

elsif S='1' and R='0' then T:='0';

elsif R='1' and S='1' and C='1' and not C'stable then

T:=NQ;

else T:=Q;

end if;

if T='0' and Q='1' then

if R='0' then DELAY:=T0R;

else DELAY:=T1C;

end if;

elsif T='1' and Q='0' then

if S='0' then DELAY:=T1S;

else DELAY:=T1C;

end if;

end if;

Q<=T after DELAY;

NQ<=not T after DELAY;

end process;

end BEHAVIOR;

----- Текст программы асинхронного D-триггера -----

entity DFF is

generic (T1S, T0R, T1C, T0C: time:=0 ns);

port (S: in bit:='1'; C,D,R: in bit:='0';

Q: inout bit:='0';

NQ: inout bit:='1');

end DFF;

architecture BEHAVIOR of DFF is

begin

process (S,C,D,R)

variable T: bit:='0';

variable DELAY: time:=0 ns;

begin

assert not (S='0' and R='0')

report "одновременный 0 на S и R входе D-триггера"

severity warning;

if S='0' and R='1' then T:='1';

elsif S='1' and R='0' then T:='0';

elsif R='1' and S='1' and D='1' and C='1' and not C'stable then

T:='1';

elsif R='1' and S='1' and D='0' and C='1' and not C'stable then

T:='0';

else T:=Q;

end if;

if T='0' and Q='1' then

if R='0' then DELAY:=T0R;

else DELAY:=T1C;

end if;

elsif T='1' and Q='0' then

if S='0' then DELAY:=T1S;

else DELAY:=T1C;

end if;

end if;

Q<=T after DELAY;

NQ<=not T after DELAY;

end process;

end BEHAVIOR;