2013-02-15 1 views
1

을 합성 할 수없는 13.1자일링스 VHDL 오류 827 : 신호 <name> 내가 VHDL 프로그래밍 초보자이고 내가 ISE 프로젝트 네비게이터를 사용하여 (소프트웨어는 푸시 버튼에 대한 비난) 다음과 같은 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; 

하지만, 불행히도 다음과 같은 오류가 발생했습니다 :

ERROR:Xst:827 - ".../digital lab II 110/PBdebouncer/PBdebouncer.vhd" line 43: Signal enable cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release.

제게이 오류를 설명해 주시겠습니까?

답변

4

... 사무원 사이의 공간 '및 이벤트없이

다른 몇 가지 질문을보십시오 :
이유를 "사용"않습니다 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; 
+0

에 관해서 < enable > 형에 나는 – Wazani

+0

에 관해서 모든 것을 시험해 보았고, 에 관해서 나는 이전의 코드에서 실수를 범한다 : 'if (PB ='0 ') then PBdebounced <='0 ' ; \t \t 기타 PBdebounced <= '1'; \t \t end if; ' – Wazani

+0

은 괄호에 관한 것입니다. 나는 그것들없이 코드를 시도했지만 여전히 같은 문제가 있습니다. – Wazani

1
문제의 원인은 브라이언의 대답에 의해 확인 된 것으로 보인다

-이하지만 난 '을

자일링스 ISE에서는 다양한 스타일의 플립 플롭 (동기/비동기 리셋)을 구현할 때 도움이되는 다양한 언어 템플릿 (편집 -> 언어 템플릿 선택)을 볼 수 있습니다. , 상승/하강 에지 트리거 ered 등등) 및 기타 구성 요소.

이것은 특히 선택된 장치에서 합성 할 수없는 하드웨어를 설명하는 구문 적으로 올바른 VHDL 코드로 인해 발생하는 이러한 오류 메시지가 나타날 때 특히 유용 할 수 있습니다.

2

작은 조언 : 초보자 용 변수는 피하십시오. 그들은 소프트웨어 프로그램에서와 같이 작동하는 것처럼 보이지만 때로는 하드웨어에서 더러운 것으로 맵핑됩니다.