Verilog Lab Manual
Verilog Lab Manual
Vision
Mission
Laboratory Incharges
                            Laboratory Instructor
                                  Shivamallu
                                   Instructor
HDL LAB MANUAL                                                                                   15ECL58
Course Outcomes
Students will :
     CO1: Design and conduct experiments on combinational and sequential circuits using various
         Modelling approaches of VHDL and Verilog.
     CO3: Debug, Execute and Download the bit stream file on FPGA using Xilinx ISE project
         navigator tool.
PEO1: Work as professionals in the area of Electronics and allied engineering fields
PEO2: Pursue higher studies and involve in the interdisciplinary research work
PEO3: Exhibit ethics, professional skills and leadership qualities in their profession.
     PSO1: Apply mathematical foundations, electronic design principles in modeling and design of electronic
     systems that demonstrates comprehension of the trade-off involved in design choices.
     PSO2: Apply design and development principles in the realization of hardware and software systems of
     varying complexity.
                                           Programme Outcomes
        1. Engineering knowledge: Apply the knowledge of mathematics, science, engineering
           fundamentals, and an engineering specialization for the solution of complex engineering problems.
        2. Problem analysis: Identify, formulate, research literature, and analyse complex engineering
           problems reaching substantiated conclusions using first principles of mathematics, natural
           sciences, and engineering sciences.
        3. Design/development of solutions: Design solutions for complex engineering problems and design
           system components or processes that meet the specified needs with appropriate consideration for
           public health and safety, and cultural, societal, and environmental considerations.
        5. Modern tool usage: Create, select, and apply appropriate techniques, resources, and modern
           engineering and IT tools, including prediction and modeling to complex engineering activities,
           with an understanding of the limitations.
        6. The engineer and society: Apply reasoning informed by the contextual knowledge to assess
           societal, health, safety, legal, and cultural issues and the consequent responsibilities relevant to the
           professional engineering practice.
        7. Environment and sustainability: Understand the impact of the professional engineering solutions
           in societal and environmental contexts, and demonstrate the knowledge of, and need for
           sustainable development.
        8. Ethics: Apply ethical principles and commit to professional ethics and responsibilities and norms
           of the engineering practice.
        9. Individual and team work: Function effectively as an individual, and as a member or leader in
           diverse teams, and in multidisciplinary settings.
        12. Life-long learning: Recognize the need for, and have the preparation and ability to engage in
            independent and life-long learning in the broadest context of technological change.
CO – PO – PSO MAPPING
   CO      PO1     PO2      PO3    PO4    PO     PO6     PO     PO    PO9     PO10    PO11    PO12      PSO1      PSO2
                                           5              7      8
   CO1      3        3              1      3                    3       1       3                2        1         3
   CO2      3        3              1      3                    3       1       3                2        1         3
   CO3      3        3              1      3                    3       1       3                2        1         3
   CO4      3        3              1      3                    3       2       3       2        2        1         3
                                        CONTENTS
       Sl. NO                            Title                  Page No
          1     Syllabus                                            6
2 Cycles of Experiments 8
4 Introduction to FPGA 21
                                               1. SYLLABUS
      Subject code: 15ECL58                                                     IA marks: 20
      No. of practical Hrs. /week: 03                                           Exam hours: 03
      Total no. of practical Hrs. 42                                            Exam marks: 80.
                …………………………………………………………………………
                              (ACCORDING TO VTU SYLLABUS)
      PART – A
PROGRAMMING
3. Write a HDL code to describe the functions of a full adder using three modeling styles.
4. Write a model for 32 bit ALU using the schematic diagram shown below A(31:0)
             • ALU should use the combinational logic to calculate an output based on the four
               bit op-code input.
             • ALU should pass the result to the out bus when enable line in high, and tri-state
               the out bus when the enable line is low.
             • ALU should decode the 4 bit op-code according to the given in example below.
5. Develop the Verilog code for the following flip-flops SR, D, JK & T.
      6. Design 4 bit binary, BCD counters (Synchronous reset and asynchronous reset) and “any
         sequence” counters Using Verilog code.
PART - B
2. Write HDL code to interface Hex key pad and display the key code on seven segment display.
    4. Write HDL code to accept 8 channel analog signal, Temperature sensors and display the data on
       LC panel or seven segment display
    5. Write HDL code to generate different waveforms (Sine, Square, Triangle, Ramp etc.,) using DAC
       change the frequency and amplitude.
