5
3/19/14 Deschamps/Sutter/Canto Guide to FPGA Implementation of Algorithms www.arithmetic-circuits.org/guide2fpga/vhdl_codes.htm 1/5 Guide to FPGA Implementation of Arithmetic Functions VHDL Models and Examples Chapter 2: Architecture of Digital Circuits All examples of chapter 2 Introductory example 2.1 (square_root.vhd ). A simple test bench (square_root_tb.vhd ). Algorithm 2.2, square root, version 2 (square_root_2.vhd ). A simple test bench square_root_2_tb.vhd ). Introductory example 2.3.1. A 7-to-3 Counter (seven_to_three.vhd ). A simple test bench (seven_to_three_tb.vhd ). It uses a basic carry save adder (CSA) (csa.vhd ). A simple test bench (csa_tb.vhd ). Final example of Elliptic curve scalar product. First using explicit datapath and control separation (scalar_product.vhd and scalar_product_data_path.vhd ); and a second implementation not using explicit datapath and control separation (scalar_product_DF2.vhd ). Both implementation uses the multiplier and squarer (interleaved_mult.vhd ; classic_squarer.vhd ). Chapter 3: Special Topics of Data Path Synthesis All examples of chapter 3 Section 3.1.2 Segmentation. scalar product in GF(2^m) using pipeline (not a synthesizable circuit) (pipeline_DF2.vhd ). Section 3.1.4 Interconection of pipelined component. Example 3.4 of scalar product in GF(2^m) using self timed pipeline (not a synthesizable circuit) (pipeline_ST.vhd ). A simple test bench (test_pipeline_ST.vhd ). Example 3.5 a self timed ripple carry adder (adder_ST2.vhd ). A test bench for ripple carry adder (test_adder_ST2.vhd ). Section 3.2 Loop unrolling and digit-serial computation. A sequential restoring division algorithm (restoring.vhd ). The partially unrolled version of the restoring divider with s=2 (unrolled_divider.vhd ). A Digit Serial version of the restoring algorithm with D=2 (restoringDS.vhd ). Chapter 4: Special Topics of Control Unit Synthesis All examples of chapter 4 Section 4.2 hierarchical control unit. Example 4.2 computes z= (x^2 + y^2)^0.5 (example4_1.vhd ). Section 4.3 variable latency operations. A scalar product in GF(2^m) example (not a synthesizable circuit) (unbounded_DF.vhd ). Chapter 7: Adders

Deschamps_Sutter_Canto Guide to FPGA Implementation of Algorithms

Embed Size (px)

DESCRIPTION

algorithms for fpga synthesis

