用Matlab HDL编码器生成VHDL代码

用Matlab HDL编码器生成VHDL代码,matlab,sum,vhdl,cross-correlation,hdl-coder,Matlab,Sum,Vhdl,Cross Correlation,Hdl Coder,如果我说了一些愚蠢的话,我很抱歉。请原谅我: 我正在尝试使用HDL编码器将Matlab代码(如下所示)转换为VHDL代码。它包含一个名为sum的函数。但当我尝试转换代码时,它会给我错误: 代码生成仅支持总和“SpecifyPrecision”和 “KeepLSB”表示“SUM”,当输入的大小在运行时可能发生变化时 但问题是我以前从未使用过函数。有人能帮我吗?我应该如何更改代码以将其转换为VHDL。这将非常好 function y = fcn(n,y1,y2) n=10; x1c=zeros(2*

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

代码生成仅支持总和“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的长度。我真的卡住了,请帮帮我!
提前谢谢

海德尔:看看

    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函数进行了比较,似乎向量是相反的。这是否解决了错误?

@BrianDrummond它只是向上/向下翻转元素。@BrianDrummond如果您仔细研究一下,会很好。我对HDL编码器的经验是,您最好学习VHDL并手工翻译此代码。您展示的是一个非常简单的算法。警告告诉您,和中的向量大小会发生变化(从i=1:y1(1:19)到i=10:y1(1:10))。如果更改总和,使其始终具有相同长度的向量(即1:19),编译器应该可以工作。您可以通过创建临时向量并对其进行零填充来实现这一点。但正如@BrianDrummond已经指出的,学习VHDL会更好。@dieli感谢您的评论。实际上,我的要求是使用hdl编码器生成vhdl代码。如果你能解释一下我如何在我的代码中使用临时向量,那就太好了。我会非常感谢你的时间或“SpecificPrecision”和“KeepLSB”的总和。那就太好了。Thanks@dieli.Thanks对于回答,我必须翻转向量x1c(I)那么它和xcorr输出一样。请问你知道更简单的方法吗?你说更简单的方法是什么意思?