Сгенерируйте действительный или объедините синусоидальные сигналы — оптимизированный для генерации HDL-кода
Поддержка HDL DSP System Toolbox / Операции Сигнала
Поддержка HDL DSP System Toolbox / источники
Блок NCO HDL Optimized генерирует действительный, или объедините синусоидальные сигналы при обеспечении благоприятных для оборудования управляющих сигналов.
Генератор с программным управлением (NCO) накапливает шаг фазы и использует квантованный выход аккумулятора как индекс к интерполяционной таблице, которая содержит значения синусоиды. Переносить типов данных аккумулятора и квантизатора фиксированной точки обеспечивает периодичность синусоиды, и квантование уменьшает необходимый размер таблицы для данного разрешения частоты.
Для примера того, как сгенерировать синусоиду с помощью блока NCO HDL Optimized, смотрите, Генерируют Sine wave. Для получения дополнительной информации о настройке и реализации, обратитесь к разделу Algorithms.
Блок также обеспечивает эти функции:
Дополнительный основанный на системе координат выход.
Опция сжатия интерполяционной таблицы, чтобы уменьшать размер интерполяционной таблицы. Это сжатие приводит меньше чем к одной потере LSB в точности. Смотрите Сжатие Интерполяционной таблицы для получения дополнительной информации.
Дополнительный входной порт для внешнего dither.
Дополнительный порт сброса, который сбрасывает аккумулятор фазы к его начальному значению.
Дополнительный выходной порт для текущей фазы NCO.
Примечание
Этот блок появляется в библиотеках Sources с набором параметров Phase increment source к Property
. Единственным входным портом является valid.
Этот блок появляется в библиотеках Signal Operations с набором параметров Phase increment source к Input port
. Эта настройка показывает дополнительному входному порту inc.
Этот значок показывает дополнительные порты блока NCO HDL Optimized.
inc
— (Дополнительный) шаг фазыШаг фазы в виде скалярного целого числа. Блок бросает это значение, чтобы совпадать с размером слова аккумулятора.
double
и single
типы данных поддерживаются для симуляции, но не для генерации HDL-кода.
Чтобы включить этот порт, установите параметр Phase increment source на Input port
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixdt([],N,0)
offset
— Фаза возместила (дополнительный)Фаза возмещена в виде скалярного целого числа.
double
и single
типы данных поддерживаются для симуляции, но не для генерации HDL-кода.
Чтобы включить этот порт, установите параметр Phase offset source на Input port
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixdt([],N,0)
dither
— (Дополнительный) DitherРазмойтесь в виде целого числа или вектор-столбца целых чисел. Длина вектора должна равняться значению параметров Samples per frame.
double
и single
типы данных поддерживаются для симуляции, но не для генерации HDL-кода.
Чтобы включить этот порт, установите параметр Dither source на Input port
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixdt([],N,0)
valid
— Управляющий сигнал, который включает операцию NCOУправляющий сигнал, который включает операцию NCO в виде булева скаляра. Когда этим сигналом является 1
, блок постепенно увеличивает фазу и получает любые входные значения. Когда этим сигналом является 0
, блок содержит аккумулятор фазы и игнорирует любые входные значения.
Когда параметр Samples per frame больше 1
, это значение позволяет обработать выборок Samples per frame.
Типы данных: Boolean
reset accum
— Управляющий сигнал, который сбрасывает (дополнительный) аккумуляторУправляющий сигнал, который сбрасывает аккумулятор в виде булева скаляра. Когда этим сигналом является 1
, блок сбрасывает аккумулятор к своему начальному значению. Этот сигнал не сбрасывает выходные выборки в трубопроводе.
Чтобы включить этот порт, выберите параметр Enable accumulator reset input port.
Типы данных: Boolean
sin, cos, exp
— Сгенерированная форма волныСгенерированная форма волны, возвращенная как скаляр или как вектор-столбец с длиной, равняется значению параметров Samples per frame. Выход может быть одним портом, который возвращает sin или значения cos, один порт, который возвращает значения exp, представляющие cosine + j*sine
, или два порта, которые возвращают sin и значения cos, соответственно. Когда все входные значения являются фиксированной точкой, или все входные порты отключены, блок определяет выходной тип с помощью параметра Output data type. Когда любое входное значение является типом с плавающей точкой, блок игнорирует параметр Output data type. В этом случае блок возвращает форму волны как значения с плавающей точкой.
Типы данных с плавающей точкой поддерживаются для симуляции, но не для генерации HDL-кода.
По умолчанию этот выходной порт является синусоидой, sin. Метка порта и изменения формата на основе параметра Type of output signal.
phase
— Текущая фаза (дополнительного) NCOТекущая фаза NCO, возвращенного как скаляр или как вектор-столбец с длиной, равняется значению параметров Samples per frame. Фазой является выход квантованного аккумулятора со смещением и примененным шагом. Если квантование отключено, этот порт возвращает выходной параметр аккумулятора со смещением и примененным шагом.
Значения имеют тип fixdt(1,N,0)
, где N
значение параметров Number of quantizer accumulator bits. Если квантование отключено, то N
значение параметров Accumulator Word length. Если какое-либо входное значение является типом с плавающей точкой, блок возвращает phase как значение с плавающей точкой.
Типы данных с плавающей точкой поддерживаются для симуляции, но не для генерации HDL-кода.
Чтобы включить этот порт, выберите параметр Enable phase port.
Типы данных: single
| double
| fixdt(1,N,0)
valid
— Управляющий сигнал, который указывает на валидность выходных данныхУправляющий сигнал, который указывает на валидность выходных данных, возвратился как булев скаляр. Когда выходом valid является 1
, значения на sin, cos, exp и портах phase допустимы. Когда выходом valid является 0
, значения на выходных портах не допустимы.
Когда параметр Samples per frame больше 1
, этот сигнал указывает на валидность всех элементов в выходном векторе.
Типы данных: Boolean
Примечание
Этот блок поддерживает double
и single
введите для симуляции, но не для генерации HDL-кода. Когда все входные значения являются фиксированной точкой, или все входные порты отключены, блок определяет выходной тип с помощью параметра Output data type. Когда любое входное значение является типом с плавающей точкой, блок игнорирует параметр Output data type. В этом случае блок возвращает форму волны и дополнительный phase как значения с плавающей точкой.
Чтобы использовать тип данных Fixed-Point Designer™ заменяют функцию, можно получить double
выходное значение путем применения double
входные данные к одному из дополнительных портов.
Phase increment source
— Источник шага фазыInput port
(значение по умолчанию) | Property
Можно установить шаг фазы с входным портом или путем ввода значения для параметра. Если вы выбираете Property
, параметр Phase increment, кажется, для вас вводит значение. Если вы выбираете Input port
, порт inc появляется на блоке.
Phase increment
— Шаг фазы для сгенерированной формы волны
(значение по умолчанию) | целое числоШаг фазы для сгенерированного форма волны в виде целого числа. Блок бросает это значение, чтобы совпадать с размером слова аккумулятора.
Чтобы включить этот параметр, установите параметр Phase increment source на Property
.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fixdt([],N,0)
Phase offset source
— Источник фазы возмещенInput port
(значение по умолчанию) | Property
Можно установить смещение фазы с входным портом или путем ввода значения для параметра. Если вы выбираете Property
, параметр Phase offset, кажется, для вас вводит значение. Если вы выбираете Input port
, порт offset появляется на блоке.
Phase offset
— Фаза возмещена для сгенерированной формы волны
(значение по умолчанию) | целое числоФаза возмещена для сгенерированной формы волны в виде целого числа.
Чтобы включить этот параметр, установите параметр Phase offset source на Property
.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fixdt([],N,0)
Dither source
— Источник количества битов ditherProperty
(значение по умолчанию) | Input port
| None
Можно установить dither от входного порта или от параметра. Если вы выбираете Property
, параметр Number of dither bits появляется. Если вы выбираете Input port
, порт появляется на блоке. Если вы выбираете None
, блок не добавляет dither.
Number of dither bits
— Биты раньше описывали dither
(значение по умолчанию) | положительное целое числоКоличество битов dither в виде положительного целого числа.
Чтобы включить этот параметр, установите параметр Dither source на Property
.
Samples per frame
— Размер вектора для основанного на системе координат ввода и вывода
(значение по умолчанию) | положительное целое числоКогда вы устанавливаете это значение к 1
, блок имеет скалярный ввод и вывод. Когда это значение больше 1
, порт dither ожидает вектор-столбец длины Samples per frame и sin, cos, exp, и порты phase возвращают вектор-столбцы длины Samples per frame.
Enable look up table compression method
— Сожмите интерполяционную таблицуoff
(значение по умолчанию) | on
По умолчанию блок реализует несжатую интерполяционную таблицу, и выход этого блока совпадает с выходом блока NCO. Когда вы включаете эту опцию, блок реализует сжатую интерполяционную таблицу. Сандерлендский метод сжатия уменьшает размер интерполяционной таблицы, теряя меньше чем один LSB точности. Свободный от паразитных составляющих динамический диапазон (SFDR) опытным путем на 1-3 дБ ниже, чем несжатый случай. Экономия средств на оборудование сжатой интерполяционной таблицы предусматривает пространство, чтобы улучшать производительность путем увеличения размера слова аккумулятора, и количество квантуют биты. Для детали метода сжатия см. Алгоритмы.
Enable accumulator reset input port
— Включите управляющий сигнал сбросаoff
(значение по умолчанию) | on
Выберите этот параметр, чтобы включить порт reset accum. Когда reset accum является 1
, блок сбрасывает аккумулятор к своему начальному значению.
Type of output signal
— Формат выходной формы волныSine
(значение по умолчанию) | Cosine
| Complex exponential
| Sine and cosine
Если вы выбираете Sine
или Cosine
, блок показывает применимый порт, sin или cos. Если вы выбираете Complex exponential
, выход имеет форму cosine + j*sine
и порт помечен exp. Если вы выбираете Sine and cosine
, блок показывает два порта, sin и cos.
Enable phase port
— Выведите текущую фазуoff
(значение по умолчанию) | on
Выберите этот параметр, чтобы возвратить текущую фазу NCO на порте phase. Фазой является выход квантованного аккумулятора со смещением и примененным шагом. Если квантование отключено, этот порт возвращает выходной параметр аккумулятора со смещением и примененным шагом.
Rounding Mode
— Режим Rounding для операций фиксированной точкиFloor
(значение по умолчанию)Режим Rounding для операций фиксированной точки. Rounding Mode является параметром только для чтения со значением Floor
.
Overflow mode
— Режим переполнения для операций фиксированной точкиWrap
(значение по умолчанию)Режим переполнения для операций фиксированной точки. Overflow mode является параметром только для чтения. Числа фиксированной точки повторяются на переполнении.
Accumulator Data Type
— Тип данных аккумулятораBinary point scaling
(значение по умолчанию)Описание типов данных аккумулятора. Этот параметр только для чтения со значением Binary point scaling
. Блок задает тип данных с фиксированной точкой с помощью Accumulator Signed, Accumulator Word length и параметров Accumulator Fraction length.
Accumulator Signed
— Подписанный или формат данных аккумулятора без знакаSigned
(значение по умолчанию)Этот параметр только для чтения. Весь выход является подписанным форматом.
Accumulator Word length
— Размер слова аккумулятора
(значение по умолчанию) | целое числоМодули находятся в битах. Это значение должно включать знаковый бит.
Если вы очищаете параметр Quantize phase, то Accumulator word length определяет размер LUT. Для генерации HDL-кода размер LUT должен быть между 2 и 217 записи. Когда вы выбираете Enable look up table compression method, этот параметр должен быть целым числом в области значений [5,21]. Когда вы очищаете Enable look up table compression method, этот параметр должен быть целым числом в области значений [3,19]. Для получения дополнительной информации о том, как этот параметр влияет на размер LUT, смотрите раздел Algorithms.
Когда вы выбираете параметр Quantize phase, нет никакого предела значению параметров Accumulator word length.
Accumulator Fraction length
— Длина части аккумулятора
(значение по умолчанию) | целое числоЭтот параметр только для чтения. Длина части аккумулятора является нулевыми битами.
Аккумулятор работает с целыми числами. Если шагом фазы является fixdt
введите с дробной частью, блок возвращает ошибку.
Quantize phase
— Квантуйте накопленную фазуoff
(значение по умолчанию) | on
Когда вы выбираете Quantize phase, блок квантует результат аккумулятора фазы к фиксированной битной ширине. Блок использует это квантованное значение, чтобы выбрать значение формы волны из интерполяционной таблицы. Квантование выхода аккумулятора фазы позволяет вам уменьшать размер интерполяционной таблицы, не понижая разрешение частоты. Выберите размер интерполяционной таблицы при помощи параметра Number of quantizer accumulator bits.
Когда вы очищаете Quantize phase, блок использует полное значение аккумулятора в качестве адреса интерполяционной таблицы.
Number of quantizer accumulator bits
— Количество двоичных разрядов аккумулятора квантизатора
(значение по умолчанию) | целое числоКоличество двоичных разрядов аккумулятора квантизатора в виде целочисленного скаляра меньше, чем размер слова аккумулятора. Для генерации HDL-кода это значение параметров должно привести к размеру LUT между 2 и 217 записи. Когда вы выбираете Enable look up table compression method, этот параметр должен быть целым числом в области значений [5,21]. Когда вы очищаете Enable look up table compression method, этот параметр должен быть целым числом в области значений [3,19]. Для получения дополнительной информации о том, как этот параметр влияет на размер LUT, смотрите раздел Algorithms.
Чтобы включить этот параметр, выберите параметр Quantize phase.
Output Data Type
— Тип выходных данныхBinary point scaling
(значение по умолчанию) | double
| single
Задайте тип данных для sin, cos и портов exp. Этот параметр проигнорирован, если какой-либо вход имеет тип с плавающей точкой. В этом случае тип выходных данных с плавающей точкой.
Если вы выбираете Binary point scaling
, блок задает тип данных с фиксированной точкой с помощью Output Signed, Output Word length и параметров Output Fraction length.
Output Signed
— Подписанный или формат выходных данных без знакаSigned
(значение по умолчанию)Этот параметр только для чтения. Весь выход является подписанным форматом.
Output Word length
— Выведите размер слова
(значение по умолчанию) | целое числоМодули находятся в битах. Это значение должно включать знаковый бит.
Output Fraction length
— Выведите дробную длину
(значение по умолчанию) | целое числоМодули находятся в битах.
Разрешение частоты синусоиды зависит от размера аккумулятора. Учитывая шаг расчета, T s и желаемое выходное разрешение частоты Δf, вычисляют необходимый размер слова аккумулятора, N.
Для желаемой выходной частоты F o, вычислите phase increment.
Квантование выхода аккумулятора фазы позволяет вам уменьшать размер интерполяционной таблицы, не понижая разрешение частоты. Вычислите квантованный размер слова, чтобы достигнуть желаемого свободного от паразитных составляющих динамического диапазона (SFDR).
Смещение фазы и dither опционально добавляются на этапе аккумулятора. Для желаемого смещения фазы (в радианах) выходной формы волны, вычислите значение phase offset, которое блок добавляет в аккумуляторе.
Реализация NCO зависит от того, выбираете ли вы Enable look up table compression method.
Без сжатия интерполяционной таблицы блок использует ту же интерполяционную таблицу четверти синуса в качестве блока NCO. Размер LUT равняется 2Q-2Битами ×W, где Q является Number of quantizer accumulator bits и W, является Output word length.
Блок бросает значение шага фазы, чтобы совпадать с размером слова аккумулятора.
Если вы не включаете Quantize phase, то Q = N, где N является Accumulator Word length. Рассмотрите удар на ресурсы памяти средства моделирования и аппаратные ресурсы, когда вы выберете эти параметры.
Для примера того, как сгенерировать синусоиду с помощью блока NCO HDL Optimized, смотрите, Генерируют Sine wave.
Когда вы выбираете интерполяционную таблицу (LUT) сжатие, блок NCO HDL Optimized применяет Сандерлендский метод сжатия. Сандерлендские методы используют тригонометрические тождества, чтобы разделить каждую фазу синусоиды четверти на три компонента и описать его как:
Если фаза четверти синуса имеет Q-2
биты, затем компоненты фазы A и B перебрасываются парой слов длина LA =LB=ceil((Q-2)/3)
. Компонент фазы C содержит остающиеся биты фазы. Если фаза имеет 12 битов, то фаза синуса четверти имеет 10 битов, и компоненты заданы как:
A, четыре старших значащих бита
B, следующие четыре бита
C, остающиеся два младших значащих бита
Учитывая относительные размеры A, B, и C, уравнение может быть аппроксимировано:
Блок NCO HDL Optimized реализует это уравнение с одним LUT для и один LUT для . Второй термин является прекрасным поправочным коэффициентом, который можно обрезать до меньшего количества битов, не теряя точность. Поэтому второй LUT возвращает четырехбитный результат.
С размером аккумулятора по умолчанию 16 битов и значением по умолчанию квантовал фазу width 12 битов, LUTs используют 28×16 плюс 26×4 биты (4,5 Кбита). Для сравнения интерполяционная таблица четверти синуса без сжатия использует 210Биты ×16 (16 Кбит). Приближение сжатия с точностью до одного LSB, приводящего к ОСШ по крайней мере 60 дБ на выходе. См. [1].
Блок имеет два сигнала элемента управления вводом, (дополнительный) reset accum и valid, и один сигнал элемента управления выводом, valid. Когда reset accum является 1
, блок устанавливает аккумулятор фазы на свое начальное значение. Когда входом valid является 1
, блок постепенно увеличивает фазу и получает любые входные значения. Когда этим сигналом является 0
, блок содержит аккумулятор фазы и игнорирует любые входные значения. Когда сигналом выхода valid является 1
, значения на других выходных портах допустимы.
Задержка блока NCO HDL Optimized является шестью циклами.
Поведение изменяется в R2020a
В предыдущих релизах порт входа validIn блока NCO HDL Optimized был дополнительным. Это теперь требуется и переименовало valid. Если вы не используете никакие другие входные порты, блок использует сигнал valid в качестве разрешать сигнала.
Поведение изменяется в R2020a
Выходная форма волны, возвращенная во входные значения с плавающей точкой, изменилась. Выходная форма волны теперь соответствует, который возвратился из тех же входных значений, заданных в фиксированных точках.
До R2020a, при использовании входных типов с плавающей точкой, блок NCO HDL Optimized не квантовал фазу внутренне. Блок ожидал шаг фазы с плавающей точкой и входные параметры смещения фазы, заданные в радианах. Теперь блок квантует фазу внутренне, и необходимо задать входной шаг фазы и смещение в терминах квантованного размера, и для входных типов и для фиксированной точки с плавающей точкой.
Например, до R2020a, для NCO HDL с плавающей точкой, чтобы сгенерировать выходные выборки с желаемой выходной частотой F 0 и демонстрационной частотой F s, необходимо было задать шаг фазы как 2π (F 0/Fs) и смещение фазы как π/2.
Начиная в R2020a, необходимо задать шаг фазы и смещение фазы в терминах квантованного размера, N. Эти входные значения совпадают с входными значениями, которые вы используете с фиксированными точками. Задайте шаг фазы как (F 0×2N)/Fs и смещение фазы как (π/2) ×2N/2π, или 2N/4.
Поведение изменяется в R2020a
В предыдущих релизах вы могли выбрать из двух опций для параметра LUTRegisterResetType на диалоговом окне HDL Block Properties блока NCO HDL Optimized. Этими двумя опциями был default
, и none
. Начиная в R2020a, блок игнорирует установку параметра и использует none
для этого значения параметров. Эта опция не соединяет сигнал сброса с регистрами LUT. Эта настройка позволяет инструменту синтеза определить, реализовать ли интерполяционные таблицы с LUTs или BRAM.
[1] Cordesses, L., "Прямой цифровой синтез: Инструмент для Периодической Генерации Волны (Часть 1)". Журнал Обработки сигналов IEEE. Объем 21, Выпуск 4, июль 2004, стр 50–54.
Этот блок поддерживает генерацию кода C/C++ для Simulink® акселератор и быстрые режимы Accelerator и для генерации компонента DPI.
HDL Coder™ обеспечивает дополнительные параметры конфигурации, которые влияют на реализацию HDL и синтезируемую логику.
Этот блок имеет одну, архитектуру HDL по умолчанию.
ConstrainedOutputPipeline | Количество регистров, чтобы поместить при выходных параметрах путем перемещения существующих задержек в рамках проекта. Распределенная конвейеризация не перераспределяет эти регистры. |
InputPipeline | Количество входных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. |
OutputPipeline | Количество выходных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. |
Когда вы устанавливаете Dither source на Property
, блок добавляет случайный dither каждый цикл. Если вы генерируете модель валидации с этими настройками, предупреждение выведено. Случайная генерация внутреннего dither может вызвать несоответствия между моделями. Можно увеличить допуск на погрешность для сравнения валидации с учетом различия. Можно также отключить dither или установить Dither source на Input port
избегать этой проблемы.
Вы не можете использовать блок NCO HDL Optimized в Resettable Synchronous Subsystem (HDL Coder).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.