+ All Categories
Home > Devices & Hardware > Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Date post: 08-Aug-2015
Category:
Upload: malik-tauqir-hasan
View: 52 times
Download: 2 times
Share this document with a friend
28
ENGR. RASHID FARID CHISHTI LECTURER,DEE, FET, IIUI [email protected] WEEK 7 PORTS RULES, GATE DELAYS, DATA FLOW MODELING CARRY LOOK AHEAD ADDER FPGA Based System Design Saturday, June 18, 2022 1 www.iiu.edu.pk
Transcript
Page 1: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

ENGR. RASHID FARID CHISHTILECTURER,DEE, FET, IIUI

[email protected]

WEEK 7

PORTS RULES, GATE DELAYS, DATA FLOW MODELING

CARRY LOOK AHEAD ADDER

FPGA Based System Design

Saturday, April 15, 2023

1

www.iiu.edu.pk

Page 2: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

One can visualize a port as

consisting of two units one unit that is internal to

the module an other that is external to

the module.

Inputs: Internally, input ports must always be of the type net. Externally, the inputs can be connected to a variable which is a reg or a net.

Outputs: Internally, output ports can be of the type reg or net. Externally, outputs must always be connected to a net. They cannot be connected to a reg.

Inouts: Internally, inout ports must always be of the type net. Externally, inout ports must always be connected to a net.

Width matching: port connections between two modules of different sizes can be made. However, a warning is typically issued that the widths do not match.

www.iiu.edu.pk Saturday, April 15, 2023

Ports Connection Rules

2

Page 3: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

There are two methods of making connections between signals specified in the module instantiation and the ports in a module definition. These two methods cannot be mixed. These methods are a follows

Connecting by ordered list: The signals to be connected must appear in the module instantiation in the same order as the ports in the port list in the module definition.

module top;

reg [3:0]A,B; reg C_IN; wire [3:0] SUM; wire C_OUT;

// Signals are connected to ports in order (by position)

fulladd4 fa_ordered(SUM, C_OUT, A, B, C_IN);

endmodule

module fulladd4 (sum, c_out, a, b, c_in);

output[3:0] sum; output c_cout;

input [3:0] a, b; input c_in;

<module internals>

endmodulewww.iiu.edu.pk Saturday, April 15, 2023

Unconnected Ports

3

Page 4: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Connecting ports by name: Verilog provides the capability to connect external signals to ports by the port names, rather than by position. You can specify the port connections in any order as long as the port name in the module definition correctly matches the external signal.

// Instantiate module fa_byname and connect signals to ports by name

fulladd4 fa_byname(.c_out(C_OUT), .sum(SUM), .b(B), .c_in(C_IN), .a(A),);

Note that only those ports that are to be connected to external signals must be specified in port connection by name. Unconnected ports can be dropped.

// Instantiate module fa_byname and connect signals to ports by name

fulladd4 fa_byname(.sum(SUM), .b(B), .c_in(C_IN), .a(A),);

www.iiu.edu.pk Saturday, April 15, 2023

Unconnected Ports

4

Page 5: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Gate delays allow the Verilog user to specify delays through the logic circuits. There are three types of delays from the inputs to the output of a primitive gate.

Rise delay: The rise delay is associated with a gate output transition to a 1 from another value.

Fall delay: The fall delay is associated with a gate output transition to a 0 from another value.

Turn-off delay: The turn-off delay is associated with a gate output transition to the high impedance value (z) from another value. If the value changes to x, the minimum of the three delays is considered.

and #(5) a1(out, i1, i2); // Delay of 5 for all transitions

and #(4,6) a2(out, i1, i2); // Rise = 4, Fall = 6

bufif0 #(3,4,5) b1 (out, in, control); // Rise = 3, Fall = 4, Turn-off = 5

www.iiu.edu.pk Saturday, April 15, 2023

Gate Delays

5

Page 6: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Min/Typ/Max Values: For each type of delay—rise, fall, and turn-off—three values, min, typ, and max, can be specified. Any one value can be chosen at the start of the simulation. Min/typ/max values are used to model devices whose delays vary within a minimum and maximum range because of the IC fabrication process variations.

and #(4:5:6) a1(out, i1, i2); // all delays are min=4, typical=5, max=6

and #(3:4:5, 5:6:7) a2(out, i1, i2);

and #(2:3:4, 3:4:5, 4:5:6) a3(out, i1,i2);