CYCLES OF EXPERIMENTS:
      CYCLE                                     EXPERIMENTS
        1   1. Logic gates
                2. Half adder
                3. Full adder-3 Descriptions
                4. Gray to binary Conversion
         2      1. 2 to 4 decoder
                2. 8 to 3 (encoder without priority & with priority)
                3. 8 to 1 Multiplexer
                4. Comparator
                5. ALU
         4      1. Stepper Motor
                2. DC Motor
                3. Seven segment Display
                4. Elevator
                5. DAC
      2.1 HDL
             In electronics, a hardware description language or HDL is any language from a class of
      Computer languages for formal description of electronic circuits. It can describe the circuit's
      operation, its design and organization, and tests to verify its operation by means of simulation
      HDLs are standard text-based expressions of the spatial, temporal structure and behavior of
      electronic systems. In contrast to a software programming language, HDL syntax, semantics
      include explicit notations for expressing time and concurrency, which are the attributes of
      hardware. Languages whose only characteristic is to express circuit connectivity between a
      hierarchies of blocks are properly classified as netlist languages.
      HDLs are used to write executable specifications of some piece of hardware. A simulation
      program, designed to implement the underlying semantics of the language statements,
      coupled with simulating the progress of time, provides the hardware designer with the
      ability to model a piece of hardware before it is created physically. It is this execute ability
      that gives HDLs the illusion of being programming languages. Simulators capable of supporting
      discrete-event and continuous-time (analog) modeling exist, and HDLs targeted for each are
      available.
      It is certainly possible to represent hardware semantics using traditional programming languages
      such as C++, although to function such programs must be augmented with extensive and
      unwieldy class libraries. Primarily, however, software programming languages function as a
      hardware description language
             Using the proper subset of virtually any language, a software program called a synthesizer
      can infer hardware logic operations from the language statements and produce an equivalent
      netlist of generic hardware primitives to implement the specified behavior. This typically
      requires the synthesizer to ignore the expression of any timing constructs in the text.
             The two most widely-used and well-supported HDL varieties used in industry are
            VHDL (VHSIC HDL)
            Verilog
      2.2 VHDL
              VHDL (Very High Speed Integrated Circuit Hardware Description Language) is
      commonly used as a design-entry language for field-programmable gate arrays and application-
      specific integrated circuits in electronic design automation of digital circuits.
      VHDL is a fairly general-purpose language, and it doesn‟t require a simulator on which to run
      the code. There are a lot of VHDL compilers, which build executable binaries. It can read and
      write files on the host computer, so a VHDL program can be written that generates another
      VHDL program to be incorporated in the design being developed. Because of this general-
      purpose nature, it is possible to use VHDL to write a test bench that verifies with the user,
      and compares results with those expected. This is similar to the capabilities of the Verilog
      language
      VHDL is not a case sensitive language. One can design hardware in a VHDL IDE (such as
      Xilinx or Quartus) to produce the RTL schematic of the desired circuit. After          that,   the
      generated schematic can be verified using simulation software (such as ModelSim) which
      shows the waveforms of inputs and outputs of the circuit after generating the appropriate
      test bench. To generate an appropriate test bench for a particular circuit or VHDL code,
      the inputs have to be defined correctly. For example, for clock input, a loop process or an
      iterative statement is required.
      The key advantage of VHDL when used for systems design is that it allows the behavior of the
      required system to be described (modeled) and verified (simulated) before synthesis tools
      translate the design into real hardware (gates and wires). When a VHDL model is
      translated into the "gates and wires" that are mapped onto a programmable logic device such
      as a CPLD or FPGA, then it is the actual hardware being configured, rather than the
      VHDL code being "executed" as if on some form of a processor chip.
      Both VHDL and Verilog emerged as the dominant HDLs in the electronics industry while
      older and less-capable HDLs gradually disappeared from use. But VHDL and Verilog share
      many of the same limitations: neither HDL is suitable for analog/mixed-signal              circuit
      simulation. Neither possesses language constructs to describe recursively-generated logic
      structures
      2.3 Verilog
             Verilog is a hardware description language (HDL) used to model electronic systems. The
      language supports the design, verification, and implementation of analog, digital, and mixed -
      signal circuits at various levels of abstraction
      The designers of Verilog wanted a language with syntax similar to the           C    programming
      language so that it would be familiar to engineers and readily accepted. The language is case-
      sensitive, has a preprocessor like C, and the major control flow keywords, such as "if"
      and "while", are similar. The formatting mechanism in the printing routines and language
      operators and their precedence are also similar
      The language differs in some fundamental ways. Verilog uses Begin/End instead of curly braces
      to define a block of code. The concept of time, so important to a HDL won't be found in C The
      language differs from a conventional programming language in that the execution of statements
      is not strictly sequential. A Verilog design consists of a hierarchy of modules are defined
      with a set of input, output, and bidirectional ports. Internally, a module contains a list of wires
      and registers. Concurrent and sequential statements define the behavior of the module by
      defining the relationships between the ports, wires, and registers Sequential statements are
      placed inside a begin/end block and executed in sequential order within the block. But all
      concurrent statements and all begin/end blocks in       the   design   are executed in    parallel,
      qualifying Verilog as a Dataflow language. A module can also contain one or more instances
      of another module to define sub-behavior
      A subset of statements in the language is synthesizable. If the modules in a design contains a
      netlist that describes the basic components and connections to be implemented in hardware only
      synthesizable statements, software can be used to transform or synthesize the design into the net
      list may then be transformed into, for example, a form describing the standard cells of an
      integrated circuit (e.g. ASIC) or a bit stream for a programmable logic device (e.g. FPGA).
      Describing a design
      In VHDL an entity is used to describe a hardware module
      An entity can be described using,
      1. Entity declaration
      2. Architecture.
      1. Entity declaration
                It defines the names, input output signals and modes of a hardware module
      Syntax
         Entity entity _ name is
      port declaration
        end entity name
      An entity declaration should start with “entity” and ends with “end” keywords. Ports are
      interfaces through which an entity can communicate with its environment. Each port must have a
      name, direction and a type. An entity may have no port declaration also. The direction will be
      input, output or inout.
      2. Architecture:
               It describes the internal description of design or it tells what is there inside design
      each entity has at least one architecture and an entity can have many architectures.
                Architecture can be described using structural, dataflow, behavioral or mixed style.
      Syntax:
      architecture architecture_name of entity_name is
          architecture_declarative_part;
      begin
           statements;
      end architecture_name;
      Here we should specify the entity name for which we are writing the architecture body. The
      architecture statements should be inside the begin and end keyword. Architecture declarative part
      may contain variables, constants, or component declaration.
      The internal working of an entity can be defined using different modeling styles inside
      architecture body. They are
                    Dataflow modeling
                    Behavioral modeling
                    Structural modeling.
