Документация Engee

Multiport Switch

Выбирает выходной сигнал на основе управляющего сигнала.

Multiport Switch

multiport switch

Index Vector

index vector

Описание

Блок Multiport Switch определяет, какой из нескольких входов в блок проходит на выход, в зависимости от значения сигнала на первом входе. Первый вход называется входом управления, а остальные — входами данных. Значение управляющего входа определяет, какие входные данные передаются на выход.

В таблице ниже указано, как блок интерпретирует управляющий сигнал и определяет, какой именно входной сигнал будет передан на выход.

Вход управления

Округление

Настройка нумерации портов данных

Поведение блока во время моделирования

Индексирование для выбора ввода данных

Условие выхода за диапазон

Целое значение

Нет

Zero-based contiguous

Нумерация с нуля

Сигнал на входе управления меньше 0 или больше, чем количество входов данных минус один.

One-based contiguous

Нумерация с единицы

Сигнал на входе управления меньше 1 или больше, чем количество входов данных.

Specify indices

Пользовательская нумерация

Сигнал на входе управления не соответствует ни одному номеру входа данных.

Нецелое значение

Блок усекает значение до целого числа путем округления в сторону нуля.

Zero-based contiguous

Нумерация с нуля

Округленное значение входного сигнала меньше 0 или больше количества вводов данных минус один.

One-based contiguous

Нумерация с единицы

Округленное значение входного сигнала меньше 1 или больше числа вводов данных.

Specify indices

Пользовательская нумерация

Округленное значение входного сигнала не соответствует ни одному номеру входа данных.

Multiport Switch, сконфигурированный как блок Index Vector

Index Vector является специальной конфигурацией блока Multiport Switch, в которой задается только один вход данных, а управляющий вход отсчитывается с нуля. Выход блока — это элемент входного вектора, индекс которого соответствует управляющему входу. Например, если входной вектор равен [18 15 17 10], и управляющий вход равен 3, то элемент вектора с номером 3 (начиная с нуля), равный 10, становится значением выходного сигнала.

Чтобы сконфигурировать блок Multiport Switch для работы в качестве блока Index Vector, установите значение параметра Number of data ports на 1 и значение параметра Data port order на Zero-based contiguous.

Как блок обрабатывает ввод управления вне диапазона

Если управляющий сигнал целочисленный, и его значение меньше, чем typemax(Int), то оно принимается вышедшим за пределы допустимого диапазона, если оно не соответствует ни одному номеру входа данных. Если управляющий сигнал не является целочисленным, то его значение принимается вышедшим за пределы допустимого диапазона, если округленное значение не соответствует ни одному индексу порта данных. В обоих случаях поведение блока зависит от настроек Data port for default case и Diagnostic for default case.

Если значение управляющего сигнала больше, чем typemax(Int), блок преобразует входное значение в целое число.

Поведение при моделировании

Следующее поведение применяется только к симуляции модели.

Data port for default case

Diagnostic for default case

Нет

Ошибка

Last data port

Используется последний вход данных и не появляется предупреждений или ошибок.

Появляется сообщение об ошибке, и моделирование останавливается.

Additional data port

Используется дополнительный вход данных с меткой * и не появляется предупреждений или ошибок.

Появляется сообщение об ошибке, и моделирование останавливается.

Поведение при генерации кода

Следующее поведение относится к генерации кода из модели.

Data port for default case

Diagnostic for default case

Нет

Ошибка

Last data port

Используется последний вход данных.

Используется последний вход данных.

Additional data port

Используется дополнительный вход данных с меткой *.

Используется дополнительный вход данных с меткой *.

Правила, определяющие поведение блока

Количество входов данных задается параметром Number of data ports.

  • Если задать Number of data ports равным 1, то блок ведет себя как блок Selector, а не как Multiport Switch.

  • Если задать Number of data ports больше 1, то блок ведет себя как Multiport Switch. Выход блока представляет входной сигнал, номер которого соответствует значению управляющего входа. Если хотя бы один из входных сигналов является вектором, выход блока является вектором. В этом случае блок расширяет любые скалярные входные параметры до векторов.

  • Если все входные сигналы являются скалярными, выходной сигнал также скалярный.

Допущения и ограничения

  1. Если входные сигналы блока являются шинами, то их структура на различных портах (имена, типы и размерности) должна полностью совпадать. Чтобы выходная шина имела одну и ту же структуру независимо от того, какую входную шину выбирает блок, запрещается смешивать шины с обычными сигналами.

  2. Для работы с шинами значение параметра Number of data ports должно быть не меньше 2.

  3. Для шин управляющий сигнал должен быть скаляром.

Порты

Вход

Port_1 — управляющий сигнал
скаляр | вектор | матрица

Управляющий сигнал, определяющий, какой из входных сигналов проходит на выход.

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

1 — первый входной сигнал
скаляр | вектор | матрица | шина

Первый вход данных в виде скаляра, вектора, матрицы, массива или шины.

  • Если все входные сигналы — скаляры, то выходной сигнал также является скаляром.

  • Если хотя бы один из входных сигналов является вектором, выход блока является вектором. В этом случае блок расширяет любые скалярные входные сигналы до векторов.