www.iiu.edu.pk Saturday, April 15, 2023

Gate Delays

6

Page 7: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

For small circuits, the gate-level modeling approach works very well Verilog allows a circuit to be designed in terms of the data flow between registers

and how a design processes data rather than instantiation of individual gates. With gate densities on chips increasing rapidly, dataflow modeling has assumed

great importance. Currently, automated tools are used to create a gate-level circuit from a dataflow

design description. This process is called logic synthesis. In the digital design community, the term RTL (Register Transfer Level) design is

commonly used for a combination of dataflow modeling and behavioral modeling.

Continuous Assignments:

assign out = i1 & i2; // Continuous assign. out is a net. i1 and i2 are nets.

assign addr[15:0] = addr1_bits[15:0] ^ addr2_bits[15:0];

assign {c_out, sum[3:0]} = a[3:0] + b[3:0] + c_in;

// if right side changes the output is recalculated and assigned to the left variable

// Note: the variable on the left hand side will be a net. It can not be a reg.

// The variables on right hand side can be a net or a reg value.www.iiu.edu.pk Saturday, April 15, 2023

Continuous Assignment

7

Page 8: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Implicit Continuous Assignment: Instead of declaring a net and then writing a continuous assignment on the net, Verilog provides a shortcut by which a continuous assignment can be placed on a net when it is declared.

// Regular continuous assignment

wire out; assign out = in1 & in2;

// Same effect is achieved by an implicit continuous assignment

wire out = in1 & in2;

Implicit Net Declaration: If a signal name is used to the left of the continuous assignment, an implicit net declaration will be inferred for that signal name. If the net is connected to a module port, the width of the inferred net is equal to the width of the module port.

wire i1, i2; // Continuous assign. out is a net.

assign out = i1 & i2; // Note that out was not declared as a wire

// but an implicit wire declaration for out is done by the simulator

www.iiu.edu.pk Saturday, April 15, 2023

Continuous Assignment

8

Page 9: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Three ways of specifying delays in continuous assignment statements are regular assignment delay, implicit continuous assignment delay, and net declaration delay.

Regular Assignment Delay: Any change in values of in1 or in2 will result in a delay of 10 time units before recomputation of the expression in1 & in2, and the result will be assigned to out. An input pulse that is shorter than the delay of the assignment statement does not propagate to the output.

assign #10 out = in1 & in2;

Implicit Continuous Assignment Delay:

wire #10 out = in1 & in2;

Net Declaration Delay: A delay can be specified on a net when it is declared without putting a continuous assignment on the net.

wire # 10 out; assign out = in1 & in2;

www.iiu.edu.pk Saturday, April 15, 2023

Delays

9

Page 10: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

www.iiu.edu.pk Saturday, April 15, 2023

Operator Types and Symbols

10

Operator Type

Operator

Symbol

Operation Performed

Number of Operands

Arithmetic *

/

+

-

%

**

multiply

divide

add

subtract

modulus

power (exponent)

two

two

two

two

two

two

Logical !

&&

||

logical negation

logical and

logical or

one

two

two

Relational >

<

>=

<=

greater than

less than

greater than or equal

less than or equal

two

two

two

two

Operator Type

Operator Symbol

Operation Performed

Number of Operands

Equality ==

!=

===

!==

equality

inequality

case equality

case inequality

two

two

two

two

Bitwise ~

&

|

^

^~ or ~^

bitwise negation

bitwise and

bitwise or

bitwise xor

bitwise xnor

one

two

two

two

two

Reduction

&

~&

|

~|

^

^~ or ~^

reduction and

reduction nand

reduction or

reduction nor

reduction xor

reduction xnor

one

one

one

one

one

one

Page 11: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

A = 4'b0011; B = 4'b0100;

// A and B are register vectors

D = 6; E = 4; F=2

// D and E are integers

A * B // Multiply A and B = 4'b1100

D / E // Divide D by E = 1.

// Truncates any fractional part.

A + B // Add A and B = 4'b0111

B - A // Subtract A from B. Evaluates to 4'b0001

F = E ** F; // E to the power F, yields 16. If any operand bit has a value x, then

in1 = 4'b101x; in2 = 4'b1010; // the result of the entire expression is x.

sum = in1 + in2; // sum will be evaluated to the value 4'bx

13 % 3 // Evaluates to 1 16 % 4 // Evaluates to 0

