Synthesis of Arithmetic Circuits:

FPGAs ASICs and Embedded Systems

 

Home
VHDL Codes
Table of contents
The Authors
Links & Material
Feedback

 

 Table of Contents

 

Chapter 1: Introduction

 

1.1  Number representation

1.2  Algorithms

1.3  Hardware platforms

1.4  Hardware - software partitioning

1.5  Software generation

1.6  Synthesis

1.7 A first example

  1.7.1  Specification

  1.7.2  Number representation

  1.7.3  Algorithms

  1.7.4  Hardware platform

  1.7.5  Hardware - software partitioning     

  1.7.6  Program generation

  1.7.7  Synthesis

  1.7.8  Prototype       

1.8  Bibliography

 

 

Chapter 2: Mathematical Background

 

2.1  Number theory

  2.1.1  Basic definitions

  2.1.2  Euclidean algorithms 

  2.1.3  Congruences

2.2  Algebra   

  2.2.1  Groups           

  2.2.2  Rings  

  2.2.3  Fields 

  2.2.4  Polynomial rings       

  2.2.5  Congruences of polynomial   

2.3  Function approximation  

2.4  Bibliography       

 

 

Chapter 3: Number representation

 

3.1  Natural numbers

  3.1.1  Weighted systems

  3.1.2  Residue Number System

3.2  Integers

  3.2.1  Sign-magnitude representation

  3.2.2  Excess-E representation

  3.2.3  B's complement representation

  3.2.4  Booth's encoding

3.3  Real numbers

3.4  Bibliography

 

 

Chapter 4: Arithmetic operations: addition and subtraction

 

4.1  Addition of natural numbers

  4.1.1  Basic algorithm

  4.1.2  Faster algorithms

  4.1.3  Long-operand addition

  4.1.4  Multioperand addition

  4.1.5  Long - multioperand addition

4.2  Subtraction of natural numbers

4.3  Integers

  4.3.1  B's complement addition

  4.3.2  B's complement sign change

  4.3.3  B's complement subtraction

  4.3.4  B's complement overflow detection

  4.3.5 Excess-E addition and subtraction     

  4.3.6  Sign-magnitude addition and subtraction

4.4  Bibliography

 

 

Chapter 5: Arithmetic operations: multiplication

 

5.1  Natural numbers multiplication

  5.1.1  Introduction

  5.1.2  Shift and Add algorithms

    5.1.2.1  Shift and Add 1

    5.1.2.2  Shift and Add 2

    5.1.2.3  Extended Shift and Add algorithm:  XY+C+D

    5.1.2.4  Cellular Shift and Add

      5.1.2.4.1  Cellular ripple-carry algorithm

      5.1.2.4.2  Cellular carry-save algorithm

  5.1.3  Long-operand algorithm

5.2  Integers

  5.2.1  B's complement multiplication

    5.2.1.1  Mod Bn+m B’s complement multiplication

    5.2.1.2 Signed Shift and Add

    5.2.1.3 Post-correction B’s complement multiplication

  5.2.2  Post-correction 2’s complement multiplication

  5.2.3  Booth multiplication for binary numbers

    5.2.3.1 Booth-r algorithms

    5.2.3.2  Per Gelosia signed-digit algorithm

  5.2.4  Booth multiplication for base-B numbers (Booth-r algorithm in base B)

  5.3  Squaring

    5.3.1  Base-B squaring

      5.3.1.1  Cellular carry-save squaring algorithm 

    5.3.2  Base-2 Squaring

5.4 Bibliography

 

 

Chapter 6: Arithmetic operations: division

 

6.1  Natural numbers

6.2  Integers

  6.2.1  General algorithm

  6.2.2  Restoring division algorithm

  6.2.3  Base-2 non-restoring division algorithm

  6.2.4  SRT radix-2 division

  6.2.5  SRT radix-2 division with stored-carry encoding

  6.2.6  P-D diagram

  6.2.7  SRT-4 division

  6.2.8  Base-B non-restoring division algorithm

6.3  Convergence (functional iteration) algorithms

  6.3.1  Introduction

  6.3.2  Newton-Raphson’s iteration technique

  6.3.3  MacLaurin expansion – Goldschmidt’s Algorithm.

6.4 Bibliography

 

 

Chapter 7: Other arithmetic operations

 

7.1  Base conversion

7.2  Residue-Number-System conversion

  7.2.1  Introduction

  7.2.2  Base-B to RNS conversion

  7.2.3  RNS to Base-B conversion

