lab

1. A VHDL PROGRAM FOR AN N-BIT AND GATE USING GENERIC STATEMENT IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.Std_logic_1164.all;

entity nbitand is

              generic ( n: integer:=8 );

              port( a,b: IN              STD_LOGIC_VECTOR(n-1 DOWNTO 0);

                  and_out: out STD_LOGIC_VECTOR(n-1 DOWNTO 0));

end nbitand; 

architecture arch of nbitand is

signal i: integer;

begin

              process(a,b,i)

              begin

              for i in 0 to n-1 loop

                            and_out(i) <= a(i) and b(i);

              end loop;

end process;

end arch;

 

 

 

 

 

 

 

SIMULATION RESULTS:

 

2. A VHDL PROGRAM FOR HALF ADDER IN DATAFLOW MODEL

Library ieee;

Use ieee.std_logic_1164.all;

entity halfadder is             

              port(a,b: in std_logic;

              sum,ca:out std_logic);

end halfadder;

architecture halfadder of halfadder is

begin

              sum <= a xor b;

              ca <= a and b;

end halfadder;

 

SIMULATION RESULTS:

 

3. A VHDL PROGRAM FOR FULL ADDER USING TWO HALF ADDERS IN STRUCTURAL MODEL

Library ieee;

Use ieee.std_logic_1164.all;

entity fulladder_h is

              port(p: in STD_LOGIC;

                            q: in STD_LOGIC;

                            cin: in STD_LOGIC;

                            s: out STD_LOGIC;

                            carry_out: out STD_LOGIC);

end fulladder_h;

architecture fulladder_h of fulladder_h is

component halfadder

              port(a,b:in std_logic;

              sum,ca:out std_logic);

end component;

component or11

              port(d1,d2: in std_logic;

              q:out std_logic);

end component;

signal si,ci,yi: std_logic;

begin

f1: halfadder port map(p,q,si,ci);

f2: halfadder port map(si,cin,s,yi);

f3: or11 port map(yi,ci,carry_out);

end fulladder_h;

 

 

 

 

 

SIMULATION RESULTS:

 

4. A VHDL PROGRAM FOR FULL ADDER IN DATA FLOW MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity fa is

              port (              p: in STD_LOGIC;

                            q: in STD_LOGIC;

                            c: in STD_LOGIC;

                            s: out STD_LOGIC;

                            carry: out STD_LOGIC);

end fa;

architecture arch of fa is

begin

  s <= p xor q xor c;

  carry <= (p and q) or (q and c) or (c and p);

end arch;

 

SIMULATION RESULTS:

 

5. A VHDL PROGRAM FOR 4-BIT PARALLEL ADDER/RIPPLE ADDER IN STRUCTURAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity parallel_4 is

              port (              a: in STD_LOGIC_VECTOR (3 downto 0);

                            cin: in STD_LOGIC;

                            sum: out STD_LOGIC_VECTOR (3 downto 0);

                            cout: out STD_LOGIC;

                            b: in STD_LOGIC_VECTOR (3 downto 0));

end parallel_4;

architecture adder of parallel_4 is

signal c1,c2,c3: std_logic;

component fa

              port(p,q,c: in std_logic;

              s, carry: out std_logic);

end component;

begin

fa1: fa port map (a(0), b(0),cin, sum(0), c1);

fa2: fa port map (a(1), b(1),c1, sum(1), c2);

fa3: fa port map (a(2), b(2),c2, sum(2), c3);

fa4: fa port map (a(3), b(3),c3, sum(3), cout);

end adder;

 

 

 

 

 

 

 

 

SIMULATION RESULTS:

 

6. A VHDL PROGRAM FOR HALF SUBTRACTOR IN STRUCTURAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity hs is

              port (              x: in STD_LOGIC;

                            y: in STD_LOGIC;

                            diff: out STD_LOGIC;

                            borrow: out STD_LOGIC);

end hs;

architecture subtract of hs is

component xor1

              port(a,b: in std_logic;

              c:out std_logic);

end component;

component not1

              port(p: in std_logic;

              z: out std_logic);

end component;

component and1

              port( l,m: in std_logic;

              n:out std_logic);

end component;

signal xbar : std_logic;

begin

d1: xor1 port map (x,y,diff);

n1: not1 port map (x,xbar);

a1: and1 port map (xbar,y,borrow);

end subtract;

