vhdl training report

25
TABLE OF CONTENTS 1. INTRODUCTION 1.1 VHDL DESIGN FLOW 1.2. INITIAL DESIGN ENTRY 1.3. WHAT IS VHDL? 1.4. HISTORY 1.5. CAPABILITES OF VHDL 1.6. ADVANTAGES OF VHDL OVER PROCEDURAL LANGUAGES 2. THE VHDL DESIGN HIERARCHY 2.1. DESING ENETITY 2.2. ENTITY DECLARATION 2.3. ARCHITECTURE BODY 2.3.1 DATA FLOW STYLE 2.3.2 BEHAVIORAL STYLE 2.3.3 STRUCTURAL STYLE 3. LOGIC SYNTHESIS 3.1. LOGIC OPTIMIZATION TECHNIQUES a)AREA OPTIMIZATION b)SPEED OPTIMIZATION 4. FPGA 5. ALU 6 Code For 8 bit Adder-Substractor 7 Code for 8 bit Multiplier 8 Code for Final ALU 9 Future Prospects of VHDL

Upload: abhishek-kumar

Post on 28-Nov-2015

537 views

Category:

Documents


1 download

DESCRIPTION

summer training report on vhdl.in cetpa infotech in roorkee

TRANSCRIPT

TABLE OF CONTENTS

1. INTRODUCTION

1.1 VHDL DESIGN FLOW

1.2. INITIAL DESIGN ENTRY

1.3. WHAT IS VHDL?

1.4. HISTORY

1.5. CAPABILITES OF VHDL

1.6. ADVANTAGES OF VHDL OVER PROCEDURAL LANGUAGES

2. THE VHDL DESIGN HIERARCHY

2.1. DESING ENETITY

2.2. ENTITY DECLARATION

2.3. ARCHITECTURE BODY

2.3.1 DATA FLOW STYLE

2.3.2 BEHAVIORAL STYLE

2.3.3 STRUCTURAL STYLE

3. LOGIC SYNTHESIS

3.1. LOGIC OPTIMIZATION TECHNIQUES

a)AREA OPTIMIZATION

b)SPEED OPTIMIZATION

4. FPGA

5. ALU

6 Code For 8 bit Adder-Substractor

7 Code for 8 bit Multiplier

8 Code for Final ALU

9 Future Prospects of VHDL

1. INTRODUCTION

1.1VHDL DESIGN FLOW

Fig. Design flow of an Integrated Circuit

Initial Design Entry

Logic Optimization

Technology Mapping

Programming Unit

Placement

Routing

Configured FPGA

1.2. INITIAL DESIGN ENTRY

As integrated circuit technology has improved to allow more and more components on a chip,

digital systems have continued to grow in complexity. As digital systems have become more

complex, detailed design of the systems at the gate and flop-flop level has become very

tedious and time consuming. For this reason, use of hardware languages in the digital design

process continues to grow importance. A hardware description language allows a digital

system to be designed and debugged at a higher level before conversion to the gate and flip

flop level. Use of synthesis computer aided design tools to do this conversion is becoming

more widespread. This is analogous to writing software programs in high-level languages

such as C and then using a compiler to convert the programs to machine language. The two

most popular hardware description languages are VHDL and Verilog.

1.3. WHAT IS VHDL?

VHDL is an acronym for very high-speed integrated circuit hardware description language. It

is a general-purpose hardware description language that is specifically designed to describe

the organization and function of digital hardware system, circuit boards & components at

many level of abstraction ranging from simple gate to complete digital electronics systems.

VHDL model is a textual description of a hardware design or a piece of design that, when

simulated mimics the design behavior.

1.4. HISTORY

The requirement for the language were first generated in 1980, under the Very High Speed

Integrated Circuit (VHSIC) project of US government, to enhance the electronic design

process, technology, and procurement, spawning development of many advanced integrated

circuit process technologies. In this program, a number of US companies were involved in the

design of VHSIC chip for the Department of Defense (DOD), USA. At that time, most of the

companies were using different HDL to describe and developed their ICs. As a result

different vender could not effectively exchange design with one another. Thus a need for a

standardized HDL for the design, documentation and verification of digital system was

