Parsing Boolean Array in FPGA

Hi All,
Although I have programmed in LabVIEW many times, I am quite a novice when it comes to programming on an FPGA, and I have been learning as I go (which up to this point has worked with little issue).  However, I have been unable to resolve my latest issue, and the more I read about the FPGA, the less certain I am that what I am trying to do in even possible.
The task at hand involves reading in a set number of bits from the digital input/output lines of the FPGA and parsing these bits into specific words/"bytes."  For the purposes of the VI that I have attached, I have faked reading in a set number of bits by supplying three 26-bit words (78 bits total) that have been been defined on the front panel.  After supplying the specified bits, I am trying to parse the bit array into specific words that are given by the following logic:
1.  Search for a start bit of 0 (false bit).
2.  Once the start bit of 0 (false bit) is found the word that is trying to be parsed is the next 10 bits.
3.  After the start bit and ten data bits is a stop bit of 1 (true bit).
4.  Repeat steps 1-3, five additional times.
From the above logic, there should be six parsed words in total for the supplied VI.  Unfortunately, I cannot simply take 12 bits (1 start bit, 10 data bits, and 1 stop bit) at a time, as the number of filler bits in between successive words is variable.  The VI that I have supplied is one version of how I have proposed to accomplish the aforementioned logic, but I cannot compile the VI/project, as I continually receive errors that "Arrays must be fixed in size."  To my knowledge, all the arrays in the VI have been preallocated and the logic seems deterministic.
If anyone has any suggestion as to why this VI is not compiling, I would be greatly appreciative.  Thank you in advance for taking the time to look at this, and I look forward to resolving this issue.
With gratitude,
Gregory
Solved!
Go to Solution.
Attachments:
Example_Bit_Parser.vi ‏9 KB

Unfortunately, you're going to have to rework this VI to make it run on an FPGA.  You can't relocate arrays in memory in an FPGA the way you can on a PC.  You have a variable-sized array as the output of delete from array, because the length input isn't fixed at compile time.  Also, two dimensional arrays aren't allowed.  Remember that when you code for an FPGA you're actually writing the hardware - each value in an array is essentially a circuit (this is my overly-simplified understanding).  The compiler can't allocate the right number of wires to carry an array if it can't determine the array size.  The array isn't in memory so there's no way to rearrange it at run-time.
There are a couple of ways you could work around this, all of which will require iterating through every element in the input array.  You could use an FPGA FIFO, and only put the values into the FIFO that are data (ie, loop until you hit a start bit, put the next 10 values into the FIFO).  Then on the other side of the FIFO, possibly in a separate loop, read 10 bits at a time to get your data words.  Another approach is to rearrange the array as you go.  Keep track of the current location in the input array.  Whenever you hit a start bit, move the next 10 bits (you may have to do this one at a time) to the current location in the input array, incrementing the current location each time.  When you've finished all the input, all the data words will be at the beginning of the array in 10-bit units, which you can then split out as needed.

