【问题标题】:Syntax error near "tmp" in vhdlvhdl 中“tmp”附近的语法错误
【发布时间】:2017-05-11 11:14:15
【问题描述】:

我正在尝试用 Xilinx ise 和 VHDL 语言编写用于串行并行转换的代码,但出现此错误:

第 57 行:“tmp”附近的语法错误。

我的 VHDL 代码如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

ENTITY STP IS
    GENERIC(n : INTEGER :=10);
    PORT(din, clk, s: in std_logic; dout: out std_logic_vector(n-1 downto 0));
END STP;

ARCHITECTURE BEHAV OF STP IS

    Signal tmp : std_logic_vector(n-1 downto 0);
    Signal c : INTEGER := 0;

BEGIN

    PROCESS(s, clk)
    BEGIN
        IF (s'event AND s = '1' AND clk'event AND clk = '1' AND c = n) THEN
            tmp(c) <= din;
            dout <= tmp;
            c <= 0;
        ELSEIF(s'event AND s = '1' AND clk'event AND clk = '1')
            tmp(c) <= din;
            c <= c +1;
        ELSE
        END IF;

    END PROCESS;

END BEHAV;

有人可以帮我处理这个错误吗?

【问题讨论】:

  • 我为您的问题发布了直接答案,但我必须补充一点,您的设计不适合综合。您只能在时钟边缘设置一个语句敏感,并且在该语句之后不能有 ELSEELSIF
  • 你已经可以通过查看stackoverflow的语法高亮xD看到一个错误

标签: vhdl xilinx xilinx-ise hardware-programming


【解决方案1】:

你在ELSEIF(s'event AND s = '1' AND clk'event AND clk = '1') 中忘记了THEN

还应该有ELSIF 而不是ELSEIF。实际上,在这种情况下不应该有这样的行,因为您的进程只能在时钟边缘有一个语句敏感。

【讨论】:

  • 现在我收到此错误:第 55 行:“THEN”附近的语法错误
  • 这条线现在看起来怎么样?请接受编辑,或编辑您的代码,使其看起来正确,并在您的问题下方添加此编辑后的行。
  • 现在是我编辑后的代码:ELSEIF(s'event AND s = '1' AND clk'event AND clk = '1') THEN 我应该使用 ELSEIF 还是 ELSE IF?
  • 你实际上不应该使用它。看看我在你的问题下面的评论。在其他情况下,可能应该有elsif
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多