7.3  Logarithmic, exponential and trigonometric functions

  7.3.1  Taylor-MacLaurin series

  7.3.2  Polynomial approximation

  7.3.3 Logarithm and exponential functions approximation by convergence methods

    7.3.3.1  Logarithm function approximation by multiplicative normalization

    7.3.3.2  Exponential function approximation by additive normalization

  7.3.4  Trigonometric functions – CORDIC algorithms

7.4  Square rooting

  7.4.1  Digit recurrence algorithm – base-B integers

  7.4.2  Restoring binary shift-and-subtract square rooting algorithm

  7.4.3  Non-restoring binary add-and-subtract square rooting algorithm

  7.4.4  Convergence method – Newton-Raphson

7.5  Bibliography

 

 

Chapter 8: Finite field operations

 

8.1  Operations in Zm

  8.1.1  Addition

  8.1.2  Subtraction

  8.1.3  Multiplication

    8.1.3.1  Multiply and reduce

    8.1.3.2  Modified shift-and-add algorithm

    8.1.3.3  Montgomery multiplication

    8.1.3.4  Specific ring

  8.1.4  Exponentiation

8.2   Operations in GF(p)

8.3  Operations in Zp [x] / f(x)

  8.3.1  Addition and subtraction

  8.3.2  Multiplication

8.4  Operations in GF(p**n)

8.5  Bibliography

Appendix 8.1 Computation of f(ki)

 

 

Chapter 9: Hardware Platforms

 

9.1  Design methods for electronic systems

  9.1.1  Basic blocks of integrated systems

  9.1.2  Recurring topics in electronic design

    9.1.2.1  Cost in integrated circuits

    9.1.2.2  Moore’s law

    9.1.2.3  Time-to-market

    9.1.2.4  Performance metric

    9.1.2.5  The power dimension

9.2  Processors instruction set

  9.2.1  Microprocessors

  9.2.2  Microcontrollers

  9.2.3  Embedded processors everywhere

  9.2.4  Digital signal processors

  9.2.5  Application-Specific Instruction-Set Processors

  9.2.6  Programming instruction set processors

9.3  ASIC designs

  9.3.1  Full-custom ASIC

  9.3.2  Semi-custom ASIC

    9.3.2.1  Gate Array - ASIC

    9.3.2.2  Standard-cell based ASIC

  9.3.3  Design flow in ASIC

9.4  Programmable Logic

  9.4.1  Programmable logic devices (PLD)

  9.4.2  Field Programmable Gate Array (FPGA)

    9.4.2.1  Why FPGA? A short historical survey

    9.4.2.2  Basic FPGA concepts

      9.4.2.2.1  Programming methods

      9.4.2.2.2  Look-up tables

      9.4.2.2.3  FPGA logic block

  9.4.3  Xilinx™ specifics

    9.4.3.1  Configurable Logic Blocks (CLB)

    9.4.3.2  Input/Output Blocks (IOB)

    9.4.3.3  RAM Blocks

    9.4.3.4  Programmable Routing

    9.4.3.5  Arithmetic resources in Xilinx™ FPGAs

  9.4.4  FPGA Generic Design Flow

9.5  Hardware Description Languages (HDL)

  9.5.1  Today’s and Tomorrow’s HDLs

9.6  Further readings

9.7  Bibliography

 

 

Chapter 10: Circuit synthesis: general principles

 

10.1  Resources

10.2  Precedence relation and scheduling

10.3  Pipeline

10.4  Self-timed circuits

10.5  Bibliography

 

 

Chapter 11: Adders and subtractors

 

11.1  Natural numbers

  11.1.1  Basic adder (ripple-carry adder)

  11.1.2  Carry-chain adder

  11.1.3  Carry-skip adder

  11.1.4  Optimization of carry-skip adders

  11.1.5  Base-Bs adder

  11.1.6  Carry-select adder

  11.1.7  Optimization of carry-select adders

  11.1.8  Carry-lookahead adders (CLA)

  11.1.9  Prefix adders

  11.1.10  FPGA implementation of adders

   11.1.10.1  Carry-chain adders

   11.1.10.2  Carry-skip adders

   11.1.10.3  Experimental results [BIO2003]

  11.1.11 Long-operand adders

  11.1.12  Multioperand adders

    11.1.12.1 Sequential multioperand adders

    11.1.12.2 Combinational multioperand adders     

    11.1.12.3 Carry-save adders

    11.1.12.4  Parallel counters

  11.1.13  Subtractors and adder-subtractors

  11.1.14  Termination detection

  11.1.15  FPGA implementation of the termination detection