SIMULATION RESULTS:

 

7. A VHDL PROGRAM FOR FULL SUBTRACTOR IN DATAFLOW MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity fs is

              port ( x: in STD_LOGIC;

                            y: in STD_LOGIC;

                            bin: in STD_LOGIC;

                            diff: out STD_LOGIC;

                            borrow: out STD_LOGIC);

end fs;

architecture arch of fs is

begin

  diff <= ((not x) and (y xor bin)) or (x and(y xnor bin));

  borrow <= ((not x) and (bin or y)) or (y and bin);

end arch;

 

SIMULATION RESULTS:

 

8. A VHDL PROGRAM FOR 2x4 DECODER IN STRUCTURAL MODEL

Library ieee;

Use ieee.std_logic_1164.all;

entity \2_4decoder\ is

              port(a,b,en :in std_logic;

              d: out std_logic_vector(3 downto 0));             

end \2_4decoder\;

architecture \2_4decoder\ of \2_4decoder\ is

component and_3

              port(x1,x2,x3: in std_logic;

              z1: out std_logic);

end component;

component not1

              port (p: in std_logic;

              z: out std_logic);

end component;

signal a_bar,b_bar: std_logic;

begin             

l1: not1 port map(a,a_bar);

l2: not1 port map(b,b_bar);

l3: and_3 port map(a_bar,b_bar,en,d(0));

l4: and_3 port map(a_bar,b,en,d(1));

l5: and_3 port map(a,b_bar,en,d(2));

l6: and_3 port map(a,b,en,d(3));

end \2_4decoder\;

 

 

 

 

 

SIMULATION RESULTS:

 

9. A VHDL PROGRAM FOR 8 x 3 ENCODER IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity encode8_3 is

              port (              en: in STD_LOGIC;

                            A: in STD_LOGIC_VECTOR (7 downto 0);

                            q: out STD_LOGIC_VECTOR (2 downto 0));

end encode8_3;

architecture arch of encode8_3 is

signal z: std_logic_vector(2 downto 0);

begin

              process(a,en)

              begin

  case A is

                 when "00000001" => z <= "000";

                 when "00000010" => z <= "001";

                 when "00000100" => z <= "010";

                 when "00001000" => z <= "011";

                 when "00010000" => z <= "100";

                 when "00100000" => z <= "101";

                 when "01000000" => z <= "110";

                 when "10000000" => z <= "111";

                 when others => z <= "UUU";

  end case;

  end process;

  q<= z when en = '0' else unaffected;

end arch;

 

 

 

 

SIMULATION RESULTS:

 

10. A VHDL PROGRAM FOR 8 x 3 PRIORITY ENCODER IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

Use ieee.std_logic_arith.all;

entity priorityencoder is

              port (    i: in STD_LOGIC_VECTOR (7 downto 0);

                            en_l: in STD_LOGIC;

                            q: out STD_LOGIC_VECTOR (2 downto 0);

                            gs: out STD_LOGIC);

end priorityencoder;

architecture beh of priorityencoder is

begin

process(i,en_l)

variable j: integer range 7 downto 0;

begin

              if en_l = '1' then gs <='0';

                            q <= "000";

              else

                            for j in 7 downto 0 loop

                                          if i(j) = '1' then gs <= '1';

                                                        q <= conv_std_logic_vector(j,3);

                                                        exit;

                                          else gs <= '0';

                                                        q <= "000";

                                          end if;

                            end loop;

              end if;

              end process;

end beh;

 

SIMULATION RESULTS:

 

11. A VHDL PROGRAM FOR 8 x 3 PRIORITY ENCODER IN DATAFLOW MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity priority is

              port (              i: in STD_LOGIC_VECTOR (7 downto 0);

                            en: in STD_LOGIC;

                            q: out STD_LOGIC_VECTOR (2 downto 0));

end priority;

architecture encoder8_3 of priority is

signal q_i : std_logic_vector(2 downto 0);

signal h: std_logic_vector (7 downto 0);

begin