generated. A team of three of companies, IBM, TI & INTERMETRICS, developed a version

of language. In 1986, VHDL was proposed as an IEEE standard. It went through a number of

revisions and changes until it was adopted as the IEEE 1076 standard in December 1987.

1.5. CAPABILITES OF VHDL

The following are the major capabilities that VHDL provide along with the feature that

differentiate it from other Hardware Description languages.

1. The language can be used as an exchange medium between chip vender and CAD tool

users. Different chip venders can provide VHDL description of their components to system

designers. CAD tool users can use it to capture the behavior of the design at a high level of

abstraction for functional simulation.

2. The language can also be used as a communication medium between different CAD and

CAM tools. For example a schematic capture program may be used to generate a VHDL

description for the design, which can be used as an input to a simulation program.

3. The language supports hierarchy i.e. a digital system can be modeled as a set of

interconnected sub-components.

4. The language is not technology specific, but is capable of supporting different

technologies. It can support various hardware technologies: for example - new logic types

and new components may be defined; technology specific attributes can be used. By being

technology independent the same model can be synthesized into different vendor libraries.

5. It supports both synchronous and asynchronous timing models.

6. It is an IEEE and ANSI STANDARD; therefore, models described in this language are

portable.

7. The language supports three basic different description styles: structural, data flow and

behavioral. A design may be described in any combination of these three descriptive styles.

8. It supports a wide range of abstraction level ranging from behavioral description to very

precise gate level descriptions. It does not however support modeling at or below the

transistor level. It allows a design to be captured at a mixed level using a single coherent

language.

9. Arbitrary large design can be modeled using the language, and there are no limitations

imposed by the language on the size of a design.

10. The language has element that make large-scale modeling easier, for example component,

functions, procedure, and packages.

11. Nominal propagation delays, min-max delay, setup and holding time and spike detection

can all be very naturally done in this language.

12. A model can, not only describe the functionality of a design but also the information

about the design itself in terms of user defined attributes such as total area and speed.

13. A common language can be used to describe library components from different vendors.

Tools that understand VHDL models will have no difficulty in reading models from a variety

of venders since the languages is a standard.

14. Models written in this language can be verified by simulation, since precise simulation

semantics are defined for language construct.

15. The capability of defining new data types provides the power of describe and simulate a

new design technique at a very high level of abstraction without any concern the

implementation details.

16.The language is publicly available and human readable.

1.6. ADVANTAGES OF VHDL OVER PROCEDURAL LANGUAGES

Main difference between VHDL and other programming languages like C/C++ are

a) VHDL is a parallel language, while C/C++ are sequential languages. Each statement

occurring in VHDL is executed concurrently, while in C/C++ each statement is executed

sequentially and at its own turn. In VHDL explicit constructs exist for explicit sequential

steps.

b) VHDL is a strongly typed language. It doesn’t allow any mismatching of types, though

type conversion is permitted.

c) VHDL allows use of explicit time delay, which isn’t applicable in procedural languages. In

procedural languages the right hand side value is assigned to the left hand side value as soon

as the statement is executed. In VHDL there is an advantage that the computed value can be

assigned to a signal after any time delay.

d) VHDL model cannot be implemented in real time application directly like other procedural

languages. It is simulated and synthesized using in built system clock.

2. THE VHDL DESIGN HIERARCHY

Any hardware design can be described in terms of its operation at different levels of

abstraction, from system through to logic gate. At each level of this hierarchy the overall

inputs and outputs remain the same but the functionality of distinct sections become clearer.

When the local inputs and outputs and the function of a block are sufficiently defined, the

hardware can be designed.

VHDL is capable of describing a well-defined hardware block at any level of

abstraction. A design entity is the VHDL representation of such a block and can be

considered to be at the top of the design hierarchy. Within the design entity, the function of

the hardware is often further decomposed by using external and internal blocks.

External blocks are other design entities that have been previously complied and

stored in a library. These types of blocks are generally referred to as components. Each

component can further extend the hierarchy by also using external and internal blocks to

describe its own function. The present design entity can also be thought of as external block.

Internal blocks are self-contained functional units that have explicitly defined input

