为什么程序没有看到变量?

时间:2017-12-09 23:38:20

标签: variables vhdl procedure xilinx-ise

我使用Xilinx ISE创建VHDL项目 我试图将值添加到整数变量。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity vending2_mod is
Port ( button1 : in  STD_LOGIC;
       button2 : in  STD_LOGIC;
       button3 : in  STD_LOGIC;
       button4 : in  STD_LOGIC;
       coin : in integer;
       disp : out string(1 to 16);
       prodOut : out integer);

    shared variable credits : integer := 0;

    procedure addCredits ( c : in integer ) is
        begin
                credits := credits + c; -- Signal is not defined : 'credits'.
        end addCredits;
-- additional code
end vending2_mod;

architecture Behavioral of vending2_mod is
    begin

acceptCredit: process (coin)
    begin
            addCredits(coin);
    end process;

end Behavioral;

然而,当我尝试Synthesize(XST)项目时,我发现了一个错误,我把它写成了评论。 credits不是信号,而是变量;什么给出了错误?
保存没有错误,因为语法似乎是正确的。

1 个答案:

答案 0 :(得分:1)

  

实体声明必须是 - 无效声明,也就是说,它们必须不是   为任何信号分配值。

  • 不要使用共享变量。
  • 在模拟中,变量在分配时立即更新,而不是仅在模拟周期结束时更新的信号。在组合代码中,信号立即获取其分配的值。在顺序代码中,信号用于创建触发器,其本身不会立即获取其分配的值。
  • 最好使用信号+时钟。

试试这个:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity vending2_mod is
   port(  
      Clock: in std_logic;
      Reset: in std_logic;
      coin : in integer; 
      prod_out : out integer
      );
end vending2_mod;

architecture Behavioral of vending2_mod is
    signal credits : integer := 0; 
begin   
    process(Clock,Reset)
    begin
        if Reset='1' then
            credits <= 0;
        elsif(rising_edge(Clock)) then 
            credits <= credits + coin;  
        end if;
    end process;
    prod_out <= credits;
end Behavioral;

参见详细设计: enter image description here

请勿尝试此操作(综合确定,请注意:您需要clock):

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity vending2_mod is
Port ( 
     coin : in integer; 
     prod_out : out integer);
end vending2_mod;

architecture Behavioral of vending2_mod is
    signal credits : integer := 0; 
begin
    credits <= credits + coin;  
    prod_out <= credits; 
end Behavioral;

参见详细设计: enter image description here