q <= q_i when en = '1' else "UUU";

              h(7) <= i(7);

              h(6) <= (not i(7)) and i(6);

              h(5) <= (not i(7)) and (not i(6)) and i(5);

              h(4) <= (not i(7)) and (not i(6)) and (not i(5)) and i(4);

              h(3) <= (not i(7)) and (not i(6)) and (not i(5)) and (not i(4)) and i(3);

              h(2) <= (not i(7)) and (not i(6)) and (not i(5)) and (not i(4)) and (not i(3)) and i(2);

              h(1) <= (not i(7)) and (not i(6)) and (not i(5)) and (not i(4)) and (not i(3)) and (not    i(2)) and i(1);

              h(0) <= (not i(7)) and (not i(6)) and (not i(5)) and (not i(4)) and (not i(3)) and (not i(2)) and (not i(1)) and i(0);

              q_i(2) <= h(7)or h(6)or h(5)or h(4);

              q_i(1) <= h(7)or h(6)or h(3)or h(2);

              q_i(0) <= h(7)or h(5)or h(3)or h(1);

end encoder8_3;

 

 

 

 

SIMULATION RESULTS:

 

12. A VHDL PROGRAM FOR 4 x 1 MULTIPLEXER IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity mux4_1 is

              port (              s: in STD_LOGIC_VECTOR (1 downto 0);

                            d: in STD_LOGIC_VECTOR (3 downto 0);

                            y: out STD_LOGIC);

end mux4_1;

architecture beh of mux4_1 is

begin

process(s,d)

begin

              case s is

                            when "00" =>y<= d(0);

                            when "01" =>y<= d(1);

                            when "10" =>y<= d(2);

                            when "11" =>y<= d(3);

                            when others => y <= 'U';

              end case;

end process;

end beh;

 

SIMULATION RESULTS:

13. A VHDL PROGRAM FOR 4 x 1 MULTIPLEXER IN DATAFLOW MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity multiplexer4_1 is

              port(s: in std_logic_vector(1 downto 0);

              d: in std_logic_vector(3 downto 0);

              en: in std_logic;

              y: out std_logic);

end multiplexer4_1;

architecture multiplexer4_1 of multiplexer4_1 is

signal y_i: std_logic;

begin

with s select

y_i <= d(0) when "00",

        d(1) when "01",

        d(2) when "10",

        d(3) when "11",

        'U' when others;

y<= y_i when (not en) = '1' else 'U';

end multiplexer4_1;

SIMULATION RESULTS:

 

14. A VHDL PROGRAM FOR 8 x 1 MULTIPLEXER IN STRUCTURAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity mux8_1 is

              port (              d0,d1,d2,d3,d4,d5,d6,d7: in STD_LOGIC;

                            s0,s1,s2,en: in STD_LOGIC;

                            y: out STD_LOGIC);

end mux8_1;

architecture struct of mux8_1 is

component and5

              port( a,b,c,d,e:in std_logic;

              q: out std_logic);

end component;

component not1

              port( p: in std_logic;

              z: out std_logic);

end component;

component or8

              port(i0,i1,i2,i3,i4,i5,i6,i7: in std_logic;

              r:out std_logic);

end component;

signal s2b,s1b,s0b: std_logic;

signal a1,a2,a3,a4,a5,a6,a7,a8: std_logic;

begin

n1: not1 port map (s0,s0b);

n2: not1 port map (s1,s1b);

n3: not1 port map (s2,s2b);

an1: and5 port map( d0,s2b,s1b,s0b,en,a1);

an2: and5 port map( d1,s2b,s1b,s0,en,a2);

an3: and5 port map( d2,s2b,s1,s0b,en,a3);

an4: and5 port map( d3,s2b,s1,s0,en,a4);

an5: and5 port map( d4,s2,s1b,s0b,en,a5);

an6: and5 port map( d5,s2,s1b,s0,en,a6);

an7: and5 port map( d6,s2,s1,s0b,en,a7);

an8: and5 port map( d7,s2,s1,s0,en,a8);

o1: or8 port map(a1,a2,a3,a4,a5,a6,a7,a8,y);

end struct;

 

SIMULATION RESULTS:

15. A VHDL PROGRAM FOR 3 – BIT COMPARATOR IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity bit_3comparator is

              port(a,b: in std_logic_vector(2 downto 0);

              en: in std_logic;

              agrb,alsb,aeqb: out std_logic);

end bit_3comparator;

architecture bit_3comparator of bit_3comparator is

begin

process(a,b,en)

