Add README.
This commit is contained in:
parent
daca7044db
commit
cb821b6cbf
|
@ -0,0 +1,72 @@
|
|||
|
||||
Signed multiplier in VHDL or Verilog
|
||||
--------------------------------------
|
||||
|
||||
genmul.py is a Python script for generating a signed multiplier
|
||||
in synthesizable VHDL or Verilog code.
|
||||
|
||||
The multiplier is implemented in terms of basic logic blocks: inverters,
|
||||
booth encoders, half adders, full adders and carry propagation logic.
|
||||
These basic blocks are provided as a small VHDL or Verilog library.
|
||||
The top-level multiplier instantiates many of these basic blocks
|
||||
and wires them together.
|
||||
|
||||
|
||||
Algorithm
|
||||
---------
|
||||
|
||||
Radix-4 Booth encoding is used to construct a signed multiplier and
|
||||
to reduce the number of partial products. The partial products are
|
||||
combined with a Dadda tree to form two binary words. These two words
|
||||
are added to obtain the final result. The final adder uses a Brent-Kung
|
||||
carry-lookahead tree.
|
||||
|
||||
The generated multiplier can be purely combinatorial or it can optionally
|
||||
contain one or two pipeline stages. Pipeline stages are created by inserting
|
||||
an array of flip-flops between the Dadda tree and the final adder and/or
|
||||
in the final output of the multiplier.
|
||||
|
||||
Geoff Knagge gives a good introduction to Booth encoding on his website,
|
||||
http://www.geoffknagge.com/fyp/booth.shtml.
|
||||
|
||||
The method for merging partial products is described in L. Dadda,
|
||||
"Some schemes for parallel multipliers", Associazione Elettrotecnica et
|
||||
Elettronica Italiana, 1965.
|
||||
|
||||
A carry-lookahead adder is described in R. P. Brent, H. T. Kung,
|
||||
"A Regular Layout for Parallel Adders", IEEE Transactions on Computers, 1982.
|
||||
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
To generate a signed 24x18-bit pipelined multiplier in VHDL:
|
||||
genmul.py --lang=vhdl 24 18 1 > mymul.vhdl
|
||||
|
||||
To generate a signed 8x8-bit combinatorial multiplier in Verilog:
|
||||
genmul.py --lang=verilog 8 8 0 > mymul.v
|
||||
|
||||
|
||||
Applications
|
||||
------------
|
||||
|
||||
None really.
|
||||
This is a hobby project.
|
||||
|
||||
These multipliers have never been used in a production system.
|
||||
In fact these multipliers have never even been tested in actual hardware.
|
||||
|
||||
Generated multipliers of several word lengths have been extensively
|
||||
tested in simulation and appear to work correctly.
|
||||
|
||||
Generated multipliers are synthesizable with Xilinx ISE 14 and Vivado 2014.
|
||||
Resource utilization and timing are reasonable. About 500 LUTs are used
|
||||
for an 18x18-bit multiplier on Virtex-7. This is in the same ballpark as
|
||||
the LUTs used by the Xilinx synthesizer when forced to synthesize a built-in multiplication operator without DSPs.
|
||||
|
||||
However, modern FPGAs contain hardwired DSP blocks which provide multipliers
|
||||
that are faster and more resource-efficient than the digital circuits
|
||||
generated by genmul.py. Nobody in their right mind would use genmul.py
|
||||
for practical FPGA-based multipliers.
|
||||
|
||||
--
|
Loading…
Reference in New Issue