Structure of an entity:
          Dataflow modeling
              In this style of modeling, the internal working of an entity can be implemented using
      concurrent signal assignment.
      Consider a half adder as an example which is having one XOR gate and a AND gate as shown
      below
Program
      Here STD_LOGIC_1164 is an IEEE standard which defines a nine-value logic type, called
      STD_ULOGIC. Use is a keyword, which imports all the declarations from this package. The
      architecture body consists of concurrent signal assignments, which describes the functionality of
      the design. Whenever there is a change in RHS, the expression is evaluated and the value is
      assigned to LHS.
      Behavioral modeling:
      In this style of modeling, the internal working of an entity can be implemented using set of
      statements.
      It contains:
      Process statements
      Sequential statements
      Signal assignment statements
             Process statement is the primary mechanism used to model the behavior of an entity it
      contains sequential statements, variable assignment (:=) statements or signal assignment
      (<=) statements etc. It may or may not contain sensitivity list. If there is an event occurs on any
      of the signals in the sensitivity list, the statements within the process are executed. Inside the
      process the execution of statements will be sequential and if one entity is having two
      processes the execution of these processes will be concurrent. At the end it waits for another
      event to occur.
      Here whenever there is a change in the value of A OR B the process statements are executed.
      Structural modeling
             The implementation of an entity is done through set of interconnected components. It
      contains
      Signal declaration.
      Component instances
      Port maps.
      Wait statements.
      Component declaration:
      Syntax:
       Component Component_name
             List_of_interface ports;
       end component component_ name;
      Before instantiating the component it should be declared using component declaration as
      shown above. Component declaration declares the name of the entity and interface of a
      component.
Consider the example of full adder using 2 half adder and 1 OR gate.
      The program written for half adder in dataflow modeling is instantiated as shown above.
      HA is the name of the entity in dataflow modeling. C1, C2, S1 are the signals used for internal
      connections of the component which are declared using the keyword signal. Port map is used to
      connect different components as well as connect components to ports of the entity.
      Signal list is the architecture signals which will be connected to component ports. This can be
      done in different ways. What is declared above is positional binding. One more type is the named
      binding.
      The above can be written as,
      HA1: ha port map (A => A, B => B, S => S1, C => C1);
      HA2: ha port map (A => S1, B => Cin, S=> SUM, C => C2);
      Design verification is often the most time-consuming portion of the design process, due to the
      disconnect between a device's functional specification, the designer's interpretation of the
      specification, and the imprecision of the HDL language. The majority of the initial test/debug
      cycle is conducted in the HDL simulator environment, as the early stage of the design is subject
      to frequent and major circuit changes. An HDL description can also be prototyped and tested in
      hardware–programmable logic devices are often used for this purpose. Hardware prototyping is
      comparatively more expensive than HDL simulation, but offers a real-world view of the design.
      Prototyping is the best way to check interfacing against other hardware devices, and
      hardware prototypes, even those running on slow FPGAs, offer much faster simulation times
      than pure HDL simulation.
      Requirements:
      1.   HDL software with front-end (Design entry, synthesis, simulation implementation and
      programming)
      2. FPGA kit with minimum 400,000 gate density
      Procedure:
      Software part
      1. Click on the Project navigator icon on the desktop of your PC. Write the vhdl code, check
      syntax and perform the functional simulation using ISE Simulator.
      2. Open a new UCF file and lock the pins of the design with FPGA I/O pins.
      3. Implement the design by double clicking on the implementation tool selection
      4. Check the implementation reports.
      5. Create programming file.
      FPGAs, alternative to the custom ICs, can be used to implement an entire System On one Chip
      (SOC). The main advantage of FPGA is ability to reprogram. User can reprogram an FPGA to
      implement a design and this is done after the FPGA is manufactured. This brings the name
      “Field Programmable.”
      Custom ICs are expensive and takes long time to design so they are useful when produced in
      bulk amounts. But FPGAs are easy to implement within a short time with the help of Computer
      Aided Designing (CAD) tools.
BMSIT and Management                                                                  Dept. of ECE
                                                   21
HDL LAB MANUAL                                                                              15ECL58
      Xilinx logic block consists of one Look Up Table (LUT) and one FlipFlop. An LUT is used to
      implement number of different functionality. The input lines to the logic block go into the LUT
      and enable it. The output of the LUT gives the result of the logic function that it implements and
      the output of logic block is registered or unregistered output from the LUT.