begin

              if en = '1' then agrb <= '0'; alsb <= '0'; aeqb <= '0';

              elsif en = '0' then

                            if a(2) > b(2) then agrb <= '1'; alsb <= '0'; aeqb <= '0';

                            elsif a(2) < b(2) then agrb <= '0'; alsb <= '1'; aeqb <= '0';

                            elsif a(2) = b(2) and a(1) > b(1) then agrb <= '1'; alsb <= '0'; aeqb <= '0';

                            elsif a(2) = b(2) and a(1) < b(1) then agrb <= '0'; alsb <= '1'; aeqb <= '0';

                            elsif a(2) = b(2) and a(1) = b(1) and a(0) > b(0) then agrb <= '1'; alsb <= '0'; aeqb <= '0';

                            elsif a(2) = b(2) and a(1) = b(1) and a(0) < b(0) then agrb <= '0'; alsb <= '1'; aeqb <= '0';

                            else agrb <= '0'; alsb <= '0'; aeqb <= '1';

                            end if;

              end if;

end process;

end bit_3comparator;

 

SIMULATION RESULTS:

 

16. A VHDL PROGRAM FOR 4 – BIT COMPARATOR IN STRUCTURAL MODEL

Library ieee;

Use ieee.std_logic_1164.all;

entity bit_4comparator is

          port(  p, q: in std_logic_vector (3 downto 0);

                      p_notequal_q: out std_logic);

end bit_4comparator;

architecture bit_4comparator of bit_4comparator is

component xor1

              port(a,b: in std_logic;

              c: out std_logic);

end component;

component or4

              port(u,v,w,x: in std_logic;

              o: out std_logic);

end component;

component not1

              port(p: in std_logic;

              z: out std_logic);

end component;

signal diff0,diff1,diff2,diff3: std_logic;

begin

c1: xor1 port map(p(0),q(0),diff0);

c2: xor1 port map(p(1),q(1),diff1);

c3: xor1 port map(p(2),q(2),diff2);

c4: xor1 port map(p(3),q(3),diff3);

c5: or4 port map(diff0,diff1,diff2,diff3,p_notequal_q);

end bit_4comparator;

 

SIMULATION RESULTS:

 

17. A VHDL PROGRAM FOR A 4 – BIT / MOD 16 COUNTER IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

Use IEEE. std_logic_unsigned.all;

entity count_4 is

              port (   clk: in STD_LOGIC;

                            q: out STD_LOGIC_VECTOR (3 downto 0);

                            res: in STD_LOGIC);

end count_4;

architecture arch of count_4 is

signal count: std_logic_vector(3 downto 0):= "0000";

begin

              process (clk, res)

              begin

              if res = '1' then count <= "0000";

              elsif clk'event and clk = '1' and res = '0' then

                            if count = "1111" then count <= "0000";

                            else count <=  count + "0001";

                            end if;

              end if;

              end process;

                            q<= count;

end arch;

 

 

 

SIMULATION RESULTS:

 

18. A VHDL PROGRAM FOR A 4 – BIT UP – DOWN COUNTER IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

entity upndown is

              port (              clk: in STD_LOGIC;

                            res: in STD_LOGIC;

                            up: in STD_LOGIC;

                            down: in STD_LOGIC;

                            q: out STD_LOGIC_VECTOR (3 downto 0));

end upndown;

architecture count of upndown is

signal count: std_logic_vector(3 downto 0):= "0000";

signal ud: std_logic_vector(1 downto 0);

begin

              ud <= up & down;

              process(clk,count,ud)

              begin

              if clk'event and clk = '1' then

                            if res = '1' then count <= "0000";

                            elsif ud = "10" then count <= count + "0001";

                            elsif ud = "01" then count <= count              - "0001";

                            else count <= count;

                            end if;

              end if;              q <= count;

              end process;                           

end count;

 

 

 

 

SIMULATION RESULTS:

 

19. A VHDL PROGRAM FOR D FLIP – FLOP IN STRUCTURAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity dff is

              port (              d: in STD_LOGIC;

                            clk: in STD_LOGIC;

                            q: in STD_LOGIC;

                            qbar: inout STD_LOGIC;

                            qt: inout STD_LOGIC;

                            qtbar: out STD_LOGIC);

end dff;

architecture arch of dff is

component nand1 port(a,b: in std_logic;

              c:out std_logic);

end component;

component not1

              port(p:in std_logic;

              z:out std_logic);

end component;

signal n1,n2,n3:std_logic;

