Генерация VHDL-кода с использованием Matlab HDL Coder

Прошу прощения, если я скажу что-то глупое. Пожалуйста, прости меня: я пытаюсь преобразовать код Matlab (приведенный ниже) в код VHDL, используя кодер HDL. Он содержит функцию sum.Nut, когда я пытаюсь преобразовать код, который он дает мне ошибка:

Генерация кода поддерживает SumModes 'SpecifyPrecision' и 'KeepLSB' для 'SUM', когда размер входных данных может изменяться во время выполнения.

Но дело в том, что я никогда раньше не использовал функции. Может кто-нибудь, пожалуйста, помогите мне в этом. Как следует изменить мой код, чтобы преобразовать его в VHDL. Это было бы очень приятно!

function y = fcn(n,y1,y2)
n=10;
x1c=zeros(2*n-1,1);
for i=1:2*n-1
    if(i>n)
        j1=1;
        k1=2*n-i;
        j2=i-n+1;
        k2=n;
    else
        j1=n-i+1;
        k1=n;
        j2=1;
        k2=i;
    end
    x1c(i)=sum((y1(j1:k1)).*y2(j2:k2));
end
x1c=flipud(x1c).';
y=x1c;

Это взаимная корреляция y1 и y2. y1 и y2 - два вектора одинаковой длины, а n - длина y1. Я действительно застрял, пожалуйста, помогите! Заранее спасибо!

1 ответ

Решение

@Haider: взгляните на

    n=10;
    y1 = 1:n;
    y2 = n:-1:1;
    x1c=zeros(1,2*n-1);
    for i=1:2*n-1
        y1_temp = zeros(1,2*n-1);
        y2_temp = zeros(1,2*n-1);
        if(i>n)
            j1=1;
            k1=2*n-i;
            j2=i-n+1;
            k2=n;
        else
            j1=n-i+1;
            k1=n;
            j2=1;
            k2=i;
        end
        y1_temp(j1:k1) = y1(j1:k1);
        y2_temp(j1:k1) = y2(j2:k2);
        x1c(i)=sum(y1_temp.*y2_temp);
    end

Я сравнил результат с функцией Matlab xcorr, и кажется, что вектор перевернут. Это решает ошибку?

Другие вопросы по тегам