Multiple components driving a single bus

B

Benjamin Couillard

Hi, I've got a question for you guys.

Let's say I've got 2 blocks that can drive one bus (but there could be
more).

Block1 : Block
generic map (Address => x"000")
port map (CLK => CLK,
ADDR => ADDR,
BUS_STB => BUS_STB,
RD_WR_N => RD_WR_N,
DATA_OUT => BUS_DATA,
....);


Block2 : Block
generic map (Address => x"004")
port map (CLK => CLK,
ADDR => ADDR,
BUS_STB => BUS_STB,
RD_WR_N => RD_WR_N,
DATA_OUT => BUS_DATA,
......);

Let's say that when the address is not 0, DATA_OUT of block1 will be
high-Z and when the addres is not 4 Data_out of block 2 will be high-
Z. Will ISE synthesis engine be smart enough to realize there is no
bus contention? Basically, will ISE infer muxes from that code? I
realize that I could use a switch case, however I want a more scalable
solution where I don't need to have an ugly 200-line switch case.

I looked a Jonathan Bromley's solution too, it's very clever and it
looks like a good solution, however I'd like to know your opinion on
this method first. The reason, why I like the solution above is that
the address is specified when we instantiate the block.

Best regards.
 
Joined
Dec 9, 2008
Messages
88
Reaction score
0
You'll need tri-state buffers (BUFT) on the DATA_OUT bus. Is there a way to 'infer' that in ISE?
 
B

Benjamin Couillard

On Tue, 21 Apr 2009 18:27:42 -0700 (PDT), Benjamin Couillard wrote:

[...]
Let's say that when the address is not 0, DATA_OUT of block1  will be
high-Z and when the addres is not 4 Data_out of block 2 will be high-
Z. Will ISE synthesis engine be smart enough to realize there is no
bus contention? Basically, will ISE infer muxes from that code?

This is the readback-decode problem that has caused me much pain
in the past.

There was quite an interesting related discussion here back in
January, in the thread "Unassigned register decode", in which
I posted a sketch of one possible way to attack it - without
writing tri-states and then expecting the tool to convert
them to muxes.

But I agree with you and Brian that the tristate=>mux solution
usually works pretty well.
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
(e-mail address removed)://www.MYCOMPANY.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.

I tried my method, and it doesn't seem to scale well. ISE seems to
synthesize just fine even though there are address conflicts (I put
those conflicts on purpose)

.. I think I'm gonna use your method Jonathan, it seems to scale
reasonably well and it avoids the mess of having one huge process
implementing all the registers (I have about 50 register so far, but
the number could easily double).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top