begin

  n:not1 port map (d,n1);

  nn:not1 port map(q, qbar);

  o1: nand1 port map(d, clk, n2);

  o2: nand1 port map(n1, clk, n3);

  o3: nand1 port map(n2, qbar, qt);

  o4: nand1 port map(n3,qt,qtbar);

end arch;

 

 

 

SIMULATION RESULTS:

 

20. A VHDL PROGRAM FOR A D FLIP – FLOP IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity dff1 is

              port ( d: in STD_LOGIC;

                               clk: in STD_LOGIC;

                               clr: in STD_LOGIC;

                               q: out STD_LOGIC;

                               qn: out STD_LOGIC);

end dff1;

architecture arch of dff1 is

begin

  process (clk, clr)

  begin

                if clr = '1' then q<= '0'; qn <= '1';

                elsif clk'event and clk = '1' then q <= d; qn<= not d;

                end if;

  end process;

end arch;

 

SIMULATION RESULTS:

 

21. A VHDL PROGRAM FOR A S-R FLIP FLOP IN BEHAVIORAL MODEL

Library ieee;

Use ieee.std_logic_1164.all;

entity sr_ff is

              port(s,r,clk,q: in STD_LOGIC;

              qt: out STD_LOGIC);

end sr_ff;

architecture sr_ff of sr_ff is

signal t: std_logic_vector(1 downto 0);

