0% found this document useful (0 votes)
178 views

VHDL Codes

This document contains information about various digital logic components including decoders, encoders, multiplexers, adders, and subtractors. It provides truth tables and VHDL code examples for 3-to-8 decoders, 8-to-3 encoders, 8-input multiplexers, full adders, ripple carry adders, carry look-ahead adders, and full subtractors. The VHDL examples demonstrate both structural and behavioral modeling approaches.

Uploaded by

rksinha25
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
178 views

VHDL Codes

This document contains information about various digital logic components including decoders, encoders, multiplexers, adders, and subtractors. It provides truth tables and VHDL code examples for 3-to-8 decoders, 8-to-3 encoders, 8-input multiplexers, full adders, ripple carry adders, carry look-ahead adders, and full subtractors. The VHDL examples demonstrate both structural and behavioral modeling approaches.

Uploaded by

rksinha25
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 15

Binary Decoder

Truth Table for a 74x138 3-to-8 binary decoder.


Enable Inputs Outputs
G1 G2 G3 A(2) A(1) A(0) Y(7) Y(6) Y(5) Y(4) Y(3) Y(2) Y(1) Y(0)
1 0 0 0 0 0 1 1 1 1 1 1 1 0
1 0 0 0 0 1 1 1 1 1 1 1 0 1
1 0 0 0 1 0 1 1 1 1 1 0 1 1
1 0 0 0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 0 0 1 1 1 0 1 1 1 1
1 0 0 1 0 1 1 1 0 1 1 1 1 1
1 0 0 1 1 0 1 0 1 1 1 1 1 1
1 0 0 1 1 1 0 1 1 1 1 1 1 1

Data flow style VHDL program for 3-to-8 binary decoder
library ieee;
use ieee.std_logic_1164.all;

entity B_D is
port (G1,G2,G3: in std_logic; ---- enable inputs
A: in std_Logic_vector (2 downto 0); ---- select inputs
Y: out std_logic_vector(0 to 7)); ---- decoded outputs
end B_D;

architecture AA of B_D is
signal out: std_Logic_vector (0 to 7);
begin
with A select out <=
"11111110" when "000",
"11111101" when "001",
"11111011" when "010",
"11110111" when "011",
"11101111" when "100",
"11011111" when "101",
"10111111" when "110",
"01111111" when "111",
"11111111" when others;
Y<= out when (G1 and not G2 and not G3)= '1'
else "11111111";
end AA;


Binary Encoders
Truth Table for 8-to-3 Binary Encoder
Inputs Outputs
I(7) I(6) I(5) I(4) I(3) I(2) I(1) I(0) Y(2) Y(1) Y(0)
0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 1 0 0 0 0 1 1
0 0 0 1 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0 1 0 1
0 1 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 1 1 1

Data flow style VHDL program for 8-to-3 binary encoder
library ieee ;
use ieee.std_logic_1164.all;
entity B_E_1 is
port (
I : in std_logic_vector(7 downto 0) ;
y : out std_logic_vector (2 downto 0) ) ;
end B_E_1 ;

architecture Lab5 of B_E_1 is
begin

Y(0) <= I(1) OR I(3) OR I(5) OR I(7);
Y(1) <= I(2) OR I(3) OR I(6) OR I(7);
Y(2) <= I(4) OR I(5) OR I(6) OR I(7);

End Lab5;






VHDL program for 8-to-3 binary encoder (Using with select statement)
library ieee ;
use ieee.std_logic_1164.all;

entity B_E_1 is
port (G1: in std_logic;
I : in std_logic_vector(7 downto 0) ;
y : out std_logic_vector (2 downto 0) ) ;
end B_E_1 ;

architecture Lab5 of B_E_1 is
signal Out1: std_logic_vector (2 downto 0) ;
begin
with I select Out1 <=
"000" when "00000001",
"001" when "00000010",
"010" when "00000100",
"011" when "00001000",
"100" when "00010000",
"101" when "00100000",
"110" when "01000000",
"111" when "10000000",
"000" when others;
Y<= out1 when G1='1'
else "000";
end Lab5 ;


