VHDL II

Tom Kelliher, CS 220

Oct. 17, 2001

Administrivia

Announcements

Xilinx tools demo/tutorial: 10/18: 1:30, 2:30; 10/22: 9:30, 3:30; 10/23: 1:30, 2:30, 10/24: 9:30. Call or see me in person. By appointment only.

Assignment

Read 4.1--2.

Assignment due Oct. 26. Pp. 173--179: 3-23, 3-37, 3-42, 3-47, 3-55, 3-64.

From Last Time

Structural VHDL.

Outline

  1. Dataflow VHDL.

  2. Hierarchical VHDL.

  3. Behavioral VHDL.

  4. Class practice.

Coming Up

Introduction to sequential circuits. Latches.

Dataflow VHDL

Last time's EXOR3:

library ieee;
use ieee.std_logic_1164.all;

entity EXOR3 is
   port
   (
      i : in std_logic_vector (2 downto 0),
      o : out std_logic
   );
end EXOR3;

architecture dataflow of EXOR3 is

   signal i2_n, i1_n, i0_n : std_logic;
   signal m1, m2, m3, m4 : std_logic;     -- Minterms.

begin
   i2_n <= not i(2);
   i1_n <= not i(1);
   i0_n <= not i(0);

   m1 <= i2_n and i1_n and i(0);
   m2 <= i2_n and i(1) and i0_n;
   m3 <= i(2) and i1_n and i0_n;
   m4 <= i(2) and i(1) and i(0);

   o <= m1 or m2 or m3 or m4;
end dataflow;

architecture function_table of EXOR3 is
begin
   with i select
      o <= '0' when "000",
           '1' when "001",
           '1' when "010",
           '0' when "011",
           '1' when "100",
           '0' when "101",
           '0' when "110",
           '1' when "111",
           'X' when others;
end function_table;
new VHDL elements: vectors and downto (also ``to''). not, and, or. Concurrent assignment. With-Select, when, others.

Hierarchical VHDL

Use of components. Full binary adder constructed from two half-adders example:

library ieee;
use ieee.std_logic_1164.all;

entity ha is
   port
   (
      a, b : in std_logic;
      c, s : out std_logic
   );
end ha;

architecture dataflow of ha is
begin
   s <= a xor b;
   c <= a and b;
end dataflow;


library ieee;
use ieee.std_logic_1164.all;

entity fa is
   port
   (
      a, b c_i : in std_logic;
      c_o, s   : out std_logic
   );
end fa;

architecture mixed of fa is

   component ha
      port
      (
         a, b : in std_logic;
         c, s : out std_logic
      );
   end component;

   signal hs, hc, tc : std_logic;

begin
   ha1 : ha port map (a, b, hc, hs);
   ha2 : ha port map (hs, c_i, tc, s);

   c_o <= hc or tc;
end mixed;
Nothing really new --- we've seen components already.

Behavioral VHDL

High level VHDL. Four bit adder:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity adder4 is
   port
   (a, b : in std_logic_vector (3 downto 0);
    c0   : in std_logic;
    s    : out std_logic_vector (3 downto 0);
    c4   : out std_logic
   );
end adder4;

architecture behavioral of adder4 is

   signal sum : std_logic_vector (4 downto 0);

begin
   sum <= ('0' & a) + ('0' & b) + ("0000" & c0);
   c4 <= sum(4);
   s <= sum(3 downto 0);
end behavioral;
Note use of ``high level'' operators: +, &.

Class Practice

Write dataflow (includes function table) VHDL for a 4-1 mux.

Using the fa component, design a hierarchical four-bit adder.

Write dataflow VHDL for an eight-input priority encoder.



Thomas P. Kelliher
Tue Oct 16 19:39:33 EDT 2001
Tom Kelliher