VHDL中的LU分解

时间:2016-03-08 07:49:47

标签: vhdl

我正在尝试在VHDL中处理LU分解。我是VHDL的入门者。所以我开始在MATLAB中实现LU分解算法。

    a = [1 2 2;3 4 4;5 6 6];
    x=a;
    n=size(x,1);
    l=zeros(n,n);
    u=zeros(n,n);

    for k=1:n
        if (a(k,k)~=0)
            u(k,k)=x(k,k);
            l(k,k)=1;
        for i=k+1:n
            l(i,k)=x(i,k)/x(k,k);
            u(k,i)=x(k,i);
        end

        for i=k+1:n
            for j=k+1:n
                x(i,j)=x(i,j)-(l(i,k)*u(k,j));
            end
        end

        else break
        end

    end

然后我开始没有for循环这样做,因为vhdl中的循环不像matlab那样工作。现在,我正面临着找到级联for循环的等效代码的问题。

a = [1 2 2;3 4 4;5 6 6];
x=a;
n=size(x,1);
l=zeros(n,n);
u=zeros(n,n);
k=1;
m=2;
j=2;
p=2;
for clock=1:100
if k>=1 && k<=n
    if (a(k,k)~=0)
        u(k,k)=x(k,k);
        l(k,k)=1;
    else disp('Decomposition not possible')
        return
    end
    if (m>=k+1 && m<=n)
        l(m,k)=x(m,k)/x(k,k);
        u(k,m)=x(k,m);
        m=m+1;
    end

    if p>=k+1 && p<=n
        if j>=k+1 && j<=n
            x(p,j)=x(p,j)-(l(p,k)*u(k,j));
            j=j+1;
        end
        if j==n+1
            p=p+1;
            j=2;
        end
    end    
end
    k=k+1;
end

我知道最后一个代码与前一个代码不同。有人可以帮我提一下在VHDL中做这个吗?

1 个答案:

答案 0 :(得分:2)

队长明显(标题)救援:

A = [1 2 2;3 4 4;5 6 6];
[L,U] = lu(A);

对于实际的问题,“可以使用if / else而不是for / while实现循环”(不是很虽然很好地反映在标题中):是的,如果语言允许goto语句,则有可能。循环基本上是(un)条件跳转 back 在语句“stream”中。 MATLAB不是这些语言之一。

在类似C语言中,您可以实现(声明旁边)一个基本for循环,如下所示:

        k = 0;

enter_loop:
        if(k < n) {
                /* here do in-loop stuff */
                k = k+1;
                goto enter_loop;
        }

注意:您的问题似乎与VHDL有关。为什么不更改问题标签,以便VHDL人员可以直接回答?