and output signals. They therefore represent the next level down in the hierarchy. Again, an

internal block may contain external or other internal blocks. The Block statement is used to

create an internal block.

A design entity contains an entity declaration and an architecture body. Figure below shows

the organization of the VHDL design hierarchy and illustrates the main elements of an

architecture body. The port connection, enable information to be passed between blocks and,

at the top level, allow the design entity to communicate with the external environment. A

design entity may contain any or all of the elements shown, in the diagram. It will always

have an entity declaration and architecture body at the top level

2.1. DESING ENETITY

EXTERNAL BLOCK

INTERNAL BLOCK

Fig.2. Hierarchical organization of a VHDL design

2.2 ENTITY DECLARATION

The entity declaration is the interface between the external environment, such as a top-level

schematic, and the design. It is at the top of the design three for every external block. Hence,

it will usually contain a description of the inputs to and outputs from the block in the form of

a port statement. An entity declaration without a port statement does not have any external

connections.

The Generic statement can be used within the entity declaration to pass timing,

control or environmental data into the design unit. A component declaration may also have a

Generic statement. This information is useful when simulating a design, but when

Entity declaration

Architecture body

Component Concurrent

Statements Component

Internal block

Internal

block

Architecture body

Entity declaration

component Concurrent

statements

component

Internal

block

Internal

block

Block statement component

component

Concurrent

statement

Internal

block

Internal

block

synthesizing most of it is irrelevant. Hence, the Generic statement usually only supports the

declaration of integer generics, which have a constant value and can therefore be substituted

into the associated design unit at compile time.

The syntax for entity declaration is as follows

Entity entity – name is

[port (interface-signal-declaration);]

end [entity] [entity-name];

2.3. ARCHITECTURE BODY

The architecture body is used to specify the relationship between the inputs and outputs

declared in the entity. It therefore describes the actual function of the hardware. Although

each entity must be unique, several architectures can be associated with one entity. This

allows the function of a block to the changed without changing its external structure.

The architecture body contains any number of concurrent statements components and

internal blocks are also of this type. These statements can be considered to be executing

asynchronously and completely independently of each other. It is therefore crucial to

understand how the relationships between different concurrent statements are going to affect

not only the behavior but also the logical structure of the hardware that synthesis will

produce.

Additionally, certain concurrent statements may contain a number of sequentially

executing statements. Such flexibility allows the architecture body to be constructed using

three possible language styles. Choosing a particular approach does not limit the design to

that one style. In fact, many functional descriptions can be implemented in more than one

style. In general, a combination of two or all three styles is often required to obtain the most

compact and clear VHDL code.

2.3.1 Dataflow style

Dataflow style architecture models the hardware in terms of the movement of data Over

continuous time between combinational logic components such as adders, decoders and

primitive logic gates. It describes the register-transfer level behavior of a circuit. The

language topics that are most relevant to the dataflow style of architecture include the

following:

Operators-logical, relational and mathematical;

Operator overloading;

Concurrent assignment statements.

This style is not appropriate for the modeling of sequential logic. Instead, and as its name

suggests, it is best applied in the modeling of data driven elements such as an arithmetic logic

unit (ALU)

2.3.2 Behavioral style

The behavioral style architecture contains concurrent statements with sections of sequential

statements that describe the outputs of the circuit at a discrete moment in time given

particular inputs. While similar language constructs are often found in dataflow and

behavioral style architectures, only the latter explicitly exhibit the notions of time and

control. This style describes the function of the circuit at the algorithmic level.

The aspects of VHDL that are most relevant to behavioral style architectures include the

following

-Process statements and sensitivity lists;

-Sequential statements;

-Variables.

This architectural style is used to describe both sequential and combinational circuits. Hence,

it is a valuable design approach for finite state machines (FSMs) or any control logic.

2.3.3. Structural style

A structural style architecture describes the circuit primarily in terms of components. These

may be drawn from libraries supplied by ASIC vendors, modules that are purposely produced

for this design or general, user defined modules that are stored in a library created for a

previous design. The choice of whether to use vendor specific or generic/user-defined

components is an issue. An appropriate balance must be struck between the efficiency of the

optimization and technology mapping processes and the future flexibility of the design. The

