使用Matlab HDL编码器生成VHDL代码

时间:2016-01-12 15:18:03

标签: matlab sum vhdl cross-correlation hdl-coder

我很抱歉如果我说傻话。请原谅我:  我正在尝试使用HDL编码器将Matlab代码(如下所示)转换为VHDL代码。它包含一个名为sum.But的函数,当我尝试转换代码时,它会给我错误:

  

代码生成仅支持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 个答案:

答案 0 :(得分:0)

@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函数进行了比较,看起来矢量是反转的。这会解决错误吗?