O
O. Olson
Guest
Hi,
I am not sure if I am explaining this correctly. And, yes this is HW
(or school project work).
I need to design a four way router in Verilog i.e. four inputs and
outputs. (Actually it is a five way router because one set of inputs
and outputs would connect to the internal node). This is for an FPGA
on a set/mesh of FPGAs if you want it that way. Right now I am not too
much concerned about Speed or Area but optimizing for these would be
good and I would be looking at those in my final version. Any ideas on
how to design this? I would be grateful if there is something free out
there.
My plans for now:
1. From the above I have 5 inputs and 5 output ports. I am going to
have each of these ports have 3 signals i.e. one to carry the actual
data (having a certain port width i.e. a Bus) and two others for
signaling:
Valid Signal from Sender to Receiver indicating the data is valid
Stop Signal from Receiver to Sender indicating to stop
transmitting the data (possibly due to a temporary congestion)
2. The data would be transmitted by fixed size packets. I intend to
use worm-hole routing i.e. a long packet can block other packets.
3. Right now I am not concerned about those very special cases of
deadlocks. I would look at them once I get a basic implementation to
work.
4. Each node/router would have an ID. The first two elements of the
packet would contain the destination Node ID. From the destination ID
each router would know where to forward the packet i.e. up, down, left
or right.
My Questions/Problems:
1. How do I handle the case when two packets arrive at two input ports
of a router but want to go to the same output? I am not concerned
about the delay i.e. temporarily blocking one of them. I would like to
know how do I save this information that one of them has been blocked
and to start it later. I would prefer to do some sort of round-robin
but how do I do this in Verilog? (That would preferably be fast and
synthesize into a small area?)
2. I might need to buffer some of the inputs I would be grateful if
you could show me some sort of a way to implement a buffer in Verilog,
that would not have a big penalty during synthesis.
If I was unclear in any of the above let me know. Also let me know if
you want to see my code that I have so far. I thought that this might
be unnecessary for now.
Thanks to you guys for your help.
O.O.
I am not sure if I am explaining this correctly. And, yes this is HW
(or school project work).
I need to design a four way router in Verilog i.e. four inputs and
outputs. (Actually it is a five way router because one set of inputs
and outputs would connect to the internal node). This is for an FPGA
on a set/mesh of FPGAs if you want it that way. Right now I am not too
much concerned about Speed or Area but optimizing for these would be
good and I would be looking at those in my final version. Any ideas on
how to design this? I would be grateful if there is something free out
there.
My plans for now:
1. From the above I have 5 inputs and 5 output ports. I am going to
have each of these ports have 3 signals i.e. one to carry the actual
data (having a certain port width i.e. a Bus) and two others for
signaling:
Valid Signal from Sender to Receiver indicating the data is valid
Stop Signal from Receiver to Sender indicating to stop
transmitting the data (possibly due to a temporary congestion)
2. The data would be transmitted by fixed size packets. I intend to
use worm-hole routing i.e. a long packet can block other packets.
3. Right now I am not concerned about those very special cases of
deadlocks. I would look at them once I get a basic implementation to
work.
4. Each node/router would have an ID. The first two elements of the
packet would contain the destination Node ID. From the destination ID
each router would know where to forward the packet i.e. up, down, left
or right.
My Questions/Problems:
1. How do I handle the case when two packets arrive at two input ports
of a router but want to go to the same output? I am not concerned
about the delay i.e. temporarily blocking one of them. I would like to
know how do I save this information that one of them has been blocked
and to start it later. I would prefer to do some sort of round-robin
but how do I do this in Verilog? (That would preferably be fast and
synthesize into a small area?)
2. I might need to buffer some of the inputs I would be grateful if
you could show me some sort of a way to implement a buffer in Verilog,
that would not have a big penalty during synthesis.
If I was unclear in any of the above let me know. Also let me know if
you want to see my code that I have so far. I thought that this might
be unnecessary for now.
Thanks to you guys for your help.
O.O.