【问题标题】:VHDL Code Generation using Matlab HDL Coder使用 Matlab HDL Coder 生成 VHDL 代码
【发布时间】: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


【解决方案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 函数进行了比较,似乎向量是反转的。这能解决错误吗?

【讨论】:

  • @dieli.Thanks for reply.I have to flip the vector x1c(i) then it's同xcorr output.Do you know the easy way please.
  • 更简单的方法是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 2014-06-09
相关资源
最近更新 更多