architecture body specific which components are contained in a design and how they are

interconnected. The main VHDL topics associated with structural style architectures include

the following:

Component declarations and instantiations;

Port mapping and signal interface lists;

Signals (for interconnection).

A structural architecture is often used at the higher levels of a design to enable a clear

distinction to be made between the various functional units and enable a hierarchical

approach to be adopted in the design process.

3.LOGIC SYNTHESIS

Fig. 3.Logic Synthesis

A Logic synthesis software is a CAD tool that can take a VHDL program and generate a

netlist to realize exactly a function.

This step consists of two separate phases called LOGIC- OPTIMIZATION and

TECHNOLOGY MAPPING.

3.1.LOGIC OPTIMIZATION TECHNIQUES

The way in which VHDL program has been written influences the optimization of a circuit –

some constructs synthesize into more efficient structures than others. All logic synthesis

software provides the capability to optimize a circuit for area and speed. Few tools offer

power optimization also. Further a design-based optimization called resource sharing is also

provided.

The following sections outline the optimization techniques:

a.Area Optimization

Area optimization is well-studied field in digital electronics. Early techniques addressed

simple matrix-based manipulation for Boolean algebra. Later developments incorporated

optimizations based on don’t care conditions. The optimization may be – a general purpose

Original Network

Logic Synthesis

Logic Optimization

Optimized Network

Technology Mapping

Optimized Circuit

one or targeted at particular structures (e.g. programmable logic arrays). Also underlying

technology strongly affects the optimization.

Where area optimization is more difficult is when particular device technology is used. For

example, the Xilinx FPGA operates a number of CLBs. Each CLB can compute up to five

input Boolean expressions. If the expression involves six inputs then a second CLB is needed.

If four inputs are needed then chip area is wasted.

b.Speed optimization

Some measure of speed optimization is usually achieved by area optimization, as the area

optimization removes redundant circuitry and can shorten the critical path of the circuit.

However, further speed optimization can be performed.

A common approach is to identify the critical path and to work on reducing that. A simple

optimization might be to replace each component on the critical path with a higher rated (i.e.

faster but more power- intensive equivalent) but functionally equivalent component from the

library. Other optimization techniques might be to strip out strings of inverters from a design

or where, for example, AND gates are slower than OR gates to attempt to replace all ANDs

with ORs.

3.2.TECHNOLOGY MAPPING

After logic optimization has produced the optimized network, technology mapping

transforms this network into the final circuit. This is done by selecting pieces of the network

that can be implemented by one of the available circuit elements, and specifying how these

are to be interconnected. The circuit is optimized to reduce a cost function that typically

incorporates measures of both area and delay. Conventional approaches to technology

mapping have focused on using circuit elements from a limited set of simple gates, such as a

Standard Cell library. The complex logic blocks used in FPGAs presents difficulties for

library-based approaches because they can each implement a large number of functions.

a.PLACEMENT

The next step after technology mapping is placement of logic blocks. A number of efficient

techniques have been developed, which can be easily adapted to use for FPGAs.

b.ROUTING

Routing refers to the process of interconnecting the various logic blocks of the FPGA. Some

of the terms used in routing are:

Pin – a logic block input or output.

Connection – a pair of logic block pins that are electrically connected.

Net – a set of logic block pins that are to be electrically connected. A

net can be divided into one or more connections.

Wire segment – a straight segment of wire that is used to form a part of a connection.

Routing switch – a programmable switch that is used to electrically

connect two wire segments.

Track – a straight section of wire that spans the entire width or of a routing channel. A

track can be composed of a number of wire segments of various lengths.

Routing channel – the rectangular area that lies between two rows or two columns of logic

blocks. A routing channel contains a number of tracks.

Because of the complexity involved, the solution of large routing problems as those

encountered in FPGAs, usually requires a ”divide and conquer” strategy. This approach

involves three steps.

1)Partition the routing resources into routing areas that are appropriate for both the device to

be routed and the routing algorithm to be employed.

2)Use a global router to assign each net to a subnet of the routing areas. The global router

does not choose specific wire segments and routing switches for each connection, but rather it

creates a new set of routing problems.

