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 ;
任何人都可以告诉我这段代码有什么问题。 在计数初始化语句附近有一个编译错误。
谢谢。
答案 0 :(得分:1)
此代码存在一些问题。
variable count : integer range 0 to 7;
我建议您将其设为signal
,而不是variable
。我还建议避免变量,直到你完全理解它们与信号的区别。您通常会在流程中声明一个变量,以供该流程专门使用。需要由多个进程访问的东西通常会使用体系结构中声明的信号(您当前有变量声明)。
count :=0;
您在架构的声明区域中,architecture ... is
和begin
之间进行此分配。如果您需要初始化计数器,可以使用:
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 ;
进行这些更改后,您的代码就会编译。