USRP Tx modifications

Here is a block diagram representing how the USB packets will be handled in the USRP.

http://andrew.cmu.edu/user/thottelt/tx_block.png

The first block (USB block) will be in charge of the separation of packet per channel.
The USB packets are progressively stored in the tx_usb_fifo as they arrive but the padding is removed.
Once one packet is completely stored in the tx_usb_fifo it is pushed to the next processing block, either the command block (channel == 0x1F)
or the data block (channel != 0x1F). The data block as one tx_chan_fifo_X per channel.

Fifos size:

tx_usb_fifo: 16 bits in, 32 bits out.

tx_chan_fifo_X: 32 bits in and out.

tx_cmd_fifo: 32 bits in and out.

The data bus between usb_block and data_block is 32 bits wide. I am wondering if this is not too much.

Processes

All the arrows that loop on the same state and have no action are not shown.

In the USB block

This process fills in the tx_usb_fifo while removing the padding from the usb_packet:
http://andrew.cmu.edu/user/thottelt/usb_block_process0.png

This process forward each packet stored into tx_usb_fifo to a channel specific fifo (tx_chan_fifo_X or tx_cmd_fifo):
http://andrew.cmu.edu/user/thottelt/usb_block_process1.png

There is one variable that is shared between the two processes: #packet_in_usb_fifo.

In Data block

This process sends the samples to the Tx_chain at the time specified in the packet header.
There is one process like this per channel.

http://andrew.cmu.edu/user/thottelt/data_block_processX.png

In Command block

This process executes the sub-commands stored in tx_cmd_fifo. This is the only process in command block.
http://andrew.cmu.edu/user/thottelt/cmd_block_process0.png





注:Tx modifications(原文出处,翻译整理仅供参考!