Перейти к содержанию
    

Генерация файлов HDL из Filter Designer

Matlab R2016b. Коллеги, чтобы не изобретать велосипед решил попробовать сгенерить HDL для fractional-rate фильтра.

Фильтр мне сгенерили полифазный с шестью фазами, коэффициент преобразования частоты дискретизации я заказывал равный 7/5.

В итоге при симуляции получилась вот такая ерунда. Похоже есть путаница с фазами или с отсчётами ИХ.

image.thumb.png.8cfec09072b1735688aee097887467cc.png

Кто нибудь пользовался сгенерёнными в матлабе HDL-файлами? Как впечатление?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может в первую очередь стоит взять Матлаб поновее?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что, со старыми версиями действительно есть проблемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, _sda said:

А что, со старыми версиями действительно есть проблемы?

Ну HDL Coder у них достаточно шустро развивается, поэтому вполне возможно, что что-то пофиксили уже. Во вторых на более новые версии легче найти суппорт. 

В третьих - на крайняк - вот у меня 2016 уже года два, как не стоит, а есть только 2018b и новее, поэтому я тупо не могу смоделировать вашу проблему.   

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, _sda said:

Кто нибудь пользовался сгенерёнными в матлабе HDL-файлами? Как впечатление?

пользуюсь сгенеренными в симулинке HDL файлами, впечатления хорошие

 

очень похоже, что для Вашего случая подойдет блок FIR Rate Conversion HDL Optimized

для проверки блока с дискретизацией 7/5 я использовал такие параметры

706177632_.png.2afbfcf5e2c51ac54d5f262ef7239be1.png

 

результаты моделирования с входной дискретизацией как в Вашем случае (входной отсчет раз в два такта)

1897780915_.thumb.png.9ca6d3c3073911c592ff886cc6c1d1d3.png

930697728_.thumb.png.d1c1025215720d825bf27e3ac1576fcc.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

удалось сгенерировать  похожий в матлабе в Filter Designer

после экспорта в .m файл генерируется с такого скрипта

 

% MATLAB Code
% Generated by MATLAB(R) 9.2 and the DSP System Toolbox 9.4.
% Generated on: 25-Aug-2021 23:28:00

% FIR least-squares Lowpass filter designed using the FIRLS function.

% All frequency values are in Hz.
Fs = 14;  % Sampling Frequency

N     = 70;   % Order
Fpass = 0.9;  % Passband Frequency
Fstop = 1.1;  % Stopband Frequency
Wpass = 1;    % Passband Weight
Wstop = 1;    % Stopband Weight

% Calculate the coefficients using the FIRLS function.
b  = firls(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop]);
intf = 7;                     % Interpolation Factor
decf = 5;                     % Decimation Factor

Hd = dsp.FIRRateConverter( ...
    'InterpolationFactor', intf, ...
    'DecimationFactor', decf, ...
    'Numerator', b, ...
    'CoefficientsDataType', 'Custom', ...
    'CustomCoefficientsDataType', numerictype([],16,17));

generatehdl(Hd, 'ResetType', 'Synchronous',... 
               'EDAScriptGeneration', 'off',... 
               'Name', 'Filter_fract_rate_fdatool',... 
               'TargetLanguage', 'Verilog',...
               'InputDataType',numerictype(1,16,15));

 

результаты моделирования такого фильтра получились похожими

454622929_.thumb.png.2eb84ae11486ed949ff278735d52272d.png

2028842182_.thumb.png.a250e6144a4bf699682b1e50bf5a9f62.png

в самом Filter Designer были выбраны такие настройки

1740877225_.thumb.png.f665b61b15afb2e6789c94b32f4627fe.png

1704000282_.thumb.png.0c3b747d69961a72d5d43a8ce725e6b8.png

1740883322_.thumb.png.830269be0ae89236605cb5c651267f55.png

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за желание помочь.

Вот как выглядит мой скрипт, генерировал его здесь:

image.thumb.png.038ae22a5913268abe31b5589b00b653.png

function filter_generatehdl(filtobj)
%  FILTER_GENERATEHDL   Function to generate HDL for filter object.
%  Generated by MATLAB(R) 9.1 and the Filter Design HDL Coder 3.1.
%  Generated on: 2021-08-26 09:12:56
%  -------------------------------------------------------------
%  HDL Code Generation Options:
%  TargetLanguage: VHDL
%  OptimizeForHDL: on
%  UseRisingEdge: on
%  TargetDirectory: D:\MyDesigns\2021\elecnronix\7_5
%  TestBenchStimulus: step ramp chirp noise 
%  GenerateHDLTestbench: on
% 
%  Filter Settings:
%  Discrete-Time FIR Multirate Filter (real)
%  -----------------------------------------
%  Filter Structure      : Direct-Form FIR Polyphase Sample-Rate Converter
%  Interpolation Factor  : 7
%  Decimation Factor     : 5
%  Polyphase Length      : 6
%  Filter Length         : 41
%  Stable                : Yes
%  Linear Phase          : Yes (Type 1)
%
%  Arithmetic            : fixed
%  Numerator             : s16,15 -> [-1 1)
%  Input                 : s16,15 -> [-1 1)
%  Filter Internals      : Specify Precision
%    Output              : s16,15 -> [-1 1)
%    Product             : s28,27 -> [-1 1)
%    Accumulator         : s28,27 -> [-1 1)
%    Round Mode          : convergent
%    Overflow Mode       : wrap

