Сгенерируйте действительный или объедините синусоидальные сигналы — оптимизированный для генерации HDL-кода
Поддержка HDL DSP System Toolbox / Операции Сигнала
Поддержка HDL DSP System Toolbox / источники
Блок NCO HDL Optimized генерирует действительный, или объедините синусоидальные сигналы при обеспечении благоприятных для оборудования управляющих сигналов. Блок использует то же накопление фазы и алгоритм интерполяционной таблицы, как реализовано в блоке NCO. Использование блока квантовало целочисленное накопление, чтобы создать сигнал синусоиды.
Блок NCO HDL Optimized обеспечивает эти функции:
Дополнительный основанный на системе координат выход.
Опция сжатия интерполяционной таблицы, чтобы уменьшать размер интерполяционной таблицы. Это сжатие приводит меньше чем к одной потере LSB в точности. Смотрите Сжатие Интерполяционной таблицы для получения дополнительной информации.
Дополнительный входной порт для внешнего dither.
Дополнительный порт сброса, который сбрасывает аккумулятор фазы к его начальному значению.
Дополнительный выходной порт для текущей фазы NCO.
Учитывая шаг расчета, T s и желаемое выходное разрешение частоты Δf, вычисляют необходимый размер аккумулятора при помощи .
Предположение, что ваша желаемая выходная частота F o намного ниже, чем частота Найквиста, можно определить приемлемое квантование при выходе аккумулятора при помощи приближения для шума на бит в дБ и желаемом свободном от паразитных составляющих динамическом диапазоне (SFDR). Квантованный размер слова, чтобы достигнуть заданного SFDR .
Для желаемой выходной частоты F o, вычислите phase increment при помощи , где Nacc является размером слова аккумулятора. Можно задать шаг фазы использование параметра или входного порта.
Учитывая желаемое смещение фазы (в радианах), вычислите входное значение phase offset при помощи . Можно задать смещение фазы с помощью параметра или входного порта.
Примечание
Этот блок появляется в библиотеках 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, этот параметр должен быть меньше чем или равен 17 битам для генерации HDL-кода. Это ограничение - то, потому что в неквантованном случае интерполяционная таблица значений синуса имеет 2AccumulatorWordLength-2 записи.
Accumulator Fraction length
— Длина части аккумулятора
(значение по умолчанию) | целое числоЭтот параметр только для чтения. Длина части аккумулятора является нулевыми битами.
Аккумулятор работает с целыми числами. Если шагом фазы является fixdt
введите с дробной частью, блок возвращает ошибку.
Quantize phase
— Квантуйте накопленную фазуoff
(значение по умолчанию) | on
Когда вы выбираете этот параметр, блок квантует результат аккумулятора фазы к фиксированной битной ширине. Это квантованное значение используется, чтобы выбрать значение формы волны из интерполяционной таблицы. Выберите разрешение интерполяционной таблицы при помощи параметра Number of quantizer accumulator bits.
Разрешение частоты NCO задано , где N является значением параметров Number of quantizer accumulator bits.
Когда вы очищаете этот параметр, блок использует полный тип данных аккумулятора в качестве адреса интерполяционной таблицы. В этом случае N является значением параметров Accumulator Word length.
Number of quantizer accumulator bits
— Количество двоичных разрядов аккумулятора квантизатора
(значение по умолчанию) | целое числоКоличество двоичных разрядов аккумулятора квантизатора в виде целочисленного скаляра, больше, чем 4 и меньше, чем размер слова аккумулятора. Этот параметр должен быть меньше чем или равен 17 битам для генерации HDL-кода. Интерполяционная таблица значений синуса имеет 2NumQuantizerAccumBits-2 записи.
Чтобы включить этот параметр, выберите параметр 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
— Выведите дробную длину
(значение по умолчанию) | целое числоМодули находятся в битах.
Реализация NCO зависит от того, выбираете ли вы Enable look up table compression method.
Без сжатия интерполяционной таблицы блок использует ту же интерполяционную таблицу четверти синуса в качестве блока NCO. Размер LUT 2Number квантизатора accumulator bits-2×Output word length биты.
Если вы не включаете Quantize phase, то Number of quantizer accumulator bits =Accumulator Word length. Рассмотрите удар на ресурсы памяти средства моделирования и аппаратные ресурсы, когда вы выберете эти параметры.
Когда вы выбираете интерполяционную таблицу (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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.