Citation preview

  • 3/19/14 Deschamps/Sutter/Canto Guide to FPGA Implementation of Algorithms

    www.arithmetic-circuits.org/guide2fpga/vhdl_codes.htm 1/5

    Guide to FPGA Implementation of Arithmetic Functions

    VHDL Models and Examples

    Chapter 2: Architecture of Digital Circuits

    All examples of chapter 2

    Introductory example 2.1 (square_root.vhd). A simple test bench (square_root_tb.vhd). Algorithm 2.2,square root, version 2 (square_root_2.vhd). A simple test bench square_root_2_tb.vhd).

    Introductory example 2.3.1. A 7-to-3 Counter (seven_to_three.vhd). A simple test bench(seven_to_three_tb.vhd). It uses a basic carry save adder (CSA) (csa.vhd). A simple test bench(csa_tb.vhd).

    Final example of Elliptic curve scalar product. First using explicit datapath and control separation(scalar_product.vhd and scalar_product_data_path.vhd); and a second implementation not using explicitdatapath and control separation (scalar_product_DF2.vhd). Both implementation uses the multiplier andsquarer (interleaved_mult.vhd; classic_squarer.vhd).

    Chapter 3: Special Topics of Data Path Synthesis

    All examples of chapter 3

    Section 3.1.2 Segmentation. scalar product in GF(2^m) using pipeline (not a synthesizable circuit)(pipeline_DF2.vhd).

    Section 3.1.4 Interconection of pipelined component. Example 3.4 of scalar product in GF(2^m) using selftimed pipeline (not a synthesizable circuit) (pipeline_ST.vhd). A simple test bench (test_pipeline_ST.vhd).Example 3.5 a self timed ripple carry adder (adder_ST2.vhd). A test bench for ripple carry adder(test_adder_ST2.vhd).

    Section 3.2 Loop unrolling and digit-serial computation. A sequential restoring division algorithm(restoring.vhd). The partially unrolled version of the restoring divider with s=2 (unrolled_divider.vhd). A DigitSerial version of the restoring algorithm with D=2 (restoringDS.vhd).

    Chapter 4: Special Topics of Control Unit Synthesis

    All examples of chapter 4

    Section 4.2 hierarchical control unit. Example 4.2 computes z= (x^2 + y^2)^0.5 (example4_1.vhd).

    Section 4.3 variable latency operations. A scalar product in GF(2^m) example (not a synthesizable circuit)(unbounded_DF.vhd).

    Chapter 7: Adders

  • 3/19/14 Deschamps/Sutter/Canto Guide to FPGA Implementation of Algorithms

    www.arithmetic-circuits.org/guide2fpga/vhdl_codes.htm 2/5

    All examples of chapter 7

    Section 7.3 radix 2^k adder. A behavioral model (base_2k_adder.vhd), instantiating muxcy component(base_2k_adder_muxcy.vhd). A test bench for base 2^k adders (test_base_2k_adder.vhd).

    Section 7.4 carry select adders (carry_select_adder.vhd and carry_select_adder2.vhd). A test bench forcarry select adders (test_carry_select_adder.vhd).

    Section 7.5 logarithmic adder. Example 7.1 (carry_select_adder3.vhd, uses also carry_select_adder2.vhd ascomponent).

    Section 7.6 long-operand adder (long_operand_adder.vhd). A test bench for sequential adders(test_long_operand_adder.vhd).

    Section 7.7 multioperand adders:

    Section 7.7.1 Sequential multi-operand adder (multioperand_adder.vhd). Multi-operand addition with stored-carry encoding (CSA_multioperand_adder.vhd). A test bench for sequential multi-operand adders(test_multioperand_adder_seq.vhd).

    Section 7.7.2 combination multi-operand adders. Combinational multi-opernad adder(comb_multioperand_adder.vhd). Combinational multi-operand addition with stored-carry encoding(comb_CSA_multioperand_adder.vhd). A test bench for sequential multioperand adders(test_multioperand_adder_comb.vhd).eight operand adder (eight_operand_adder.vhd).

    Section 7.7.3 parallel counters. Six to three counter (six_to_three_counter.vhd), a 6 to 3 counterinstantiating lut6 component (six_to_three_counter_compinst.vhd). Twenty four operand adder(twenty_four_operand_adder.vhd). A test bench for 24-operand adder(test_twenty_four_operand_adder.vhd).

    Section 7.8 Subtractor and adder subtractor (two_s_comp_adder.vhd; two_s_comp_subtractor.vhd).

    Chapter 8: Multipliers

    All examples of chapter 8

    Section 8.2 combinational multipliers:

    Section 8.2.1 Ripple carry parallel multiplier (parallel_multiplier.vhd). A testbench for parallel multipliers(test_parallel_multiplier.vhd).

    Section 8.2.2 carry-save parallel multiplier (parallel_csa_multiplier.vhd). A testbench for parallel multipliers(test_parallel_multiplier.vhd).

    Section 8.2.3 Multipliers based on multioperand adders. n-bit by 7-bit multiplier based on multi-operandadders (N_by_7_multiplier.vhd; uses also seven_to_three.vhd and csa.vhd). A test bench for Nx7 bitsmultipler (test_N_by_7_multiplier.vhd).

    Section 8.2.4 radix-2^k and mixed radix multipliers. A radix 2^k multiplier (base_2k_parallel_multiplier.vhd). Aradix 2^k using CSA (base_2k_csa_multiplier.vhd). A test bench for radix 2^k(test_base_2k_parallel_multiplier.vhd).

    Section 8.3 sequential multipliers:

    Section 8.3.1 Shift and add multipliers (shift_and_add_multiplier.vhd and shift_and_add_multiplier2.vhd). Thetest bench for the shift and add multipliers (test_shift_and_add_multiplier.vhd andtest_shift_and_add_multiplier2.vhd).

    Section 8.3.2 Shift and add multipliers with CSA (sequential_CSA_multiplier.vhd). The test bench for the shiftand add multipliers (test_shift_and_add_multiplier_CSA.vhd).

    Section 8.4 Integer multipliers:

    Section 8.4.1 mod 2.B^(m+n) multiplication (integer_csa_multiplier.vhd). The test bench for for mod2.B^(m+n) multiplication (test_integer_CSA_multiplier.vhd).

    Section 8.4.2 modified parallel shift and add algorithm (modified_parallel_multiplier.vhd). The test bench forthe modified parallel shift and add multipliers (test_modified_parallel_multiplier.vhd).

    Section 8.4.3 post correction multiplication (postcorrection_multiplier.vhd). A test bench for post correctionmultiplication (test_postcorrection_multiplier.vhd)

    Section 8.4.4 Booth multiplier. A radix-2 combinational Booth multiplier (Booth1_multiplier.vhd). A test benchfor radix-2 booth multiplication (test_Booth1_multiplier.vhd). A sequential booth multiplier(test_Booth2_sequential_multiplier.vhd). A test bench for sequential booth multiplication(test_Booth2_sequential_multiplier.vhd).

    Section 8.5 constant multipliers. Sequential constant multiplier (sequential_constant_multiplier.vhd). A test

  • 3/19/14 Deschamps/Sutter/Canto Guide to FPGA Implementation of Algorithms

    www.arithmetic-circuits.org/guide2fpga/vhdl_codes.htm 3/5

    Section 8.5 constant multipliers. Sequential constant multiplier (sequential_constant_multiplier.vhd). A testbench for Sequential constant multiplier (test_sequential_constant_multiplier.vhd).

    Chapter 9: Dividers

    All examples of chapter 9

    Section 9.2 radix-2 division:

    Section 9.2.1 non-restoring divider (non_restoring.vhd). A testbench for non-restoring divider(test_non_restoring_divider.vhd).

    Section 9.2.2 restoring divider (restoring.vhd). A testbench for restoring divider (test_restoring_divider.vhd).

    Section 9.2.3 binary SRT divider (srt_divider.vhd). A test bench for binary SRT divider (test_srt_divider.vhd).

    Section 9.2.4 binary SRT divider using carry save adder (srt_csa_divider.vhd). A test bench for binary SRTCSA divider (test_srt_csa_divider.vhd).

    Section 9.2.5 radix-2^k SRT divider. A radix 4 divider (radix_four_divider.vhd). A test bench for radix 4divider (test_radix_four_divider.vhd).

    Section 9.3 Radix B dividers. A decimal (B=10) divider (decimal_divider.vhd, ). A test bench for decimaldivider (test_decimal_divider.vhd).

    Section 9.4 convergence algorithm. A goldschmith divider (goldschmidt.vhd). A test bench for convergencedivider (test_goldschmidt.vhd).

    Chapter 10: Other operations

    All examples of chapter 10

    Section 10.1 Binary to radix-B conversion. A binary to decimal sequential converter (BinaryToDecimal2.vhd,uses ch9 models: uses: doubling_circuit2.vhd and lut4_behav.vhd). A test bench for non-restoring divider(Test_BinaryToDecimal2.vhd).

    Section 10.2 Binary to radix-B conversion. A binary to decimal sequential converter (DecimalToBinary2.vhd,uses ch9 models: uses: multiply_by_five.vhd, and lut4_behav.vhd). A test bench for non-restoring divider(Test_DecimalToBinary2.vhd).

    Section 10.3 Square root

    Section 10.3.1 restoring square root (SquareRoot.vhd). A test bench for restoring square root(Test_SquareRoot.vhd).

    Section 10.3.2 non-restoring square root (SquareRoot3.vhd). A test bench for non-restoring square root(SquareRoot3.vhd).

    Section 10.3.3 Newton-Raphson square root (SquareRootNR4.vhd , uses: restoring3.vhd). A test bench forNR square root (Test_SquareRootNR4.vhd)

    Section 10.4 Logarithm (Logarithm.vhd). A testbench for logarithm (Test_Logarithm.vhd).

    Section 10.5 Exponential. Exponential models (Exponential.vhd and Exponential2.vhd). Textbenches forexponential models (Test_Exponential.vhd and Test_Exponential2.vhd).

    Section 10.6 Trigonometric functions. Cordic for Sine cosine example (cordic2.vhd). Test bench for sinecosine using cordic (Test_cordic2.vhd). Cordic for distance calculation (norm_cordic.vhd). Test bench forcordic (x^2+y^2)^0.5 (Test_norm_cordic.vhd)

    Chapter 11: Decimal Operations

    All examples of chapter 11

    Simple decimal ripple carry adder (ripple_carry_adder_BCD.vhd). A test bench for decimal adders(test_adder_BCD.vhd).

  • 3/19/14 Deschamps/Sutter/Canto Guide to FPGA Implementation of Algorithms

    www.arithmetic-circuits.org/guide2fpga/vhdl_codes.htm 4/5

    Carry chain adders. Behavioral model (cych_adder_BCD_v1.vhd), FPGA optimized model(cych_adder_BCD_v2.vhd). A test bench for decimal adders (test_adder_BCD.vhd).

    One digit by one digit multiplication. Binary arithmetic with correction (bcd_mul_arith1.vhd andbcd_mul_arith2.vhd). ROM based implementation (bcd_mul_bram.vhd, bcd_mul_mem1.vhd and

    bcd_mul_mem2.vhd). A test bench for decimal 1 by 1 digit multiplication (test_mul_1by1BCD.vhd).

    N digits by one digit multiplication. Using LUTs or arithmetic 1x1 multiplication (mult_Nx1_BCD.vhd). UsingBRAMs (mult_Nx1_BCD_bram.vhd). Test bench for N by 1 multiplication (test_mul_Nx1_simple.vhd andtest_mul_Nx1_bram.vhd).

    N by M digits multiplication. Sequential implementations (mult_BCD_seq.vhd and mult_BCD_bram_seq.vhd). Acombinational implementation (mult_BCD_comb.vhd). Test benches for N by M digits multiplication(test_mult_BCD_seq.vhd and test_mult_BCD_comb.vhd)

    N by N digits division with P digit quotient. non-restoring like divisor implementation(decimal_divider_nr_norm.vhd, uses also: decimal_shift_register.vhd, adders and multipliers of chapter 11).SRT-like divisor implementation (decimal_divider_SRT_like.vhd, uses also: decimal_shift_register.vhd,mult_Nx1_BCD_carrysave.vhd, special_5digit_adder.vhd, range_detection3.vhd, bcd_csa_addsub_4to2.vhd,decimal_CSAS_4to2.vhd adders and multipliers of chapter 11)). A test bench for decimal dividers(test_dec_div_seq.vhd).

    Chapter 12: Floating Point

    All examples of chapter 12

    Section 12.5.1 Floating Point Adder/Subtactor (fp_add.vhd; uses: fp_right_shifter.vhd andfp_leading_zeros_and_shift.vhd). A test bench for the FP adder with a stimuli file (fp_add_tb.vhd;dataAdd.txt).

    Section 12.5.2 Floating Point Multiplier (fp_mul.vhd). A test bench for the FP multiplier with a small stimulifile (fp_mul_tb.vhd; dataMul.txt).

    Section 12.5.3 Floating Point Divider (fp_div.vhd; uses: div_nr_wsticky.vhd and a_s_cell.vhd). A test benchfor the FP divider with a small stimuli file (fp_div_tb.vhd; dataDivFloat.txt).

    Section 12.5.4 Floating Point Square Root (fp_sqrt.vhd; uses: sqrt_wstiky.vhd, sqrt_cell.vhd, andsqrt_cell_00.vhd). A test bench for the FP multiplier with a small stimuli file (fp_sqrt_tb.vhd;dataSqrtFloat.txt).

    Chapter 13: Finite Field Arithmetic

    All examples of chapter 13

    Section 13.1 Operation mod m.

    Section 13.1.1 Addition and subtraction mod m (mod_m_as.vhd). A simple test bench for add sub mod m(test_mod_m_as_simple.vhd)

    Section 13.1.2 Multiplication mod m. 13.1.2.1 multiply and reduce. A mod 2^192-2^64-1 reducer(mod_p192_reducer2.vhd). 13.1.2.2 interleaved multiplier (interleaved_mult.vhd). A simple test bench forinterleaved multiplier (test_mod_m_multiplier_simple.vhd). 13.1.2.3 Montgomery multiplier(Montgomery_multiplier.vhd). A simple test bench for Montgomery multiplier(test_Montgomery_multiplier_simple.vhd). A behavioral model of mod m exponentiation using montgomeryalgorithm (mod_m_exponentiation.vhd). A simple test bench for exponentiation

    (test_Montgomery_multiplier_simple.vhd).

    Section 13.2 A bahavioural Division mod p (Montgomery_multiplier.vhd). A test bench for mod p division(test_Montgomery_multiplier_simple.vhd).

    Section 13.3 Operations over Z2[x]/f(x)

    Section 13.3.2 Multiplication. 13.3.2.1 Multiply and reduce multiplier (classic_multiplier.vhd). 13.3.2.2Interleaved multiplication (interleaved_mult.vhd). A squarer mod f(x) (mod_f_squaring.vhd).

    Section 13.4 Division over GF(2m). Behavioral models (mod_f_division2.vhd and mod_f_division3.vhd). Testbench for behavioral models (test_mod_f_division2.vhd and test_mod_f_division3.vhd). A synthesizable

  • 3/19/14 Deschamps/Sutter/Canto Guide to FPGA Implementation of Algorithms

    www.arithmetic-circuits.org/guide2fpga/vhdl_codes.htm 5/5

    bench for behavioral models (test_mod_f_division2.vhd and test_mod_f_division3.vhd). A synthesizablebinary divider (mod_f_binary_division.vhd).

    Chapter 15: Embedded systems development: case studies

    All examples of chapter 15

    All the example projects of chapter 15 "Embedded systems development: case studies" are in the precedinglink.

    Chapter 16: Partial reconfiguration on Xilinx FPGAs

    All examples of chapter 16

    All the example projects of chapter 16 "Partial reconfiguration on Xilinx FPGAs" are in the preceding link.

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

    This site was last updated 01/31/12