[Oberon] Fwd: Re: FPGA - RISC multiply/divide
Skulski, Wojciech
skulski at pas.rochester.edu
Sun May 28 22:04:21 CEST 2017
Tomas:
it is an interesting topic. Some good reading is provided in Xilinx Data Sheets for the "LogiCORE IP Divider and Generator" v3.0 (Data Sheet DS530.pdf) and v4.0 (Xilinx Data Sheet DS819.pdf). The 3.0 core is probably more relevant to RISC5, because it assumes no particular interface. The 4.0 core is AXI4, which would need to be "wrapped" into some RISC5-compatible VHDL.
These IP cores are provided by the Core Generator. Using them requires quite a bit of knowledge. The cores can be clocked up to some fairly high clock frequency (between 150 and 400 MHz), what would allow for overclocking relative to the other parts of the design. This technique may sound a bit advanced for a beginner. In any case, the data sheets are worth reading if one is venturing into this territory. The algorithms are well explained, as well as the possible implementations.
Wojtek
________________________________________
From: Oberon [oberon-bounces at lists.inf.ethz.ch] on behalf of Walter Gallegos [waltergallegos at vera.com.uy]
Sent: Friday, May 26, 2017 7:51 AM
To: ETH Oberon and related systems
Subject: [Oberon] Fwd: Re: FPGA - RISC multiply/divide
Tomas,
No magic, moderns FPGA have DSP blocks with dedicated hardware multipliers in silicon, on the other hand division need be implement into the logic farm; using one of the well know algorithms to keep logic resources within reasonable limits.
Simulator waveforms show the process, 11 divided by 3, quotient = 3 remainder = 2; one clock period for bit.
[cid:part1.BE49F20D.8FF3FF57 at vera.com.uy]
In practise, one clock for setting up values, results can be read one clock after calculus done; so, divide a 32 bit number use 34 clocks. Waveforms correspond to our own VHDL version of RISC-5.
Walter,
El miércoles-2017-05-24 a las 13:21, Tomas Kral escribió:
Hi,
This example of binary multiply needs >>>fixed size font<<< to display
properly.
[a] Shift & addition
0101 =5(4+1)
0101 x =5(4+1)
_________
0101
0000 shift
0101 shift
_________
add above
011001 =25(16+8+1)
[b] Repeated addition, 5+5+5+5+5
0101
0101
0101
0101
0101
__________
011001 =25(16+8+1)
To multiply 32 bit integers upto 32 cycles are needed. There is some
FPGA magic used, to complete each `MUL'tiply in two cycles only.
How many cycles does `DIV'require?
Looking for the above analogy.
Tomas
On Tue, 23 May 2017 12:36:04 +0200
Tomas Kral <thomas.kral at email.cz><mailto:thomas.kral at email.cz> wrote:
Hi Joerg,
Multiplication ~ repeated addition
Division ~ repeated subtraction
That is a simplification but is not the way implemented in RISC.
Consider 65536 DIV 1, that would require 65536 iterations.
Instead shift (left | right) + (add | sub) is used for DIV and MUL.
This requires much fewer iterations.
My argument is right about the example given in the 16.2.3.
14 DIV 4, is 3 with remainder 2
But the example gives 4 and the remainder 2
Tomas
On Tue, 23 May 2017 11:23:14 +0200
Jörg <joerg.straube at iaeth.ch><mailto:joerg.straube at iaeth.ch> wrote:
Tomas
http://www.homeschoolmath.net/teaching/md/division-repeated-subtraction.php<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.homeschoolmath.net_teaching_md_division-2Drepeated-2Dsubtraction.php&d=DwMDaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=uUiA_zLpwaGJIlq-_BM9w1wVOuyqPwHi3XzJRa-ybV0&m=RET5JAI6kmjapOT0JjD_eLkYvSskDaSwgN6SCTV5Ceg&s=t9OrmOG5nMEDjFLbAHszSE-VGaWPaG1BmZoXk-rTXgQ&e=>
Jörg
Am 23.05.2017 um 11:09 schrieb Tomas Kral <thomas.kral at email.cz><mailto:thomas.kral at email.cz>:
Hi,
I am reading chapters on RISC implementation. I managed to
understand multiplication - `MUL' instruction, consisting of
shifting x and adding y to the product.
I seem not understanding the division, chapter 16.2.3.
In the example for x=14, y=4 gives quotient q=4, and the remainder
r=2.
But...
q = x DIV y = 3, r = x MOD y = 2
???
--
Tomas Kral <thomas.kral at email.cz><mailto:thomas.kral at email.cz>
--
Oberon at lists.inf.ethz.ch<mailto:Oberon at lists.inf.ethz.ch> mailing list for ETH Oberon and related
systems https://lists.inf.ethz.ch/mailman/listinfo/oberon<https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.inf.ethz.ch_mailman_listinfo_oberon&d=DwMDaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=uUiA_zLpwaGJIlq-_BM9w1wVOuyqPwHi3XzJRa-ybV0&m=RET5JAI6kmjapOT0JjD_eLkYvSskDaSwgN6SCTV5Ceg&s=BZVgyQk3qDd3V8sH6aTnQM4odJoRVrvHo66_EV9GIWg&e=>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ATT00001.png
Type: image/png
Size: 21238 bytes
Desc: ATT00001.png
URL: <http://lists.inf.ethz.ch/pipermail/oberon/attachments/20170528/8119b059/attachment.png>
More information about the Oberon
mailing list