Multiplexer
Truth Table for 8-input, 1-bit multiplexer
Input Output
En S(2) S(1) S(0) Y(0)
1 x 1 0 Z --High Impedance
0 0 0 0 D
0
---- 000
0 0 0 1 D
1
---- 001
0 0 1 0 D
2
---- 010
0 0 1 1 D
3
---- 011
0 1 0 0 D
4
---- 100
0
0
0
1
1
1
0
1
1
1
0
1
D
5
D
6
D
7
---- 101
---- 110
---- 111

Dataflow VHDL program for 8-input, 1-bit multiplexer
library ieee;
use ieee.std_logic_1164.all;

entity Lab_7 is port ( s: in integer range 0 to 7;
d0,d1,d2,d3,d4,d5,d6,d7: in std_logic;
en: in std_logic;
Y: out std_logic); end lab_7;
Architecture AA of lab_7 is
signal Q1:std_logic;
begin
with s select Q1<=
d0 when 0, d1 when 1,
d2 when 2, d3 when 3,
d4 when 4, d5 when 5,
d6 when 6, d7 when 7,
'Z' when others;
Y<= Q1 when en='0' else 'Z';
end AA;


Behavioral program for 8-input, 1-bit multiplexer
library ieee;
use ieee.std_logic_1164.all;

entity mux is port ( s: in integer range 0 to 7;
d0,d1,d2,d3,d4,d5,d6,d7: in std_logic;
en: in std_logic;
Y: out std_logic); end mux;

Architecture AA of mux is
begin
process(s,d0,d1,d2,d3,d4,d5,d6,d7)
begin
if en='1' then
case s is
when 0 => y <= d0; when 1 => y <= d1;
when 2 => y <= d2; when 3 => y <= d3;
when 4 => y <= d4; when 5 => y <= d5;
when 6 => y <= d6; when 7 => y <= d7;
when others => y <= 'Z';
end case;
else Y<='Z';
end if;
end process;
end AA;


Full Adder

S= X + Y + Cin
Cout= X.Y + X.Cin + Y. Cin

Truth Table for the full adder
INPUTS OUTPUTS
CIN A B SUM COUT
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

Structural style VHDL program for the full adder
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY Lab_8 IS
PORT(
x : IN STD_LOGIC;
y : IN STD_LOGIC;
c_in : IN STD_LOGIC;
sum : OUT STD_LOGIC;
c_out : OUT STD_LOGIC);
END lab_8;

