Architecture
  
    
    
     
   
   Formal Definition
  
   A body associated with an entity 
   declaration to describe the internal organization or operation of a 
   design entity. An architecture body is used to describe the behavior,
   data flow, or structure of a design entity. 
  
   Simplified Syntax
  
   architecture 
   architecture_name of entity_name is 
  
     architecture_declarations 
  
   begin 
  
     concurrent_statements 
  
   end [ architecture 
   ] [ architecture_name ]; 
  
   Description
  
   Architecture assigned to an entity describes internal relationship 
   between input and output ports of the entity. It consists of two 
   parts: declarations and concurrent statements. 
  
   First (declarative) part of an architecture may contain declarations 
   of types, signals,
    constants, subprograms (functions 
   and procedures), components,
    and groups. See respective 
   topics for details. 
  
   Concurrent statements in the architecture 
   body define the relationship between inputs and outputs. This 
   relationship can be specified using different types of statements: concurrent
    signal assignment, process statement,
    component instantiation, concurrent
    procedure call, generate statement,
    concurrent assertion statement and
    block statement. It can be 
   written in different styles: structural, dataflow, behavioral 
   (functional) or mixed. 
  
   The description of a structural 
   body is based on component instantiation 
   and generate statements. It 
   allows to create hierarchical projects, from simple gates to very 
   complex components, describing entire subsystems. The connections 
   among components are realized through ports. Example 1 illustrates 
   this concept for a BCD decoder. 
  
   The Dataflow description is 
   built with concurrent signal assignment 
   statements. Each of the statements can be activated when any of its 
   input signals changes its value. While these statements describe the 
   behavior of the circuit, a lot of information about its structure can 
   be extracted form the description as well. Example 2 contains this 
   type of description for the same BCD decoder as in the previous example. 
  
   The architecture body 
   describes only the expected functionality (behavior)
    of the circuit, without any direct indication as to the hardware 
   implementation. Such description consists only of one or more processes,
    each of which contains sequential statements (Example 3). 
  
   The architecture body may 
   contain statements that define both behavior and structure of the 
   circuit at the same time. Such architecture 
   description is called mixed (Example
    4). 
  
   Examples
  
   Example 1 
  
   architecture Structure of 
   Decoder_bcd is 
   signal S: Bit_Vector(0 to 1); 
   component AND_Gate 
     port(A,B:in 
   Bit; D:out Bit); 
   end component; 
   component Inverter 
     port(A:in 
   Bit; B:out Bit); 
   end component; 
   begin 
      Inv1:Inverter
    port map(A=>bcd(0),
    B=>S(0)); 
      Inv2:Inverter
    port map(A=>bcd(1),
    B=>S(1)); 
      A1:AND_Gate
    port map(A=>bcd(0),
    B=>bcd(1), D=>led(3)); 
      A2:AND_Gate
    port map(A=>bcd(0),
    B=>S(1), D=>led(2)); 
      A3:AND_Gate
    port map(A=>S(0),
    B=>bcd(1), D=>led(1)); 
      A4:AND_Gate port map(A=>S(0),
    B=>S(1), D=>led(0)); 
   end Structure; 
  
     
   The components Inverter and AND_Gate are instantiated under the names 
   Inv1, Inv2, A1, A2, A3 and A4. The connections among the components 
   are realized by the use of signals S(0), S(1) declared in the 
   architecture's declarative part. 
  
   Example 2 
  
   architecture Dataflow of 
   Decoder_bcd is 
   begin 
      led(3) <= bcd(0) and bcd(1); 
      led(2) <= bcd(0) and 
   (not bcd(1)); 
      led(1) <= (not 
   bcd(0)) and bcd(1); 
      led(0) <= (not 
   bcd(0)) and (not bcd(1)); 
   end Dataflow; 
  
     
   All the four statements here are executed concurrently and each of 
   them is activated individually when any of its input signals changes 
   its value. 
  
   Example 3 
  
   architecture procedural of 
   Decoder_bcd is 
   signal S: bit_vector (3 downto 0); 
   begin 
      P1: process 
   (bcd, S) 
      begin 
        case 
   bcd is 
            when 
   "00" => S <= "0001" after 
   5 ns; 
            when 
   "01" => S <= "0010" after 
   5 ns; 
            when 
   "10" => S <= "0100" after 
   5 ns; 
            when 
   "11" => S <= "1000" after 
   5 ns; 
        end case; 
      led <= S; 
      end process; 
   end procedural; 
  
     
   The clause "after 5 ns" here allows to introduce time delay 
   of the circuit. The assignment of a new value to the led signal will 
   be done only after 5 nanoseconds of the simulated time. 
  
   Example 4 
  
   architecture Mixed of 
   Decoder_bcd is 
   signal S: Bit_Vector(0 to 2); 
   component Inverter 
      port(A: in 
   Bit; B: out Bit); 
   end component; 
   begin 
   Inv1: Inverter port map 
   (A=>bcd(0), B=>S(0)); 
   Inv2: Inverter port map 
   (A=>bcd(1), B=>S(1)); 
   P: process (S, bcd) 
      begin 
         led(0) <= S(0) and 
   S(1) after 5 ns; 
         led(1) <= S(0) and 
   bcd(1) after 5 ns; 
         led(2) <= bcd(0) and 
   S(1) after 5 ns; 
         led(3) <= bcd(0) and 
   bcd(1) after 5 ns; 
      end process; 
   end Mixed; 
  
     
   Above, two Inverter component instantiation statements define the 
   circuit responsible for determining the value of the signal S. This 
   signal is read by behavioral part i.e. the process statement P. In 
   this process, the values computed by the and operation are assigned 
   to the led output port. 
  
   Important Notes
  
   - 
   
    Single entity can have several architectures, but architecture cannot 
    be assigned to different entities. 
    - 
   
    Architecture may not be used without an entity. 
    - 
   
    All declarations defined in an entity are fully visible and 
    accessible within each architecture assigned to this entity. 
    - 
   
    Different types of statements (i.e. processes, blocks, concurrent 
    signal assignments, component instantiations, etc.) can be used in 
    the same architecture. 
     
  
    
 
    |