xilinx VHDL错误827:无法合成信号<名称> </name>

时间:2013-02-15 21:06:50

标签: vhdl xilinx hdl

我是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 - “...... /数字实验室II 110 / PBdebouncer / PBdebouncer.vhd”第43行:信号启用无法合成,错误的同步描述。当前软件版本不支持您用于描述同步元素(寄存器,内存等)的描述样式。

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

3 个答案:

答案 0 :(得分:4)

尝试没有Clk'和事件之间的空间......

其他一些问题:
为什么当你只使用其中两个值时,“enable”的范围为0到100000?为什么不只使用布尔值或std_logic?
“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;

答案 1 :(得分:2)

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

答案 2 :(得分:1)

问题的原因似乎已经被Brians的答案确定 - 但我只是为这些案例添加了一个提示:

在Xilinx ISE中,您可以查看多种语言模板(选择编辑 - >语言模板),这可以帮助您实现各种类型的触发器(同步/异步复位,上升/下降沿触发等等) )和其他结构。

这些可能非常有用 - 特别是在获取这样的错误消息时,这通常是由于语法正确的VHDL代码,它描述了无法在所选设备中合成的硬件。