【问题标题】:VHDL syntax error near whilewhile 附近出现 VHDL 语法错误
【发布时间】:2014-09-21 21:20:37
【问题描述】:

我编写了一个 VHDL 代码来查找两个数字的 gcd。但是在编译时它给了我以下错误

“while”附近:语法错误

代码是

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity gcd is
port(a,b:in integer;
    c:out integer);
end gcd;

architecture gcd of gcd is
    function calc_gcd(a,b:integer) return integer is
    while a/=b loop
        if a>b then
            a:=a-b;
        else
            b:=a-b;
        end if;

    end loop;

    return m;
    end calc_gcd;
begin
process(a,b)
begin
gcd<=calc_gcd(a,b);
end process;
end gcd;

我检查了语法。这似乎是正确的。怎么了?

PS : 我用的是 ModelSim 学生版

【问题讨论】:

    标签: syntax while-loop vhdl


    【解决方案1】:

    您的函数缺少begin 语句。

    还有一些其他错误。

    您正在尝试分配给输入参数(ab)。函数的参数被复制到堆栈中。你可以使用一个过程,但看起来你真的想要一个局部变量。

    m 没有声明。那是一个(局部变量)。

    【讨论】:

    • 非常感谢。还有一些错误,但已调试。还有一件事,在函数中使用变量是必须的?
    • 我不明白您的“另一件事”,如果您想分配给信号,请使用程序。 VHDL中有四个对象类,常量、变量、信号和文件。它们中的任何一个都可以是论据。一个函数有一个返回值,它是一个表达式。有两种类型的过程,顺序语句和并发语句。要求只有第一个过程为嵌套过程分配信号。您可能需要某种参考文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多