Xilinx LUT
The ISE (Integrated Synthesis Environment) design flow comprises the following steps:
         1. Design Entry
      Create an ISE project as follows:
         1. Create a project.
         2. Create files and add them to your project, including a user constraints (UCF) file.
         3. Add any existing files to your project.
          Functional Verification
      You can verify the functionality of your design at different points in the design flow as follows:
         2. Design Synthesis
      Synthesize your design.
         3. Design Implementation
      Implement your design as follows:
2 76 IO 2 85 IO 2 102 IO
3 77 IO 3 86 IO 3
4 79 IO 4 87 IO 4 103 IO
5 78 IO 5 89 IO 5 105 IO
6 82 IO 6 90 IO 6 107 IO
7 80 IO 7 92 IO 7 108 IO
8 83 IO 8 96 IO 8 113 IO
1 112 IO 1 28 IO 1 57 IO
2 116 IO 2 31 IO 2 59 IO
3 119 IO 3 33 IO 3 63 IO
4 118 IO 4 44 IO 4 69 IO
5 123 IO 5 46 IO 5 68 IO
6 131 IO 6 47 IO 6 73 IO
7 130 IO 7 50 IO 7 70 IO
8 137 IO 8 51 IO 8 20 IO
1 1 IO 1 93 IO 1 60 IO
2 12 IO 2 95 IO 2 56 IO
3 13 IO 3 97 IO 3 41 IO
4 14 IO 4 98 IO 4 40 IO
5 15 IO 5 99 IO 5 36 IO
6 17 IO 6 194 IO 6 35 IO
7 18 IO 7 IO 7 32 IO
8 21 IO 8 122 IO 8 10 IO
9 23 IO 9 129 IO 9 11 IO
10 24 IO 10 132 IO 10 8 IO
11 26 IO 11 135 IO 11 7 IO
12 27 IO 12 140 IO 12 6 IO
13 5 13 5 13 5
14 -5 14 -5 14 -5
FRC9
IO
IO
IO
141 IO
NA IO
NA IO
NA IO
NA IO
                 VCC
                              POWER
                 GND          SUPPLY
Clk 52
           PART – A
          PROGRAMS
      EXPERIMENT NO. 1
      AIM: WRITE HDL CODE TO REALIZE ALL LOGIC GATES
              A logic gate performs a logical operation on one or more logic inputs and produces a
      single logic output. The logic normally performed is Boolean logic and is most commonly
      found in digital circuits
VERILOG CODE
      EXPERIMENT NO.2
      AIM: Write HDL codes for the following combinational circuits.
    Truth Table
     EN      Din(1)    Din(0)   Dout(3)    Dout(2)    Dout(1)   Dout(0)
     1       x         x        0          0          0         0
     0       0         0        0          0          0         1
     0       0         1        0          0          1         0
     0       1         0        0          1          0         0
     0       1         1        1          0          0         0
VERILOG CODE
RTL Schematic
      Truth Table
                                INPUTS                                                     OUTPUTS
en   Din(7)   Din(6)   Din(5)   Din(4)   Din(3)     Din(2)     Din(1)   Din(0)   Dout(0)    Dout(1)   Dout(2)
1      x        x        x        x        x          x          x        X        z          z          z
0      0        0        0        0        0          0          0        1        1          1          1
0      0        0        0        0        0          0          1        0        1          1          0
0      0        0        0        0        0          1          0        0        1          0          1
0      0        0        0        0        1          0          0        0        1          0          0
0      0        0        0        1        0          0          0        0        0          1          1
0      0        0        1        0        0          0          0        0        0          1          0
0      0        1        0        0        0          0          0        0        0          0          1
0      1        0        0        0        0          0          0        0        0          0          0
                                     VERILOG CODE
                       module WPencode(en,Din,Dout);
                       input en;
                       input [ 7 : 0 ] Din;
                       output [ 2 : 0 ] Dout;
                       reg [ 2 : 0 ] Dout;
                       always@(en,Din)
                       begin
                       if(en == 1)
                       begin
                       Dout = 3‟bZZZ;
                       end
                       else
                       begin
                       case (Din)
                       8‟b00000001:Dout = 3‟b000;
                       8‟b00000010:Dout = 3‟b001;
                       8‟b00000100:Dout = 3‟b010;
                       8‟b00001000:Dout = 3‟b011;
                       8‟b00010000:Dout = 3‟b100;
                       8‟b00100000:Dout = 3‟b101;
                       8‟b01000000:Dout = 3‟b110;
                       8‟b01000000:Dout = 3‟b111;
                       endcase
                       end
                       end
                       endmodule
