用Matlab HDL编码器生成VHDL代码
如果我说了一些愚蠢的话,我很抱歉。请原谅我: 我正在尝试使用HDL编码器将Matlab代码(如下所示)转换为VHDL代码。它包含一个名为sum的函数。但当我尝试转换代码时,它会给我错误: 代码生成仅支持总和“SpecifyPrecision”和 “KeepLSB”表示“SUM”,当输入的大小在运行时可能发生变化时 但问题是我以前从未使用过函数。有人能帮我吗?我应该如何更改代码以将其转换为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*
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输出一样。请问你知道更简单的方法吗?你说更简单的方法是什么意思?