首页 文章

已存在的关键字的vhdl错误代码10500

提问于
浏览
-1

该代码用于PRBS(伪随机二进制序列)接收器 . 它应该采用三个值并模拟PRBS生成器并使用生成的值检查获得的值 . 但是代码显示已经存在的关键字(如begin)的错误

library ieee;
    use ieee.std_logic_1164.all;
    use ieee. std_logic_arith.all;
    use ieee. std_logic_unsigned.all;

    entity receiver is
    port(
        inp : in std_logic;
        clock : in std_logic;
        count : out std_logic_vector(4 downto 0);
        check : out std_logic);
    end receiver;

    architecture rec of receiver is
    signal P : std_logic_vector(2 downto 0);
    signal O : std_logic_vector(2 downto 0);

    process (clock)
        variable cnt  : integer range 0 to 3;
        begin
            if clock'event and clock='1'  then
                P <= inp & P(2 downto 1);
                cnt<=cnt+1;
            end if;
            if (cnt = 3) then
                O<=P;
                elseif (cnt >3)
                O <= inp & O(2 downto 1);
            end if;
            if((O(2) xor O(0)) = P(0))  
                check <= '0';
            else
                check <= '1';
                count <= count +1;
            end if;
        end process;
    end rec;

错误(10500):在文本“process”附近的receiver.vhd(18)处的VHDL语法错误;期待“开始”或声明语句错误(10500):接收文件“if”附近的receiver.vhd(21)的VHDL语法错误;期望“结束”,或“(”或标识符(“if”是保留关键字)或并发语句错误(10500):接收文件“和”附近的receiver.vhd(21)的VHDL语法错误;期待“ (“,”或“”或“ . ”错误(10500):在接收文件“if”;期待“;”或标识符(“if”是保留关键字)的receiver.vhd(24)处的VHDL语法错误或“架构”错误(10500):在接收文件“then”附近的receiver.vhd(25)处的VHDL语法错误;期望“<=”错误(10500):在文本“O”附近的receiver.vhd(28)处的VHDL语法错误“; expecting”(“,”或“”或“ . ”错误(10500):接收器.vhd(29)的VHDL语法错误接近文本“if”;期待“;”或标识符(“if”是保留关键字)或“体系结构”错误(10500):在文本“check”附近的receiver.vhd(31)处的VHDL语法错误;期望“<=”错误(10500):receiver.vhd处的VHDL语法错误(32)接近文本“else”;期望“结束”,或“(”或标识符(“else”是保留关键字),或并发语句错误(10500):接收文本处接收器.vhd(35)处的VHDL语法错误“如果”;期待“;”或标识符(“if”是保留关键字)或“架构”

1 回答

  • 0

    您的实体结构需要如下所示:

    entity receiver is
      port (
        -- Your ports
      );
    end receiver;
    
    architecture rec of receiver is
      -- Declarations here
    begin  -- ** Your code is missing this part
    
      process (clock)
      begin
        -- your process
      end process;
    
    end rec;
    

    正如评论中所提到的,总是从你看到的第一个错误开始;首先理解并解决这个问题,因此许多后来的错误通常会消失 .

    您已将 cnt 声明为变量,然后尝试使用 cnt <= cnt + 1; 递增它,但变量赋值应使用 := 而不是 <= .

    下一个错误是你使用 elseif ;这不是一个真正的关键字,看起来你想使用 elsif . 这一行也缺少 then .

    然后你有一行 if((O(2) xor O(0)) = P(0)) ,它再次缺少 then .

    最后,您正在尝试直接递增 count 这是一个 out 端口 . 这是不可能的,因为您正在尝试读取输出以向其添加输出;有几种方法可以解决这个问题,但我个人会在你的过程中创建一个中间信号(例如 count_s ),然后在进程外的某个地方用 count <= count_s 将输出分配给这个信号 .

    解决了所有这些问题后,您的代码至少会编译 .


    作为旁注,它可以帮助您更好地垂直对齐代码;你的 end process 应该与它的开口 process 垂直对齐,依此类推 .

相关问题