William Sherman wrote:
I want to use one USRP to transmit and receive. I tried setting up two
flowgraphs (top_blocks), one that will be a receiver “thread” and
another a transmitter “thread”. However the program complains:
RuntimeError: gr_top_block_impl: multiple simultaneous gr_top_blocks not
Yes, thats correct you should only have one top block, that’s why it’s
called a top block, because it supposed to be on top of a hierarchy
tree, and as everyone knows “There can be /only one/! - Highlander”
But seriously, the trick is that you can have separete distinct chains
in your flowgraph, eg imagine two simple chain
Think of it as you have a big graph which has multiple unconnected
chain1: usrp->some_processing->packetizer sink
And you create these blocks in one top block, connect them. Clearly the
two chains do not have a common point, but the scheduler will take care
about them, so they will opeate paralelly.
BTW the default scheduler is a thread per block scheduler, so every
signal processing block has it’s own exacutor thread, but you don’t need
to deal with this.
Is there no way to have a receiver flowgraph in operation while
transmitting on a different daughterboard?
There is as I mentioned above, even you can have a flowgraph using the
same daughterboard for receiving and transmitting (not at the same time
In order to implement a TX+RX in one USRP do I have to shut down the
receiver flowgraph every time I want to start up a transmitter
Consider viewing the tunnel example:
where there exist simultaneously a sending chain towards the usrp which
gets data from a virtual ethernet device and a receiving chain from the
usrp which is fed to a virtual ethernet device.
But there is only one top block.
understanding this example can be a little tricky if you just started,
but it worth it.
Hope it helped
University of Notre Dame
Department of Electrical Engineering