2015-07-26 4 views
1

У меня есть код сбора, выполняющийся на целевой цели CIRIO FPGA. Данные получены из узлов ввода-вывода и составлены в массив. Этот массив всегда должен быть одного размера, поэтому я проверяю его с помощью SubVI. Проблема в том, что я использую условно-отключенные структуры для замены кода acquision для разных целей с разными номерами каналов. Теперь компилятор жалуется, что он не может решить массив с фиксированным размером, который не является истинным, потому что он может быть легко подсчитан компилятором.Размер массива переменной LabVIEW в SubVIs на FPGA

Как мне написать свой ВПП, что он принимает массив переменных (во время компиляции)? Символ «размер массива» из массива palette также может это сделать. Как?

+0

Не могли бы вы опубликовать скриншот оскорбительного кода, пожалуйста? – Engineero

ответ

1

Вместо этого вы можете использовать таблицы Lookup, чтобы достичь своей цели. Или, если вам нужно отправить этот массив в RT vi, было бы более профессиональным использовать DMA FIFO. На стороне RT вы можете использовать метод опроса и читать как можно больше точек одновременно.

+0

Я использую DMA FIFO для отправки данных в RT, но сначала мне нужно проверить данные. Я должен посмотреть в таблицы поиска, но могут ли они использоваться с значениями FXP? – simonides

1

Короче говоря, это невозможно для стандартных матриц LabVIEW, поскольку размер должен быть установлен для компиляции (поскольку они в основном сводятся к проводам в чипе).

Есть два варианта, когда вы на самом деле нужен переменный размер:

  1. Простой и расточительное - Если есть разумная верхняя граница вы можете установить его на самой высокой и использовать логику для управления " конец". Это означает, что компиляция ресурсов для верхнего конца и, если она превышает 100 байтов, будет использовать много логики.

  2. Масштабируемость, но немного сложнее - Единственный способ добиться большого массива переменных размеров - использовать некоторые доступные опции памяти с добавленной логикой для определения размера. В зависимости от размера вы можете использовать таблицы поиска (LUT) или блокировать ОЗУ. Опять же, LUT используют логику быстро, поэтому ее следует использовать только для небольших массивов (не помню точный размер, но, возможно, < 500 байтов). Если вы не использовали его, вы можете найти начальное чтение на http://zone.ni.com/reference/en-XX/help/371599H-01/lvfpgaconcepts/fpga_storing_data/#Memory_Items

Так или иначе, вам придется каким-то образом передать ВПП размер массива, так что знает, как далеко в памяти готов, это будет должны просто быть другим вводом.

Чаще всего в LabVIEW FPGA большая часть обработки выполняется по данным по точкам, поэтому вы можете централизовать логику хранения, не передавая ее, но это зависит от характера алгоритма.

+0

Благодарим вас за сообщение, но они исправлены для компиляции, только компилятор не получает его. SubVI имеет переменный ввод для соответствия любому количеству элементов в массиве. И это можно было бы преобразовать в массив фиксированного размера во время компиляции, проверив входную форму провода. В настоящее время у меня есть три разных размера входных данных, но я хотел бы знать, как написать этот ВПП более общий, чтобы уменьшить общие изменения, если мне нужно также измерить другой узел. – simonides

+0

Я понимаю, что вы имеете в виду. Размер массива является свойством элемента управления, поэтому фиксированный размер не будет распространяться через границы ВПП, как вы сказали на уровне ВПП, это переменный размер. Технически вы правы, оно должно быть разрешимым во время компиляции, но я думаю, что это может быть ограничение того, как LabVIEW работает в этом случае. – jamesmc86