vhdl中if语句中的语法错误

时间:2016-09-24 17:59:09

标签: vhdl hdl

我是VHDL的新手。我正在尝试使用代码来查找位向量是否为r(使用位向量的汉明权重)。我写的代码是:

entity hw_mod is
generic(
bits:integer  );
port (
inp : in std_logic_vector((bits-1) downto 0;
   cout : out std_logic );
end entity hw_mod

 architecture hw_arch of hw_mod is
begin

 process(inp)
 variable count : Integer:=0;

begin
    labelloop: for i in 0 to (bits-1) loop
                 if(inp(i)=='1') then
                   count:= count+1;
                         end if;
                      end loop;
                   if ((count mod 2)== '0') then
                       cout:=1;
                   else
           cout:=0;
           end if;
 end process;
   end hw_arch;

我一直得到的错误是“near”=“:语法错误 在两个地方。

2 个答案:

答案 0 :(得分:1)

几个问题。使用编辑器在您键入时检查语法。

  • 括号不匹配。
  • 你缺少一些分号,
  • 您使用C风格的比较(==代替=
  • 您需要信号的变量分配(:=而不是<=

enter image description here

答案 1 :(得分:0)

我检查了你的代码:   - 通用不太好   - cout是一个信号,所以它需要<=
  - :=仅适用于变量

它没有错误,但仍然有锁存器。在使用之前,变量需要初始化。

LIBRARY ieee;  
    USE ieee.std_logic_1164.all;  
    USE ieee.numeric_std.all;  
entity hw_mod is  
generic(  
    bits : integer range 0 to 3 := 3);   
port (  
    inp : in std_logic_vector((bits-1) downto 0);  
    cout : out std_logic );  
end entity hw_mod;  

architecture hw_arch of hw_mod is  
begin  
    process(inp)  
    variable count : Integer:=0;  
    begin  
        labelloop:   
            for i in 0 to (bits-1) loop  
                if(inp(i)='1') then
                    count:= count+1;
                end if;  
            end loop;  
            if ((count mod 2)= 0) then  
                cout <= '1';  
            else  
                cout <= '0';  
            end if;  
    end process;  
end hw_arch;