Chapter 1 - Overview On Digital IC Design
Chapter 1 - Overview On Digital IC Design
DIGITAL IC DESIGN
OVERVIEW
BEEC4844
CONTENTS
Digital IC Circuits:
IC which receive, manipulate and produced digital or discrete signals.
Graphics Processor
Memory
DIGITAL ANALOG
Accept and Output digital / discrete Accept and output analog / continuous
signals signal
Works with states of voltages (low or high) Works by varying voltages
Generally high gate count, high density Generally contains lower number of
and high speed transistors, lower density
Example: Example:
microP, memory, image processor Amplifier, power management, PLL
MOTIVATION OF USING DIGITAL SYSTEM
Partitioning
Divide the chip into small blocks
Separate functional blocks easier placement & routing
Can be done at RTL stage divide design into sub-blocks
Floorplanning
Identifying structures that should be placed close together
Allocating space based on requirements (area, performance etc.)
Considering memory, IP cores used, routing possibilities
To avoid wasting die area and routing congestion
PHYSICAL DESIGN
Placement
Placing gates on the die (chip)
A few series of optimization: cells downsizing,
buffer insertion, net splitting, etc.
Signal routing
Connect nodes via wires/metals
Point of consideration: DRC, wire length, timing, etc.
Timing closure
Analysis on the circuit performance vs timing requirement
Is the circuit can operate properly without any timing
violations?
INTRODUCTION TO IC TIMING ANALYSIS
Setup time:
Data cannot change between this point and
the clock edge
Hold time:
Data cannot change between the clock
edge and this point
t_clock-Q:
Delay on output (Q) changing from positive
clock edge
SETUP TIME REQUIREMENT
Given the following critical path. 2 DFF with the same clock signal clk_sys with no skew.
Analyze the circuit and determine whether the setup time is violated or not. Given:
tpcq1 = 4ns, ts = 3 ns, and Fclk_sys = 10 MHz
d q
Describe
symbol d_ff
clk q_bar
Architecture
Description d q
Describe internal
architecture
clk q_bar
Ending a module
Numbers in Verilog
Radix
Can be in bits, hexadecimal, integers or real
A number can be written as: n’xyy...y
n is the number of bits
x is the type: binary (bits) or hexadecimal
yy…y is the number to be written in binary/hexadecimal
Example to write 14 in Verilog:
4’b1110
Decimal Bits Hexadecimal
4’hE
1 1’b1 1’h1
0 1’b0 1’h0
10 4’b1010 4’hA
22 5’b10100 5’h14
Numbers in Verilog
Integer
Can be sized or unsized (by default 32 bits)
Examples:
integer Stored as
1 00000000000000000000000000000001
8'hAA 10101010
6'b10_0011 100011
'hF 00000000000000000000000000001111
Numbers in Verilog
Signed / Unsigned Numbers
Number Description
32'hDEAD_BEEF Unsigned or signed positive number
-14'h1234 Signed negative number
Verilog Operators
Arithmetic operators:
+, -, *, /
Relational operators:
Verilog Operators
Equality operators:
Logical operators:
Bitwise operators:
Verilog Operators
Shift operators:
<< left shift
>> right shift
Example:
// out takes data1 if sel is true (1), else data2
assign out = sel ? data1 : data2;
Simple Example (1)
&
|
OR
ADDER
A[3:0]
+ C[4:0]
B[3:0]
always block
always @ (sensitivity list)
begin
//assignments here
end
always @ block always execute all the assignments within its body,
when the sensitivity list is triggered.
Else, this block is in “sleep mode”.
always block examples:
always @ (posedge clock) always @ (x or y or sel)
begin begin
a <= a + 1; if (sel == 0)
end output <= x;
else
In this case, the a value will count output <= y;
up each time there are the rising end
edge of the clock signal.
In this case, the output value will
be updated only when there is an
event on x, y and/or sel signal.
Blocking and non-blocking assignments
In always @ block, we can use either blocking (=) or non-blocking (<=)
assignments.
Blocking:
A statement must be executed first before proceeding to the next statement (like in C/C++)
Useful for simulation testbench.
Non-blocking:
Assignments without blocking the procedural flow.
All non-blocking statements are executed at the same time.
Blocking assignments
Consider the following example:
always @ (posedge clock)
begin
b = a;
c = b;
end
In this case, at the rising edge of the clock, c will become a!
Non-blocking assignments
Consider the following example:
always @ (posedge clock)
begin
b <= a;
c <= b;
end
In this case, at the rising edge of the clock, c will become old value of b!
ADDER IN RTL
In RTL, addition will be performed at each rising edge of the
clock utilization of a register or flip-flop
A[3:0] C[4:0]
+
B[3:0]
clock
In this case (or RTL case), the output must be set to register (reg)!
always @ (event) block is used to perform the instruction within its body only when the event is
triggered (like in this case, addition performed only when at posedge of the clock)
MODULE INSTANTIATION
Used to instantiate or to connect one module to other modules
A top_level block shall contains multiples submodules
Ex: a computer shall contains Microprocessor, Memory, I/O Controller, etc.
Syntax:
module_name label #(parameter) (ports connections);
Tips:
Count value will count up every clock rising edge (posedge)
Count value will reset to 0 (0000) when reset is high
ANSWER 1
PARAMETERS IN VERILOG
Parameters:
Generic values to make the design scalable
Ex:
The width of the bus
input [PORT_WIDTH-1:0] in_a;
output [PORT_WIDTH-1:0] out_b;
Example:
module nbit_adder
#(WIDTH = 16)
(
input [WIDTH-1:0] a,
input [WIDTH-1:0] b,
output [WIDTH:0] c
);
EXAMPLE 2
Creating a n-bit counter
IC DESIGN CHALLENGES
Cost
IC DESIGN CHALLENGES