Program execution procedure with Xilinx ISE 9.2i software

ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
DICA, UNIT II
The VHDL Hardware Description Language: Design flow, program structure, types and constants, functions and
procedures, libraries and packages.
The VHDL design elements: Structural design elements, behavioral design elements, time dimension and
simulation synthesis.
Program execution procedure with Xilinx ISE 9.2i software
1. Switch on the system.
2. Double click on the Xilinx ISE 9.2i icon shown on the desktop.
3. Click on the file menu select the new project option.
4. Give the project name and click next.
5. Then click new source button select the VHDL module and give file name.
6. Give input and output port names and give mode (direction) and click next.
7. Click next then finish the new source wizard.
8. Click next then finish.
9. Then the program will come write the corresponding logic and save the program.
10. After saving the program, in the process window click on synthesize-XST after that double Click on the
check syntax.
11. If the syntax is correct, shows the check syntax is completed successfully.
12. If an error is present, correct it and again check syntax.
13. Then click synthesis-XST and synthesis it.
14. Up to now it will be in synthesis/implementation mode in the source.
15. Now to see the waveform change the mode from synthesis/implementation to behavioral Simulation mode.
16. Now right click on the file name and select new source option.
17. Now select the test bench waveform option and give the name to test bench waveform and Click next and
finish.
18. Then the window is timing and clock wizard in that select the combinational and finish. Test bench will be
created and assign inputs in it.
19. Then go to process window click on the Xilinx ISE simulator and double click on the Xilinx ISE
simulator and double click on simulate behavioral model.
20. Then the output will be shown.
21. To see RTL Schematic go to sources change the mode from behavioral simulation to
Synthesis/implementation, then click on synthesis XST in that double click on view RTL schematic then
logic diagram shown for the written program.
DICA unit-II Assignment questions:
1.
2.
3.
4.
UNIT-2 (PART A)
(a). Discuss the steps in VHDL design flow.
(b). Explain the difference in program structure of VHDL and any other procedural language. Give an
example.
(a). Explain the various data types supported by VHDL . Give the necessary examples.
(b). What are the different data objects supported by VHDL. Explain scalar types with examples.
(a). Explain Implicit and Explicit visibility of a Library in VHDL?
(b). Explain the use of packages. Give the syntax and structure of a package in VHDL.
(a). Write a VHDL entity and architecture for a 3-bit synchronous counter using flip-flops.
(b). Write a VHDL entity and architecture for a 3-bit ripple counter using flip-flops.
Page 1 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
5. (a). Write a VHDL entity & architecture for the following function? F(x)=a Φ b Φ c. and draw the relevant
logic diagram.
(b). Write a VHDL entity & architecture for the following function? F(x)=(a+b)(c Φ d). and draw the
relevant logic diagram.
1.
2.
3.
4.
UNIT-2 (PART B)
(a). Explain structural design elements of VHDL.
(b). Design the logic circuit to detect prime number of a 5-bit input. write the structural VHDL program
for the same.
(c). Design the logic circuit to detect prime number of a 4-bit input. write the structural VHDL program
for the same.
Design the logic circuit and write a structural style / behavioural style VHDL programme for the
following function.
i. F(x)= ΠA,B,C,D(1,7,9,13,15)
ii. F(x)=ƩA,B,C,D(1,4,5,7,12,14,15)+d(3,11)
iii. F(x)= ΠA,B,C,D(1,4,5,7,9,11,12,13,15)
iv. F(x)=ƩA,B,C,D(0,2,5,7,8,10,13,15)+d(1,6,11)
v. F(x)= ƩA,B,C,D(3,5,6,7,10,13,14)+d(1,2,4,15)
vi. F(x)=ΠA,B,C,D(1,3,4,5,6,7,9,12,13,14)
vii. F(x)= ƩA,B,C,D(3,5,6,7,13)+d(1,2,4,12,15)
viii. F(x)= ΠA,B,C,D(1,4,5,7,9,13,15)
ix. F(x)=ƩA,B,C,D(1,5,6,7,9,13)+d(4,15)
x. F(x)=ƩA,B,C,D(0,1,3,5,14)+d(8,15)
(a). Explain the behavioural design model of VHDL.
OR
Explain with an example the syntax and the function of the following VHDL statements?
i. process statement
ii. If, else and elsif statements
iii .case statement
iv .Loop statement
(b). Write a process based VHDL program for the prime – number detector of 4-bit input & explain the
flow using logic circuit.
(a). Write a Behavioral style VHDL program for the following functions.
F(S)= A Φ B Φ C1
F(CO)=AB+AC1+BC1
(b). Write the VHDL programme in Behavioral style to generate a clock with off time and on time equal
to 10ns.
(c). What is the importance of the time dimension in VHDL and explain its function.
Page 2 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
Unit-II
(PART-A)
The VHDL Hardware Description Language:
In the mid-1980s, the U.S. Department of Defence (DOD) and the IEEE sponsored the
development of a highly capable hardware-description language called VHDL. The language started out
with and still has the following features:
• Designs may be decomposed hierarchically.
• Each design element has both a well-defined interface (for connecting it to other elements) and a
precise functional specification (for simulating it).
• Functional specifications can use either a behavioral algorithm or an actual hardware structure to
define an element’s operation.
• Concurrency, timing, and clocking can all be modeled.
• The logical operation and timing behavior of a design can be simulated.
VHDL Design flow:
FIG:1 VHDL DESIGN FLOW
Steps in the design flow:
1. Hierarchical / block diagram. Figuring out the basic approach and building blocks at the blockdiagram level. Large logic designs are usually hierarchical, and VHDL gives you a good framework for
defining modules and their interfaces and filling in the details later.
2. Coding. Actual writing of VHDL code for modules, their interfaces, and their internal details.
3. Compilation. Analyses your code for syntax errors and checks it for compatibility with other modules
on which it relies. Compilation also creates the internal information that is needed for simulation.
4. Simulation. A VHDL simulator allows you to define and apply inputs to your design, and to observe
its outputs. Simulation is part of a larger step called verification. A functional verification is performed
to verify that the circuit’s logical operation works as desired independent of timing considerations and
gate delays.
5. Synthesis. Converting the VHDL description into a set of primitives or components that can be
assembled in the target technology. For example, with PLDs or CPLDs, the synthesis tool may generate
two-level sum-of products equations. With ASICs, it may generate a netlist that specifies how the gates
should be interconnected.
6. Fitting / Placement & Routing. Maps the synthesized components onto physical devices.
7. Timing verification. At this stage, the actual circuit delays due to wire lengths, electrical loading, and
other factors are known, so precise timing simulation can be performed. Study the circuit’s operation
including estimated delays, and we verify that the setup, hold, and other timing requirements for
sequential devices like flip-flops are met.
Page 3 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
Program Structure
FIG1: A VHDL entity consisting of an interface (entity declaration) and a
body (architectural description).
in
or
VHDL was designed with principles of structured programming
mind, borrowing ideas from the Pascal and Ada software programming
languages. A key idea is to define the interface of a hardware module
while hiding its internal details. Thus, a VHDL entity is simply a
declaration of a module’s inputs and outputs, while a VHDL
architecture is a detailed description of the module’s internal behavior
structure.
VHDL actually allows you to define multiple architectures for a single entity, and it provides a
configuration management facility that allows you to specify which one to use during a particular
compilation or synthesis run.
Like other high-level programming languages, VHDL generally ignores spaces and line breaks,
and these may be provided as desired for readability. Comments begin with two hyphens (--) and end at
the end of a line. VHDL defines many special character strings, called reserved words or keywords.
Syntax of Entity declaration:
entity entity-name is
port (signal-names : mode signal-type;
signal-names : mode signal-type;
-------------signal-names : mode signal-type) ;
end entity-name;
Besides naming the entity, the purpose of the entity declaration is to define its external interface
signals or ports in its port declaration part.
In addition to the keywords entity , is , port, and end, an entity declaration has the following
elements:
entity-name A user-selected identifier to name the entity.
signal-names A comma-separated list of one or more user-selected identifiers to name external-interface
signals.
mode One of four reserved words, specifying the signal direction:
in The signal is an input to the entity.
out The signal is an output of the entity.
buffer The signal is an output of the entity, and its value can also be read inside the entity’s architecture.
inout The signal can be used as an input or an output of the entity. This mode is typically used for threestate input/output pins on PLDs.
signal-type A built-in or user-defined signal type.
Note that there is no semicolon after the final signal-type.
Page 4 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
An entity’s ports and their modes and types are all that is seen by other modules that use the
entity. The entity’s internal operation is specified in its architecture definition.
The entity-name in this definition must be the same as the one given previously in the entity
declaration. The architecture-name is a user-selected identifier, usually related to the entity name; it can
be the same as the entity name if desired.
Architecture’s external interface signals (ports) are inherited from the port-declaration part of its
corresponding entity declaration. Architecture may also include signals and other declarations that are
local to that architecture.
Syntax of a VHDL architecture definition:
architecture architecture-name of entity-name is
type declarations
signal declarations
constant declarations
function definitions
procedure definitions
component declarations
begin
concurrent-statement
--------------------------concurrent-statement
end architecture-name;
Signal declaration syntax:
signal signal-names : signal-type;
Zero or more signals can be defined within architecture, and they roughly correspond to named wires in
a logic diagram.
Variable declaration syntax:
variable variable-names : variable-type;
VHDL variables are similar to signals, except that they usually don’t have physical significance
in a circuit. Variables are used in VHDL functions, procedures, and processes, each of which we’ll
discuss later. Within these program elements, the syntax of a variable declaration is just like that of a
signal declaration, except that the variable keyword is used:
Types, Constants, and Arrays:
Every signal, variable, and constant in a VHDL program must have an associated “type.” The
type specifies the set or range of values that the object can take on, and there is also typically a set of
operators (such as add, AND, and so on) associated with a given type.
VHDL has just a few predefined types, listed in Table 5-16. In the rest of this book, the only
predefined types that we’ll use are integer, character, and boolean. You would think that types with
names “bit ” and “bit_vector ” would be essential in digital design, but in VHDL it turns out that userdefined versions of these types are more useful.
Page 5 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
VHDL DATA TYPES:
1. bit
2. bit_vector
3. boolean
4. character
5. integer
6. real
7. string
8. time
Integer Operators
+
addition
Boolean Operators
and
AND
-
subtraction
or
OR
*
multiplication
nand
NAND
/
division
nor
NOR
mod
modulo division
xor
Exclusive OR
rem
modulo remainder
xnor
Exclusive NOR
abs
absolute value
not
complementation
**
exponentiation
Type integer is defined as the range of integers including at least the range -2,147,483.647
through +2.147,483,647 (-2 31+1 through +231-1); VHDL implementations may extend this range.
Type boolean has two values, tru e and false.
The most commonly used types in typical VHDL programs are user defined types, and the most
common of these are enumerated types, which are defined by listing their values. Predefined types
boolean and character are enumerated types.
Value-list is a comma-separated list (enumeration) of all possible values of the type. The values
may be user-defined identifiers or characters (where a “character” is any ISO character enclosed in
single quotes).
The first style is used most often to define cases or states for a state machine, for example, type
traffic_light_state is (reset, stop, wait, go);
The second style is used in the very important, standard, user-defined logic type std _ log ic , part
of the IEEE 1164 standard package. This type includes not only 'O' and ' 1 ', but seven other values that
have been found useful in simulating logic signals (bits) in real logic circuits,
type type-name is (value-list);
subtype subtype-name is type-name start to end;
Page 6 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
subtype subtype-name is type-name start downto end;
constant constant-name: type-name := value-,
type STD_ULOGIC is ( ‘U’, -- Uninitialized
'X' , -- Forcing Unknown
‘0’, -- Forcing 0
‘1’, -- Forcing 1
’Z’, -- High Impedance
‘W’, -- Weak Unknown
‘L’, -- Weak 0
‘H’ , -- Weak 1
‘_ ‘ -- Don't care
);
Notice that the order of a range may be specified in ascending or descending order, depending on
whether to or downto is used. There are certain attributes to of subtypes for which this distinction is
significant, but we don’t use them in this downto book and we won't discuss this further.
Constants contribute to the readability, maintainability, and portability of constants programs in
any language.
constant BUS_SIZE: integer := 32; -- width of component
constant MSB: integer := BUS_SIZE-1; -- bit number of MSB
constant Z: character := ’Z'; — synonym for Hi-Z value
Notice that the value of a constant can be a simple expression. Constants can be used anywhere the
corresponding value can be used, and they can be put to especially good use in type definitions.
Another very important category of user-defined types are array types, array types Like other
languages, VHDL defines an array as an ordered set of elements of array the same type, where each
element is selected by an array index.
In the first two versions, start and end are integers that define the possible range of the array
index and hence the total number of array elements. In the last three versions, all or a subset of the
values of an existing type (range-type) are the range of the array index.
type type-name is array (start to end) of element-type;
type type-name is array (start downto end) of element-type;
type type-name is array (range-type) of element-type;
type type-name is array (range-type range start to end) of element-type;
type type-name is array (range-type range start downto end) of element-type;
Functions and Procedures
Like a function in a high-level programming language, a VHDL function accepts a number of
arguments and returns a result. Each of the arguments and the result in a VHDL function definition or
function call has a predetermined type.
After giving the name of the function, it lists zero or more formal parameters which are used
within the function body. When the function is called, the actual parameters in the function call are
Page 7 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
substituted for the formal parameters. In accordance with VHDL’s strong-typing philosophy, the actual
parameters must be the same type or a subtype of the formal parameters. When the function is called
from within architecture, a value of the type return-type is returned in place of the function call.
As shown in the table, a function may define its own local types, constants, variables, and nested
functions and procedures. The keywords begin and ends enclose a series of “sequential statements” that
are executed when the function is called.
Syntax of a V H D L function definition:
function function-name (
signal-names : signal-type;
signal-names : signal-type;
signal-names : signal-type
) return return-type is
type declarations
constant declarations
variable declarations
function definitions
procedure definitions
begin
sequential-statement
sequential-statement
end function-name;
A VHDL procedure is similar to a function, except it does not return a result. While a function
call can be used in the place of an expression, a procedure call can be used in the place of a statement.
VHDL procedures allow their arguments to be specified with type out or in o u t, so it is actually
possible for a procedure to “return” a result.
5.3.4 Libraries and Packages
A VHDL library is a place where the VHDL compiler stores information about a particular
design project, including intermediate files used in the analysis, simulation, and synthesis of the design.
The location of the library within a host computer’s file system is implementation dependent. For a
given VHDL design, the compiler automatically creates and uses a library named “work”.
A complete VHDL design usually has multiple files, each containing different design units
including entities and architectures. When the VHDL compiler analyzes each file in the design, it places
the results in the “work” library, and it also searches this library for needed definitions, such as other
entities. Because of this feature, a large design can be broken up into multiple files, yet the compiler will
find external references as needed. Not all of the information needed in a design may be in the “work”
library.
Each project has its own “work” library (typically a subdirectory within that project’s overall
directory), but it must also refer to a common library containing the shared definitions. Even small
projects may use a standard library such as the one containing IEEE standard definitions.
The designer can specify the name of such a library using a library clause at the beginning of the
design file. For example, we can specify the IEEE library:
Page 8 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
Library ieee;
The clause “library work;” is included implicitly at the beginning of every VHDL design file.
A VHDL package is a file containing definitions of objects that can be used in other programs. The kind
of objects that can be put into a package include signal, type, constant, function, procedure, and
component declarations.
VHDL PACKAGES
Signals that are defined in a package are “global” signals, available to any VHDL entity that uses
the package. Types and constants defined in a package are known in any file that uses the package.
Likewise, functions and procedures defined in a package can be called in files that use the package, and
components (described in the next subsection) can be instantiated in architectures that use the package.
A design can “use” a package by including a use clause at the beginning of the design file. For
example, to use all of the definitions in the IEEE standard 1164 package, we would write
use ieee.std_logic_1164.all;
Here, “ieee ” is the name of a library which has been previously given in a library clause. Within this
library, the file named “std _ logic_1164” contains the desired definitions. The suffix “all” tells the
compiler to use all of the definitions in this file. Instead of “all”, you can write the name of a particular
object to use just its definition, for example,
use ieee.std_logic_1164.std_ulogic;
package package-name i s
type declarations
signal declarations
constant declarations
component declarations
function declarations
procedure declarations
end package-name;
package body package-name i s
type declarations
constant declarations
function definitions
procedure definitions
end package-name;
Defining packages is not limited to standards bodies. Anyone can write a package, All of the
objects declared between “package” and the first “end” statement are visible in any design file that uses
the package; objects following the “package body” keyword are local.
Page 9 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
In particular, notice that the first part includes “function declarations,” not definitions. A function
declaration lists only the function name, arguments, and type, up to but not including the “is” keyword.
The complete function definition is given in the package body and is not visible to function users.
The VHDL Design Elements
(UNIT 2, PART-B)
FIG1: Levels of abstraction: Behavioral, Structural and Physical
Structural Design Elements:
Syntax of a VHDL component declaration:
component component-name is
port (signal-names : mode signal-type;
signal-names : mode signal-type;
signal-names : mode signal-type) ;
end component;
Syntax of a VHDL component instantiation statement:
label: component-name port map( signal1, signal2, . . . , signaln) ;
label: component-name port map(port1=>signal1, port2=>signal2, portn=> signaln) ;
The most basic of VHDL’s concurrent statements is the component statement, whose basic
syntax is shown in Table 5-28. Here, component-name is the name of a previously defined entity that is
to be used, or instantiated, within the current architecture body. One instance of the named entity is
created for each component statement that invokes its name, and each instance must be named by a
unique label. The p o r t map keywords introduce a list that associates ports of the named entity with
signals in the current architecture. The list may be written in either of two different styles. The first is a
positional style; as in conventional programming languages, the signals in the list are associated with the
Page 10 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
entity’s ports in the same order in which they appear in the entity’s definition. The second is an explicit
style; each of the entity’s ports is connected to a signal using the “=>” operator, and these associations
may be listed in any order.
Before being instantiated in an architecture, a component must be declared
in a component declaration in the architecture’s definition . As shown in Table 5-29, a component
declaration is essentially the same as the port-declaration part of the corresponding entity declaration—it
lists the name, mode, and type of each of its ports. The components used in an architecture may be ones
that were previously defined as part of a design, or they may be part of a library.
The entity declaration names the inputs and the output of the circuit. The declarations section of the
architecture defines all of the signal names and the components that are used internally. The
components, INV, AND2, AND3, and 0R4, are predefined in the design environment in which this
example was created and compiled (Xilinx ISE 6.x unisims library).
Note that component statements in Table 5-30 execute concurrently. Even if the statements were listed
in a different order, the same circuit would be synthesized, and the simulated circuit operation would be
the same.
A VHDL architecture that uses components is often called a structural description or structural design,
because it defines the precise interconnection structure of signals and entities that realize the entity. In
this regard, a pure structural description is equivalent to a schematic or a net list for the circuit.
generate statement
label: for identifier in range generate
concurrent-statement
end generate;
Table 5-31
Syntax of a VHDL for-generate loop.
identifier within the range, and identifier may be used within the concurrent statement.
For
example, Table 5-32 shows how an 8-bit inverter can be created. The value of a constant must be known
at the time that a VHDL program is compiled. In many applications it is useful to design and compile an
entity and its architecture while leaving some of its parameters, such as bus width, unspecified. VHDL’s
“generic” facility lets you do this.
One or more generic constants can be defined in an entity declaration with a generic declaration
before the port declaration, using the syntax shown in Table 5-33. Each of the named constants can be
used within the architecture definition for the entity, and the value of the constant is deferred until the
entity is instantiated using a component statement within another architecture. Within that component
statement, values are assigned to the generic constants using a generic map clause in the same style as
the p o r t map clause. Table 5-34 is an example that combines generic and generate statements to define
a “bus inverter” with a user-specifiable width. Multiple copies of this inverter, each
with a different width, are instantiated in the program in Table 5-35.
Table 5-33
Page 11 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
Syntax of a VHDL generic declaration with in an entity declaration .
entity entity-name is
generic (constant-names : constant-type;
constant-names : constant-type;
constant-names : constant-type);
port (signal-names : mode signal-type;
signal-names : mode signal-type;
signal-names : mode signal-type);
end entity-name;
Dataflow Design Elements
If component statements were its only concurrent statements, then VHDL would be little more than a
strongly typed, hierarchical net-list description language. Several additional concurrent statements allow
VHDL to describe a circuit in terms of the flow of data and operations on it within the circuit. This style
is called a dataflow description or dataflow design.
Syntax of V H D L concurrent signal assignment statements:
signal-name <= expression;
signal-name <= expression when boolean-expression else
expression when boolean-expression else
expression when boolean-expression else
expression;
relational operators
= /= >, >= <, <=
Two additional concurrent statements used in dataflow designs are shown above. The first of these is the
most often used and is called a concurrent signal-assignment statement. You should read this as “signalname gets expression.” Because of VHDL’s strong typing, the type of expression must be compatible
with that of signal-name. In general, this means that either the types must be identical or expression's
type is a subtype of signal-name's. In the case
of arrays, both the element type and the length must match; however, the index
range and direction need not match.
A boolean-expression combines individual boolean terms using VHDL’s built-in boolean operators such
as and, or, and not. Boolean terms are typically boolean variables or results of comparisons using
relational operators =, /= (inequality), >, >=, <, and <=.
These comparison results are combined in the boolean expression between the when and e ls e
keywords in each statement. The e ls e clauses are generally required; the combined set of conditions in
a single statement should cover all possible input combinations.
Another kind of concurrent assignment statement is the selected signal assignment, whose syntax
is shown in Table 5-39. This statement evaluates the given expression, and when the value matches one
of the choices, it assigns the corresponding signal-value to signal-name. The choices in each when
Page 12 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
clause may be a single value of expression or a list of values separated by vertical bars (I). The choices
for the entire statement must be mutually exclusive and all inclusive.
The keyword others can be used in the last when clause to denote all values of expression that have not
yet been covered. Table 5-40 is an architecture for the prime-number detector that uses a selected signalassignment statement. All of the choices for which F is 11' could have been written in a single when
clause, but multiple clauses are shown just for instructional purposes. In this example, the selected
signal-assignment statement reads somewhat like a listing of the on-set of the function F.
selected signal assignment statement others
with expression select
signal-name <= signal-value when choices,
signal-value when choices,
signal-value when choices',
Behavioral Design Elements:
As we saw in the last example, it is sometimes possible to directly describe a desired logic-circuit
behavior using a concurrent statement. This is a good thing, as the ability to create a behavioral design
or behavioral description is one of the key benefits of hardware-description languages in general and
VHDL in particular. However, for most behavioral descriptions, we need to employ some additional
language elements described in this subsection. VHDL’s key behavioral element is the “process.” A
process is a collection of sequential statements (described shortly) that executes in parallel with other
concurrent statements and other processes. Using a process, you can specify a complex interaction of
signals and events in a way that executes in essentially zero simulated time during simulation and that
gives rise to a synthesized combinational or sequential circuit that performs the modelled operation
directly.
A VHDL process statement can be used anywhere that a concurrent statement can be used. A process
statement is introduced by the keyword process and has the syntax shown in Table 5-42. Since a
process statement is written within the scope of an enclosing architecture, it has visibility of the types,
Table 5-41
A more behavioral description of the p rime – number detector.
5.3 The VHDL Hardware Description Language 279
process (signal-name, signal-name, . . . , signal-name)
type declarations
variable declarations
constant declarations
function definitions
procedure definitions
begin
sequential-statement
sequential-statement
end process;
Page 13 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
signals, constants, functions, and procedures that are declared or are otherwise visible in the
enclosing architecture. However, you can also define types, variables, constants, functions, and
procedures that are local to the process. Note that a process may not declare signals, only “variables.” A
VHDL variable keeps track of the state within a process and is not visible outside of the process.
Depending on its use, it may or may not give rise to a corresponding signal in a physical realization of
the modeled circuit. The syntax for defining a variable within a process is similar to the syntax for a
signal declaration within an architecture, except that the keyword variable is used:
variable variable-names : variable-type;
A VHDL process is always either running or suspended. The list of signals in the process
definition, called the sensitivity list, determines when the process runs. A process initially is suspended;
when any signal in its sensitivity list changes value, the process resumes execution, starting with its first
sequential statement and continuing until the end. If any signal in the sensitivity list changes value as a
result of running the process, it runs again. This continues
until the process runs without any of these signals changing value. In simulation, all of this happens in
zero simulated time.
The sensitivity list is optional; a process without a sensitivity list starts running at time zero in
simulation.
Remember that the statements within a process are executed sequentially. Suppose that for some
reason we moved the last statement in Table 5-43 (the signal assignment to F) to be the first statement.
Then we would see rather weird behavior from this process. The first time the process was run, the
simulator would complain that the variables were uninitialized—that they were being read before any
value had been assigned to them. On subsequent resumptions, a value would be assigned to F based on
the previous values of the variables, which are remembered while the process is suspended. New values
would then be assigned to the variables and remembered until the next resumption. So the circuit’s
output value would always be one input change behind.
(
signal-name <= expression; ),
but it occurs within the body of a process rather than an architecture. An analogous statement for
variables is the variable assignment statement, which has the syntax
“variable-name : = expression;
Notice that a different assignment operator, : =, is used for variables.
For instructional purposes, the dataflow architecture of the prime-number detector in Table 5-37 is
rewritten as a process in Table 5-43. Notice that we’re still working off the same original entity
declaration of prime that appeared in Table 5-30. Within the new architecture (prime6_arch), we have
just one concurrent statement, which is a process. The process sensitivity list contains just N, the
primary inputs of the desired combinational logic function. The ANDgate outputs must be defined as
variables rather than signals, since signal definitions are not allowed within a process. Otherwise, the
body of the process is very similar to that of the original architecture. In fact, a typical synthesis tool
Page 14 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
would probably create the same circuit from either description. Other sequential statements, beyond
simple assignment, can give us more creative control in expressing circuit behavior. The i f statement,
with the syntax shown in Table 5-44, is probably the most familiar of these. In the first and architecture
prime6_arch of prime is
begin
process(N)
variable N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: STD_L0GIC;
begin
N3L_N0 := not N(3) and N(0)
N3L_N2L_N1 := not N(3) and not N(2) and N(l)
N2L_N1_N0 : = not N(2) and N(l) and N (0)
N2_N1L_N0 : = N(2) and not N(l) and N (0)
F <= N3L_N0 or N3L_N2L_N1 or N2L_N1_N0 or N2_N1L_N0;
end process;
end prime6_arch;
5.3 The VHDL Hardware Description Language 281
Syntax for if statement:
it is the simplest form of the if statement, a boolean-expression is tested,
and a list of one or more sequential-statements are executed if the expression’s value is true .
if boolean-expression then sequential-statements
end if ;
syntax for if - else: In the second form, we’ve added an “else ” keyword followed by another list of
sequential-statements that are executed if the expression’s value is false .
if boolean-expression then sequential-statements
else sequential-statements
end if ;
syntax for nested ifelse: To create nested if - then - else statements, VHDL uses a special keyword
elsif , which introduces the “middle” clauses. An elsif clause’s sequential statements
are executed if its boolean-expression is true and all the preceding
boolean-expressions were false .
if boolean-expression then sequential-statements
elsif boolean-expression then sequential-statements
elsif boolean-expression then sequential-statements
end if ;
syntax for nested if and then else: The optional final else-clause’s sequential statements
are executed if all the preceding boolean-expressions were false .
Page 15 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
if boolean-expression then sequential-statements
elsif boolean-expression then sequential-statements
elsif boolean-expression then sequential-statements
else sequential-statements
end i f ;
syntax for case statement :
case expression is
when choices => sequential-statements
when choices => sequential-statements
end case;
The boolean expressions in Table 5-45 are nonoverlapping; that is, only one of them is true at a time.
For this application we really didn’t need the full power of nested if statements. In fact, a synthesis tool
might create a circuit that evaluates the boolean expressions in series, with slower operation than might
otherwise be possible.
When we need to select among multiple alternatives based on the value of just one signal or expression,
a case statement is usually more readable and may yield a better synthesized circuit.
This statement evaluates the given expression, finds a matching value in one of the choices, and
executes the corresponding sequential-statements. Note that one or more sequential statements
can be written for each set of choices. The choices may take the form of a single value or of multiple
values separated by vertical bars (I). The choices must be mutually exclusive and include all possible
values of expression's type; the keyword others can be used as the last choices to denote all values that
have not yet been covered.
loop statement : Another important class of sequential statements are the loop statements.
The simplest of these has the syntax shown in Table 5-48 and creates an infinite loop. Although infinite
loops are undesirable in conventional software programming languages, we’ll show in Section 7.12.1
how such a loop can be used in simulation to create a free-running clock signal. for loop A more familiar
loop, one that we’ve seen before, is the f o r loop, with the syntax shown in Table 5-49. Note that the
loop variable, identifier, is declared
for identifier in range loop
sequential-statement
------------------sequential-statement
end loop;
implicitly by its appearance in the for loop and has the same type as range. This variable may be used
within the loop’s sequential statements, and it steps through all of the values in range, from left to right,
one per iteration.
Two more useful sequential statements that can be executed within a loop are “exit” and “next”.
When executed, exit statement , transfers control to the statement immediately following the loop end.
Page 16 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
On the other hand, next causes any remaining statements in the loop to be bypassed and begins the next
iteration of the loop.
Although VHDL is a powerful programming language, design descriptions that use its full power
may be inefficient or unsynthesizable.
The culprit in Table 5-50 is the mod operator. This operation requires an integer division, and most
VHDL tools are unable to synthesize division circuits except for special cases, such as division by a
power of two (realized as a shift). Even if the tools could synthesize a divider, you wouldn’t want to
specify a prime-number detector in this way. The description in Table 5-50 implies a combinational
circuit, and the poor synthesizer would have to create 252 combinational dividers and comparators, one
for each value of i, to “unroll” the for loop and realize the circuit! This would be an extremely expensive
solution.
T a b l e 5 - 5 1 S y n ta x o f a V H D L while loop.
while boolean-expression loop
sequential-statement
sequential-statement
end loop;
input N is a prime number. We’ve also increased the size of N to 16 bits, just to emphasize the fact that
we were able to create a compact model for the circuit without having to explicitly list hundreds of
primes. The last kind of loop statement is the while loop, with the syntax shown in Table 5-51. In this
form, boolean-expression is tested before each iteration of the loop, and the loop is executed only if the
value of the expression is true .
We can use processes to write behavioral descriptions of both combinational and sequential circuits.
Many more examples of combinational-circuit descriptions appear in the VHDL subsections of Chapter
6.
The Time Dimension
None of the examples that we’ve dealt with so far models the time dimension of circuit operation—
everything happens in zero simulated time. However, VHDL has very good facilities for modeling time,
and it is indeed another significant dimension of the language. In this book we won’t go into detail on
this subject, but we’ll introduce just a few ideas here. VHDL allows you to specify a time delay using
the keyword after in any signal-assignment statement, including sequential, concurrent, conditional, and
selected assignments.
For example, in the inhibit-gate architecture of Table 5-13 on page 258 you could write
Z <= '1' after 4 ns when X='l' and Y = 10 1 else '0' after 3 ns;
This allows you to model an inhibit gate that has 4 ns of delay on a 0-to-1 output transition and only 3 ns
on a l-to-0 transition. In typical ASIC design environments, the VHDL models for all of the low-level
Page 17 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
components in the component library include such delay parameters. Using these estimates, a VHDL
simulator can predict the approximate timing behavior of a larger circuit that uses these components.
Another way to invoke the time dimension is with wait, a sequential statement. This statement can be
used to suspend a process for a specified time period. Table 5-52 is an example program that uses wait
to create simulated input waveforms to test the operation of the inhibit gate for four different input
combinations at 10-ns time steps.
5.3 The VHDL Hardware Description Language 285
entity InhibitTestBench is
end InhibitTestBench;
architecture InhibitTB_arch of InhibitTestBench is
component Inhibit port (X,Y: in BIT; Z: out BIT); end component;
signal XT, YT, ZT: BIT;
begin
Ul: Inhibit port map (XT, YT, ZT);
process
begin
XT <= '0 ; YT <= '0' ;
wait for 10 n s ;
XT <= '0
IIV
H>'i';
wait for 10 ns;
XT <= '1 ; YT <= 'O' ;
wait for 10 n s ;
XT <= '1 ; YT <= '1' ;
wait; -- this suspends the process indefinitely
end process;
end InhibitTB_arch;
Simulation
Once you have a VHDL program whose syntax and semantics are correct, you can use a
simulator to observe its operation. Although we won’t go into great detail, it’s useful to have a basic
understanding of how such a simulator works. Simulator operation begins at simulation time of zero. At
this time, the simulator initializes all signals to a default value (which you shouldn’t depend on!). It also
initializes any signals or variables for which initial values have been declared explicitly (we haven’t
shown you yet how to do this).
Next, the simulator begins the execution of all the processes and concurrent statements in the
design. Of course, the simulator can’t really simulate all of the processes and other concurrent
statements simultaneously, but it can pretend that it does, using a time-based event list and a signalsensitivity matrix based on the signal sensitivity lists of all the processes. Note that each component
Page 18 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
instantiation or concurrent assignment statement implies one process. Any signals that are used as inputs
in a component instantiation or that appear on the right hand side of a concurrent assignment are
automatically included in the sensitivity list of the implied process.
At simulation time zero, all of the processes are scheduled for execution, and one of these is
selected. All of its sequential statements are executed, including any looping behavior that is specified.
When the execution of this process is completed, another one is selected, and so on, until all of the
processes have been executed. This completes one simulation cycle.
During its execution, a process may assign new values to signals. The new values are not
assigned immediately; rather, they are placed on the event list and scheduled to become effective at a
certain time. If the assignment has an explicit simulation time associated with it (for example, after a
delay specified by an a f t e r clause), then it is scheduled on the event list to occur at that time.
Otherwise, it is supposed to occur “immediately”; however, it is actually scheduled to occur at the
current simulation time plus one “delta delay.” The delta delay is an infinitesimally short time, such that
the current simulation time plus any number of delta delays still equals the current simulation time. This
concept allows processes to execute multiple times if necessary in zero simulated time. After a
simulation cycle completes, the event list is scanned for the signal or signals that change at the next
earliest time on the list. This may be as little as one delta delay later, or it may be a real circuit delay
later, in which case the simulation time is advanced to this time. In any case, the scheduled signal
changes are made. Some processes may be sensitive to the changing signals, as indicated by their signalsensitivity lists. The signal-sensitivity matrix indicates, for each signal, which processes have that signal
in their sensitivity list. All of the processes that are sensitive to a signal that just changed are scheduled
for execution in the next simulation cycle, which now begins. The simulator’s two-phase operation of a
simulation cycle followed by scanning the event list and making the next scheduled signal assignments
goes on indefinitely, until the event list is empty. At this point the simulation is complete.
The event-list mechanism makes it possible to simulate the operation of concurrent processes
even though the simulator runs on a single computer with a single thread of execution. And the deltadelay mechanism ensures correct operation even though a process or set of processes may require
multiple executions, spanning several delta delays, before changing signals settle down to a stable value.
This mechanism is also used to detect runaway processes (such as “X <= no t X”); if a thousand
simulation cycles occur over a thousand delta delays without advancing simulation time by any “real”
amount, it’s most likely that something’s amiss.
5.3 The VHDL Hardware Description Language 287
SIGNALS VERSUS VARIABLES :
What’s the difference? At one level it’s simple— signals
typically correspond to wires within a circuit realization, while variables are ephemeral. They exist only
during each execution of a process, and in typical uses they do not give rise to corresponding physical
signals. But at another level, the difference is subtle yet very important.
Within a process, assignments to variables are made immediately. Assignments to signals are scheduled
but not made until after the simulator completes execution of the current process. This makes coding
with signals in a process different from what you’re used to in computer-programming languages.
For example, suppose X and Y are variables in a C program. To swap X and Y, you would write
Page 19 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
“temp = X ; X = Y; Y = tem p ; ” . But if X and Y are signals in a VHDL program, you would simply
write “X <= Y; Y <= X;”.
You may think “OK, this is convenient,” but it can lead to bugs as well. For example, you may write
“X <= Y” and then several lines later in the same process write “i f X=1 then . . . ” . But the value of X
that is tested is the old value; the new value is not there until the next time that this (or any other)
process runs.
Finally, consider the VHDL version of our original swapping code. If temp is
a variable (temp : = X; X <= Y; Y <= tem p ;), the code is more verbose than needed,
but it works. If temp is a signal (temp <= X; X <= Y; Y <= tem p ;), the code fails to
work as intended.
Test Benches
A test bench specifies a sequence of inputs to be applied by the simulator to an test bench HDL-based
design, such as a VHDL entity. The entity being tested is often called the unit under test (UUT), in
accordance with traditional parlance in the unit under test (UUT) hardware testing field, even though the
UUT in this case is not a device, but a program that specifies the behavior of one.
It’s simple, but it illustrates most of the basic parts of
a VHDL test-bench program:
• Like all VHDL programs, there is an entity declaration, but notice that it has no inputs or outputs. The
inputs to the UUT are created within the test bench, and the outputs are observed on the simulator.
• The architecture definition makes a component declaration for the UUT, and the UUT is instantiated
using local signals for its inputs and outputs.
• A process with no sensitivity list starts at simulation time 0, and applies new input combinations to the
UUT at specified times (every 10 ns in this example).
EXAMPLE VHDL PROGRAMS
HALF ADDER
Date:
Exp No: 2
AIM: Simulate the programs of half adder using VHDL in Data flow,
Structural models.
Behavioral and
APPRATUS REQUIRED:
Active HDL4.2 software.
PROGRAM:
Page 20 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity halfdata is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
s: out STD_LOGIC;
v: out STD_LOGIC);
end halfdata;
architecture halfdata of halfdata is
begin
s<= a xor b;
v<= a and b;
end halfdata;
Behavioral Model
library IEEE;
use IEEE.std_logic_1164.all;
entity halfbehavioural is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
s: out STD_LOGIC
Page 21 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
v: out STD_LOGIC);
end halfbehavioural;
architecture halfbehavioural of halfbehavioural is
begin
process(a,b)
begin
if(a=b) then s<='0';
else s<='1';
end if;
end process;
process(a,b)
begin
if(a=’1’ and b=’1’) then v<='1';
else v<='0';
end if;
end process;
end halfbehavioural;
Structural Model
library IEEE;
use IEEE.std_logic_1164.all;
Page 22 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
entity halfstructural is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
s: out STD_LOGIC
v: out STD_LOGIC);
end halfstructural;
architecture halfstructural of halfstructural is
component xor_2 is
port(p:in STD_LOGIC;
v: in STD_LOGIC;
s: out STD_LOGIC);
end component;
component and2 is
port(p:in STD_LOGIC;
v: in STD_LOGIC;
s: out STD_LOGIC);
end component;
begin
x1: xor_2 port map(a,b,s);
a1: and2 port map(a,b,v);
end halfstructural;
Page 23 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
WAVEFORM:
Page 24 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
FULL ADDER
Date:
Exp No: 2
AIM: Simulate the programs of full adder using VHDL in Data flow,
Structural models.
Behavioral and
APPRATUS REQUIRED:
Active HDL4.2 software.
PROGRAM:
Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity fulldata is
port ( a: in STD_LOGIC;
Page 25 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
b: in STD_LOGIC;
c: in STD_LOGIC;
s: out STD_LOGIC;
v: out STD_LOGIC);
end fulldata;
architecture fulldata of fulldata is
begin
s<= a xor b xor c;
v<= (a and b) or (b and c) or (c and a);
end fulldata;
Behavioral Model
library IEEE;
use IEEE.std_logic_1164.all;
entity fullbehavioural is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
s: out STD_LOGIC
v: out STD_LOGIC);
end fullbehavioural;
Page 26 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
architecture fullbehavioural of fullbehavioural is
begin
process(a,b,c)
begin
if(a=’0’) then s<=b xor c ;
else if (a=’1’) then s<=b xnor c;
end if;
end if;
end process;
process(a,b,c)
begin
if(a=’0’) then v<=b and c ;
else if (a=’1’) then v<=b or c;
end if;
end if;
end process;
end fullbehavioural;
Structural Model
library IEEE;
use IEEE.std_logic_1164.all;
entity fullstructural is
Page 27 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
s: out STD_LOGIC
v: out STD_LOGIC);
end fullstructural;
architecture fullstructural of fullstructural is
signal s1,s2,s3,s4: std_logic;
component and2 is
port(p:in STD_LOGIC;
v: in STD_LOGIC;
s: out STD_LOGIC);
end component;
component xor_2 is
port(p:in STD_LOGIC;
v: in STD_LOGIC;
s: out STD_LOGIC);
end component;
component or3 is
port(a:in STD_LOGIC;
b: in STD_LOGIC;
c:in STD_LOGIC;
s:out STD_LOGIC);
Page 28 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
end component;
begin
x1: xor_2 port map(a,b,s1);
x2: xor_2 port map(S1,b,s);
a1: and2 port map(a,b,s2);
a2: and2 port map(a,b,s3);
a3: and2 port map(b,c,s4);
r1: and2 port map(s2,s3,s4,v);
end fullstructural;
WAVEFORMS:
Page 29 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
HALF SUBTRACTOR
Date:
Exp No: 2
AIM: Design and verify half subtractor by using dataflow style .
PROGRAM:
Library ieee;
use ieee.std_logic_1164.all;
entity hs1 is
port(a,b:in bit;d,bo:out bit);
end hs1;
architecture hs1 of hs1 is
begin
d<=a xor b;
bo<=(not a) and b;
end hs1;
SIMULATION OUTPUT:
Page 30 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
AIM: Simulation and verification of Half Subtractor using structural model.
PROGRAM:
Library ieee;
use ieee.std_logic_1164.all;
use vamsi.all;
entity hfsub is
port(A,B:in bit;D,B0:out bit);
end hfsub;
architecture struct of hfsub is
component xor2 is
port(a,b:in bit;y:out bit);
end component;
component and2 is
port(a,b:in bit;y:out bit);
Page 31 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
end component;
component not1 is
port(a:in bit;y:out bit);
end component;
signal s:bit;
Begin
X1:xor1 port map(A,B,D);
X2:not1 port map(A,s);
X3:and1 port map(s,B,B0);
end struct;
SIMULATION OUTPUT:
Behavioral model
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
Page 32 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
entity hsub is
Port ( a : in STD_LOGIC; b : in STD_LOGIC;
sub : out STD_LOGIC;
borrow : out STD_LOGIC);
end hsub;
architecture Behavioral of hsub is
begin
process(a,b)
begin
if((a='0')and(b='0'))then sub<='0';
borrow<='0'; elsif((a='0')and(b='1'))then sub<='1';
borrow<='1'; elsif((a='1')and(b='0'))then sub<='1';
borrow<='0'; elsif((a='1')and(b='1'))then sub<='0';
borrow<='0';
end if;
end process;
end Behavioral;
WAVEFORMS:
Page 33 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
FULL SUBTRACTOR
Date:
Exp No: 2
AIM: To develop a VHDL code for a full subtractor.
Page 34 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
VHDL CODE(dataflow):
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;//standard library packages
ENTITY fullsubd IS
PORT(A,B,BORIN: IN BIT;
DIFF,BOR:OUT BIT);//input and output declaration
END fullsubd;
ARCHITECTURE dataflow OF fullsubd IS
BEGIN
DIFF<=A XOR B XOR BORIN;
BOR<=((NOT A) AND B) OR (BORIN AND (NOT (A XOR B)));//expressions for
outputs
END dataflow;
VHDL Code(behavioral):
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;//standard library packages
ENTITY fullsubb IS
PORT(A,B,BORIN: IN BIT;
DIFF,BOR: OUT BIT); )//input and output declaration
END fullsubb;
Page 35 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
ARCHITECTURE BEHAVE OF fullsubb IS
BEGIN
PROCESS(A,B,BORIN)//sensitivity list
BEGIN
IF A='0' AND B='0' THEN BOR<=BORIN;DIFF<=BORIN;
ELSIF(A='0' AND B='1' AND BORIN='0')OR (B='1' AND
A='1' AND BORIN='1')
THEN DIFF<='1';BOR<='1';
ELSIF(A='1' AND B='1' AND BORIN='0')OR (A='1' AND
B='0' AND BORIN='1')
THEN DIFF<='0';BOR<='0';
ELSIF(A='1' AND B='0' AND BORIN='0' ) THEN
BOR<='0';DIFF<='1';
ELSE BOR<='1';DIFF<='0';
END IF;
END PROCESS;//marks end of the process
END BEHAVE;
VHDL Code(Structural):
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;//standard library packages
ENTITY fullsubs IS
Page 36 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
PORT(A,B,BORIN: IN BIT;
DIFF,BOR:OUT BIT); );//input and output declaration
END fullsubs;
ARCHITECTURE struc OF fullsubs IS
COMPONENT halfsubd //basic component declarations
PORT(A,B:IN BIT;
DIFF,BOR:OUT BIT);
END COMPONENT;
COMPONENT or2bit
PORT(A,B:IN BIT;C:OUT BIT);
END COMPONENT;
SIGNAL BOR1,BOR2,DIFF1:BIT;
BEGIN//mapping
HS1:halfsubd PORT MAP(A,B,DIFF1,BOR1);
HS2:halfsubd PORT MAP(DIFF1,BORIN,DIFF,BOR2);
O1:or2bit PORT MAP(BOR1,BOR2,BOR);
END struc;
Page 37 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
WAVE FORMS:
Page 38 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
3 – 8 DECODER
AIM:
To write VHDL program for 3 – 8 Decoder simulate the program and verify the results.
APPARATUS:
Computer system
Xilinx 7.1 software tool
LOGIC SYMBOL AND TRUTH TABLE:
3 x 8 decoder
G1
G2A
OU
G2B
OUT1
T1
OUT1
Y0
Y1
O1T
Y2
OUT
1
OUT
Y3
1
Y4
OUT
1
OUT
Y5
1
Y6
OUT
1
Y7
OUT
1
OUT
1
1
A (0)
A (1)
OUT1
A (2)
OUT1
OUT1
TRUTH TABLE
INPUTS
OUTPUTS
G1
G2A_L
G2B_L
C
B
A
Y7_L
Y6_L
Y5_L
Y4_L
Y3_L
Y2_L
Y1_L
Y0_L
0
X
X
X
X
X
1
1
1
1
1
1
1
1
X
1
X
X
X
X
1
1
1
1
1
1
1
1
X
X
1
X
X
X
1
1
1
1
1
1
1
1
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
Page 39 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
1
0
0
1
1
1
0
III B.Tech., I-SEM R13 DICA
1
1
1
1
1
1
1
VHDL PROGRAM:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity decoder is
Port ( g1,g2,g3 : in std_logic;
A : in std_logic_vector(2 downto 0);
Y : out std_logic_vector(0 to 7));
end decoder;
architecture Behavioral of decoder is
signal Y1:std_logic_vector(0 to 7 );
begin with A select Y1<= "01111111" when "000",
"10111111" when "001",
"11011111" when "010",
"11101111" when "100",
"11110111" when "011",
"11111011" when "101",
"11111101" when "110",
"11111110" when "111",
"11111111" when others;
Y<= Y1 when (G1 and not G2 and not G3)='1'
else "11111111";
end Behavioral;
8X3 ENCODER
AIM:
To write VHDL & verilog program for encoder ,simulate the program and verify the results.
APPARATUS:
Computer system
Xilinx 7.1 software tool
VHDL CODE :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity encoder is
Port ( d : in std_logic_vector(7 downto 0);
b : out std_logic_vector(2 downto 0));
end encoder;
Page 40 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
architecture Behavioral of encoder is
begin
process(d)
begin
case d is
when "00000001"=>b<="000";
when "00000010"=>b<="001";
when "00000100"=>b<="010";
when "00001000"=>b<="011";
when "00010000"=>b<="100";
when "00100000"=>b<="101";
when "01000000"=>b<="110";
when "10000000"=>b<="111";
when others =>null;
end case;
end process;
end Behavioral;
8x1 MULTIPLEXER
AIM:
To write VHDL & verilog program for Multiplexer, simulate the program and verify the results
APPARATUS:
Computer system
Xilinx 7.1 software tool
LOGIC SYMBOL AND TRUTH TABLE:
8X1 MULTIPLEXER
Page 41 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
EN
A0
A1
OU
A2
OU
T1
A3
OU
T1
A4
OU
T1
OU
A5
T1
T1
OU
A6
A7
T1
OU
OU
T1
S0
T1
OU
S1
T1
OU
S2
T1
OU
T1
III B.Tech., I-SEM R13 DICA
Y
TRUTH TABLE
INPUTS
OUTPUT
EN
S0
S1
S2
DATA
Y
0
X
X
X
X
0
1
0
0
0
A0
A0
1
0
0
1
A1
A1
1
0
1
0
A2
A2
1
0
1
1
A3
A3
1
1
0
0
A4
A4
1
1
0
1
A5
A5
1
1
1
0
A6
A6
1
1
1
1
A7
A7
8 X 1 MULTIPLEXER
VHDL CODE
Page 42 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity multiplexer is
Port ( s : in std_logic_vector(2 downto 0);
d : in std_logic_vector(7 downto 0);
y,y1 : out std_logic);
end multiplexer;
architecture Behavioral of multiplexer is
begin
process ( s,d)
begin
case s is
when "000" => y<= d(0) ;y1 <= not d(0);
when "001" => y<= d(1) ;y1 <= not d(1);
when "010" => y<= d(2) ;y1 <= not d(2);
when "011" => y<= d(3) ;y1 <= not d(3);
when "100" => y<= d(4) ;y1 <= not d(4);
when "101" => y<= d(5) ;y1 <= not d(5);
when "110" => y<= d(6) ;y1 <= not d(6);
when "111" => y<= d(7) ;y1 <= not d(7);
when others => y<='1';
end case;
end process;
end Behavioral;
2x4 DEMULTIPLEXER
AIM:
To write VHDL & verilog program for demultiplexer , simulate the program and verify the results
APPARATUS:
Computer system
Xilinx 7.1 software tool
LOGIC SYMBOL AND TRUTH TABLE:
2 X 4 DEMULTIPLEXER
Page 43 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
EN
A
S0
OU
S1
T1
OU
T1
Y0
OU
Y1
T1
OU
Y2
T1
OU
Y3
T1
OU
T1
TRUTH TABLE
INPUTS
OUTPUT
EN
S0
S1
DATA
Y
0
X
X
X
0
1
0
0
A
Y0
1
0
1
A
Y1
1
1
0
A
Y2
1
1
1
A
Y3
VHDL PROGRAM:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity demultiplexer is
Port ( s1 : in std_logic;
sel : in std_logic_vector ( 1 downto 0);
q : out std_logic_vector ( 3 downto 0));
end demultiplexer;
architecture Behavioral of demultiplexer is
signal q1 : std_logic_vector ( 3 downto 0);
begin
with sel select q1<= "1110" when "00",
"1101" when "01",
"1011" when "10",
"0111" when "11",
"1111" when others;
q<= q1 when s1= '0'
else "1111";
Page 44 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
end Behavioral;
COMPARATORS
Expt.No: 6(a)
AIM: Design and Simulate 2- bit comparator Using Xilinx and Generate the RTL,
Technology Schematics & Waveforms using VHDL.
SOFTWARE USED:
Computer System.
XILINX ISE 10.1i Simulator.
VHDL PROGRAM:
Entity comparator is
Port (a,b:in std_logic_vector(7 doento 0);
aeqb, agtb, altb:out std_logic);
end comparator;
Architecture behavior of comparator is
begin
aeqb<=‘1’ when a=b else’0’;
agtb<=‘1’ when a>b else’0’;
altb<=‘1’ when a<b else’0’;
Page 45 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
end behavior;
Result:- The waveforms and schematic diagrams of 2-bit comparator are observed in VHDL.
4 BIT COMPARATOR
Date:
Exp No: 5
AIM: Simulate the programs of 4 Bit Comparator using VHDL in Data flow, Behavioral and
Structural models.
APPRATUS REQUIRED:
Active HDL4.2 software.
PROGRAM:
Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity comp4_dat is
port ( a: in STD_LOGIC_VECTOR (3 downto 0);
b: in STD_LOGIC_VECTOR (3 downto 0);
agtb: out STD_LOGIC;
aeqb: out STD_LOGIC;
altb: out STD_LOGIC);
end comp4_dat;
Page 46 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
architecture comp4_dat of comp4_dat is
begin
altb<='1' when a<b else '0';
aeqb<='1' when a=b else '0';
agtb<='1' when a>b else '0';
end comp4_dat;
Behavioral Model
library IEEE;
use IEEE.std_logic_1164.all;
entity comp4_beh is
port ( a: in STD_LOGIC_VECTOR (3 downto 0);
b: in STD_LOGIC_VECTOR (3 downto 0);
aeqb: out STD_LOGIC;
agtb: out STD_LOGIC;
altb: out STD_LOGIC);
end comp4_beh;
architecture comp4_beh of comp4_beh is
begin
process(a,b)
begin
if(a=b) then aeqb<='1';
Page 47 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
else aeqb<='0';
if(a>b) then agtb<='1';
else agtb<='0';
if(a<b) then altb<='1';
else altb<='0';
end if;
end if;
end if;
end process;
end comp4_beh;
Structural Model
--Program for 2 input XNOR Gate in Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity xnor2_dat is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
c: out STD_LOGIC);
end xnor2_dat;
architecture xnor2_dat of xnor2_dat is
begin
Page 48 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
c<=a xnor b;
end xnor2_dat;
--Program for NOT Gate in Behavioral Model
library IEEE;
use IEEE.std_logic_1164.all;
entity not2_beh is
port ( a: in STD_LOGIC;
c: out STD_LOGIC);
end not2_beh;
architecture not2_beh of not2_beh is
begin
process(a)
begin
if(a='0') then c<='1';
else c<='0';
end if;
end process;
end not2_beh;
--Program for 2 input AND Gate in Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
Page 49 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
entity and2_dat is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
c: out STD_LOGIC);
end and2_dat;
architecture and2_dat of and2_dat is
begin
c<= a and b;
end and2_dat;
--Program for 3 input AND Gate in Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity and3_dat is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
p: out STD_LOGIC);
end and3_dat;
architecture and3_dat of and3_dat is
begin
p<=a and b and c;
end and3_dat;
Page 50 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
--Program for 4 input AND Gate in Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity and4_dat is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
d: in STD_LOGIC;
p: out STD_LOGIC);
end and4_dat;
architecture and4_dat of and4_dat is
begin
p<=a and b and c and d;
end and4_dat;
--Program for 5 input AND Gate in Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity and5_dat is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
Page 51 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
c: in STD_LOGIC;
d: in STD_LOGIC;
e: in STD_LOGIC;
p: out STD_LOGIC);
end and5_dat;
architecture and5_dat of and5_dat is
begin
p<=a and b and c and d and e;
end and5_dat;
--Program for 4 input OR Gate in Data flow Model
library IEEE;
use IEEE.std_logic_1164.all;
entity or4_dat is
port ( a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
d: in STD_LOGIC;
p: out STD_LOGIC);
end or4_dat;
architecture or4_dat of or4_dat is
begin
p<=a or b or c or d;
Page 52 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
end or4_dat;
--Program for 4 Bit Comparator in Structural Model
library IEEE;
use IEEE.std_logic_1164.all;
entity comp4_str is
port ( a: in STD_LOGIC_VECTOR (3 downto 0);
b: in STD_LOGIC_VECTOR (3 downto 0);
aeqb: out STD_LOGIC;
agtb: out STD_LOGIC;
altb: out STD_LOGIC);
end comp4_str;
architecture comp4_str of comp4_str is
component xnor2_dat is
port(a: in STD_LOGIC;
b: in STD_LOGIC;
c: out STD_LOGIC);
end component;
component not2_beh is
port(a: in STD_LOGIC;
c: out STD_LOGIC);
Page 53 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
end component;
component and2_dat is
port(a: in STD_LOGIC;
b: in STD_LOGIC;
c: out STD_LOGIC);
end component;
component and3_dat is
port(a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
p: out STD_LOGIC);
end component;
component and4_dat is
port(a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
d: in STD_LOGIC;
p: out STD_LOGIC);
end component;
component and5_dat is
port(a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
Page 54 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
d: in STD_LOGIC;
e: in STD_LOGIC;
p: out STD_LOGIC);
end component;
component or4_dat is
port(a: in STD_LOGIC;
b: in STD_LOGIC;
c: in STD_LOGIC;
d: in STD_LOGIC;
p: out STD_LOGIC);
end component;
signal t1,t2,t3,t4,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10: STD_LOGIC;
begin
n1:not2_beh port map(b(0),t1);
n2:not2_beh port map(b(1),t2);
n3:not2_beh port map(b(2),t3);
n4:not2_beh port map(b(3),t4);
x1:xnor2_dat port map(a(0),b(0),s1);
x2:xnor2_dat port map(a(1),b(1),s2);
x3:xnor2_dat port map(a(2),b(2),s3);
x4:xnor2_dat port map(a(3),b(3),s4);
d1:and5_dat port map(a(0),t1,s2,s3,s4,s5);
d2:and4_dat port map(a(1),t2,s3,s4,s6);
Page 55 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
d3:and3_dat port map(a(2),t3,s4,s7);
d4:and2_dat port map(a(3),t4,s8);
d5:and4_dat port map(s1,s2,s3,s4,s9);
d6:and4_dat port map(s1,s2,s3,s4,aeqb);
r1:or4_dat port map(s5,s6,s7,s8,s10);
r2:or4_dat port map(s5,s6,s7,s8,agtb);
x5:xnor2_dat port map(s9,s10,altb);
end comp4_str;
WAVEFORMS:
5
a
0
10
1
2
15
3
20
25
30
35
40
45
4
5
6
7
8
9
50
55
A
B
60
C
65
70
D
E
75
F
ns
0
a(3)
a(2)
a(1)
a(0)
b
F
E
D
C
B
A
9
8
7
6
5
b(3)
b(2)
b(1)
b(0)
agtb
aeqb
altb
RESULT: All models of 4 Bit Comparator are simulated and waveforms are observed.
Page 56 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
D FLIP-FLOP
Date:
Exp No: 6
AIM: Simulate the program of D Flop-flop using VHDL in Behavioral model.
APPRATUS REQUIRED:
Active HDL4.2 software.
PROGRAM:
library ieee;
use ieee.std_logic_1164.all;
entity dff is
port(pr,cr,clk,d:in std_logic;
q,qn:inout std_logic);
end dff;
architecture dff1 of dff is
signal s1,s2,s3,s4:std_logic;
begin
s1<=(pr nand s2)nand s4;
s2<=(cr nand clk)nand s1;
s3<=(s2 nand clk)nand s4;
s4<=(d nand s3)nand cr;
q<=(pr nand s2)nand qn;
qn<=(q nand cr)nand s3;
Page 57 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
end dff1;
WAVEFORMS:
Page 58 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
RESULT: The Behavioral model of D Flip-Flop are simulated and waveforms are observed.
Page 59 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
JK FLIP-FLOP 74X109
Date:
Exp No: 7
AIM: Simulate the program of JK Flop-flop using VHDL in Behavioral model.
APPRATUS REQUIRED:
Active HDL4.2 software.
--Program for JK flip-flop
library IEEE;
use IEEE.std_logic_1164.all;
Page 60 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
entity jk_ff is
port (
jk
: in STD_LOGIC_VECTOR(1 downto 0);
--jk(1)=J;jk(0)=K;
clk,pr_l,clr_l : in STD_LOGIC;
q,nq
: inout STD_LOGIC
);
end jk_ff;
architecture jk of jk_ff is
begin
process(clk,pr_l,clr_l,jk)
variable temp:std_logic:='0';
begin
q<='0';nq<='1';
if (pr_l='1' and clr_l='0') then
q<='0';nq<='1';
elsif (pr_l='0' and clr_l ='1') then
q<='1';nq<='0';
elsif (pr_l='1' and clr_l='1') then
if (clk 'event and clk='0') then --performs during the falling edge of clock
case jk is
Page 61 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
when "00"=>temp:=temp;
when "01"=>temp:='0';
when "10"=>temp:='1';
when "11"=>temp:=not temp;
when others=>null;
end case;
end if;
q<=temp;
nq<= not temp;
end if;
end process;
end jk;
WAVEFORMS:
Page 62 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
RESULT: The Behavioral model of JK Flip-Flop are simulated and waveforms are observed.
DECADE COUNTER:
Date:
Exp No: 8
AIM: Simulate the program of Decade counter using VHDL in Behavioral model.
APPRATUS REQUIRED:
Active HDL4.2 software.
PROGRAM:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity counter7 is
Page 63 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
port(clk:in std_logic;
rst:in std_logic;
tc:out std_logic;
count:buffer std_logic_vector(3 downto 0));
end counter7;
architecture counter71 of counter7 is
begin
process(clk,rst)
begin
if(clk'event and clk='1')then
if(rst='1'or count="1001")then
count<="0000";
else
count<=count+1;
end if;
end if;
if(count="1001")then
tc<='1';
else
tc<='0';
end if;
end process;
end counter71;
Page 64 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
WAVEFORMS:
Page 65 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
RESULT: The Behavioral model of Decade counter are simulated and waveforms are observed.
UNIVERSAL SHIFT REGISTER
Date:
Exp No: 9
AIM: Simulate the program of Shift register using VHDL in Behavioral model.
APPRATUS REQUIRED:
Active HDL4.2 software.
PROGRAM:
library ieee;
use ieee.std_logic_1164.all;
Page 66 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
use ieee.std_logic_arith.all;
entity sr1 is
port(mode:in std_logic;
ser:in std_logic;
clk1,clk2:in std_logic;
a,b,c,d:in std_logic;
qa,qb,qc,qd:inout std_logic);
end sr1;
architecture sr71 of sr1 is
begin
process(mode,clk1,clk2,a,b,c,d)
begin
if(clk1'event and (not clk1)='1')then
if mode='1'then
qa<=a;
qb<=b;
qc<=c;
qd<=d;
else if(clk2'event and (not clk2)='1')then
elsif mode='0' then
qa<=ser;
qb<=qa;
qc<=qb;
Page 67 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
qd<=qc;
end if;
end if;
end if;
end process;
end sr71;
WAVEFORMS:
Page 68 of 69
ADITYA COLLEGE OF ENGG.MADANAPALLE (ACEM)
III B.Tech., I-SEM R13 DICA
RESULT: The Behavioral model of Shift register is simulated and waveforms are observed.
Page 69 of 69