Internship Report
Internship Report
UNIVERSITY
“Jnana Sangama” Belagavi – 590018
Internship[21INT82] Report on
“INDUSTRIAL ROBOTICS”
Submitted in partial fulfillment of the requirements for the award of degree
BACHELOR OF ENGINEERING
IN
ELECTRONICS & COMMUNICATION ENGINEERING
Submitted By
Dr. Ganesh V N
Associate Professor
Department of E&C Engineering
CERTIFICATE
The satisfaction and euphoria that accompany a successful completion of any task would
be incomplete without the mention of people who made it possible, success is the epitome
of hard work and perseverance, but steadfast of all is encouraging guidance.
So, with gratitude I acknowledge all those whose guidance and encouragement served as
beacon of light and crowned the effort with success.
I thank our beloved Principal, Dr. Peter Fernandes, for his constant help and support
throughout.
Also, we thank all the teaching and non-teaching staff of Department of Electronics and
Communication Engineering for the help rendered.
i
ABSTRACT
The RTL Design of Advanced Digital System course is a comprehensive exploration of how
complex digital circuits are designed and implemented using register transfer level (RTL)
abstraction. In modern electronics, the increasing demand for high-performance, low-power,
and reliable digital systems necessitates the use of structured and scalable design
methodologies. RTL design plays a critical role in this process by allowing engineers to
describe the behavior of digital systems in terms of the flow of data between registers and the
logical operations performed on that data, synchronized by a clock signal. This abstraction
provides a practical bridge between the theoretical understanding of logic circuits and the
real-world implementation of hardware on platforms such as ASICs (Application-Specific
Integrated Circuits) and FPGAs (Field- Programmable Gate Arrays).
This course equips students with the foundational knowledge and practical skills needed to
model, simulate, and implement digital systems. A major emphasis is placed on the use of
hardware description languages (HDLs), particularly Verilog (and optionally VHDL), to
express RTL designs that can be synthesized into actual hardware. Students begin with the
basics of combinational and sequential logic design, including the use of logic gates, flip-
flops, counters, and registers. As the course progresses, they gain an understanding of more
complex concepts such as finite state machines (FSMs), which are essential for designing
control units. By learning how to partition a design into datapath and control units, students
can manage complexity, promote modularity, and improve design reuse.
A core part of the course is hands-on experience with industry-standard tools such as Xilinx
Vivado, Intel Quartus, and ModelSim. Through these platforms, students learn how to write
synthesizable RTL code, simulate behavior using testbenches, perform synthesis, and conduct
static timing analysis to ensure their designs meet performance requirements. The course also
introduces the complete design flow for deploying digital systems onto FPGA hardware,
providing a real-world perspective on system prototyping and validation.
ii
TABLE OF CONTENTS
CHAPTER NO TITLE PAGE NO
ACKNOWLEDGMENT i
ABSTRACT ii
LIST OF FIGURES iv
CHAPTER 7 RESULT 48
CHAPTER 8 CONCLUSION 49
LIST OF FIGURES
COMPANY OVERVIEW
The KVLSI Program – Cohort 2 is a continued stride toward building a robust and future-ready
talent pool in the semiconductor and VLSI (Very-Large-Scale Integration) design industry.
After the resounding success of its first cohort, the second edition of the program brings refined
content, expanded technical depth, and increased industry engagement to offer participants a
more immersive and impactful learning experience. Designed to address the growing demand
for skilled professionals in chip design, verification, and hardware development, Cohort 2
Dept. of ECE, AIET
Mijar 1
integrates hands-on training with real-world design scenarios using industry-standard tools and
methodologies. Participants gain exposure to key domains such as digital and analog IC design,
RTL design, functional verification, physical design, and system-on-chip (SoC) architecture,
preparing them for roles in core hardware, EDA, and semiconductor companies.
The program is delivered by leading academic experts and industry practitioners,
combining theoretical instruction with practical insights to ensure industry alignment and
career readiness. Additionally, Cohort 2 emphasizes mentorship, peer collaboration, and
project-based evaluations to foster innovation and critical thinking. With stronger partnerships,
broader outreach, and a more structured curriculum, the KVLSI Program – Cohort 2 continues
to empower young engineers, students, and professionals to become drivers of India’s growing
semiconductor ecosystem, aligning with national initiatives like "Make in India" and "Design
in India." This cohort not only builds on the momentum of its predecessor but also sets a higher
benchmark in VLSI education, skilling, and innovation. The KVLSI Program – Cohort 2 is a
progressive and strategic initiative aimed at strengthening India's semiconductor talent pipeline
by providing cutting-edge training in VLSI (Very-Large-Scale Integration) design and
technology. Following the impactful success of its first cohort, this second edition has been
enhanced with deeper technical content, more industry-driven modules, and broader
institutional participation. Spearheaded by the International Institute of Information
Technology Bangalore (IIITB) in collaboration with Futurewizz EdTech, and supported by
leading industry partners and VLSI experts, Cohort 2 brings together academia and industry in
a powerful alliance to nurture next-generation chip design professionals.
The program is enriched by contributions from seasoned mentors and professionals from
companies such as Intel, Qualcomm, Cadence, Synopsys, and Texas Instruments, who bring
real- world insights and design expertise to the classroom. Participants engage in hands-on
learning with industry-grade tools and workflows across domains such as RTL design, SoC
architecture, physical design, timing analysis, and functional verification.
CHAPTER 2
INTRODUCTION
CHAPTER 3
DIGITAL DESIGN
Digital design is the process of creating and analyzing systems that operate using digital
signals, typically represented in binary form (0s and 1s). Unlike analog systems, which process
continuous signals, digital systems work with discrete values, making them more reliable and
easier to manipulate in modern electronics. At the core of digital design are logic gates, which
perform basic logical operations and are combined to form more complex circuits. These
circuits are categorized into combinational logic, where outputs depend only on current inputs,
and sequential logic, which also considers past inputs through memory elements like flip-flops.
Boolean algebra is used to simplify and analyze these logic circuits effectively. Digital design
also involves modeling system behavior using hardware description languages such as VHDL or
Verilog, which allow engineers to simulate and implement digital systems on platforms like
FPGAs or ASICs. Common applications of digital design include microprocessors, digital
communication systems, embedded systems, and various consumer electronics. Studying digital
design is essential for understanding how modern electronic devices function and for developing
skills in logic, problem-solving, and system-level thinking.
2. Why Digital?
In the first week, we explored the fundamental reasons behind the global shift from
analog to digital systems. Digital systems use binary signals (0s and 1s), which are easier to
process, store, and transmit without loss or distortion. Unlike analog systems, digital systems are
highly resistant to noise and interference, which makes them more reliable for long-distance
communication and storage. Additionally, digital data is easy to reproduce with accuracy, and
digital systems are programmable, meaning that we can update or modify their functionality
using software without changing the hardware. These advantages make digital systems the
preferred choice in modern electronic applications.
3. Digital Devices
We also studied the basic components that form digital systems. These digital devices
include logic gates (AND, OR, NOT, NAND, etc.) that perform logical operations, and flip-
flops that store a single bit of data. Registers are used to store multiple bits, and devices like
multiplexers, encoders, decoders, and adders perform various data handling and arithmetic
functions. More advanced digital devices include microcontrollers, microprocessors, and
FPGAs, which are essential for processing and controlling tasks in embedded and computing
systems. These components collectively build the foundation of digital circuit design.
industry, they manage engine control units (ECUs) and driver assistance systems. Digital
circuits are also vital in medical equipment, industrial automation, security systems, and
communication devices. Their ability to offer speed, accuracy, and automation makes them
indispensable in almost every modern technological system.
This topic introduced us to how positive and negative numbers are represented in binary
form. Since binary digits alone cannot indicate sign, we studied different techniques for signed
representation:
Sign-Magnitude: Uses the first bit as a sign (0 for positive, 1 for negative) and the
rest for magnitude.
1’s Complement: Negative numbers are formed by inverting all bits of the
positive number.
2’s Complement: Most widely used method, where we invert all bits and add 1 to get
the negative representation. Understanding signed number representation is critical
because arithmetic operations in computers depend on it for correct results.
We learned about r's complement and (r–1)'s complement, which are used in performing
subtraction and representing negative numbers in different bases:
In binary (base 2), the 1’s complement is the (r–1)’s complement and the 2’s complement
is the r’s complement.
These complements simplify subtraction and allow the use of only addition hardware in
digital circuits. We practiced finding complements and using them to perform binary
subtraction using the complement method, which is a fundamental concept in digital
arithmetic.
5. Binary Arithmetic
6. Binary Codes
Lastly, we covered binary codes, which are used to represent characters, numbers, and
other data in a digital system. Some of the important codes we studied include:
BCD (Binary-Coded Decimal): Represents each decimal digit using 4 binary bits.
Gray Code: A binary sequence where only one bit changes between successive values,
useful in error minimization.
Topics Covered:
1. Logic Gates
2. Boolean Algebra
4. K-Maps
5. Tabular Method
1. Logic Gates
In the third week, we began by revisiting logic gates, the fundamental building blocks of
digital circuits. Logic gates perform basic logical functions and are implemented using electronic
switches. The primary logic gates include AND, OR, and NOT gates. From these, more complex
gates like NAND, NOR, XOR, and XNOR are derived. Each gate follows a specific truth table
that defines how inputs are processed into a single output. Understanding these gates is essential,
as they are used to design and implement every digital system, from simple circuits to complex
processors.
2. Boolean Algebra
We studied Boolean Algebra, a mathematical framework used to analyze and simplify
digital logic circuits. Boolean algebra uses binary variables (0 and 1) and logical operations such
as AND (·), OR (+), and NOT ('). It helps in formulating logical expressions that describe digital
circuits. We learned the fundamental laws and theorems of Boolean algebra, including the
identity law, null law, domination law, distributive, associative, commutative, and De Morgan’s
theorems. These laws are used to simplify complex logical expressions, making circuits more
efficient and cost-effective.
This topic focused on the canonical forms of Boolean expressions. A minterm is a product
(AND operation) of all input variables in either true or complemented form, representing a single
row in the truth table where the function is true (1). A maxterm is a sum (OR operation) of all
variables and represents a row where the function is false (0). We learned how any Boolean
function can be expressed in Sum of Minterms (SOP) or Product of Maxterms (POS) form.
These standardized forms are useful in logic simplification and circuit design.
Topics Covered:
7. Tristate Logic
1. Introduction to Combinational Logic
This week began with an introduction to Combinational Logic, which forms the basis of all
decision-making and control operations in digital systems. In a combinational circuit, the output
is a direct function of the current inputs, with no memory element involved. These circuits use
logic gates to perform operations like addition, comparison, selection, and encoding/decoding.
Combinational logic is fundamental to the operation of digital systems like computers,
calculators, and control systems.
We studied Adders and Subtractors, which are the primary components used in arithmetic
logic units. A Half Adder adds two single-bit binary numbers and produces a sum and carry. A
Full Adder extends this by including a carry-in input, allowing for multi-bit binary addition.
Similarly, we explored Half Subtractors and Full Subtractors for performing binary subtraction.
Understanding how these circuits work is essential for designing arithmetic hardware in
Next, we covered Decoders and Encoders, which are essential for data routing and
selection. A Decoder takes a binary input and activates only the corresponding output line,
making it useful in memory addressing and instruction decoding. An Encoder performs the
reverse, converting multiple input lines into a binary output. These components are widely used
Multiplexers (MUX) and Demultiplexers (DEMUX) are combinational circuits used for data
selection and distribution. A MUX selects one of several inputs and forwards it to a single output
line based on control signals. Conversely, a DEMUX takes a single input and routes it to one of
several output lines. These circuits are vital for managing data paths in digital systems and
reducing the number of wires and components required.
7. Tristate Logic
Finally, we studied Tristate Logic, which introduces a third state besides logic 0 and 1: the
high-impedance (Hi-Z) state. Tristate logic is used when multiple devices share a common data
5 Topics Covered:
3. Counters
4. Shift Registers
In the fifth week, we delved into Sequential Logic Circuits, which are fundamental
components in digital systems. Unlike combinational circuits, where outputs depend solely on
current inputs, sequential circuits' outputs depend on both current inputs and previous states. This
memory characteristic is achieved through storage elements like flip-flops and latches. Sequential
circuits are pivotal in applications requiring state retention, such as memory units, counters, and
control systems.
Latches and Flip-Flops are bistable devices, meaning they have two stable states and can
store one bit of information. They are the building blocks of sequential logic circuits.
SR (Set-Reset) Latch: Constructed using NOR or NAND gates, it has two inputs, Set (S)
and Reset (R), and two outputs, Q and Q'. The SR latch sets or resets the output based on
the input conditions.
D (Data) Flip-Flop: Captures the value of the D-input at a specific portion of the clock
T (Toggle) Flip-Flop: Toggles its output on each clock cycle when the T input is high.
3. Counters
Counters are sequential circuits that go through a predetermined sequence of states upon the
application of input pulses. They are widely used in digital clocks, frequency dividers, and event
counters.
4. Shift Registers
Shift Registers are sequential circuits used for storage or transfer of data. They consist of a
series of flip-flops connected in a chain so that the output of one flip-flop becomes the input of
the next.
Serial-In Serial-Out (SISO): Data is shifted in and out serially, one bit at a time.
Parallel-In Serial-Out (PISO): Multiple bits are loaded in parallel and then shifted
out serially.
Topics Covered:
1. Introduction to FSM
2. Mealy FSM
3. Moore FSM
1. Introduction to FSM
A Finite State Machine (FSM) is a computational model used to design both hardware and
software systems. FSMs are used to model sequential logic, where the system transitions from
one state to another in response to external inputs. Each state represents a unique configuration
of outputs and
internal memory. FSMs are especially useful in systems with a limited number of defined states,
such as traffic signals, vending machines, and digital control systems.
State transition logic (how the system moves from one state to another)
2. Mealy FSM
A Mealy Machine is a type of FSM where the outputs depend on both the current state and
3. Moore FSM
A Moore Machine is an FSM where the output depends only on the current state, not the
input. This makes Moore machines more stable and less sensitive to glitches in inputs, which is
ideal for hardware reliability.
Output = f(state)
A Sequence Detector is a digital circuit that detects a specific binary sequence of bits in an
input stream. FSMs (either Mealy or Moore) are commonly used for designing these detectors.
Design Steps:
Topics Covered:
1. Introduction to Memories
2. Memory Hierarchy
3. Classification of Memories
1. Introduction to Memories
In digital systems, memory is a fundamental component used to store data and instructions
temporarily or permanently. It plays a critical role in both computational speed and system
efficiency. Memory allows devices to remember past operations, maintain intermediate results,
and access data efficiently. Memory is usually categorized based on how data is stored, how long
it is retained, and how it is accessed.
2. Memory Hierarchy
3. Classification of Memories
Volatile Memory: Loses data when power is off (e.g., SRAM, DRAM)
c) Read/Write Capability:
Read-Write Memory (RWM): Both read and write operations are allowed.
d) RAM Types:
In synchronous digital circuits, timing violations occur when data doesn’t meet specific timing
constraints. The most common types are:
These violations can cause metastability, a condition where a flip-flop or register enters an undefined
state (neither 0 nor 1) and takes an unpredictable amount of time to resolve. This instability can
lead to incorrect data propagation or even system failure.
Setup Time (T setup) is the minimum time before the clock edge that the data input must be
stable to be correctly latched.
Hold Time (Thold) is the minimum time after the clock edge that the data input must remain
stable.
Possible metastability.
CHAPTER 4
VERILOG
At its core, Verilog allows designers to write code that simulates the behaviour of a digital circuit
before it is physically built. This is essential for verifying functionality, optimizing performance,
and reducing development time. It supports both structural modelling (how the hardware is
connected) and behavioural modelling (how the system responds to inputs), which makes it
versatile for different stages of design and verification.
Topics Covered:
1. Introduction
3. Overview of Verilog
4. Importance in Industry
1. Introduction
The eighth week of the internship began with an introductory session on Verilog, a
Hardware Description Language (HDL) used to model and design digital electronic systems.
This session aimed to provide a theoretical foundation and motivation for learning Verilog,
especially in the context of VLSI (Very Large scale Integration) design and digital logic
implementation.
3. Overview of Verilog
Designing and simulating digital systems such as counters, adders, multiplexers, and other
fundamental components is a core application of Verilog in digital design. These systems can
be modelled accurately using Verilog's descriptive capabilities, allowing for early verification
through simulation. Once validated, these designs can be implemented on hardware platforms
like FPGAs (Field-Programmable Gate Arrays) or ASICs (Application-Specific Integrated
Circuits), enabling real-world functionality. Verilog facilitates rapid prototyping by allowing
designers to test and refine their logic before committing to physical hardware, thus reducing
4. Importance in Industry
The session highlighted the critical role of Verilog in the electronics and semiconductor
industries, where it is extensively used for designing and implementing complex digital systems.
In FPGA-based system design, Verilog enables developers to model and test hardware
functionality before deployment, making it ideal for rapid prototyping and development. It is
equally important in ASIC development, where precise and efficient hardware descriptions are
essential for creating custom integrated circuits. Verilog also finds widespread application in
Digital Signal Processing (DSP), where high-speed, real-time data processing requires
optimized hardware implementations. Additionally, Verilog is used in embedded systems to
design dedicated logic for controlling devices and handling specific tasks, further demonstrating
its versatility and significance across a wide range of applications in modern electronics.
During the class, several foundational concepts essential to digital design were
introduced. One of the key distinctions made was between analog and digital signals—analog
signals vary continuously, while digital signals operate using discrete levels, typically
representing binary values. Understanding this difference is crucial for grasping how digital
systems process information. The session also covered the basics of combinational and
sequential logic; combinational logic circuits produce outputs based solely on current inputs,
whereas sequential logic circuits also depend on past inputs through the use of memory elements
like flip-flops. Another important concept introduced was RTL (Register Transfer Level) design,
which describes the flow of data between registers and the logical operations performed on it,
serving as a high- level abstraction for designing hardware.
Topics Covered:
1. EDA Playground
2. Icarus Verilog
3. Vivado
4. ModelSim
1. EDA Playground
In one of the sessions during Week 8 of the internship, we focused on learning how to use
EDA Playground, an online platform for writing, simulating, and testing Verilog code. The
session began with an introduction to the tool's interface, where we learned how to create new
files, write Verilog code, and select different simulation tools (such as Icarus Verilog and
Synopsys VCS) available on the platform. We were guided through the process of writing a
basic Verilog module and a testbench to verify its functionality. After running the simulation,
we explored how to view waveforms using the integrated waveform viewer. This helped us
understand the behavior of digital circuits in a time-based manner. EDA Playground proved
especially useful for beginners as it does not require any software installation and supports code
sharing, making collaboration easy. The session provided a hands-on introduction to Verilog
simulation and helped us build confidence in writing and testing simple digital circuits.
2. Icarus Verilog
As part of Week 8 of the internship, we had a dedicated session on learning how to use
Icarus Verilog, an open-source Verilog simulation tool. This session introduced us to working
with Verilog code in an offline environment using a command-line interface. We learned
how to
3. Vivado Xilinx
As part of the Week 8 activities in the internship, we had a focused session on Vivado
Design Suite, a professional FPGA development environment from Xilinx. The session
introduced us to the overall Vivado workflow, including project creation, writing Verilog
modules, performing synthesis and implementation, and generating bitstreams for programming
FPGAs.We began by creating a new project and adding Verilog design files. The instructor
guided us through writing a basic digital circuit (such as a multiplexer or counter) and
simulating it using Vivado’s built-in simulation tool. We then learned how to run synthesis,
check timing reports, and resolve any issues in the design. One of the key takeaways from this
session was understanding how Verilog code transitions from high-level RTL to a hardware-
level implementation suitable for FPGA deployment. We also explored Vivado’s IP catalog and
block design environment, which allow integration of predefined modules and more complex
system development.
4. ModelSim
During Week 3 of the internship, we had a session focused on Intel Quartus Prime, a
comprehensive FPGA development software suite used for designing digital systems on Intel
(formerly Altera) FPGAs. The session introduced us to the Quartus workflow, starting from
creating a new project to synthesizing and programming the design onto an FPGA device.We
learned how to write and add Verilog modules to a Quartus project, assign input and output pins
using the Pin Planner, and compile the design to check for errors. After successful compilation,
we explored the Timing Analyzer and RTL Viewer to understand how the design was
interpreted by the tool.Additionally, we were shown how to generate a programming file (.sof)
and how to upload it to a physical FPGA board using the Quartus Programmer. This hands-on
experience demonstrated the complete flow from code to hardware implementation.
Topics Covered:
3. Verilog Operators
In this topic, we studied comments and identifiers in Verilog, both of which are fundamental
to writing readable, maintainable, and error-free code. Comments are non-executable parts of the
code meant for human understanding. They are used to explain the purpose and functionality of
code segments, document module behavior, or temporarily disable code during testing and
debugging. Verilog supports two types of comments: single-line comments, which begin with //
and extend to the end of the line, and multi-line comments, which are enclosed between /* and
*/. Proper use of comments improves the clarity of the code, especially in large or collaborative
projects, by helping others (and the original developer) understand the logic and structure.
Along with comments, identifiers are essential naming elements in Verilog that are used to label
modules, signals, ports, variables, and parameters. Identifiers must begin with a letter (a–z, A–Z)
or an underscore (_) and may include letters, digits (0–9), or underscores thereafter. Importantly,
identifiers in Verilog are case-sensitive, meaning data, Data, and DATA would be treated as
3. Verilog Operators
In this topic, we explored Verilog operators, which are essential tools for expressing logic,
arithmetic, comparisons, and data manipulation in digital designs. Verilog supports a wide range
of operators, grouped into categories such as arithmetic, relational, logical, bitwise, reduction,
shift, and conditional operators. Each group serves a unique purpose and helps designers
describe complex hardware behavior efficiently and accurately.
Arithmetic operators like +, -, *, /, and % are used to perform basic mathematical operations on
numeric values. They are typically used in counters, arithmetic units, and procedural
assignments. Relational operators such as ==, !=, <, >, <=, and >= are used to compare values
and are commonly used in conditional blocks like if, case, and loop conditions. Logical
operators, including && (logical AND), || (logical OR), and ! (logical NOT), evaluate Boolean
expressions and return a single-bit result based on logic conditions.
Bitwise operators, such as &, |, ^, ~, and their NAND/NOR equivalents (~&, ~|), perform
operations at the individual bit level, making them useful for masking, flag checking, and bit
manipulation. Reduction operators apply a single logic operation across all bits of a vector and
reduce it to a single value, such as &a to check if all bits in a are 1. Shift operators (<<, >>, <<<,
>>>) move bits to the left or right, either logically or arithmetically, and are essential in
implementing shift registers and arithmetic functions.
In this topic, we learned about the various data types in Verilog, which are crucial for
modeling and simulating digital systems accurately. Verilog data types define how information is
stored, transmitted, and manipulated within hardware descriptions. They are broadly categorized
into net types and variable types, each serving a distinct purpose depending on the nature of the
signal and the modeling approach used.
On the other hand, variable types like reg, integer, and real are used to hold values in procedural
blocks (e.g., always, initial). The reg type is the most commonly used and can store a value
across time, making it ideal for sequential logic and state machines. Despite the name, reg does
not imply a physical register unless synthesized that way. Integer and real types are often used in
simulations or for loop counters, especially in testbenches.
In this topic, we studied constants and literals in Verilog, which are fundamental elements
used to define fixed values within hardware designs. These values do not change during
simulation and are essential for initializing signals, setting configuration parameters, and
specifying control conditions. Verilog supports both numeric and non-numeric literals and allows
designers to specify them in a variety of formats to suit different design needs.Literals are
constant values directly written into the code. They can be unsized or sized. An unsized literal,
such as 10 or 1'b1, defaults to a 32-bit signed number. A sized literal follows the format
<size>'<base><value>, where the size specifies the number of bits, the base indicates the number
system (b for binary, d for decimal, h for hexadecimal, and o for octal), and the value is the
actual number. For example, 4'b1010 defines a 4-bit binary value, while 8'hFF defines an 8-bit
hexadecimal value. Verilog also supports special literal values like x (unknown) and z (high-
impedance), used to represent undefined or floating conditions in digital circuits.
In Week 10, we explored the concept of parameters and localparams, which are key
constructs in Verilog used for defining constant values. These constructs are vital in achieving
code reusability, configurability, and modularity in digital design. Parameters serve as symbolic
constants in Verilog modules. They allow designers to write generic and scalable code by
Gate-level modeling is typically written in Hardware Description Languages (HDL) like Verilog
or VHDL using predefined primitive gates. This form of modeling is more detailed than dataflow
or behavioral modeling and is useful in the early stages of digital circuit design, especially when
Each gate takes one or more input signals and produces a single output signal based on its logic
function. For instance, the and gate outputs HIGH only when all inputs are HIGH. These gates
are combined to create more complex logic circuits.
Verilog provides built-in gate primitives like and, or, not, nand, nor, xor, and xnor to describe
logic circuits at the gate level.
3. Gate Instantiation
Each gate in Verilog is instantiated with a unique name and connected to input/output signals. It
models how actual logic gates are connected in hardware.
Syntax:
<gate_type> <instance_name> (output, input1, input2);
4. Net Declarations
All connections between gates must be declared using wire since gate outputs and inputs are
connected through wires
6. No Procedural Blocks
Unlike behavioral modeling, gate-level modeling does not use initial or always blocks.
It is completely based on static connections.
Dataflow modeling is one of the key design methods in Verilog used to describe the behavior of
a digital system in terms of how data flows between inputs and outputs. It focuses on the
functional relationship using Boolean equations rather than internal hardware structure. This
model is ideal for representing combinational circuits where outputs depend solely on current
inputs.
In dataflow modeling, the assign statement is used to create continuous assignments. These
assignments describe how outputs are calculated from inputs using operators. Common operators
include:
This style avoids procedural code (like always blocks) and instead uses direct assignments to
define logic.
Structural Modeling: Describes the circuit by interconnecting gates and modules, like
a schematic.
Behavioral Modeling: Focuses on how the circuit behaves using procedural code
(always blocks, if, case, etc.).
Dataflow Modeling: Falls between the two, using logical and arithmetic expressions
to describe how data moves and transforms.
Dataflow is more abstract than structural but simpler than behavioral for small combinational logic
designs.
In Verilog, the basic unit of design is the module, which represents a physical hardware
component such as a logic gate, multiplexer, flip-flop, or even a complete subsystem. To define a
module, the designer specifies its name along with its inputs and outputs, typically using a
declaration format like module module_name (input_ports, output_ports) followed by a
description of the internal connections. Inside each module, smaller components or functional
blocks can be described, or it can simply serve as a wrapper that connects other modules.
To build a larger system, one module is placed inside another through a process called
instantiation. Instantiation involves creating a copy of an already-defined module and connecting
its inputs and outputs to signals in the higher-level module. For example, a designer might write
something like module_name instance_name (signal1, signal2) to insert a module into the
design, where instance_name is the local name of this specific copy and the signals define the
connections. This allows designers to reuse the same module multiple times with different signal
connections, promoting efficient and scalable designs.
One of the most important elements in structural modeling is the use of wires to connect
modules. Wires represent physical connections between components and are declared with
simple statements like wire signal_name to create a named connection. Once a wire is declared,
it can be used to link the output of one module to the input of another, allowing signals to flow
properly through the system.
Structural modeling handles both combinational and sequential circuits. Combinational circuits
produce outputs based only on current inputs, without memory or feedback. In Verilog,
combinational connections can be described using continuous assignments, typically written with
the assign keyword followed by a logic expression like assign output = input1 & input2,
meaning the output is always equal to the AND of input1 and input2. This approach allows the
hardware description to directly reflect the physical wiring of gates and logic components.
Clear modularity, where each module can be independently developed, tested, and
reused in different designs.
Better control over system architecture, since the designer explicitly defines all
connections between components.
Easy scalability, as the same module can be instantiated multiple times with different
signal connections.
As the system size increases, the number of interconnections can become large, making
the design harder to read and maintain.
Despite these challenges, structural modeling remains a fundamental part of digital design,
particularly in projects where precise control over hardware layout is required. It is widely used
in ASIC and FPGA design flows, where designers often combine structural descriptions with
behavioral descriptions to balance control and simplicity. Simulation tools further enhance the
design process by allowing engineers to test individual modules and the entire system before
committing to hardware implementation.
2. blocking assignments
3. non-blocking assignments
4. conditional statements
5. case statements
1. Behavioral Modeling in Verilog
Control units, counters, and data path controllers can be built efficiently using conditional
and sequential constructs.
One of the key benefits of behavioral modeling is that it speeds up the design process. Since
designers can work at a functional level, they can prototype and verify designs much faster than
if they were building them gate by gate. Behavioral descriptions are also easier to read,
understand, and maintain, which is especially important in large projects or when multiple people
are working on the same codebase. Behavioral models allow engineers to explore different
architectural options or algorithmic improvements without being tied to a specific hardware
structure.
Another major advantage of behavioral modeling is its critical role in verification. Behavioral
constructs are often used to write testbenches that apply input stimuli to a design under test
(DUT) and check the outputs for correctness. For example:
initial blocks are used to apply test patterns and monitor outputs.
# delays can simulate timing between events (though they are not synthesizable for
hardware).
Tasks and functions can be written behaviorally to automate repetitive checks or complex
verification sequences.
However, while behavioral modeling provides flexibility, it also requires careful attention to
synthesizability. Not all behavioral code can be implemented in hardware. Constructs like initial
blocks and # delays are ignored during synthesis and only affect simulation behavior. To ensure a
behavioral model can be successfully synthesized into hardware, designers must follow
synthesizable coding practices, such as using synchronous resets, avoiding non-synthesizable
delays, and controlling loop bounds to prevent unintended hardware generation.
Behavioral modeling also plays a critical role in optimizing hardware resources. Well-written
behavioral code can lead to efficient hardware implementations, while poorly written code may
result in excessive logic usage, unnecessary registers, or timing problems. For example:
Using non-blocking assignments (<=) inside sequential always blocks ensures proper
flip- flop behavior.
Correctly describing clock and timing behavior using @(posedge clk) or @(negedge rst)
is essential for reliable sequential circuit operation.
Compared to other modeling styles, behavioral modeling stands out for its flexibility and expressive
power. Gate-level modeling, which describes designs using primitive gates and connections, is
detailed but extremely tedious for large circuits. Dataflow modeling, which uses continuous
assignments (assign statements) to describe combinational logic, offers a middle ground but
lacks the ability to easily model sequential behavior. Behavioral modeling, by contrast, allows
designers to describe both dataflow and control flow with high-level constructs, making it the
most versatile approach.
Some examples where behavioral modeling shines include:
Finite state machines for traffic light controllers, vending machines, or protocol
management.
In Week 15, the study centered on the concept of blocking assignments in Verilog, a
fundamental aspect of writing procedural code in hardware description languages. Blocking
assignments are denoted using the "=" operator and are named "blocking" because they prevent
the execution of the next line of code until the current statement is completed. This sequential
flow of execution mimics traditional software programming and is crucial in describing
combinational logic accurately. Blocking assignments are typically used within initial and
always blocks to model behavior that must follow a strict order, such as in algorithmic state
transitions or arithmetic operations where intermediate values must be computed step by step.
A key take away this week was the difference between blocking and non-blocking assignments.
While blocking assignments execute immediately and sequentially, non-blocking assignments
(using <=) allow parallel execution, which is essential for modeling synchronous sequential
logic like flip-flops and registers. Misuse of blocking assignments in sequential logic can lead
to race conditions and unpredictable simulation results. Therefore, understanding their proper
usage is critical for designing reliable digital systems.
Practical lab sessions and coding exercises reinforced these concepts by implementing simple
circuits, such as arithmetic units and combinational decision-making blocks, using blocking
assignments. Debugging common issues related to timing and simulation behavior helped
deepen the understanding of how blocking assignments affect simulation flow and hardware
modelling. Overall, this week provided valuable insights into structured and efficient Verilog
coding practices, laying the groundwork for more complex digital design projects in the coming
weeks.
3. Non-blocking assignments
In Verilog, non-blocking assignments, denoted by the <= operator, are a crucial feature for
modeling synchronous sequential logic, such as registers and flip-flops. Unlike blocking
assignments, which execute sequentially and wait for one statement to finish before moving to
the next, non-blocking assignments allow all right-hand side expressions in a block to be
evaluated at the beginning of the simulation cycle and then assign the values to the left-hand side
at the end of the cycle. This mimics the behavior of real-world hardware, where multiple
registers update
Dept. of ECE, AIET 40
Mijar
Advanced Digital RTL Design
simultaneously on a clock edge. This parallelism is what makes non-blocking assignments ideal
for use in clocked always blocks (e.g., always @(posedge clk)), ensuring data consistency and
avoiding simulation issues like race conditions or incorrect data propagation. One key advantage
is that they allow designers to write sequential logic that is more predictable and aligns well with
actual hardware behavior. Additionally, non-blocking assignments support the development of
pipelined architectures, finite state machines, and data path logic, where multiple registers need
to update together in one clock cycle. It's important to maintain a clear distinction between
blocking and non-blocking assignments and avoid mixing them in the same procedural block, as
this can cause ambiguous behavior during simulation. In modern digital design practices, non-
blocking assignments are considered a best practice for writing synthesizable, efficient, and
reliable RTL (Register Transfer Level) code. Their proper use not only leads to better simulation
accuracy but also facilitates easier verification and debugging of complex digital systems.
4. Conditional statements
5. Case statements
CHAPTER 5
Objective:
The objective of this project was to design and implement a modular 12-hour Real-
Time Clock (RTC) using Verilog HDL that accurately tracks time in hours, minutes, and
seconds. The design aimed to incorporate AM/PM functionality by toggling a status bit upon
hour overflow at 12, closely emulating real-world clock behavior. The project emphasized
modular and hierarchical design principles, using separate Verilog modules for each time unit
(seconds, minutes, and hours), enabling reusability and clarity. The design was tested and
verified using simulation tools to ensure functional correctness through waveform analysis,
guaranteeing that the timekeeping functionality, including the 12-hour rollover and AM/PM
change, worked as expected. This project provided valuable hands-on experience in RTL
design and implemented low-level digital systems suitable for embedded applications.
Project Description:
This project involved the RTL-level design of a 12-hour real-time clock system
with essential timekeeping and control features. The clock displays time in the HH:MM:SS
format and includes an AM/PM indicator to distinguish between morning and evening hours.
The design incorporates asynchronous reset and enable control signals to ensure reliable
operation and manage power consumption effectively. The clock is implemented using
separate counters for seconds, minutes, and hours, which simplifies the design and allows for
easier testing, maintenance, and future scalability. By using these modular components, the
clock's design follows clear hierarchical principles, ensuring both reusability and flexibility for
potential future extensions. The project demonstrated fundamental digital design techniques
and the effective use of RTL modeling, simulating realistic timekeeping operations.
The key Verilog modules in this design are responsible for implementing the functionality of
the 12-hour real-time clock:
1. second_counter:
This module counts from 0 to 59, incrementing with each clock cycle. Upon reaching 59
seconds, it overflows and triggers a carry-out signal to the minute_counter.
2. minute_counter:
minutes, it triggers a carry-out signal to the hour_counter.
3. hour_counter:
This module maintains a 12-hour format, counting from 1 to 12. After reaching 12, it rolls
back to 1 and toggles the AM/PM indicator to distinguish between morning and evening.
Simultaion:
CHAPTER 6
WORKING
DAYS
The image above reflects the vibrant and professional atmosphere of the K-
VLSI PG Diploma Program at IIIT-Bangalore. The top section showcases the
serene and well-maintained campus of IIIT-B, located in the heart of
Dept. of ECE, AIET 46
Mijar
Advanced Digital RTL Design
Bengaluru's Electronics City. The campus provides an ideal academic
1. second_counter:
This module counts from 0 to 59, incrementing with each clock cycle. Upon reaching 59
seconds, it overflows and triggers a carry-out signal to the minute_counter.
2. minute_counter:
minutes, it triggers a carry-out signal to the hour_counter.
3. hour_counter:
This module maintains a 12-hour format, counting from 1 to 12. After reaching 12, it
rolls back to 1 and toggles the AM/PM indicator to distinguish between morning and
evening.
A typical case statement matches the value of the expression to specific case item values, and when a
match is found, the corresponding block of code is executed. The default clause is often included to
handle unexpected or unmatched cases, ensuring that all possible situations are covered. Verilog also
offers enhanced versions of the case statement, such as casex and casez, which allow the use of
wildcard values (x for unknown and z for high impedance states) in comparisons. This flexibility is
useful for modelling certain types of hardware behavior, particularly when dealing with don’t-care
conditions or uncertain logic states. While case statements are widely used in designing finite state
machines (FSMs), decoders, and multiplexers, designers need to be cautious of potential issues like the
creation of unintended latches if all possible cases are not specified.
unexpected or unmatched cases, ensuring that all possible situations are covered. Verilog also offers
enhanced versions of the case statement, such as casex and casez, which allow the use of wildcard
values (x for unknown and z for high impedance states) in comparisons. This flexibility is useful for
modelling certain types of hardware behavior,unexpected or unmatched cases, ensuring that all possible
situations are covered. Verilog also offers enhanced versions of the case statement, such as casex and
casez, which allow the use of wildcard values (x for unknown and z for high impedance states) in
comparisons. This flexibility is useful for modelling certain types of hardware behavior,
faculty member or trainer, with participants attentively engaged in the discussion. As part of the
structured academic schedule, such sessions cover topics in digital design, RTL (Register
Transfer Level) modeling, verification, and hands-on tool training. The classroom environment is
conceptual clarity. The timestamp and geo-tag data validate the authenticity and real-time
engagement of participants at the IIIT-B campus located in Electronics City, Bengaluru. This
visual evidence reflects the disciplined and professional learning atmosphere central to the
CHAPTER 7
RESULT
The Advanced Digital RTL Design module during my internship offered comprehensive
training in the development and verification of digital systems using Verilog HDL at the register-
transfer level. This module focused on strengthening both theoretical concepts and practical skills
essential for VLSI design. Throughout the course, I gained hands-on experience in modeling a
variety of digital components such as multiplexers, decoders, arithmetic logic units (ALUs),
counters, and finite state machines (FSMs). These designs were implemented using Verilog with
an emphasis on synthesizable code, modularity, and design reuse. The structured approach to
RTL design helped me understand the importance of synchronous logic, timing control, and state
transition logic. I also worked with industry-standard simulation tools like ModelSim and
synthesis tools such as Vivado, which allowed me to simulate, debug, and synthesize my designs
efficiently. Special attention was given to waveform analysis and the identification of functional
and timing bugs, which improved my ability to debug and optimize designs.
In addition to coding and simulation, I learned important RTL design practices including clock
domain management, reset handling, and design partitioning. Each lab session and assignment
helped reinforce the critical design flow from RTL modeling to synthesis and verification,
mirroring the actual workflow followed in the semiconductor industry. The exposure to real-time
design challenges, along with guidance from experienced mentors, enabled me to build
confidence in handling complex design problems independently. The systematic training sessions
also helped me understand how power, area, and timing are considered during RTL design and
optimization. As a result of this module, I have developed a solid foundation in digital design
principles and acquired industry-relevant skills that are directly applicable in ASIC and FPGA
development environments. This experience has significantly prepared me for a career in the
VLSI domain, equipping me with the practical knowledge and technical capabilities required to
contribute meaningfully to real-world RTL design projects.
CHAPTER 8
CONCLUSION
The internship conducted under the K-VLSI program at IIIT-Bangalore has been a
transformative phase in my academic and professional journey. This program provided me with
an in-depth and structured understanding of digital design principles, industry workflows, and
hands-on training that closely mirrors real-world VLSI practices. Among all the modules, the
Advanced Digital RTL Design segment stood out as a cornerstone in shaping my design and
verification capabilities. I learned how to model, simulate, and synthesize digital circuits using
Verilog HDL while adhering to good coding practices and industry standards. I was also
introduced to key concepts such as synchronous design, finite state machine development,
clock/reset strategies, and design modularity, all of which are essential for scalable and
synthesizable hardware design.
The rigorous routine—from attending lectures and lab sessions to completing assignments and
simulations—instilled professional discipline and a deeper sense of responsibility. Working
extensively with EDA tools like ModelSim and Vivado allowed me to bridge the gap between
theoretical learning and practical application. I also became familiar with debugging through
waveform analysis and optimizing RTL code for synthesis and timing. These activities gave me a
clear view of how professional chip design projects are handled and the level of precision they
require.
Beyond technical skills, the internship experience helped improve my soft skills such as time
management, teamwork, and communication. The collaborative learning environment and
support from trainers and mentors created a platform where I could ask questions, solve
problems, and build confidence in my abilities. I now feel equipped with the necessary skills and
mindset to contribute effectively in any entry-level VLSI role, especially in RTL design and
verification domains.
Overall, the internship has been a critical step toward my career goals in the semiconductor
industry. It has not only enhanced my technical skillset but also shaped my outlook as an aspiring
VLSI design engineer. The experience reaffirmed my interest in digital design and inspired me to
continue learning and contributing in this ever-evolving and exciting field.