RTL Schematic
Truth Table
                                        INPUTS                                                  OUTPUTS
       en    Din(7)   Din(6)   Din(5)    Din(4)   Din(3)   Din(2)   Din(1)   Din(0)   Dout(0)    Dout(1)      Dout(2)
       1       x        x        x         x        x        x        x        x        z          z            z
       0       x        x        x         x        x        x        x        1        1          1            1
       0       x        x        x         x        x        x        1        0        1          1            0
       0       x        x        x         x        x        1        0        0        1          0            1
       0       x        x        x         x        1        0        0        0        1          0            0
       0       x        x        x         1        0        0        0        0        0          1            1
       0       x        x        1         0        0        0        0        0        0          1            0
       0       x        1        0         0        0        0        0        0        0          0            1
       0       1        0        0         0        0        0        0        0        0          0            0
                                                   VERILOG CODE
                               module priori (en,Din,Dout);
                               input en;
                               input [ 7 : 0 ] Din;
                               output [ 2 : 0 ] Dout;
                               reg [ 2 : 0 ] Dout;
                               always@(en,Din)
                               begin
                               if(en == 1) // Active high enable
                               begin
                               Dout = 3'bZZZ; // Initializing Dout to high Impedance
                               end
                               else
                               begin
                               casex(Din)
                               8'b00000001 :Dout = 3'b000;
                               8'b0000001X :Dout = 3'b001;
                               8'b000001XX :Dout = 3'b010;
      Design a 3bit priority encoder. The input I is 3-bit and the output P is 3-bit.
      I (0) when high, has the highest priority, followed by I (1) and I (2).The output P
      for highest Priority to lowest is 0, 1 and 2 (decimal). Respectively Construct the
      truth table, minimize and write both VHDL and Verilog codes.
2. d) 8 TO 1 MULTIPLEXER
Truth Table:
VERILOG CODE
                       module mux8_1(S,I,Y);
                       input [2:0]S;
                       input[7:0];
                       output Y;
                       reg Y;
                       always@(S,I)
                       begin
                       case(S)
                        3'b000:Y=I[0];
                        3'b001:Y=I[1];
                        3'b010:Y=I[2];
                        3'b011:Y=I[3];
                        3'b100:Y=I[4];
                        3'b101:Y=I[5];
                        3'b110:Y=I[6];
                        3'b111:Y=I[7];
                        endcase
                        end
                        endmodule
RTL Schematic
VERILOG CODE
                            module bin2gray(b,g);
                            input [3:0] b;
                            output [3:0] g;
                            assign g[3]=b[3];
                            assign g[2]=b[3]^b[2];
                            assign g[1]=b[2]^b[1];
                            assign g[0]=b[1]^b[0];
                            endmodule
      Design a 4-bit parity generator .The output is 0 for even parity and 1 for odd parity
      Write both the VHDL and Verilog codes
2 f) 4-BIT COMPARATOR
Truth Table
VERILOG CODE
                         module comp(a,b,aeqb,agtb,altb);
                         input [3:0] a,b;
                         output aeqb,agtb,altb;
                         reg aeqb,agtb,altb;
                         always @(a ,b)
                         begin
                         aeqb=0; agtb=0; altb=0;
                         if(a==b) //checking for equality condition
                         aeqb=1;
                         else if (a>b) // checking greater than condition
                         agtb=1;
                         else
                         altb=1;
                         end
                         endmodule
EXPERIMENT NO.3
      AIM: Write HDL code to describe the functions of a full Adder Using three modeling
      styles.
RTL Schematic
Truth Table
DATA FLOW
        BEHAVIORAL STYLE
                       VHDL CODE                                               VERILOG CODE
 library IEEE;                                                    module fulladd(a,b,cin,sum,cout);
 use IEEE.STD_LOGIC_1164.ALL;                                     input a,b,cin;
 use IEEE.STD_LOGIC_ARITH.ALL;                                    output sum,cout;
 use IEEE.STD_LOGIC_UNSIGNED.ALL;                                 reg sum,cout;
                                                                  always@(a,b,cin)
 entity fulladder_beh is                                          begin
 Port ( a,b,cin : in std_logic; sum,cout : out std_logic);        case ({a,b,cin}) // Concatenating (a,b,cin)
 end fulladder_beh;                                               3'b000:{cout,sum}=2'b00;
                                                                  3'b001:{cout,sum}=2'b01;
 architecture Behavioral of fulladder_beh is                      3'b010:{cout,sum}=2'b01;
 signal abcin:std_logic_vector(2 downto 0);                       3'b011:{cout,sum}=2'b10;
 begin                                                            3'b100:{cout,sum}=2'b01;
 abcin<=a&b&cin; -- Concatenating (a,b,cin)                       3'b101:{cout,sum}=2'b10;
 process( abcin)                                                  3'b110:{cout,sum}=2'b10;
 begin                                                            3'b111:{cout,sum}=2'b11;
 case abcin is                                                    endcase
 when”000”=>sum<=‟0‟;cout<=‟0‟;                                   end
 when”001”=>sum<=‟1‟;cout<=‟0‟;                                   endmodule
 when”010”=>sum<=‟1‟;cout<=‟0‟;
 when”011”=>sum<=‟0‟;cout<=‟1‟;
 when”100”=>sum<=‟1‟;cout<=‟0‟;
 when”101”=>sum<=‟0‟;cout<=‟1‟;
 when”110”=>sum<=‟0‟;cout<=‟1‟;
 when”111”=>sum<=‟1‟;cout<=‟1‟
 ; when others=>null;
 end case;
 end process;
 end Behavioral;
       STRUCTURAL MODELLING
                     VHDL CODE                                    VERILOG CODE
 ---HALF ADDER
 library IEEE;                                      //HALF ADDER
 use IEEE.STD_LOGIC_1164.ALL;
 use IEEE.STD_LOGIC_ARITH.ALL;                      module ha(x,y,s,c);
 use IEEE.STD_LOGIC_UNSIGNED.ALL;                   input x,y;
 entity halfadd is                                  output s,c;
    Port ( x,y :in STD_LOGIC;                       assign s = x^y;
        s,c : out STD_LOGIC);                       assign c = x & y;
 end halfadd;                                       endmodule
 end Behavioral;