3)Use a detailed router to select specific wire segments and routing for each connection,

within the restrictions set by the global router.

4.FPGA

Very Large Scale Integration (VLSI) Technology has opened the door to powerful digital

circuits at low cost. It has become possible to build chips with more than a million transistors.

Such chips are realized using the full-custom approach, where all parts of VLSI circuit are

carefully tailored to meet a set of specific requirements. Semi-custom approaches such as

standard cells and Mask-Programmed Gate Arrays (MPGAs) have provided an easier way of

designing and manufacturing Application-Specific Integrated Circuits (ASICs).

Each of these techniques, however, requires extensive manufacturing effort, taking sever al

months from beginning to end. This results in a high cost until large volumes are produced.

In electronics industry it is vital to reach the market in shortest possible time and also it is

important that the financial risk incurred in the development of the new product be limited.

Field-Programmable Gate arrays (FPGAs) have emerged as the ultimate solution to these

problems because they provide instant manufacturing and low cost prototypes.

ALU

Before writing the code of an 16 bit ALU first we have to understand what is ALU?.

ALU( Arithmetic and Logic unit) is a digital circuit that performs logical and arithmetic

operations.ALU is found inside every microprocessor or microcontroller in order to perform

logical and arithmetic operations. Logical operation involves all logical functions like

ANDing two or more inputs, OR,NOT,NOR etc.

Arithmetic operation involves function like addition, subtraction etc,

In the given code below the components of ALU are coded individually using VHDL and

then combined together in the main ALU code using port map technique.

Components of 8 bit ALU-

1) 8-bit adder-substractor- It performs addition and substraction for 8 bit input. A

carry line which acts as a signal acts as the deciding bit about what function the

circuit will perform. When the input carry signal is “0” the circuit acts as a 8 bit adder

and if the input signal is “1” the circuit acts as an adder.

2) 8-bit multiplier- This circuit is used to multiply 2 8 bit numbers and yield the

output as a 16 bit number.

3) 8-bit ALU- In the final circuit of ALU the components are combined together in a

single entity using port map.

Code for 8 bit adder-substractor

library ieee;

use ieee.std_logic_1164.all;

entity FULLADDER is

port (a, b, c: in std_logic;

sum, carry: out std_logic);

end FULLADDER;

architecture fulladder_behav of FULLADDER is

begin

sum <= (a xor b) xor c ;

carry <= (a and b) or (c and (a xor b));

end fulladder_behav;

--end of full adder

--definition of 4-bit addersub

library ieee;

use ieee.std_logic_1164.all;

entity FOURBITADD is

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

Cin,m : in std_logic;

sum4bit: out std_logic_vector (3 downto 0);

Cout: out std_logic);

end FOURBITADD;

architecture fouradder_structure of FOURBITADD is

signal C,temp_carry: std_logic_vector (4 downto 0);

component FULLADDER

port(a, b, c: in std_logic;

sum, carry: out std_logic);

end component;

begin

process(b,m)

begin

for i in 0 to 3 loop

temp_carry(i)<=(b(i) xor m);

end loop;

end process;

FA0: FULLADDER

port map (a(0), temp_carry(0), Cin, sum4bit(0), c(1));

FA1: FULLADDER

port map (a(1), temp_carry(1), C(1), sum4bit(1), c(2));

FA2: FULLADDER

port map (a(2), temp_carry(2), C(2), sum4bit(2), c(3));

FA3: FULLADDER

port map (a(3), temp_carry(3), C(3), sum4bit(3), c(4));

Cout <= c(4);

end fouradder_structure;

--end of 4-bit addersub

--definition of 8-bitaddersub

library ieee;

use ieee.std_logic_1164.all;

entity EIGHTBITADD is

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

cin ,n: in std_logic;

sum8bit : out std_logic_vector(7 downto 0);

cout : out std_logic);

end EIGHTBITADD;

architecture eightadder_structure of EIGHTBITADD is

signal a1,a2,b1,b2,sum1,sum2 : std_logic_vector ( 3 downto 0);

signal cin_temp : std_logic;

component FOURBITADD

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

Cin,m : in std_logic;

sum4bit: out std_logic_vector (3 downto 0);

Cout: out std_logic);

