2017-12-13 26 views
0

VHDL : 할당 할 수 없습니다 시스템 클럭 (Sys_Clk는) 내가 시뮬레이션 결과를 업로드 한 다음

신호. 강조 표시된 부분에서 syshclk를 두 신호에 할당해야합니다.

정의 된 sclk_1 및 sclk_2 신호에서 약간의 지연 후 시스템 클럭 (sys_clk)을 할당하기 위해 vhdl 코드를 작성했습니다.

코드를 실행하고 실행하면 카운터가 25로 계산 된 후 시뮬레이션에서 두 신호의 상태가 시스템 클럭 (Sys_Clk) 대신 단순히 하이 (로직 레벨 높음)로 표시됩니다.

저는 Artix 7 Basys -3 Board와 100MHZ 시스템 시계를 사용하고 있습니다.

아무도 내가 정의 된 신호에 시스템 클럭 (Sys_Clk)을 할당 할 수 있습니까?

architecture Behavioral of Power_Sequence is 
signal counter : integer := 0; 
signal sclk_1 : std_logic := '0'; 
signal sclk_2 : std_logic := '0'; 

begin 

process(Sys_Clk) 

begin 

    if(Sys_Clk 'event and Sys_Clk = '1') then 
     if(resetb = '0')then 
      sclk_1 <= '0'; 
      sclk_2 <= '0'; 
     else 
      counter <= counter + 1; 
      if (counter > 24 and counter < 50) then 
      sclk_1 <= Sys_Clk; 
      sclk_2 <= Sys_Clk; 
      end if; 
     end if; 
    end if;  
end process; 
end Behavioral; 
+1

질문을 편집하여 [MCVE]로 만드십시오. 귀하가받는 정확한 오류 메시지를 포함하십시오. 현재로서는 관련 선언을 볼 수 없지만 (누락 된 세미콜론은 명백합니다. 게시 된 코드는 컴파일 할 수 없으며 잘못된 결과는주지 않습니다) –

+0

클럭 신호는 CLOCK 신호입니다. 동기 요소의 클록 입력에만 연결해야합니다. FF 데이터 입력에 연결하지 마십시오. 그건 그렇고, if 문은 Sys_Clk가 '1'이면 참이되므로 sclk_tp와 sclk_bt가 항상 높다는 것이 맞습니다. – Juergen

+0

'sclk_tp'와'sclk_bt'는 무엇입니까? 그들은'sclk_1'과'sclk_2'를 의미합니까? – mkrieger1

답변

2

코드가 작동하지 않습니다. 선 사이의 과정에서 코드 다음 Sys_clk가 상승 할 때

if(Sys_Clk 'event and Sys_Clk = '1') then 
... 
    end if; 

가 실행됩니다. 이 순간 Sys_Clk의 값은 '1'입니다! 그런 다음 sclk_tp 및 sclk_bt 신호에 복사하면 항상 '1'이 복사됩니다.

sclk_tp <= Sys_Clk when (counter > 24 and counter < 50) else '0'; 

을 그냥 계산 동기 프로세스를 사용 :

는이 같은 비동기 과정에서 sclk_tp 및 sclk_bt 신호를 할당해야 작동하는지 확인합니다.

[편집]

paebbels 설명으로

라인 위의 클럭 게이팅을 만들 수있는 좋은 해결책이 아니다. 콜크 게이팅에 대한 설명은 this stackoverflow response에서 찾을 수 있습니다.

+0

클럭 게이팅을 구현할 때이 설명을 사용하지 마십시오! – Paebbels