BMSIT and Management                                                                 Dept. of ECE
                                                    40
HDL LAB MANUAL                                                                15ECL58
EXPERIMENT NO. 4
      AIM: Write a model for 4/8/32 bit Arithmetic Logic Unit using the schematic
      diagram shown below.
VERILOG CODE
VERILOG CODE
    EXPERIMENT NO.5
      AIM: Develop the HDL code for the following flip-flop: T, D, SR and JK.
                                                       CLK    T    Q     Qb      OPERATION
                                                              x    Q     Qb      No Change
                                                                   Q     Qb      No Change
                                                                   Qb    Q       Toggle
                 RTL Schematic
                                                            Truth Table
                                                  CLK   D   Q    Qb       OPERATION
                                                  0     x   Q    Qb       No change
                                                  1     0   0    1        Reset
                                                  1     1   1    0        Set
                                     VERILOG CODE
                             module dff(d,clk,q,qb);
                             input d,clk;
                             output q,qb;
                             reg q=0,qb=1;
                             always@(posedge clk)
                             begin
                             q= d;
                             qb=~q;
                             end
                             endmodule
              RTL Schematic
                                                        Truth Table
                                             CLK            Q     Qb
                                                   x    x   Q     Qb
                                                            Not defined
                                                            Q     Qb
                                      VERILOG CODE
                              module sr(sr,clk,q,qb);
                              input clk;
                              input[1:0]sr;
                              output q,qb;
                              reg q=0,qb=1;
                              always@(posedge clk)
                              begin
                              case(sr)
                              2'b00:q=q;
                              2'b01:q=0;
                              2'b10:q=1;
                              2'b11:q=1'bZ;
                              endcase
                              qb=~q;
                              end
                              endmodule
                                                 CLK                 Q    Qb
                                                           x   x     Q    Qb
                                                                     Qb   Q
                                                                     Q    Qb
                              module jkff1(jk,clk,q,qb);
                              input clk;
                              output q,qb;
                              reg q=0,qb=1;
                              input [1:0]jk;
                              always@(posedge clk)
                              begin
                              case (jk)
                              2'b00:q=q;
                              2'b01:q=0;
                              2'b10:q=1;
                              2'b11:q=~q;
                              endcase
                              qb=~q;
                              end
                              endmodule
                       reg[24:0] clkd;
                       always@(posedge clk)
                       begin
                       clkd = clkd+1;
                       end
                       always@(posedge clkd[21])
                       begin
                       case (jk)
                       2'b00:q=q;
                       2'b01:q=0;
                       2'b10:q=1;
                       2'b11:q=~q;
                       endcase
                       qb=~q;
                       end
                       endmodule
EXPERIMENT-6
                                    VERILOG CODE
                        module syncnt(clk,reset,count);
                        input clk,reset;
                        output [3:0] count;
                        reg[3:0]count=4'b0000;
                        reg[24:0] clkd;
                        always@(posedge clk)
                        begin
                        clkd = clkd+1;
                        end
                        always @(posedge clkd[20])
                        begin
                        if(reset==1)
                        count = 4'b0000;
                        else
                        count = count+1;
                        end
                        endmodule