Similar Messages

  • 1D Boolean Array to 1D Integer Array conversion for FPGA FIFO

    Hello, I am using a PXI7813R card. I would like to pass some data between the target (FPGA) vi and the host vi using the FIFO. I have a FIFO setup to 1023 "32 bit integer" samples. I have a boolean array of 32000 samples which would be the same as 1000 32 bit integers, that I acquired using the PXI7813R card.  I would like to convert the 1D boolean array to a 1D "32 bit intger" array. This seems like a more a difficult problem than I first thought as the labview functions are reduced when targetting a FPGA device. I have attached a jpg of how I would like to do it. I am getting a "Arrays must be fixed size in current target" error for the output from the array subset function. I know this is because one of the inputs is not exactly a constant, i.e. the index input  for array subset, but regardless of the index, I will only ever be taking 32 bits from the boolean array at any time to convert to a 32 bit integer to then place in the FIFO. Any suggestions of how I may get around this problem would be gratefully recieved. Regards, Michael.
    Message Edited by Michael_Limerick on 02-08-2008 04:54 AM
    Attachments:
    fifo_out1.JPG ‏52 KB

    Hi Daniel,
    Thanks for your reply.
    I had a look at the thread that you suggested and I'm not sure if that would solve the problem I was having, the option box was checked as default. I think my issue has to do with the limitations of the different LV functions when targeting a FPGA device.
    I have decided to take another route anyway, it seems that trying to compile a large array (even a 1D boolean array) for a FPGA target both takes a long time and also a lot of FPGA resources.
    Thanks again for your reply,
    Regards,
    Michael.

  • Parsing a string to a boolean array

    I got to pase a string to a boolean array, this code works for me, but I don't like it. Here Is
    public static boolean[] NumeroToBoolArray( int Numero )
    //Here I got the number in Binary Format, then reverse it
    String temp = new StringBuffer(Integer.toBinaryString(Numero)).reverse().toString();
    //Now I create a boolean array of temp.length
    boolean[] data_bool = new boolean[temp.length()];
    for (int pp = 0; pp < data_bool.length ; pp++)
    //And now assign the value to data_bool
    data_bool[pp] = String.valueOf(Character.digit(temp.charAt(pp), 10)).equalsIgnoreCase("1");
    return data_bool;
    Any idea or replacement for this function?
    Thanks

    data_bool[pp] = String.valueOf(Character.digit(temp.charAt(pp),10)).equalsIgnoreCase("1");becomes
    data_bool[pp] = temp.charAt(pp) == '1';

  • How do I count the number of 1's in a Boolean Array??

    I have a boolean array of 1000 0's or 1's and want to know the number of times this array is in the 1 position.
    The array is repeated within a structure and i need a number for each iteration to be passed onto the next (using a shift register).
    Never really used boolean arrays before so none of the standard things i use seem to work?
    Thanks in Advance.
    Ross

    Ross,
    The quick easy way is to convert the boolean array to a 0-1 array from the boolean menu, then sum the array using "sum array elements" from the numerical menu.
    Bruce
    Bruce Ammons
    Ammons Engineering

  • How can I add a True value to position (0,1) in a 2*2 boolean array?

    Hi everyone, let's say I have a 2*2 boolean array (Indicator), how can I let the element in position (0,1) for example be true??
    Thanks.
    T. A.
    Solved!
    Go to Solution.

    Hi T.A.,
    1) ReplaceArraySubset with indices 0&1 and element=TRUE.
    2) OR Array with an array constant of [(F,T),(F,F)]
    Message Edited by GerdW on 11-23-2009 03:22 PM
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • How to change the elements number in Number To Boolean Array Function VI

    Hi, I'm working on using the DAQ digital output to control the digital input of a DAC, and I used the Number To Boolean Array Function. VI to convert the number to a Boolean array. The maximum number should be 4096, therefore it should consist of 12 elements.
    For the description of the VI, it says Boolean array returns an array of 8, 16, 32, or 64 elements, depending on the number of bits in the integer. Therefore, I change the number of the channels in task to 16, but it still doesn't work. Any suggesitions are greatly appreciated.
    Thanks!
    Possible reason(s):
    Write cannot be performed, because the number of channels in the data does not match the number of channels in the task.
    When writing, supply data for all channels in the task. Alternatively, modify the task to contain the same number of channels as the data written.
    Number of Channels in Task: 12
    Number of Channels in Data&colon; 32
    Task Name: _unnamedTask<1B>
    Solved!
    Go to Solution.
    Attachments:
    DAC test.vi ‏47 KB

    Once you have the boolean array, you can resize it using array tools. For example you can use "reshape array" with a lenght of 12 to trim the array to 12 booleans elements (you can also use array subset).
    LabVIEW Champion . Do more with less code and in less time .

  • Programmat​ically Cycle through Boolean Array

    I'm using an Agilent 34970 with a 34901A switch module. It has 16 switches going to two commons. The end function is to switch through all the sources to read resistance and voltage.
    The driver and sample vi from the NI idnet were used as a base for my vi.
    The sample vi uses a user-controlled 2-d boolean array (false = open). I want to be able to programmatically cycle through all the switches, but I don't know how to tell the dimensions of array I have.
    I would like to go through every element of the 2nd raw for each element in the 1st row. If I could programmatically ignore elements #9, 10, 19, and 20, that would be helpful too.
    Thanks for any help!
    Attachments:
    Agilent 34970 Advanced Scan-2U test-1.vi ‏31 KB
    Agilent 34970 Switch-2U test.vi ‏23 KB

    CelerityEDS wrote:
    Is there a way to determine what's in the vi front panel right now? I cannot determine if it's 2x10 or 10x2... There are no properties of the 2-d array that plainly tell me.
    There is "array size" which tells you the actual size of the 2D array.
    There are properties that tell you how many rows and columns are visible in the front panel array container.
    There are also properties that tell which element is currently scrolled to the top left corner.
    The size and index position of the front panel array control or indicator is not related to the actual array size. You can show only 2x2 elements of a 1000x1000 array or vice versa. if the container is too big, the extra elements are greyed. 
    LabVIEW Champion . Do more with less code and in less time .

  • How to address an cell in a boolean array

    Hello
    I am intersted in addessing a certain cell in a boolean array.
    Suppose I have a boolean array called bArr which is of length 10 and contains  values  of { T,T,F,F,F,F,T,F,T,F }
    and I want to send to an "AND" gate bArr[0] together with  "TRUE" constant.
    How do I address the cell bArr[0] or any other cell in bArr ???
    Lavi
    P.S: I am using LabVIEW 8.0 

    Hi Lavi,
    You could ve easily given me 5 stars atleast !
    - Partha
    LabVIEW - Wires that catch bugs!

  • Use boolean array to perform set operations

    I am currently taking a computer science class that uses Java as the language of choice. I have no prior experience with Java. We have a homework assignment in which we are supposed to use a boolean array to implement set operations. We have to create a method that inserts an integer into the array, another that deletes an integer element, and several others. I am confused as how to do this with integers, as it is a boolean array. The datr for this class is:
    private boolean base[];The constructor is:
    public largeset(int size){ }We then have to create a method that inserts an integer into the array:
    public void insert(int i){ }And one that deletes the element:
    public void delete(int i) { }I am unsure how to do this using a boolean array. If it were an integer array I would not have any trouble, but I get an error when trying to insert/delete an integer from the boolean array. Can anyone help point me in the right direction? I would prefer advice only, not the actual code, as this is a homework assignment, and I would like to create the code myself so I actually know what I am doing. Thanks.

    This is the assignment exactly as posted on the course website:
    In this homework, we will use a boolean array to implement various set operations. Please create a class called largeset that supports set operations of any number of elements. The data of this class is
    private boolean[] base;The constructor of the class is
    public largeset(int size);  // create a boolean array of size "size" and store it in "base"The methods of the class are:
    public void insert(int i);  // insert number i into the current set, where 0 <= i < base.length
    public void delete(int i);  // delete number i from the current set, where 0 <= i < base.length
    public boolean member(int i); // test if i is in the set
    public largeset union(largeset B); // return the union of two sets
    public largeset interset(largeset B); // return the intersection of two sets
    public largeset subtract(largeset B); // return the subtraction of two sets
    public largeset complement(); // return the complement of the current set
    public boolean subset(largeset B); // test if the current set is a subset of set B
    public int cardinality();  // return the number of elements in the current set
    public String toString();  // return a string which is a printing of the current setThen create another class called testset that uses the largeset class. At first, please create the following two sets:
    X = { 1, 3, 5, 7, ..., 999 };
    Y = { 9, 18, 27, 36, ..., 999 };
    Please perform the following tests:
    1. display the cardinalities of X and Y, respectively.
    2. display the content of substraction of Y by X.
    3. display the square root of the sum of all the elements of X (Math.sqrt(x) will return the square root of x in double type).
    4. For every pair of distinct elements x and y in Y, compute the sum of (Math.max(x, y) - Math.min(x, y)) (or equivalently, Math.abs(x - y)), and report this sum.

  • Store boolean array as text file

    Hi there
    I'm having some trouble storinge a 25x25 2D array of booleans in a text file.
    First I make the 2D array a 1D array, and then I change it to a number, but here something already goes wrong, not the full number is stored, presumably because the array is this big?
    Any help will be much appreciated!
    Solved!
    Go to Solution.
    Attachments:
    Store 2D boolean array LV10.vi ‏17 KB

    You can also convert the 2D boolean array into 1D array of numbers and save to text file and then read back to load the original 2D Boolean array
    The best solution is the one you find it by yourself
    Attachments:
    2D Boolean to String.vi ‏16 KB

  • How to assign values for boolean array in LabVIEW?

    I want assign values for boolean array.Iam not able to do that.For each boolen i want to assign each value.Plz help me......
    Please Mark the solution as accepted if your problem is solved and donate kudoes
    Solved!
    Go to Solution.

    Hi agar,
    values in an array are "assigned" by building an array (using BuildArray) or by replacing values in an existing array (ReplaceArraySubset)!
    Good starting point could be this...
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Control of 96 switches independently with a 2d Boolean array

    I have an application that I need to change the state of individual switches in a 2d Boolean array.
    Does anyone have a simple solution???

    Replace Array Subset.

  • Control caption names for elements of a boolean array

    Howdy, folks
    I'm trying to control the caption names for each element of a boolean array. Can't seem to find the appropriate property node which will index each element to each element in the FOR loop. Please see the attached.
    Sure appreciate the help,
    Hunter

    Creating a text array lined up next to it is of course the simplest solution. If the labels are always fixed, you could just use plain label test on the front panel.
    Here's an example how you can change the labels inside an array of cluster as I mentioned above. (LabVIEW 7.1).
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    Selector.vi ‏34 KB

  • How to change boolean text of boolean array programatically?

    Hi,
    I have a boolean array. How to change the boolean text programatically for all the array element? 
    Thanks a lot for any help.
    Anne

    Anne Zuo wrote:
    It works with one boolean, BUT doesn't work to  boolean array. 
    "Doesn't work" is not specific enough. In what way does it not work (no such property, broken wire, boolean text does not actually change, ...etc)? 
    Yes, it works just fine.
    RIght-click on one of the array elements and select "create ...property node...boolean text...text"
    LabVIEW Champion . Do more with less code and in less time .

  • Change spacing between "LED's" in 2D boolean array indicator

    Hi All
    In my application I am tring to mimic a LED matrix sign using a 2D boolean array indicator. Its obvious enough how to chage the size of the LED's in the array indicator but I would also like to reduce  the spacing between LED's as I have very small leds with two much space between them!!
    Could someone kindly send me an example or tell me waht steps to take using customize indicators function etc.
    Also can this be changed programatically using property nodes, so for instance i can resize the spacing to mimic LED signs with different LED densities?
    Many Thanks!
    Tristan

    Hi Tristan
    You could try customising the boolean in your array.  Right click on an element of your array, select Advanced->Customise....  You can then modify the appearance of the boolean to your requirements, using decorations for example to modify the spacing.
    You will be prompted to update your array with the modified version once you have finished your edits.
    Had a quick play, see attachments
    Hope this helps
    Steve
    There are 10 types of people in the world that understand binary, those that do and those that don't.
    Attachments:
    ModArray.vi ‏9 KB
    ModBoolean.ctl ‏6 KB

Maybe you are looking for