-7 % 2 // Evaluates to -1, takes sign of the first operand

7 % -2 // Evaluates to +1, takes sign of the first operand www.iiu.edu.pk Saturday, April 15, 2023

Operator Types and Symbols

11

Operator Type

Operator

Symbol

Operation Performed

Number of Operands

Shift >>

<<

>>>

<<<

Right shift

Left shift

Arithmetic right shift

Arithmetic left shift

Two

Two

Two

Two

Concatenation { } Concatenation Any numberReplication { { } } Replication Any numberConditional ?: Conditional Three

Page 12: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Logical operators always evaluate to a 1-bit value, 0 (false), 1 (true), or x (ambiguous).

Use of parentheses to group logical operations is highly recommended to improve readability

A = 3; B = 0; A && B // Evaluates to 0. Equivalent to (logical-1 && logical-0)

A || B // Evaluates to 1. Equivalent to (logical-1 || logical-0)

!A // Evaluates to 0. Equivalent to not(logical-1)

!B // Evaluates to 1. Equivalent to not(logical-0)

A = 2'b0x; B = 2'b10;

A && B // Evaluates to x. Equivalent to (x && logical 1)

(a == 2) && (b == 3) // Evaluates to 1 if both a == 2 and b == 3 are true.

// Evaluates to 0 if either is false.www.iiu.edu.pk Saturday, April 15, 2023

Logical Operators

12

Page 13: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Relational operators are greater-than (>), less-than (<), greater-than-or-equal-to (>=), and less-than-or-equal-to (<=).

If relational operators are used in an expression, the expression returns a logical value of 1 if the expression is true and 0 if the expression is false.

If there are any unknown or z bits in the operands, the expression takes a value x. These operators function exactly as the corresponding operators in the C

programming language.

A = 4, B = 3

X = 4'b1010, Y = 4'b1101, Z = 4'b1xxx;

A <= B // Evaluates to a logical 0

A > B // Evaluates to a logical 1

Y >= X // Evaluates to a logical 1

Y < Z // Evaluates to an x

www.iiu.edu.pk Saturday, April 15, 2023

Relational Operators

13

Page 14: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

The logical equality operators (==, !=) will yield an x if either operand has x or z in its bits.

The equality operators ( ===, !== ) compare both operands bit by bit and compare all bits, including x and z. The result is 1 if the operands match exactly, including x and z bits. The result is 0 if the operands do not match exactly.

Case equality operators never result in an x.

A = 4, B = 3, X = 4'b1010, Y = 4'b1101, Z = 4'b1xxz, M = 4'b1xxz, N = 4'b1xxx A == B // Results in logical 0 X != Y // Results in logical 1

X == Z // Results in x Z === M // Results in logical 1

Z === N // Results in logical 0 M !== N // Results in logical 1

www.iiu.edu.pk Saturday, April 15, 2023

Relational Operators

14

Expression DescriptionPossible Logical

Value

a == b a equal to b, result unknown if x or z in a or b 0, 1, x

a != b a not equal to b, result unknown if x or z in a or b

0, 1, x

a === b a equal to b, including x and z 0, 1

a !== b a not equal to b, including x and z 0, 1

Page 15: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Bitwise operators perform a bit-by-bit operation on two operands. They take each bit in one operand and perform the operation with the corresponding bit in the other operand.

If one operand is shorter than the other, it will be bit-extended with zeros to match the length of the longer operand.

A z is treated as an x in a bitwise operation.

X = 4'b1010, Y = 4'b1101, Z = 4'b10x1

~X // Negation. Result is 4'b0101

X & Y // Bitwise and. Result is 4'b1000

X | Y // Bitwise or. Result is 4'b1111

X ^ Y // Bitwise xor. Result is 4'b0111

X ^~ Y // Bitwise xnor. Result is 4'b1000

X & Z // Result is 4'b10x0

X = 4'b1010, Y = 4'b0000

X | Y // bitwise operation. Result is 4'b1010

X || Y // logical operation. Equivalent to 1 || 0. Result is 1.www.iiu.edu.pk Saturday, April 15, 2023

Bitwise Operators

15

Page 16: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Reduction operators are and (&), nand (~&), or (|), nor (~|), xor (^), and xnor (~^, ^~).

Reduction operators take only one operand. Reduction operators perform a bitwise operation on a single vector operand and yield a 1-bit result.