ARCHITECTURE ll OF Lab_8 IS
signal (q1,q2,q3,q4: std_logic;
component xor1 is port( X,Y: in std_logic; f:out std_logic); end component;
component and1 is port( X0,Y0: in std_logic; f0:out std_logic); end component;;
component or1 is port( X1,Y1,Z1: in std_logic; f1:out std_logic); end component;
Begin
u1: xor1 port map (x,y,q1);
u2: xor1 port map (q1,c_in,sum);
u3: and1 port map (x0,y0,q2);
u4: and1 port map (x0,c_in,q3);
u5: and1 port map (y0,c_in,q4);
u6: or1 port map (q2,q3,q4,c_out);
end ll;


Ripple Adder

Structural program for 4-bit ripple adder
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ra is
port ( x0,x1,x2,x3,c0,y1,y2,y3,y0:in std_logic;
s0,s1,s2,s3,c4: out std_logic);
end ra ;

architecture logicfunc of ra is
signal c1,c2,c3:std_logic;

COMPONENT l8 IS PORT(x,y,CN:in std_logic; sum,cout: out std_logic);end component;

BEGIN
u1: l8 PORT MAP (x0,Y0,c0,s0,c1);
u2: l8 PORT MAP (c1,x1,y1,s1,c2);
u3: l8 PORT MAP (c2,y2,x2,s2,c3);
u4: l8 PORT MAP (c3,x3,y3,c4,s3);
END logicfunc;


Carry Lock-Ahead Adder

P
i
= A
i
+ B
i
Carry propagate
G
i
= A
i
. B
i
Carry generate
S
i
= P
i
+ C
i

C
i+1
= G
i
+ P
i
C
i
Equations for a 4-bit adder:
G
0
= X
0
. Y
0
G
1
= X
1
. Y
1
G
2
= X
2
. Y
2
G
3
= X
3
. Y
3

P
0
= X
0
+ Y
0
P
1
= X
1
+ Y
1
P
2
= X
2
+ Y
2
P
3
= X
3
+ Y
3

S
0
= P
0
+ C
0
S
1
= P
1
+ C
1

S
2
= P
2
+ C
2

S
3
= P
3
+ C
3



C
1
= G
0
+ P
0
C
0
C
2
= G
1
+ P
1
C
1
= G
1
+ P
1
(G
0
+ P
0
C
0
) = G
1
+ P
1
G
0
+ P
1
P
0
G
0

C
3
= G
2
+ P
2
C
2
= G
2
+ P
2
G
1
+ P
2
P
1
G
0
+ P
2
P
1
P
0
C
0

C
4
= G
3
+ P
3
C
3
= G
3
+ P
3
G
2
+ P
3
P
2
G
1
+ P
3
P
2
P
1
G
0
+ P
3
P
2
P
1
P
0
C
0

C
1
= G
0
+ P
0
C
0
C
2
= G
1
+ P
1
C
1
C
3
= G
2
+ P
2
C
2
C
4
= G
3
+ P
3
C
3
Dataflow style VHDL program for the carry look-ahead adder
library ieee;
use ieee.std_logic_1164.all;

entity CLA_D is
port( x:in std_logic_vector(3 downto 0);
y:in std_logic_vector(3 downto 0);
c0: in std_logic;
s: out std_logic_vector(3 downto 0);
c4:out std_logic);
end CLA_D;

architecture CLA of CLA_D is
signal c1,c2,c3,g0,g1,g2,g3,p0,p1,p2,p3:std_logic;

begin
g0<=x(0) and y(0);
g1<=x(1) and y(1);
g2<=x(2) and y(2);
g3<=x(3) and y(3);

p0<=x(0) xor y(0);
p1<=x(1) xor y(1);
p2<=x(2) xor y(2);
p3<=x(3) xor y(3);

s(0)<=p0 xor c0;
s(1)<=p1 xor c1;
s(2)<=p2 xor c2;
s(3)<=p3 xor c3;

c1<=g0 or (p0 and c0);
c2<=g1 or (p1 and c1);
c3<=g2 or (p2 and c2);
c4<=g3 or (p3 and c3);

end CLA;


Subtractor
D= X + Y + Bin
Bout= X.Y + X.Bin + Y. Bin

Input Output
Bin X Y D Bout
0 0 0 0 0
0 0 1 1 1
0 1 0 1 0
0 1 1 0 0
1 0 0 1 1
1
1
1
0
1
1
1
0
1
0
0
1
1
0
1

Structural VHDL program for Full Subtractor
library ieee;
use ieee.std_logic_1164.all;

entity FS is
port ( x,y,Bin: in std_logic;
D, Bo: out std_logic);
end FS;

architecture Sub of FS is
signal NX,Q1,Q2,Q3,Q4: std_logic;

Component and1 is port ( X0,Y0:in std_logic; F0:out std_logic);end component;
Component xor1 is port ( x1,y1:in std_logic; F1:out std_logic);end component;
Component or1 is port ( X2,y2,z:in std_logic;F2:out std_logic);end Component;
Component inv is port ( X3:in std_logic; F3:out std_logic);end Component;

Begin
U1: inv port map(x,NX);
U2: xor1 port map(x,y,Q1);
U3: xor1 port map(Q1,Bin,D);
U4: and1 port map(NX,Y,Q2);
U5: and1 port map(NX,Bin,Q3);
U6: and1 port map(Y,Bin,Q4);
U7: or1 port map(Q2,Q3,Q4,Bo);

end Sub;







Behavioral (if statement) VHDL program for Full Subtractor
library IEEE;
use IEEE.std_logic_1164.all;

entity FSB is
port (x,y,Bin: in std_logic;
D, Bout: out std_logic);

end FSB;

architecture bb of FSB is
begin
process (x,y,Bin)
begin
if (x = '0' and y = '0' and Bin ='0') then
D <= '0' ;
Bout <= '0';

elsif (x = '0' and y = '1' and Bin ='0') then
D <= '1' ;
Bout <= '1';

elsif (x = '1' and y = '0' and Bin ='0')then
D <= '1' ;
Bout <= '0';

elsif (x = '1' and y = '1' and Bin ='0') then
D <= '0' ;
Bout <= '0';

elsif (x = '0' and y = '0' and Bin ='1') then
D <= '1' ;
Bout <= '1';

elsif (x = '0' and y = '1' and Bin ='1') then
D <= '0' ;
Bout <= '1';

elsif (x = '1' and y = '0' and Bin ='1')then
D <= '0' ;
Bout <= '0';

elsif (x = '1' and y = '1' and Bin ='1') then
D <= '1' ;
Bout <= '1';

else
D <= '0' ;
Bout <= '0';
end if;
end process;
end bb;

Behavioral (Simple statement) VHDL program for Full Subtractor
library ieee;
use ieee.std_logic_1164.all;

entity FS is
port ( X,Y,Bin: in std_logic;
D,Bout:out std_logic);
end FS;

architecture Sub of FS is
begin

process(x,y,Bin)

begin
D<= (X xor Y) xor Bin;
Bout<= (not x and Y)or(not X and Bin)or(Y and Bin);
end process;

end Sub;



Active High Input ( S-R Latches)



Behavioral style VHDL program for the Active High S-R Latch(With case statements
library ieee;
use ieee.std_logic_1164.all;

entity AH is
port( S_R: in std_logic_vector (1 downto 0) ;
Q_QN:buffer std_logic_vector (1 downto 0));
end AH;

architecture F of AH is
begin
process (S_R)
begin
case s_r is

when "00" => Q_QN <= "ZZ";
when "01" => Q_QN <= "01";
when "10" => Q_QN <= "10";
when "11" => Q_QN <= "00";

end case;
end process;
end F;



Behavioral style VHDL program for the Active High S-R Latch(With if statements)
library ieee;
use ieee.std_logic_1164.all;

entity AH1 is
port( S,R: in std_logic ;
Q, QN:buffer std_logic);
end AH1;

architecture F of AH1 is
begin
process (S,R)
begin
if ( s='0' and r='0') then Q<='Z';QN<='Z';
elsif ( s='0' and r='1') then Q<='0';QN<='1';
elsif ( s='1' and r='0') then Q<='1';QN<='0';
elsif ( s='1' and r='1') then Q<='0';QN<='0';

end if;
end process;
end F;end process;
end F;



Active Low Input (S-R Latches)


Behavioral style VHDL program for the Active Low S-R Latch(With simple statements)
library ieee;
use ieee.std_logic_1164.all;

entity AL is
port( S,R:in std_logic ;
Q,QN:buffer std_logic);
end AL;

architecture F of AL is
begin

Q<= s nand QN;
QN<= r nand Q;

end F;


Behavioral style VHDL program for the Active Low S-R Latch(With if statements)
library ieee;
use ieee.std_logic_1164.all;

entity AL1 is
port( S,R: in std_logic ;
Q, QN:buffer std_logic);
end AL1;

architecture F of AL1 is
begin
process (s,r)
begin
if ( s='0' and r='0') then Q<='1';QN<='1';
elsif ( s='0' and r='1') then Q<='1';QN<='0';
elsif ( s='1' and r='0') then Q<='0';QN<='1';
elsif ( s='1' and r='1') then Q<='Z';QN<='Z';

end if;
end process;
end F;

You might also like