1

我是 VHDL 编程的初学者,我正在尝试使用 ISE 项目导航器 13.1 合成以下 vhdl 代码(用于按钮的软件)

entity PBdebouncer is
Port ( PB : in  STD_LOGIC;
       CLK : in  STD_LOGIC;
       reset : in  STD_LOGIC;
       PBdebounced : out  STD_LOGIC);
end PBdebouncer;

architecture Behavioral of PBdebouncer is

begin

    p1: process(CLK , PB , reset)
        variable enable,count : integer range 0 to 100000 := 0;
    begin
        if(reset = '1') then
            count := 0;
            enable :=0;
        elsif(CLK' event and CLK = '1' ) then
            if (enable = 1) then
                count := count + 1;
            end if;

            if(count = 99999 ) then 
                if(PB = '0') then
                    PBdebounced <= '0';
                else
                    PBdebounced <= '0';
                end if;

                count := 0;
                enable := 0;
            end if;

            count := count;

        else
            enable := 1;
        end if;

    end process;
end Behavioral;

但不幸的是,我遇到了以下错误:

错误:Xst:827 -“.../digital lab II 110/PBdebouncer/PBdebouncer.vhd”第 43 行:无法合成信号启用,同步描述错误。当前软件版本不支持您用于描述同步元素(寄存器、内存等)的描述样式。

那么你能帮我解释一下这个错误吗?

4

3 回答 3

4

尝试在 Clk' 和 event 之间没有空格...

其他一些问题:
当您只使用其中两个值时,为什么“启用”的范围为 0 到 100000?为什么不只使用布尔值或标准逻辑?
“pbdebounced”是否应该设置为“0”以外的任何值?
为什么布尔表达式周围的括号?
为什么PB在敏感列表中?
它在模拟中是否按预期工作?

这些现在可能会做......

编辑:错误的格式隐藏了问题:

begin
   if reset = '1' then
      count := 0;
      enable :=0;
   elsif rising_edge(clk) then
      if enable = 1 then 
         count := count + 1; 
      end if;
      if count = 99999 then 
         -- do stuff
      end if;
      count:= count;
-- else   
-- enable := 1;
-- THE TWO LINES ABOVE are the problem
-- They are outside both the CLK and RESET clauses.
   end if;
end process;
于 2013-02-15T21:35:22.523 回答
2

只是一个小建议:避免变量作为初学者。它们似乎像在软件程序中一样工作,但有时它们映射到硬件中的讨厌的东西。

于 2013-02-22T16:12:39.613 回答
1

Brians 的回答似乎已经确定了问题的原因 - 但我只会为这些情况添加一个提示:

在 Xilinx ISE 中,您可以查看许多语言模板(选择 Edit -> Language templates),它们可以帮助您实现各种样式的触发器(同步/异步复位、上升沿/下降沿触发等)和其他构造.

这些真的很有帮助——尤其是在收到这样的错误消息时,这通常是由于语法正确的 VHDL 代码描述了无法在所选设备中合成的硬件。

于 2013-02-16T18:07:28.457 回答