Reduction operators work bit by bit from right to left. Reduction nand, reduction nor, and reduction xnor are computed by inverting the result of the reduction and, reduction or, and reduction xor, respectively.

X = 4'b1010

&X // Equivalent to 1 & 0 & 1 & 0. Results in 1'b0

|X // Equivalent to 1 | 0 | 1 | 0. Results in 1'b1

^X // Equivalent to 1 ^ 0 ^ 1 ^ 0. Results in 1'b0

//A reduction xor or xnor can be used for even or odd parity generation of vector.

www.iiu.edu.pk Saturday, April 15, 2023

Reduction Operators

16

Page 17: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Shift operators are right shift ( >>), left shift (<<), arithmetic right shift (>>>), and arithmetic left shift (<<<).

Regular shift operators shift a vector operand to the right or the left by a specified number of bits. The operands are the vector and the number of bits to shift.

When the bits are shifted, the vacant bit positions are filled with zeros. Shift operations do not wrap around. Arithmetic shift operators use the context of the expression to determine the value

with which to fill the vacated bits.

X = 4'b1100

Y = X >> 1; // Y is 4'b0110. Shift right 1 bit. 0 filled in MSB position.

Y = X << 1; // Y is 4'b1000. Shift left 1 bit. 0 filled in LSB position.

Y = X << 2; // Y is 4'b0000. Shift left 2 bits.

integer a, b; // Signed data types

a= -10; // 1111_1111_1111_0110 in binary

b = a >>>3 ; // Results in -2 decimal

www.iiu.edu.pk Saturday, April 15, 2023

Shift Operators

17

Page 18: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

The concatenation operator ( {, } ) provides a mechanism to append multiple operands. The operands must be sized.

Unsized operands are not allowed because the size of each operand must be known for computation of the size of the result.

Concatenations are expressed as operands within braces, with commas separating the operands. Operands can be scalar nets or registers, vector nets or registers, bit-select, part-select, or sized constants.

A = 1'b1, B = 2'b00, C = 2'b10, D = 3'b110

Y = {B , C} // Result Y is 4'b0010

