Сгенерируйте действительные или сложные синусоидальные сигналы - оптимизированные для генерации HDL-кода
DSP System Toolbox Поддержка HDL/Сигнальные операции
Поддержка/источники DSP System Toolbox HDL
Блок 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 (необязательно)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
- Шаг фазы для сгенерированной формы волны100
(по умолчанию) | целое числоШаг фазы для сгенерированной формы волны, заданный как целое число.
Чтобы включить этот параметр, установите параметр 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
- Смещение фазы для сгенерированной формы волны0
(по умолчанию) | целое числоСмещение фазы для сгенерированной формы волны, заданное в виде целого числа.
Чтобы включить этот параметр, установите параметр Phase offset source равным Property
.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fixdt([],N,0)
Dither source
- Источник количества сглаживаемых битProperty
(по умолчанию) | Input port
| None
Можно задать dither из входа порта или из параметра. Если вы выбираете Property
, появляется параметр Number of dither bits. Если вы выбираете Input port
порт появляется на блоке. Если вы выбираете None
блок не добавляет dither.
Number of dither bits
- Биты, используемые для выражения dither4
(по умолчанию) | положительное целое числоКоличество dither бит, заданное в виде положительного целого числа.
Чтобы включить этот параметр, установите параметр Dither source равным Property
.
Samples per frame
- Размер вектора для основанных на кадре входных и выходных входов1
(по умолчанию) | положительное целое числоКогда вы задаете это значение 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
- Режим округления для операций с фиксированной точкойFloor
(по умолчанию)Режим округления для операций с фиксированной точкой. 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
- размер слова аккумулятора16
(по умолчанию) | целое числоМодули указаны в битах. Это значение должно включать бит знака.
Если вы очищаете параметр Quantize phase, то Accumulator word length определяет размер LUT. Для генерации HDL-кода размер LUT должен быть от 2 до 217 записи. Когда вы выбираете Enable look up table compression method, этот параметр должен быть больше 4 и меньше 22. Когда вы очищаете Enable look up table compression method, этот параметр должен быть больше 2 и меньше 20. Для получения дополнительной информации о том, как этот параметр влияет на размер LUT, смотрите раздел «Алгоритмы».
Accumulator Fraction length
- Длина фракции аккумулятора0
(по умолчанию) | целое числоЭтот параметр доступен только для чтения. Длина дроби аккумулятора равна нулю битам.
Аккумулятор работает с целыми числами. Если шаг фазы fixdt
type с дробной частью, блок возвращает ошибку.
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
- Количество битов аккумулятора квантователя12
(по умолчанию) | целое числоКоличество двоичных разрядов аккумулятора квантования, заданное как целочисленный скаляр, меньше размер слова аккумулятора. Для генерации HDL-кода это значение параметров должно привести к размеру LUT между 2 и 217 записи. Когда вы выбираете Enable look up table compression method, этот параметр должен быть больше 4 и меньше 22. Когда вы очищаете Enable look up table compression method, этот параметр должен быть больше 2 и меньше 20. Для получения дополнительной информации о том, как этот параметр влияет на размер LUT, смотрите раздел «Алгоритмы».
Чтобы включить этот параметр, выберите параметр 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
- Выход слова16
(по умолчанию) | целое числоМодули указаны в битах. Это значение должно включать бит знака.
Output Fraction length
- Выход дроби14
(по умолчанию) | целое числоМодули указаны в битах.
Реализация NCO зависит от того, выберете ли вы Enable look up table compression method.
Без сжатия интерполяционной таблицы, блок использует ту же интерполяционную таблицу с четвертью синуса, что и NCO блок. Размер LUT равен 2Number of quantizer 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 бит и шириной квантованной фазы по умолчанию 12 бит, LUT используют 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, чтобы ВОЕННОСЛУЖАЩИЙ СЕРЖАНТСКОГО СОСТАВА HDL с плавающей запятой произвел выборки выхода с желаемой выходной частотой <reservedrangesplaceholder3> 0 и типовой частотой <reservedrangesplaceholder2> s, Вы должны были определить шаг фазы как 2π (F 0 / <reservedrangesplaceholder0> s) и смещение фазы как π/2.
Начиная с R2020a, вы должны задать шаг фазы и смещение фазы с точки зрения квантованного размера, N. Эти входные значения совпадают с входными значениями, которые вы используете с фиксированными точками. Задайте шаг фазы как (F 0 × 2N)/ F s, и смещение фазы как (в/2) × 2N/ 2, или 2N/4.
Поведение изменено в R2020a
В предыдущих релизах можно было выбрать из двух опций параметра LUTRegisterResetType в HDL Block Properties диалоговом окне блока NCO HDL Optimized. Две опции были default
, и none
. Начиная с R2020a, блок игнорирует настройку параметра и использует none
для этого значения параметров. Эта опция не соединяет сигнал сброса с регистрами LUT. Это строение позволяет инструменту синтеза определить, реализовывать ли интерполяционные таблицы с LUT или BRAM.
[1] Cordesses, L., «Direct Digital Synthesis: A Tool for Periodic Wave Generation (Part 1)». Журнал обработки сигналов IEEE. Том 21, Выпуск 4, Июль 2004, стр. 50-54.
Этот блок поддерживает генерацию кода C/C + + для Simulink® режимы Accelerator и Rapid 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.