USRP Software Radio

cancel
Showing results for 
Search instead for 
Did you mean: 

Is there any successful example of USRP RIO with PCIe adapter?

Hi All,

 

       Can I ask who has ever had successful experience of achieving high IQ rate using USRP RIO with PCIe adapter? If so, what PC were you using?

       I am working on the USRP RIO. I tried to run the LabVIEW code for the USRP-2920 on the USRP 2950R but could not achieve a high IQ rate. The PC I am using has a mini-itx motherboard with H97 chipset, 16GB 1600MHz DDR3 memory, 256GB SSD, i7-4790K quad-core 4.0GHz CPU. Even if I connect the USRP-2920 to the PC, I could not achieve 20MS/s. When I was using a Macbook Pro with i7-3840QM, I could achieve 25MS/s IQ rate. But there is no way I installed a PCIe adapter to the laptop. 

       Thank you very much.

0 Kudos
Message 1 of 7
(6,726 Views)

Hello,

 

When you say you could not achieve a high IQ rate, what did you see when you tried to set the rate to a higher value?  Were you getting errors when trying to run the code?  Was there a specific example that you were trying to run?  The different rates on different computers may indicate that you are seeing a problem with data throughput...are you running into buffer overflow problems?

------------------------------------------------------------------------------------------

Jon F.
Technical Support Engineer
National Instruments
0 Kudos
Message 2 of 7
(6,688 Views)

Yes, underflow or overflow happens when I set the IQ rate higher than 20MS/s.

I agree with you that the problem is from data throughput. As the specification says, the max IQ rate can be 120MS/s, I am just wondering how that is achieved.

0 Kudos
Message 3 of 7
(6,597 Views)

Can you post a little more information about the computer setup that you are trying?  What is the model?  Can you post a MAX technical report?  To do this, click File>Create Report>Technical Support Report from NI MAX.  A technical report will give us a lot of useful information about the software and drivers installed on your machine.

------------------------------------------------------------------------------------------

Jon F.
Technical Support Engineer
National Instruments
0 Kudos
Message 4 of 7
(6,576 Views)

I have a benchmarking utility that I will attach here that can run through a number of IQ Rates and the number of samples in each Write call.  Here are the results when I ran with an USRP-2940R over a x4 MXIe (PCIe) link.  I configured to run a 2-channel continuous generation for 10 s for each test.  

 

Device connected over PCIe
Conducting benchmarks for continuous writes (CDB, 16-bit).
IQ Rate        363 726 1000 3000 6000 10000 100000
1000000      0      0       0       0        0         0           0
2500000      0      0       0       0        0         0           0
5000000      0      0       0       0        0         0           0
10000000    0      0       0       0        0         0           0
20000000    39    0      0       0        0          0           0
40000000    18    18    0       0        0          0           0
60000000    9      36    15     2        0          0           0
80000000    22    17    14     0        2          0           0
90000000    15    22    15     9        9          9           9
95000000    21    21     22    9        9          9           2
97500000    16    14     31    9        9          9           9
100000000  15    34     25    9        9          9          10

 

The formatting may be hard to figure out, but the small numbers are the number of underflows.  So 0 is what you want.  As you can see, I can sustain rates up to 80 MS/s for at least 10 s IF my write size is big enough.  That is, if I write at least 10,000 samples with each call to niUSRP Write, I don't see underflows.  That's two channels, so we're talking 640 MB/s over the bus.

 

Here are some tips to increase your Tx streaming throughput:

 

0) Don't use a continuous generation at all.  For many applications you don't need to stream continuously- a finite transmission (and you can loop a finite transmission) will do and you will basically not underflow in that case if you provide all the data up front.

 

1) As you can see from the chart, the bigger the data buffer you provide in each Write call, the faster you can stream.

 

2) Write sizes in multiples of the maximum packet size seem to work well.  That number is 2044 for the USRP-294x/5x series (although that may change in future driver releases).  Try sending bursts of 10220 samples.

 

3) If your application allows it, set a Start Trigger Time a little in the future.  Then start writing data before the device starts transmitting.  For example, set the Start Trigger Time to the (current device time + 1 second).  Then start writing data and you will have a second to pre-fill the on-device buffers.  This will substantially reduce the number of underflows.

 

4) Be sure to do your data processing out of your write loop, to keep the write loop filling the pipleline as quickly as possible.

 

 

0 Kudos
Message 5 of 7
(6,562 Views)

Here is a command-line utility you can use to test your Tx streaming performance.

 

An example of usage would be: "niusrpTxBenchmark rio0 1 2 3 1"

 

That will test continuous Tx on device "rio0" over PCIe for 3 seconds per test.

 

Tip: always set the warning policy to "err" (1).  You may crash due to a pileup of underflows otherwise.

0 Kudos
Message 6 of 7
(6,560 Views)

Hi Jon,

 

Thanks for your reply. The report is attached. 

0 Kudos
Message 7 of 7
(6,306 Views)