Y = {A , B , C , D , 3'b001} // Result Y is 11'b 1_00_10_110_001

Y = {A , B[0], C[1]} // Result Y is 3'b101

www.iiu.edu.pk Saturday, April 15, 2023

Concatenation Operators

18

Page 19: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Repetitive concatenation of the same number can be expressed by using a replication constant.

A replication constant specifies how many times to replicate the number inside the brackets ( { } ).

reg A;

reg [1:0] B, C;

reg [2:0] D;

A = 1'b1; B = 2'b00; C = 2'b10; D = 3'b110;

Y = { 4{A} } // Result Y is 4'b1111

Y = { 4{A} , 2{B} } // Result Y is 8'b11110000

Y = { 4{A} , 2{B} , C } // Result Y is 8'b1111000010

www.iiu.edu.pk Saturday, April 15, 2023

Replication Operators

19

Page 20: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

The conditional operator(?:) takes three operands.

Usage: condition_expr ? true_expr : false_expr ; The condition expression (condition_expr) is first evaluated. If the result is true

(logical 1), then the true_expr is evaluated. If the result is false (logical 0), then the false_expr is evaluated.

If the result is x (ambiguous), then both true_expr and false_expr are evaluated and their results are compared, bit by bit, to return for each bit position an x if the bits are different and the value of the bits if they are the same.

// model functionality of a tristate buffer

assign addr_bus = drive_enable ? addr_out : 36'bz;

// model functionality of a 2-to-1 mux

assign out = control ? in1 : in0;

// 4-to-1 multiplexer with n, m, y, x as the inputs and out as the output signal.

assign out = (A == 3) ? ( control ? x : y ): ( control ? m : n) ;www.iiu.edu.pk Saturday, April 15, 2023

Conditional Operators

20

Page 21: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

// Module 4-to-1 multiplexer using data flow. Conditional operator.

module multiplexer4_to_1 (out, i0, i1, i2, i3, s1, s0);

output out; input i0, i1, i2, i3, s1, s0;

// Use nested conditional operator

assign out = s1 ? ( s0 ? i3 : i2) : (s0 ? i1 : i0) ;

endmodule

// Define a 4-bit full adder by using dataflow statements.

module fulladd4(sum, c_out, a, b, c_in);

output [3:0] sum; output c_out;

input[3:0] a, b; input c_in;

// Specify the function of a full adder

assign {c_out, sum} = a + b + c_in;

endmodule

www.iiu.edu.pk Saturday, April 15, 2023

Data Flow Examples

21

Page 22: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

www.iiu.edu.pk Saturday, April 15, 2023

Ripple Carrey Adder

22

A 4-bit ripple carry adder showing “worst-case” carry propagation delays.

Page 23: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Consider the full adder

The outputs, C1,S0, in terms of P0 ,G0 ,C0 , are:

S0 = P0 C0 …(1) C1 = G0 + P0.C0 …(2)

If you look at equation (2),

G0 = X0.Y0 is a carry generate signal P0 = X0 Y0 is a carry propagate signal

www.iiu.edu.pk Saturday, April 15, 2023

Carrey Look Ahead Adder

23

X0

Y0S 0

C 1

C0

P0

G0

where intermediate where intermediate signals are labelled signals are labelled as Pas P00, G, G00, and defined , and defined as:as: PP00 = X = X0 0 Y Y00

GG00 = X = X00 ∙ Y ∙ Y00

Page 24: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

For 4-bit ripple-carry adder, the equations to obtain four carry signals are:

C1 = G0 + P0.C0

C2 = G1 + P1.C1

C3 = G2 + P2.C2

C4 = G3 + P3.C3

4-level circuit for C2 = G1 + P1.C1

These formula are deeply nested, as shown here for C2:

Nested formula/gates cause ripple-carry propagation delay. Can reduce delay by expanding and flattening the formula for

carries. For example, C2 = G1 + P1.C1 = G1 + P1.(G0 + P0C0 )

= G1 + P1.G0 + P1.P0.C0 www.iiu.edu.pk Saturday, April 15, 2023

Carrey Look Ahead Adder

24

C0

P0C1

G0

P1

G1

C2

Page 25: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

Other carry signals can also be similarly flattened.

C3 = G2 + P2C2 = G2 + P2(G1 + P1G0 + P1P0C0)

= G2 + P2G1 + P2P1G0 + P2P1P0C0

C4 = G3 + P3C3

= G3 + P3(G2 + P2G1 + P2P1G0 + P2P1P0C0)

= G3 + P3G2 + P3P2G1 + P3P2P1G0 + P3P2P1P0C0

www.iiu.edu.pk Saturday, April 15, 2023

Carrey Look Ahead Adder

25

C0

P0

P1

G0

P1

G1

C2

C0

P0C1

G0

P1

G1

C2

Page 26: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

carray look-ahead generator

4-bit adder with carry look-aheadwww.iiu.edu.pk Saturday, April 15, 2023

Carrey Look Ahead Adder

26

Page 27: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

module fulladd4(sum, c_out, a, b, c_in);// Inputs and outputsoutput [3:0] sum;output c_out;input [3:0] a,b;input c_in;// Internal wireswire p0,g0, p1,g1, p2,g2, p3,g3;wire c4, c3, c2, c1;// compute the p(carry propagation) for each stageassign p0 = a[0] ^ b[0],

p1 = a[1] ^ b[1], p2 = a[2] ^ b[2], p3 = a[3] ^ b[3];

// compute the g (carry generator) for each stageassign g0 = a[0] & b[0],

g1 = a[1] & b[1], g2 = a[2] & b[2],

g3 = a[3] & b[3];www.iiu.edu.pk Saturday, April 15, 2023

Carrey Look Ahead Adder

27

Page 28: Fpga 07-port-rules-gate-delay-data-flow-carry-look-ahead-adder

// compute the carry for each stage Note that c_in is// equivalent c0 in the arithmetic equation for carry // look-ahead computation assign c1 = g0 | (p0 & c_in),

c2 = g1 | (p1 & g0) | (p1 & p0 & c_in);assign c3 = g2 | (p2 & g1) |

(p2 & p1 & g0) | (p2 & p1 & p0 & c_in);

assign c4 = g3 | (p3 & g2) | (p3 & p2 & g1) | (p3 & p2 & p1 & g0) |

(p3 & p2 & p1 & p0 & c_in);// Compute Sumassign sum[0] = p0 ^ c_in,

sum[1] = p1 ^ c1,sum[2] = p2 ^ c2,sum[3] = p3 ^ c3;

assign c_out = c4; // Assign carry outputendmodule

www.iiu.edu.pk Saturday, April 15, 2023

Carrey Look Ahead Adder

28


Recommended