Зависимости

Для работы с шинами значение параметра Number of data ports должно быть ≥ 2.

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

2 — второй входной сигнал
скаляр | вектор | матрица | шина

Второй вход данных в виде скаляра, вектора, матрицы, массива или шины.

  • Если все входные сигналы — скаляры, то выходной сигнал также является скаляром.

  • Если хотя бы один из входных сигналов является вектором, выход блока является вектором. В этом случае блок расширяет любые скалярные входные сигналы до векторов.

Зависимости

Для работы с шинами значение параметра Number of data ports должно быть ≥ 2.

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

N — n-й входной сигнал
скаляр | вектор | матрица | шина

N-ный вход данных в виде скаляра, вектора, матрицы, массива или шины.

  • Если все входные сигналы — скаляры, то выходной сигнал также является скаляром.

  • Если хотя бы один из входных сигналов является вектором, выход блока является вектором. В этом случае блок расширяет любые скалярные входные сигналы до векторов.

Зависимости

Для работы с шинами значение параметра Number of data ports должно быть ≥ 2.

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

* — вход данных для значения управляющего сигнала вне диапазона
скаляр | вектор | матрица | шина

Порт входных данных для значения управляющего сигнала вне диапазона в виде скаляра, вектора, матрицы, массива или шины.

Все сигналы на входах данных могут иметь любой тип данных, который поддерживает Engee.

Зависимости

Чтобы создать дополнительный порт входных данных для значения управляющего сигнала вне диапазона, установите для параметра Data port for default case значение Additional data port. Когда вы устанавливаете для параметра Data port for default case значение Last data port, блок использует последний порт данных для вывода, когда значение управляющего сигнала не соответствует каким-либо индексам порта данных.

Для работы с шинами значение параметра Number of data ports должно быть ≥ 2.

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

Выход

Port_1 — выбранный входной сигнал, соответствующий значению управляющего сигнала
скаляр | вектор | матрица | шина

Блок выводит один из входных сигналов, выбранный в соответствии со значением управляющего сигнала. Выходной сигнал имеет те же размеры, что и соответствующие входному. Тип данных на выходе — это тип данных входного порта, который требует наибольшего объема памяти.

Зависимости

Для работы с шинами значение параметра Number of data ports должно быть ≥ 2.

Типы данных: Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

Параметры

Data port order — тип нумерации портов данных
One-based contiguous | Zero-based contiguous | Specify indices

Задает тип нумерации портов данных.

  • Zero-based contiguous — блок начинает отсчет входных портов с нуля. Это значение по умолчанию для блока Index Vector.

  • One-based contiguous — блок начинает отсчет входных портов с единицы. Это значение по умолчанию для блока Multiport Switch.

  • Specify indices — блок использует произвольную нумерацию портов данных.

Зависимости

  • Выбор Zero-based contiguous или One-based contiguous включает параметр Number of data ports.

  • Выбор Specify indices включает параметр Data port indices.

Программное использование

Параметр блока

DataPortOrder

Значение

Zero-based contiguous | One-based contiguous | Specify indices

По умолчанию

One-based contiguous (Multiport Switch) | Zero-based contiguous (Index Vector)

Number of data ports — количество портов ввода данных
1 | 3 | целое число от 1 до 65535

Задает количество портов данных. Общее количество входных портов — это число, которое вы задаете, плюс один для входного порта управляющего сигнала и плюс еще один, если вы устанавливаете для Data port for default case значение Additional data port.

Зависимости

Чтобы использовать этот параметр, установите для параметра Data port order значение Zero-based contiguous или One-based contiguous.

Программное использование

Параметр блока

Inputs

Значение

Integer between 1 and 65536

По умолчанию

3 (Multiport Switch) |1 (Index Vector)

Data port indices — массив индексов для портов данных
[1,2,3] (по умолчанию) | массив индексов

Задает массив индексов входов данных. Значок блока изменится, чтобы соответствовать указанным вами индексам порта данных.

Зависимости

Параметр доступен, если для Data port order установлено значение Specify indices.

Программное использование

Параметр блока

DataPortIndices

Значение

[1,2,3] | массив индексов

По умолчанию

[1,2,3]

Data port for default case — входной порт в случае значения управляющего сигнала вне диапазона
Last data port (по умолчанию) | Additional data port

Определяет, использовать ли последний порт данных в случае значения управляющего сигнала вне диапазона или использовать дополнительный порт. Звездочка (*) рядом с именем порта указывает порт, который использует блок, когда значение управляющего входа не соответствует ни одному индексу порта данных.

  • Last data port — блок использует последний порт данных для вывода, когда значение управляющего сигнала не совпадает ни с одним индексом порта данных.

  • Additional data port — блок использует дополнительный порт данных для вывода, когда значение управляющего сигнала не соответствует ни одному индексу порта данных.

Если вы установите для этого параметра значение Additional data port и Number of data ports равно 3, то количество входных портов в блоке будет равно 5. Первый вход — это порт управления, следующие три входа — это порты данных, а пятый вход — это порт по умолчанию в случае значения управляющего сигнала вне диапазона.
Программное использование

