[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [microblaze-uclinux] Bad uClinux performance on Spartan-2e.



I can confirm that MicroBlaze will not have a hard multiplier in Spartan2 devices. 
It doesn't matter what parameters you set, the FPGA architecture does not support hard multiplier primitives.

Furthermore I think you shouldn't invest too much time on Spartan2 boards.
With the latest version and with coming versions of MicroBlaze, these architecture will not be supported or tested anymore.

Göran

-----Original Message-----
From: owner-microblaze-uclinux@xxxxxxxxxxxxxx [mailto:owner-microblaze-uclinux@xxxxxxxxxxxxxx] On Behalf Of John Williams
Sent: 26 February 2007 01:01
To: microblaze-uclinux@xxxxxxxxxxxxxx
Cc: jamie rakow; Rudy Ramos
Subject: Re: [microblaze-uclinux] Bad uClinux performance on Spartan-2e.

Hi Leonid,

Leonid wrote:

> We are ready to use everything which will run on Spartan-2e. In order to
> boost performance, we have tried to use Microblaze 4 (see auto-config.h
> attached); we basically copied Spartan-3e Starter Kit design as far as
> we could (cashes are shorter in our case).
> 
> We did bump into several issues however:
> 
> 1) u-boot didn't work if it was compiled with HW multiplication support
> (which Microblaze 4 presumably has): it didn't recognize flash, serial
> output had junk, etc... - I didn't investigate in depth. To make u-boot
> working, I have done the following change:

I don't have any Spartan2 hardware here to test on, however I think what 
is happening is that HW multipliers are simply not available in any 
microblaze version, when targetting Spartan2.  Someone from Xilinx may 
be able to confirm.

So, even if using mb v4.00.a and setting C_USE_HW_MUL=1, EDK has just 
ignored you.  However, auto-config has not picked this up, so the 
resulting .in / .h files just reflect what was asked for (in MHS), not 
what was produced.  Thus, u-boot is compiled to expect HW mul, and none 
is present in the hardware.  Garbage in = garbage out.

The real solution here should be in the microblaze.tcl DRC script - if 
you are targetting an old FPGA architecture it should error-out if you 
try to set C_USE_HW_MUL to 1.

This also explains why it worked, but was slow, when you disabled the HW 
mul support.

[snip]

> Looks like there is some problems in using Microblaze 4 on Spartan-2e...
> can you suggest anything?

Hmmm..  If someone from Xilinx could confirm the theory about no HW mul 
in Spartan2, regardless of CPU version, then that would be a good start.

I realise none of this helps your current situation, and "use a modern 
FPGA" is not a particularly helpful response.

You could make a HW multiplier and hang it off an FSL port, but that 
won't get the compiler doing the right thing.

If you knew the VHDL component definition for the microblaze multipler, 
you could potentially drop in your own implementation in 
microblaze_v4_00_b/hdl/vhdl/mul_unit.vhd.  However since it's all 
encrypted you'd need some help from Xilinx.  Plus, there's probably 
higher level checks on C_FAMILY that enable/disable instantiation of the 
HW multipler anyway.

Anybody else have any bright ideas?

John
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/




___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/