end component;

begin

process(a,b)

begin

for i in 0 to 3 loop

a1(i) <= a(i);

a2(i) <= a(i+4);

b1(i) <= b(i);

b2(i) <=b(i+4);

end loop;

end process;

FourAdd1 : FOURBITADD

port map (a1,b1,cin,n,sum1,cin_temp);

FourAdd2 : FOURBITADD

port map (a2,b2,cin_temp,n,sum2,cout);

process(sum1, sum2)

begin

for i in 0 to 3 loop

sum8bit(i) <= sum1(i);

sum8bit(i+4) <= sum2(i);

end loop;

end process;

end eightadder_structure;

--end of 8-bit addersub

Schematic diagram of 8 bit Adder-Substractor

Code for 8 bit multiplier

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity EIGHTBITMULT is

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

output:out std_logic_vector (15 downto 0));

end EIGHTBITMULT;

architecture mult_behave of EIGHTBITMULT is

signal po1,po2,po3,po4,po5,po6,po7,po8:std_logic_vector(15 downto 0);

constant zero:std_logic_vector:="0000000000000000";

begin

po1<=("00000000" & a) when b(0)='1' else

zero;

po2<=("0000000" & a & '0') when b(1)='1' else

zero;

po3<=("000000" & a & "00") when b(2)='1' else

zero;

po4<=("00000" & a & "000") when b(3)='1' else

zero;

po5<=("0000" & a & "0000") when b(4)='1' else

zero;

po6<=("000" & a & "00000") when b(5)='1' else

zero;

po7<=("00" & a & "000000") when b(6)='1' else

zero;

po8<=('0' & a & "0000000") when b(7) ='1' else

zero;

output<=(po8+ po7) + (po6 + po5) + (po4+po3) + (po2+po1);

end mult_behave;

--end of 8 bit multiplier

Final Code for 8 bit ALU

--definition of 8-bit ALU

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity ALU is

port(a,b: in std_logic_vector(7 downto 0);sel:in integer range 0 to 2;

final_output2:out std_logic_vector(15 downto 0);

final_output1:out std_logic_vector(7 downto 0));

end ALU;

architecture alu_structure of ALU is

signal output_adder,output_sub:std_logic_vector(7 downto 0);

signal output_mult: std_logic_vector(15 downto 0);

signal COUT,CIN:std_logic;

component EIGHTBITADD

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

cin,n:in std_logic;

sum8bit: out std_logic_vector(7 downto 0);

cout:out std_logic);

end component;

component EIGHTBITMULT

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

output:out std_logic_vector (15 downto 0));

end component;

begin

alu1: EIGHTBITADD

port map(a,b,CIN,'0',output_adder,COUT);

alu2: EIGHTBITADD

port map(a,b,CIN,'1',output_sub,COUT);

alu3:EIGHTBITMULT

port map(a,b,output_mult);

process(sel)

begin

if(sel=0) then

final_output1<=output_adder;

elsif(sel=1) then

final_output1<=output_sub;

else

final_output2<=output_mult;

end if;

end process;

end alu_structure;

--end of 8-bit ALU

9. FUTURE PROSPECTS

Results VHDL, One of the biggest job providing sector today, have a very bright future in the

coming time,but as the time is passing some other languages are making control over

designing, as for example Verilog HDL. Verilog HDL is a little bit better in processing speed

than VHDL. But on the other hand VHDL is also better in some fields like, all the three styles

of modeling(Data flow, Behavioral, Structural) in VHDL can be mixed together in the same

program i.e. VHDL is more user friendly than Verilog HDL.

But today all over world mainly VHDL is used for chip designing at low level. Till now there

are number of drawbacks in VHDL. As main drawback of VHDL is that, there are a number

of features in VHDL, that can be simulated but not synthesized. As, final shape to VHDL was

given by IEEE, hence IEEE is working on it continuously and trying to make available

simulation features to synthesis also.

So if talk about future prospectus of VHDL, it depends on success of IEEE. If IEEE got able

to implement such features that there remain no differences between simulation & synthesis

with higher processing speed and designing up to more lower level of abstraction, on that day

VHDL may take hold over all other HDL,s.