Параметр блока

DataPortForDefault

Значение

Last data port | Additional data port

По умолчанию

Last data port

Diagnostic for default case — диагностическое действие
Error (по умолчанию) | None

Определяет диагностическое действие, которое следует предпринять, если значение порта управления не соответствует ни одному из индексов порта данных. Варианты включают:

  • None — система не предпринимает никаких действий.

  • Error — симуляция останавливается и выводится ошибка. В этом случае Data port for default case используется только для генерации кода, а не моделирования.

Программное использование

Параметр блока

DiagnosticForDefault

Значения

None | Error

По умолчанию

Error

Signal Attributes

Output data type — тип выходных данных
Inherit: auto (по умолчанию) | Float64 | Float32 | Int8 | UInt8 | Int16 | UInt16 | Int32 | UInt32 | Int64 | UInt64 | Int128 | UInt128 | Fixed-point

Укажите тип выходных данных. Можно задать:

  • Наследование типа данных Inherit: auto.

  • Встроенный тип данных, например, Float32.

  • Тип данных с фикисрованной точкой Fixed-point.

Программное использование

Параметр блока

OutDataTypeStr

Значения

Inherit: auto | Float64 | Float32 | Int8 | UInt8 | Int16 | UInt16 | Int32 | UInt32 | Int64 | UInt64 | Int128 | UInt128 | Fixed-point

По умолчанию

Inherit: auto

Output fixed-point type — тип выходных данных с фиксированной точкой
Fixed{Int16, 0} (по умолчанию) | описание типа данных с фиксированной точкой

Укажите тип выходных данных с фиксированной точкой.

Зависимости

Этот параметр появляется, когда для параметра Output data type выбрано значение Fixed-point.

Программное использование

Параметр блока

OutDataTypeStrFixed

Значения

описание типа данных с фиксированной точкой

По умолчанию

Fixed{Int16, 0}

Integer rounding mode — режим округления для операций с фиксированной точкой
Floor (по умолчанию) | Ceiling | Convergent | Nearest | Round | Zero

Выберите режим округления для операций с фиксированной точкой. Вы можете выбрать:

  • Floor — округляет как положительные, так и отрицательные числа в меньшую сторону (в сторону отрицательной бесконечности).

  • Ceiling — округляет как положительные, так и отрицательные числа в большую сторону (в сторону положительной бесконечности).

  • Convergent — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, число округляется до ближайшего четного целого числа.

  • Nearest — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, число округляется в большую сторону (в сторону положительной бесконечности).

  • Round — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, положительные числа округляются в большую сторону (в сторону положительной бесконечности), а отрицательные – в меньшую (в сторону отрицательной бесконечности).

  • Zero — округляет число в сторону нуля.

Параметры блока всегда округляют до ближайшего представимого значения.

Программное использование

Параметр блока

RndMeth

Значения

Ceiling | Convergent | Floor | Nearest | Round | Zero

По умолчанию

Floor

Saturate on integer overflow — насыщение до целого при переполнении
выключено (по умолчанию) | включено

Флажок, при установке которого используется арифметика насыщения для целых чисел и чисел с фиксированной точкой: при переполнении результат автоматически заменяется максимально возможным (по модулю) для типа данных значением.

Действие Обоснование Влияние на переполнение Пример

Флажок Saturate on integer overflow установлен (включен).

Для вашей модели возможно переполнение, и вы хотите, чтобы в сгенерированном коде была явная защита от переполнения.

При переполнении результат автоматически заменяется максимально возможным (по модулю) для типа данных значением.

Максимальное значение, которое может представлять тип данных Int8 (знаковое, 8-битное целое), равно 127.

Любой результат операции с блоком, превышающий это максимальное значение, приводит к переполнению 8-битного целого числа. При установленном флажке выходной сигнал блока насыщается до 127. Аналогично, выходной сигнал блока насыщается при минимальном выходном значении -128.

Флажок Saturate on integer overflow не установлен (выключен).

Вы хотите оптимизировать эффективность вашего сгенерированного кода.

Вы хотите избежать чрезмерного определения того, как блок обрабатывает сигналы, находящиеся вне диапазона.

Переполнения переносятся в соответствующее значение, которое может быть представлено типом данных.

Максимальное значение, которое может представлять тип данных Int8 (знаковое, 8-битное целое), равно 127.

Любой результат операции с блоком, превышающий это максимальное значение, приводит к переполнению 8-битного целого числа. Если флажок снят, программное обеспечение интерпретирует значение, вызывающее переполнение, как Int8, что может привести к непреднамеренному результату. Например, результат блока 130 (двоичный код 1000 0010), выраженный как Int8, равен -126.

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

Программное использование

Параметр блока

SaturateOnIntegerOverflow

Значения

выключено | включено

По умолчанию

выключено

Require all data port inputs to have the same data type — требование от портов данных иметь один и тот же тип данных
выключено (по умолчанию) | включено

Выберите для требования, чтобы все вводы данных имели один и тот же тип данных.

Программное использование

Параметр блока

InputSameDT

Значение

выключено | включено

По умолчанию

выключено

Дополнительные возможности

Генерация Си кода: Да