traded for the good design, therefore the knowledge of all factors effecting the design and their interdependence are important. Most designs nowadays are large and complex. A successful designer has to structure his design and use design automation tools available. In general a successful designer uses the following 4 principals to achieve his design effectively and quickly. Hierarchy Regularity Modularity Locality Hierarchy, This is an extremely useful strategy when you have a complex system. It is the process of divide and conquer. The overall system is repeatedly divided into subunits and in turn the subunits are divided further until no further division is possible or the subunits are available in the library. At this stage the design is more manageable since the smaller sub-modules can be designed easier. The hierarchy can be in different domain in software or hardware modules For example a VHDL entity module can be written or structurally designed in a hierarchical fashion. Parallel hierarchy is implemented in all domains. As an example a 4-bit adder can be designed by dividing the adder into 4 single bit adder, and an adder cab be designed using 2 half adders and so on as shown below: Regularity Regularity Although hierarchy can reduce complexity, however by applying regularity we can reduce complexity of the layout much further, because it simplify the work of the software that automates the design., in turn the design and implementation tasks are reduced, more compact
The composite data types have complex values and have several components associated with it and it also represents an array of values with some relationship to one another. Arrays The data type in which each element has the same subtype i.e. homogeneous elements is called as an array. There are generally two predefined array types namely string and Bit_Vector. The former is used to define a character of elements and the latter is used to define an array of bits. They are- Type string is array (positive range <>) of character; Type Bit_Vector is array (natural range <>) of bit; ?2? Here the notation <> means the range is unconstrained, which indicates the user must specify the range when declaring the object. Both string and Bit_Vector are unconstrained and the user has to specify a range n positive for sting and in natural numbers for Bit_Vector. Some of the user defined array data types Type REGISTER_32_Bit is array (31 downto 0) of Bit; Subtype BITVECT3 is Bit_Vector (0 to 2); The REGISTER_32_Bit is a constrained array type which is descending in value. As the Bit vector is an unconstrained data type, subtypes with specific index ranges can be declared. BITVECT3 is a subtype of type Bit_Vector with an ascending index range 0 to 2. Declaration of data objects Before the referencing of the data types in assignment statement they must be declared. These declared objects are subsequently used in the further section for various other statements. Declaration of constants In declaration of the constants it is imperial that their values are specified. The constant name is separated from the type name by : delimiter and the type name is separated from a constant value by := delimiter. Some examples are-
elseif (SEL=”0001”) then Y (1) <=’0’; elseif (SEL=”0010”) then Y (2) <=’0’; elseif (SEL=”0011”) then Y (3) <=’0’; elseif (SEL=”0100”) then Y (4) <=’0’; elseif (SEL=”0101”) then Y (5) <=’0’; elseif (SEL=”0110”) then Y (6) <=’0’; elseif (SEL=”0111”) then Y (7) <=’0’; elseif (SEL=”1000”) then Y (8) <=’0’; elseif (SEL=”1001”) then Y (9) <=’0’; elseif (SEL=”1010”) then Y (10) <=’0’; elseif (SEL=”1011”) then