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 \NOT\ 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: \NOT\ port map(CV,n1);
DD2: \NOT\ port map(Reset_IE7,n2);
DD3: NAND2 port map(n2,n8,s1);
DD4: \NOT\ 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: \NOT\ 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: \NOT\ 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: \NOT\ 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: \NOT\ 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 \NOT\ 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: \NOT\ 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;