【发布时间】:2016-01-12 15:18:02
【问题描述】:
对不起,如果我说了一些愚蠢的话。请原谅我: 我正在尝试使用 HDL 编码器将 Matlab 代码(如下所示)转换为 VHDL 代码。它包含一个名为 sum 的函数。但是当我尝试转换代码时,它给了我错误:
代码生成仅支持 SumModes 'SpecifyPrecision' 和 当输入的大小在运行时可能发生变化时,“SUM”的“KeepLSB”。
但问题是我以前从未使用过函数。任何人都可以帮我解决它。应该如何更改我的代码以将其转换为 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 的长度。我真的卡住了请帮忙! 提前致谢!
【问题讨论】:
-
@BrianDrummond 它只是向上/向下翻转元素。
-
@BrianDrummond 如果您能看一看,那就太好了。
-
我对 HDL Coder 的体验是,您最好学习 VHDL 并手动翻译此代码。您展示的是一个非常简单的算法。
-
警告告诉您总和中的向量大小发生了变化(从 i=1: y1(1:19) 到 i=10: y1(1:10))。如果您更改总和,使其始终具有相同长度的向量(即 1:19),则编译器应该可以工作。您可以通过创建临时向量并对它们进行零填充来做到这一点。但正如@BrianDrummond 已经指出的那样,学习 VHDL 会更好。
-
@dieli 感谢您的评论。实际上我的要求是使用 hdl coder 生成 vhdl 代码。如果你能解释一下我如何在我的代码中使用临时向量会很好。我将非常感谢你的时间或 SumModes 'SpecifyPrecision' 和 'KeepLSB' 。这真的很好。谢谢
标签: matlab sum vhdl cross-correlation hdl-coder