Управляемая подсистема While Iterator Subsystemпредставляет собой подсистему, которая выполняется неоднократно в течение одного такта моделирования. Количество повторений заранее не известно. Цикл прекращается, если значение логического сигнала на управляющем входе подсистемы станет равно FALSE. Основные свойства подсистемы задает итерационный блок While Iterator. Блок является аналогом оператора цикла while (do-while) языка программирования C.
Свойства While Iterator Subsystem определяются параметрами блокаWhile Iterator.Его параметры перечислены ниже.
Параметры:
1. Maximum number of iterations –Максимальное количество итераций. Если значение параметра равно -1 (минус один), то количество итераций не ограничивается.
2. While loop type(флажок)–Тип цикла. Выбирается из списка:
o while –Цикл while.
o do-while –Цикл do-while.
3. States when starting –Состояние подсистемы системы при следующем запуске. Значение параметра выбирается из списка:
o held –Использовать предыдущее состояние (последнее состояние когда система была активна).
o reset –Использовать начальное (исходное) состояние.
4. Show iteration number port –Отобразить на пиктограмме блока выходной порт, с которого снимается сигнал номера итерации.
5. Output data type –Тип данных выходного сигнала порта. Значение параметра выбирается из списка: int32, int16, int8и double.
Входной порт IC позволяет задать начальное значение сигнала прекращающего выполнение цикла while. При использовании цикла do-whileподсистема будет выполнена хотя бы один раз (поскольку проверка условия в этом случае производится в конце цикла).
На рис. 9.9.10 показан пример использованияWhile Iterator Subsystem. В примере выполняется накопление суммы значений с шагом равным 10. Выполнение цикла прекращается, когда величина суммы достигнет значения 100.
С-код, соответствующий алгоритму работыWhile Iterator Subsystem в приведенном примере выглядит следующим образом:
sum = 0; IC = 1; iteration_number = 0; cond = IC; while (cond != 0) { iteration_number = iteration_number + 1; sum = sum + sum_increment; if (sum > 100 OR iterations > max_iterations) cond = 0; }