Hi,
I would like to connect many independent data source/targets to a common data stream. There will be a 36-bit static RAM block of 2^20 words (9x IDT71V428-12) running as fast as possible, i.e. at ~83MHz, which is supposed to be the main storage of the system and a number of completely unsynchronized components, trying to send/receive their data streams to/from the RAM block. The FPGA chip will be a Spartan 3 or 3E, I haven't chosen it yet. The FPGA will host, among other things, the following components:
a) a 2-way 18-bit SIMD fixed-point complex math processor running at 65 MHz. All its simple scalar instructions should complete in 1 cycle, which is doable, as there are hardware
18x18 multipliers. It will thus consume 292,5 MiB/s of the avaliable bandwidth.b) a high-speed USB2.0 bidirectional 8-bit datalink running at 48Mhz, which gives 48 MiB/s.
c) an Ethernet 100 controller, full duplex mode => ~20 MiB/s.
d) an LCD display driver, about 2 MiB/s.
e) many slow links (SPI-like, AC-97 TDMA etc.), won't consume much bandwidth.
The total bandwidth is 373 MiB/s, which easily covers the requirements. My idea is to implement a static DMA-like RAM transaction slot allocator, which will grant the bus for the CPU in 65 slots out of 83, in 11 for the USB link etc., but how to implement a bunch of low-latency half-duplex bridges between the 83MHz domain and the remaining ones? I don't want to waste my precious BRAMs for that purpose, so what should I do?
Best regards Piotr Wyderski