%  -------------------------------------------------------------

% Generating HDL code
generatehdl(filtobj, 'TargetLanguage', 'VHDL',... 
               'OptimizeForHDL', 'on',... 
               'UseRisingEdge', 'on',... 
               'TargetDirectory', 'D:\MyDesigns\2021\elecnronix\7_5',... 
               'TestBenchStimulus',  {'step', 'ramp', 'chirp', 'noise'},... 
               'GenerateHDLTestbench', 'on');

% [EOF]

Обратил внимание что у вас версия на единичку больше моей.

Предлагаю тайм аут, установлю матлаб поновее.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, _sda сказал:

Предлагаю тайм аут, установлю матлаб поновее.

Очень советую собирать всё не в Матлабе а в Симулинке!

С Вашими знаниями в части ПЛИС вы так намного быстрее получите результат.

Мы по совету в том числе и сотрудников Экспоненты (правда неофициально, ибо не могут они так в лоб сравнивать продукты) пошли в этом направлении и пока видим только плюсы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 минут назад, warrior-2001 сказал:

Очень советую собирать всё не в Матлабе а в Симулинке!

С Вашими знаниями в части ПЛИС вы так намного быстрее получите результат.

Мы по совету в том числе и сотрудников Экспоненты (правда неофициально, ибо не могут они так в лоб сравнивать продукты) пошли в этом направлении и пока видим только плюсы.

Спасибо, обязательно попробую в симулинке. А как там насчёт быстродействия? Тот HDL который мне сгенерил Filter Designer имел максимальную тактовую 65 МГц. Часик пошаманил, увеличил до 180 МГц. Напрягает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут так всегда будет. Сперва час потратил на сборку логики, и потом день - на оптимизацию по частоте! :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, warrior-2001 сказал:

Тут так всегда будет. Сперва час потратил на сборку логики, и потом день - на оптимизацию по частоте! :biggrin:

Ясно, значит губы закатаем. Я лет 10 назад попробовал генерацию HDL - не понравилось именно из-за быстродействия, думал может за это время как-то продвинулись.

Кстати, попробовал сгенерить файл фильтра в R2019b - HDL отличается от созданного в R2016b только датой создания:biggrin:

Коллеги, уж очень поджимает время, если я выложу файл filter.fda сможет ли кто сгенерить файл filter.vhd и скрипт для его генерации? 

Эта задача однократная, с симулинком я тоже лет 10 не работал, вангую что уйдёт времени немеряно на освоение кодера в симулинке и не факт что поможет.

Ресемплинг у фильтра теперь будет 20/13.

frac_filter_2019b.fda

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 часов назад, stealthisname сказал:

 

Странная ситуация. Я сформировал примерно такой же скрипт как вы показали.

Если я формирую нужную ИХ такой строчкой (как у вас)

b  = firls(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop]);

то фильтр работает адекватно.

Если же я (ничего остального не меняя) формирую ИХ экспортом из Filter Designer то всё ломается.

b = Num;

Порядки фильтров сделал одинаковыми. В самом тексте фильтра изменяются только коэффициенты.

Тихо шифером шурша....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 часов назад, stealthisname сказал:

 

А попробуйте сгенерировать HDL для коэффициента не 7/5 а 13/5. У меня получилось вот так:

image.thumb.png.7587c4e9bda1029fdcb428ca389f03dc.png

Работает только при малых коэффициентах? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, _sda said:

А попробуйте сгенерировать HDL для коэффициента не 7/5 а 13/5. У меня получилось вот так:

для проверки преобразования частоты с коэффициентом 7/5 я использовал импульсную характеристику по такому образцу

b  = firls(N, [0, 0.9*(1/7), 1.1*(1/7), 1], [1 1 0 0], [Wpass Wstop]);

специально, чтобы фильтр оставлял примерно 1/7 полосы после интерполирования в 7 раз

для преобразования частоты с коэффициентом 13/5 такая ИХ не подойдет, так как необходимо , чтобы фильтр оставлял примерно 1/13, с ИХ по такому образцу

b  = firls(N, [0, 0.9*(1/13), 1.1*(1/13), 1], [1 1 0 0], [Wpass Wstop]);

при этом для достижения заданных характеристик фильтра потребуется больший порядок (N)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...