08-17-2010 09:58 AM - edited 08-17-2010 10:00 AM
I have an application where a single, high speed digital output is needed... the faster the better. I have been planning to use the PXI 6562 for 400 MHz, but understanding now is that 400 MHz is an agregate value for all channels, and that an individual channel cannot output data at those speeds. Is this correct?
Here is my current understanding: data must be transferred across the PCI bus with a datawidth of 16 bits. This functions essentially as a file with 16 columns, each column corresponding to one output channel. Since I am only interested in using one channel, this would essentially limit my output data rate to (Max PCI Stream Rate) / 16... a huge hit!
Is there any solution or way around this? Have I understood the problem correctly? For instance, is there a way to stream a different file or data type accross the bus (U8?) that will not be interpereted as 16 channels of data? Is there a way to reconfigure, or even script, the 6562 to read all data into one channel?
If there is not a good solution for one I want to do, I am curious about how most people use this card. I feel that there would be interest pushing just one output channel extremely fast. Is there a LVDS Serializer or MUX that many people are using? Or alternately, would a different NI board be more suited for single-channel high speed digital output?
08-17-2010 10:42 AM
iBrow,
The 6562 is capable of running 16 channels at 200MHz clock rate or 8 channels at 400Mbps (per channel) when in DDR (double data rate) mode where a sample is generated on the rising and falling edges of the 200MHz clock. You effectively get 3.2Gbps of total data bandwidth.
Regarding your questions about streaming, there are several examples that illustrate how to achieve that but you're correct in that the PCI throughput will dominate your performance. For this reason the 6562 is sold with varying ranges of memory (1Mbit per channel to 64Mbit per channel) to allow you to bypass the PCI bus all together and achieve the faster data rates.
How much data are you looking to move and how many channels do you require?
08-17-2010 10:58 AM
Ryan,
Thank you for the quick reply.
I plan to buy the version of the PXI-6562 with 128 Mb/channel.
I have a large data file to transmit, perhaps 1 GB. I will be using 1 channel at 100 MHz (100 Mb/s total output). My understanding was that the card does not really support use of a single channel very well, and that I would be forced to waste a lot of PCI throughput streaming data across the bus for other channels. In other words, binary files get transferred across the bus (based on NI example), but these get interpereted as 2 byte samples (or as I think of it, 16 columns, one column for each channel).
This would cause very inefficient use of the PCI bus for me, clogging it with empty data for the other 15 channels that I don't want. All that I want is 100 Mb/s, or 12.5 MB/s, which should be relatively easy for the backplane and hard drive to handle. But I require that this all come out of one channel, or I will need an external serializer, which I really want to avoid. Is this possible with the way the PXI-6562 works?
Thank You,
Isaac Brown
08-17-2010
12:01 PM
- last edited on
03-20-2025
09:20 AM
by
Content Cleaner
When in DDR mode, you can use 8bit data effectively doubling your total memory to 256Mbit / channel but we do not currently support smaller than 8bits wide.
Using the recommended hardware for streaming data on PXI we can get ~114MB per second transfer rates.
If you preload your memory then stream to refil the memory as you go, you should be able to generate almost 6s of data before your memory underflows.
However, if your pattern has a lot of repetition, you can partition your waveform into multiple waveforms and use scripting to get better memory utilitzation.
For example, if you use the pattern 10101 more than once in your waveform, you can create a waveform called "bob" and a script that calls bob when ever you need to play that pattern. There's overhead in scripting but if that seems like an option, we can help you figure out how much overhead may be involved.
08-17-2010 12:39 PM
Ryan,
If I understand what you are saying, when in DDR mode, we may use files that are only 8 'columns' wide instead of 16. Since I would be making use of 1/8th of my data instead of 1/16th, this would essentially be a 2x savings on wasted throughput from what I originally expected, correct?
You link lists 57 MHz streaming rate by taking 114 MB/s (from backplane ) / 2 bytes per sample (since it assumes 16 channels) = 57 Mb/s theoretical max on one channel.
You said in DDR mode I can use 8 bit data, meaning the calculation would instead by 114 MB/s / 1 byte = 114 Mb/s theoretical max on one channel.
So, in theory, if I could achive the backplane throughput listed in the linked article, I could continuously run a single channel at 100 Mb/s. At least, that is my reading, let me know if I am incorrect. This is of course assuming I'm using a hard drive that can support 114 MB/s.
Your comment on scripting gives me an idea, though. How much capability does the scripting have? Could I write a script that would "serialize" the samples? For instance, lets say I send the sample 11001110, the script would turn that into 1111111 , 11111111 , 00000000 , 00000000 , 11111111 , ect. This would remove the bottleneck from the PCI backplane / my hard disk by basically multiplying data quantity by 8 after the data had already arrived in 6562 memory, effectively allowing me to use all eight 'columns' of data instead of having the ones I'm not using just be wasted space.
Isaac Brown
08-17-2010
03:45 PM
- last edited on
03-20-2025
09:25 AM
by
Content Cleaner
Hey Isaac,
You are correct that if you want to stream data continuously from system (your app) to the HSDIO device to output, then you do have to send the data in 8-bits in DDR mode. And you are correct in that if your system can keep up with the streaming rates, then you can possibly stream data to the HSDIO device at 100 MBytes/sec throughput.
But it sounds like the Scripting functionality of the HSDIO devices is what you are leaning towards. Check out the Scripting section in the NI-HSDIO Help document, as well as the NI Script Editor Help for Common Scripting Use Cases.
The 6562 does not have a way to serialize an 8-bit sample to 8 1-bit samples. You would still need to send 8 samples of 8-bits in order to get an 8 bit serialized data stream on one channel. So to get a serialized pattern of 11001110, on channel 0 for instance, you would send the following 8 samples (where z is not driving data on the line, or also known as Tristating the line):
sample 1: zzzzzzz1
sample 2: zzzzzzz1
sample 3: zzzzzzz0
sample 4: zzzzzzz0
sample 5: zzzzzzz1
sample 6: zzzzzzz1
sample 7: zzzzzzz1
sample 8: zzzzzzz0
But with Scripting, if you have this sequence a lot in your waveform, then you can make it its own smaller waveform and then link or loop on it. I hope this and the links to documents above answers your questions. Please let us know if you have any further questions or concerns regarding the 656x device and how to use it.
Finally, I just wanted to throw out some other high speed digital device options if you are looking to do some serial communication or protocols. The NI 6585 is an LVDS FlexRIO Adapter Module that connects to a PXI-7951R, PXI-7952R, PXI-7953R, PXI-7954R, PXIe-7961R, PXIe-7962R, or PXIe-7965R FPGA module. Check out all the information on this FlexRIO page if you think you want to investigate this option.
Regards,
DJ L.
08-23-2010 08:56 PM
Thank you for the reply.
I have one other idea of how scripting could get what I want. Lets say I've sent a waveform across the backplane. This waveform is 8 columns, as required. But, I have these columns Named A,B,C,D,E,F,G,H. I have a script that now calls waveform A to be sent out of channel 1, then waveform B to be sent out of channel 1, then C, ect., but always out of channel 1.
As soon as H has been sent out, I go to the next waveform in the queue, which also gets named as 8 different waveforms. This allows me to continually repeat the process as I backfill the queue, effictively removed the 1/8 factor applied to my backplane / hard disk throughput.
Is this feasible?
thanks,
Isaac
08-24-2010 06:37 PM
Howdy Isaac!
My understanding of your description is that you want to load the buffer with three 8-bit samples as follows:
"Column" aka Lines: A B C D E F G H
8-bit Sample #1: 1a 1b 1c 1d 1e 1f 1g 1h
8-bit Sample #2: 2a 2b 2c 2d 2e 2f 2g 2h
8-bit Sample #3: 3a 3b 3c 3d 3e 3f 3g 3h
And then use scripting to have the output of a single line (for example, line A) be as follows:
1a, 2a, 3a, 1b, 2b, 3b, 1c, 2c, 3c, 1d, 2d, 3d, 1e, 2e, 3e, 1f, 2f, 3f, 1g, 2g, 3g, 1h, 2h, 3h
[Note: 1a, 1b, 2a, etc... each represent a single output state.]
Unfortunately this is not how the HSDIO scripting works. It can be used to control the order in which each of the 8-bit samples is generated, but it cannot move around individual bits between lines as you described. You can use scripting to duplicate the pattern of the 8-bit samples to be generated like this:
Sample #1, Sample #2, Sample #3, Sample #1, Sample #2, Sample #3
In this case the output from each line would be as follows:
Line A: 1a, 2a, 3a, 1a, 2a, 3a
Line B: 1b, 2b, 3b, 1b, 2b, 3b
Line C: 1c, 2c, 3c, 1c, 2c, 3c
etc...
Please correct me if I misunderstood the process you were describing.
As DJ had mentioned, using an FPGA might be a good option for the task you are trying to accomplish.
Regards,