RTL Schematic
                                       VERILOG CODE
                       module asyncnt(clk,reset,count);
                       input clk,reset;
                       output [3:0] count;
                       reg[3:0]count=4'b0;
                       reg[24:0] clkd;
                       always@(posedge clk)
                       begin
                       clkd = clkd+1;
                       end
                       always @(posedge clkd[20] or posedge reset)
                       begin
                       if(reset==1)
                       count = 4'b0000;
                       else
                       count = count+1;
                       end
                       endmodule
                                        VERILOG CODE
                        module bin( clk, rst, count);
                        input clk, rst;
                        output [3:0] count;
                        reg [3:0] count;
                        initial
                        begin
                        count =4'd0;
                        end
                        always @ (posedge clk)
                        begin
                        if (rst)
                        count =4'd0;
                        else
                        count = count +4'd1;
                        end
                        endmodule
                                        VERILOG CODE
                        module bin( clk, rst, count);
                        input clk, rst;
                        output [3:0] count;
                        reg [3:0] count;
                        initial
                        begin
                        count =4'd0;
                        end
                        always @ (posedge clk)
                        begin
                        if (rst)
                        count =4'd15;
                        else
                        count = count -4'd1;
                        end
                        endmodule
                                        VERILOG CODE
                        module async_bin1( clk, rst, count);
                        input clk, rst;
                        output [3:0] count;
                        reg [3:0] count;
                        initial
                        begin
                        count =4'd0;
                        end
                        always @(posedge clk or posedge rst)
                        begin
                        if (rst)
                        count =4'd0;
                        else
                        count = count +4'd1;
                        end
                        endmodule
                                       VERILOG CODE
                       module bin_sync( clk, rst, bcd_out);
                       input clk, rst;
                       output [3:0] bcd_out;
                       reg [3:0] bcd_out;
                       //reg [23:0] clkd;
                       initial
                       begin
                       bcd_out=4'd0;
                       end
                       always @ (posedge clk)
                       begin
                       /*clkd = clkd+1;
                       end
                       always @ (posedge clkd[22])
                       begin */
                       if (rst)
                       bcd_out=4'd0;
                       else if(bcd_out<4'd9)
                       bcd_out=bcd_out+4'd1;
                       else
                       bcd_out=4'd0;
                       end
                       endmodule
                                         VERILOG CODE
                         module bcd_async( clk, rst, bcd_out);
                         input clk, rst;
                         output [3:0] bcd_out;
                         reg [3:0] bcd_out;
                         //reg [23:0] clkd;
                         initial
                         begin
                         bcd_out=4'd0;
                         end
                         always @ (posedge clk or posedge rst)
                         begin
                         /*clkd = clkd+1;
                         end
                         always @ (posedge clkd[22])
                         begin */
                         if (rst)
                         bcd_out=4'd0;
                         else if(bcd_out<4'd9)
                         bcd_out=bcd_out+4'd1;
                         else
                         bcd_out=4'd0;
                         end
                         endmodule
                                            VERILOG CODE
                            module seqcnt( clk, rst, count);
                            input clk, rst;
                            output [3:0] count;
                            reg [3:0] count;
                            //reg [23:0] clkd;
                            initial
                            begin
                            count=4'd0;
                            end
                            always @ (posedge clk or posedge rst)
                            begin
                            /*clkd = clkd+1;
                            end
                            always @ (posedge clkd[22])
                            begin */
                            if (rst)
                            count=4'd3;
                            else if(count<4'd9)
                            count=count+4'd1;
                            else
                            count=4'd3;
                            end
                            endmodule
         PART- B
      INTERFACING
       PROGRAMS
    1. Write HDL code to generate different waveforms (saw tooth, sine wave,
       square, triangle, ramp etc.) using DAC change the frequency and
       amplitude.
    a)DAC-SQUARE WAVE:
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL; use
    IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    entity squarewg is
      Port ( clk,rst : in std_logic;
            dac : out std_logic_vector(0 to 7));
    end squarewg;
            process(temp(3))
            begin
            if rst='1' then
                 cnt<="00000000";
            elsif rising_edge (temp(3)) then if
                cnt< 255 and en='0' then
                    cnt<=cnt+1; en<='0';
                    dac<="00000000";
               elsif cnt=0 then
                    en<='0';
               else en<='1';
                    cnt<=cnt-1;
                    dac<="11111111";
               end if;
           end if;
    end process; end
    Behavioral;
b)DAC-TRIANGLE WAVE:
       library IEEE;
       use IEEE.STD_LOGIC_1164.ALL;
       use IEEE.STD_LOGIC_ARITH.ALL;
       use IEEE.STD_LOGIC_UNSIGNED.ALL;
       entity triangwg is
         Port ( clk,rst : in std_logic;
               dac : out std_logic_vector(0 to 7));
       end triangwg;
            cnt<=cnt+1;
         if cnt(0)='1' then
            dac<=cnt(1 to 8);
         else
            dac<= not(cnt( 1 to 8));
         end if;
       end if;
        end process;
       end Behavioral;
c)DAC-RAMP WAVE:
      library IEEE;
      use IEEE.STD_LOGIC_1164.ALL;
      use IEEE.STD_LOGIC_ARITH.ALL;
      use IEEE.STD_LOGIC_UNSIGNED.ALL;
      entity rampwg is
        Port ( clk,rst : in std_logic;
              dac : out std_logic_vector(0 to 7));
      end rampwg;
d)DAC-SINE WAVE:
      library IEEE;
      use IEEE.STD_LOGIC_1164.ALL;
      use IEEE.STD_LOGIC_ARITH.ALL;
      use IEEE.STD_LOGIC_UNSIGNED.ALL;
      entity sinewave is
      Port (clk:in std_logic;
            dout : out std_logic_vector(0 downto 7));
      end sinewave;
      begin
      if (clk'event and clk='1')then
               a<=a+1;
                  if (r='1') then
                            if (a=1) then
                                       dout <=sinedata(b);
                                       b<=b+1;
                                       a<=1;
                                       end if;
                           if (b=48) then
                                      r<='0';
                                      end if;
                elsif (r='0') then
                          if (a=1) then
                                      dout <= sinedata(b);
                                      b<=b-1;
                                      a<=1;
                                      end if;
                         if (b=1) then
                                    r<='1';
                                      end if; end if; end if;
                                      end process;
                                      end behavioral;
      n=24   ---- 00 h
      n=23   ---- 01 h
      n=22   ---- 02 h
        :
      n=2    ---- 6F h
      n=1    ---- 77 h
      n=0    ---- 7F h corresponds to 127.5
      n=1 ---- 87 h
      n=2 ---- 8F h
      n=3 ---- 97 h
        :
      n=24 ---- FE h
      n=25 ---- FF h corresponds to 255
      library IEEE;
      use IEEE.STD_LOGIC_1164.ALL;
      use IEEE.STD_LOGIC_ARITH.ALL;
      use IEEE.STD_LOGIC_UNSIGNED.ALL;
      entity ssg is
        Port ( keyreturn : in STD_LOGIC_VECTOR (3 downto 0);
              keyscan : buffer STD_LOGIC_VECTOR (3 downto 0):="1000";
              segm : out STD_LOGIC_VECTOR (3 downto 0);
              clk : in STD_LOGIC;
              dis : out STD_LOGIC_VECTOR (6 downto 0):="0000000");
      end ssg;
"0110011","1011011","1011111","1110000",
"1111111","1111011","1110111","0011111",
"1001110","0111101","1001111","1000111");
      begin
         dis<=segdis(a);
      segm<="1110";---To activate one segment out of four segments
      end process;
      end Behavioral;