begin

  process(s,r,clk)

  begin

                t <= s & r;

                if (clk'event and clk = '1') then

                              if t = "00" then qt <= q;

                              elsif t = "01" then qt <= '0';

                              elsif t = "10" then qt <= '1';

                              elsif t = "11" then qt <= 'U';

                                            else qt <= 'U';

                              end if;

                end if;

  end process;

end sr_ff;

 

SIMULATION RESULTS:

 

22. A PROGRAM FOR J – K FLIP – FLOP IN DATA FLOW MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity jkff is

              port (              j,k,clk,q: in STD_LOGIC;

                            qbar: inout STD_LOGIC;

                            qt: out STD_LOGIC);

end jkff;

architecture arch of jkff is

begin

  qbar <= not q;

  qt <= (j and qbar and clk) or ((not k) and q and clk);

end arch;

SIMULATION RESULTS:

 

23. A PROGRAM FOR A T FLIP – FLOP IN DATA FLOW MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity tff is

              port (              t,q: in STD_LOGIC;

                            clk: in STD_LOGIC;

                            qn: out STD_LOGIC);

end tff;

architecture arch of tff is

begin

  qn <= (t xor q) and clk;

end arch;

SIMULATION RESULTS:

 

24. A PROGRAM FOR A COMBINATIONAL MULTIPLIER IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity multiplier is

              port (              x: in STD_LOGIC_VECTOR (3 downto 0);

                            y: in STD_LOGIC_VECTOR (3 downto 0);

                            p: out STD_LOGIC_VECTOR (7 downto 0));

end multiplier;

architecture arch of multiplier is

function carry (i1,i2,i3: std_logic) return std_logic is

begin

              return ((i1 and i2) or (i1 and i3) or (i2 and i3));

end carry;

begin

              process( x,y )

type array4_4 is array (0 to 3) of std_logic_vector( 3 downto 0);

variable pc,pcs,pcc: array4_4;

variable ras,rac: std_logic_vector (3 downto 0);

begin

              for i in 0 to 3 loop

                            for j in 0 to 3 loop

                                          pc(i)(j) := y(i) and x(j);

                            end loop;

              end loop;

              for j in 0 to 3 loop

                            pcs(0)(j) := pc(0)(j);

                            pcc(0)(j) := '0';

              end loop;

              for i in 1 to 3 loop

                            for j in 0 to 2 loop

                                          pcs(i)(j) := pc(i)(j) xor pcs(i-1)(j+1) xor pcc(i-1)(j);

                                          pcc(i)(j) := carry(pc(i)(j), pcs(i-1)(j+1), pcc(i-1)(j));

                                          pcs(i)(3) := pc(i)(3);

                            end loop;

              end loop;

              rac(0) := '0';

              for i in 0 to 2 loop

                            ras(i) := pcs(3)(i+1) xor pcc(3)(i) xor rac(i);

                            rac(i+1) := carry (pcs(3)(i+1), pcc(3)(i), rac(i));

              end loop;

              for i in 0 to 3 loop

                            p(i) <= pcs(i)(0);

              end loop;

              for i in 4 to 6 loop

                            p(i) <= ras(i-4);

              end loop;

              p(7) <= rac(3);

end process;

end arch;

 

 

 

 

SIMULATION RESULTS:

 

25. A PROGRAM FOR ARITHMETIC LOGIC UNIT (ALU) IN BEHAVIORAL MODEL

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_arith.all;

Use ieee.std_logic_unsigned.all;

entity alu1 is

port(a,b:in std_logic_vector(3 downto 0);

     c1:out std_logic_vector(7 downto 0);

     op:in std_logic_vector(2 downto 0));

end alu1;

architecture alu1 of alu1 is

begin

  process(a,b,op)

  begin

                c1 <="00000000";

  case op is

  when "001"=>c1<=a+b;

  when "010"=>c1<=a-b;

  when "011"=>c1<=a*b;

  when "100"=>c1<=a and b;

  when "101"=>c1<=a or b;

  when "110"=>c1<=not(a);

  when "111"=>c1<=a xor b;

  when others=>c1<="00000000";

  end case;

  end process;

end alu1;

 

 

 

SIMULATION RESULTS:

 

26. A PROGRAM FOR SHIFTING 8-BIT DATA LEFT BY 2 BITS IN BEHAVIORAL MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

entity leftshifter is

              port(din: in STD_LOGIC_VECTOR(7 downto 0);

              dout: out STD_LOGIC_VECTOR(7 downto 0));

end leftshifter;

architecture leftshifter of leftshifter is

begin

  process(din)

  variable i : integer;

  begin

              a: for i in 0 to 5 loop

                            dout(i+2) <= din(i);

                end loop;

                dout(0) <= '0';

                dout(1) <= '0';

  end process;

end leftshifter;

 

SIMULATION RESULTS:

 

27. A VHDL PROGRAM TO FIND 2’S COMPLEMENT OF 8 – BIT DATA IN DATAFLOW MODEL

Library IEEE;

Use IEEE.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity compl_2 is

              port ( din: in STD_LOGIC_VECTOR(7 downto 0);

                               dout: out STD_LOGIC_VECTOR(7 downto 0));

end compl_2;

architecture compl_2 of compl_2 is

signal compl_1: std_logic_vector(7 downto 0);

begin

              compl_1 <= not(din);

              dout <= compl_1 +'1';

end compl_2;

 

 

 

 

 

 

SIMULATION RESULTS:

 

28. A PROGRAM FOR A FSM TO DETECT THE SEQUENCES “1011”, “1010”, “1000” IN BEHAVIORAL MODEL

Library ieee;

Use ieee.std_logic_1164.all;

entity fsm is port(x, clk: in STD_LOGIC;

              Z: out STD_LOGIC);

end fsm;

architecture design of fsm is 

subtype state_type is std_logic_vector(2 downto 0) ;

signal state, next_state: state_type;

constant A:state_type :="000";

constant B:state_type :="001";

constant C:state_type :="010";

constant D:state_type :="011";

constant E:state_type :="100";

constant F:state_type :="101";

begin

              process(clk)

              begin

                            if clk'event and clk = '1' then

                                          state <= next_state ;

                            end if;

              end process;

              process(x, state)

              begin

                            case state is

                                          when A => if x = '0' then next_state <= A; Z <= '0';

                                          elsif x = '1' then next_state <= B; Z <= '0';

                                          end if;             

                                          when B => if x = '0' then next_state <= C; Z <= '0';

                                          elsif x = '1' then next_state <= B; Z <= '0';

                                          end if;

                                          when C => if x = '0' then next_state <= F; Z <= '0';

                                          elsif x = '1' then next_state <= D; Z <= '0';

                                          end if;

                                          when D => if x = '0' then next_state <= C; Z <= '1';

                                          elsif x = '1' then next_state <= E; Z <= '1';

                                          end if;

                                          when E => if x = '0' then next_state <= C; Z <= '0';

                                          elsif x = '1' then next_state <= A; Z <= '0';

                                          end if;

                                        when F => if x = '0' then next_state <= A; Z <= '1';

                                          elsif x = '1' then next_state <= B; Z <= '0';

                                          end if;

                                          when others => next_state <= A;

                            end case;

              end process;

end design;

 

 

SIMULATION RESULTS:

Detecting “1000” sequence:

 

Detecting “1011” sequence:

48

 


No comments:

Post a Comment