VHDL错误“期待开始”

时间:2016-04-25 15:30:02

标签: vhdl

library ieee;
use ieee.std_logic_1164.all;
entity data_choose is
port(
A :in std_logic_vector(3 downto 0);
B: out std_logic_vector(3 downto 0);
clk : in std_logic);
end entity data_choose;

architecture select_data of data_choose is


variable count : integer range 0 to 7;


count :=0;

begin


if (rising_edge(clk)) then 
count := count + 1 ;
if((count > 1)) then
    if((count rem 2)=0) then 
        B <= A;
    end if;
end if;
end if;
end architecture select_data ;

任何人都可以告诉我这段代码有什么问题。 在计数初始化语句附近有一个编译错误。

谢谢。

1 个答案:

答案 0 :(得分:1)

此代码存在一些问题。

variable count : integer range 0 to 7;

我建议您将其设为signal,而不是variable。我还建议避免变量,直到你完全理解它们与信号的区别。您通常会在流程中声明一个变量,以供该流程专门使用。需要由多个进程访问的东西通常会使用体系结构中声明的信号(您当前有变量声明)。

count :=0;

您在架构的声明区域中,architecture ... isbegin之间进行此分配。如果您需要初始化计数器,可以使用:

signal count : integer range 0 to 7 := 0;

在下一期问题上,您的行if (rising_edge(clk)) then正在尝试描述同步逻辑。这应该在一个过程中进行,所以你可以:

process (clk)
begin
  if (rising_edge(clk)) then 
    ...
  end if;
end process;

最后一个错误是,由于您的count现在是一个信号,您应该使用<=而不是:=分配给它,给予count <= count + 1 ;

进行这些更改后,您的代码就会编译。