Display a b c d e f g
         0        1    1   1   1    1   1   0
         1        0    1   1   0    0   0   0
         2        1    1   0   1    1   0   1
         3        1    1   1   1    0   0   1
         4        0    1   1   0    0   1   1
         5        1    0   1   1    0   1   1
         6        1    0   1   1    1   1   1
         7        1    1   1   0    0   0   0
         8        1    1   1   1    1   1   1
         9        1    1   1   1    0   1   1
         A        1    1   1   0    1   1   1
         B        0    0   1   1    1   1   1
         C        1    0   0   1    1   1   0
         D        0    1   1   1    1   0   1
         E        1    0   0   1    1   1   1
         F        1    0   0   0    1   1   1
3. ELEVATOR
             library IEEE;
             use IEEE.STD_LOGIC_1164.ALL;
             use IEEE.STD_LOGIC_ARITH.ALL;
             use IEEE.STD_LOGIC_UNSIGNED.ALL;
      entity ssg is
        Port ( keyreturn : in STD_LOGIC_VECTOR (3 downto 0);
              keyscan : buffer STD_LOGIC_VECTOR (3 downto 0):="1000";
              segm : out STD_LOGIC_VECTOR (3 downto 0);
              clk : in STD_LOGIC;
              dis : out STD_LOGIC_VECTOR (6 downto 0):="0000000");
      end ssg;
       Process(clk,a,temp)
       begin
        if(clk'event and clk='1')then
           b<=b+1;
       if(b=2000000)then ------Delay between one floor to next floor
         if(temp<a) then -------a=current floor and temp= destination floor
           temp<=temp+1 ;
           b<=0;
      elsif(temp/=a) then
           temp<=temp-1 ;
           b<=0;
      end if;
      end if;
      end if;
      end process;
       process(temp) ---- when the key of destination floor is pressed process will be activated
               type sevseg is array (0 to 15 )of std_logic_vector(6 downto 0);
       constant segdis:sevseg:= ( "1111110","0110000","1101101","1111001",
                                     "0110011","1011011","1011111","1110000",
                                     "1111111","1111011","1110111","0011111",
                                     "1001110","0111101","1001111","1000111");
       begin
         dis<=segdis(temp);
         segm<="1110";
      end process;
      end Behavioral;
4. DC MOTOR:
      library IEEE;
      use IEEE.STD_LOGIC_1164.ALL;
      use IEEE.STD_LOGIC_ARITH.ALL;
      use IEEE.STD_LOGIC_UNSIGNED.ALL;
      entity dcmotor is
        Port ( clk : in STD_LOGIC;
             reset,dir : in STD_LOGIC;
             pwm : out STD_LOGIC_VECTOR (1 downto 0);
             rly : out STD_LOGIC;
             row : in STD_LOGIC_VECTOR (3 downto 0));
      end dcmotor;
      ddclk<=div_reg(12);
      tick<=row(0)and row(1)and row(2)and row(3);
      process(tick)
      begin
      if falling_edge(tick)then
      case row is
          when "1110"=> dcycle<=255;---speed highest
          when "1101"=> dcycle<=200;
          when "1011"=> dcycle<=150;
          when "0111"=> dcycle<=100;---speed lowest
          when others=> dcycle<=100;
       end case;
       end if;
       end process;
      process(ddclk,reset)
      begin
      if reset='0'then
      counter<="00000000";
      pwm<="01";
      elsif(ddclk'event and ddclk='1')then
      counter<=counter+1;
      if(counter >=dcycle)then
      pwm(1)<='0';
      else
      pwm(1)<='1';
      end if;
      end if;
      end process;
      rly<=dir;
      end Behavioral;
      5. STEPPER MOTOR:
      library IEEE;
      use IEEE.STD_LOGIC_1164.ALL;
      use IEEE.STD_LOGIC_ARITH.ALL;
      use IEEE.STD_LOGIC_UNSIGNED.ALL;
      entity steppermt is
        Port ( clk,dir,rst : in std_logic;
              dout : out std_logic_vector(3 downto 0));
      end steppermt;
end Behavioral;
When current is passed through the coil, the circular magnetic field is generated.