11.2  Integers

  11.2.1  B's complement adders and subtractors

  11.2.2  Excess-E adders and subtractors

  11.2.3  Sign-magnitude adders and subtractors

11.3  Bibliography

 

 

Chapter 12: Multipliers

 

12.1  Natural numbers

  12.1.1  Basic multiplier

  12.1.2  Sequential multipliers

  12.1.3  Cellular multiplier arrays

    12.1.3.1  Ripple-carry multiplier

    12.1.3.2  Carry-save multiplier

    12.1.3.3  Figures of merit

  12.1.4  Multipliers based on dissymmetric Br x Bs cells

  12.1.5  Multipliers based on multioperand adders

  12.1.6  Per Gelosia multiplication arrays

    12.1.6.1 Introduction

    12.1.6.2 Adding tree for base B partial products

  12.1.7  FPGA Implementation of multipliers

12.2  Integers

  12.2.1  B's complement multipliers

  12.2.2  Booth multipliers

    12.2.2.1  Booth-1 multiplier

    12.2.2.2  Booth-2 multiplier

    12.2.2.3  Signed-digit multiplier

  12.2.3  FPGA Implementation of the Booth-1 multiplier

12.3 Bibliography

 

 

Chapter 13: Dividers

 

13.1  Natural numbers

13.2  Integers

  13.2.1  Base-2 non-restoring divider

  13.2.2  Base-B non-restoring divider

  13.2.3  SRT dividers

    13.2.3.1  SRT-2 divider

    13.2.3.2  SRT-2 divider with carry-save computation of the remainder

    13.2.3.3  FPGA Implementation of the carry-save SRT-2 divider

  13.2.4  SRT-4 divider

  13.2.5  Convergence dividers

    13.2.5.1  Newton-Raphson divider

    13.2.5.2  Goldschmidt divider

    13.2.5.3  Comparative data between Newton-Raphson (NR) and Goldschmidt (G) implementations

13.3  Bibliography

 

 

Chapter 14: Other arithmetic operators

 

14.1  Base conversion

  14.1.1  General base conversion

  14.1.2  BCD to binary converter

    14.1.2.1  Non-restoring 2p ’s subtracting implementation

    14.1.2.2  Shift-and-Add BCD to binary converter

  14.1.3  Binary to BCD converter

  14.1.4  Base-B to RNS converter

  14.1.5  CRT RNS to base-B converter

  14.1.6  RNS to Mixed-radix system converter

14.2  Polynomial computation circuits

14.3  Logarithm operator

14.4  Exponential operator

14.5  Sine and Cosine operators

14.6  Square rooters

  14.6.1  Restoring shift-and-subtract square rooter (naturals)

  14.6.2  Non-restoring shift-and-subtract square rooter (naturals)

  14.6.3  Newton-Raphson square rooter (naturals)

14.7  Bibliography

 

 

Chapter 15: Circuits for finite field operations

 

15.1  Operations in Zm

  15.1.1  Adders and subtractors

  15.1.2  Multiplication

    15.1.2.1  Multiply and reduce

    15.1.2.2  Shift and add

    15.1.2.3  Montgomery multiplication

    15.1.2.4  Modulo (Bk-c) reduction

    15.1.2.5  Exponentiation

15.2  Inversion in GF(p)

15.3  Operations in Zp [x] / f(x)

15.4  Inversion in GF(pn)

15.5  Bibliography

 

 

Chapter 16: Floating Point Units

 

16.1  Floating-point system definition

16.2  Arithmetic operations

  16.2.1  Addition of positive numbers

  16.2.2  Difference of positive numbers

  16.2.3  Addition and subtraction

  16.2.4  Multiplication

  16.2.5  Division

  16.2.6  Square root

16.3  Rounding schemes

16.4  Guard digits

16.5  Adder - subtractor

  16.5.1  Alignment

  16.5.2  Additions

  16.5.3  Normalization

  16.5.4  Rounding

16.6  Multiplier

16.7  Divider

16.8  Square root

16.9  Comments

16.10  Bibliography

 

 

Home | VHDL Codes | Table of contents | The Authors | Links & Material | Feedback

This site was last updated 11/02/07