2017-05-22 6 views
0

리셋 가능 및 동기 데이터로드가있는 플립 플롭을 만들려고했습니다. 그것은 VHDL 시뮬레이션에서 잘 작동하지만 내가 ISE에서 합성 할 때 그것은 나에게 다음과 같은 오류가 있습니다 : 나는 순서로이 오류를 해결할 수있는 방법플립 플롭은 클록 에지 조건이 아닐 때까지 값을 보유하지 않습니다.

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all; 
use ieee.std_logic_unsigned.all; 

entity D_FF is 
port (D: in std_logic; 
     clk: in std_logic; 
     reset_enable: in std_logic; 
     reset: in std_logic; 
     Q: out std_logic:='0' 
); 
end D_FF;  

architecture a1 of D_FF is 
begin 
    proc: process (D,clk,reset,reset_enable) 
    begin 
    if (reset_enable='1') then 
     if (reset='1') then 
     q<='0'; 
     end if; 
    end if; 
    if (clk'event and clk='1') then -- Line 24 
     q<=d; 
    end if; 
    end process proc; 
end a1; 

: 코드를 여기에

Line 24: statement is not synthesizable since it does not hold its value under NOT(clock-edge) condition

입니다 코드를 합성 가능하게 만들고 내가 작성한 코드와 동등한 코드를 만들 수 있습니까?

+0

내 두 경우 순서 논리 번 래치 다른 레지스터를 설명 q''할당 문. 비동기 부분 인'if' reset_condition ...과'elsif'clock_event_condition ....이있는 if 문으로 그들을 결합하십시오. 자일링스는 합성 사용자 가이드에 비동기식 리셋/세트 코딩 예제를 표시하지 않습니다. 일부 최적화 유형을 차단하는 용도로 사용되지 않습니다. 또한 IEEE Std 1076.6-2004 VHDL 레지스터 전송 레벨 (RTL) 합성을위한 IEEE 표준 (철회)을 참조하십시오. 민감도 목록에 D가 필요하지 않습니다. – user1155120

+0

클럭 프로세스는 https://stackoverflow.com/a/34067908/4090959와 같이 보입니다. 또한'ieee.std_logic_arith.all; 또는'use ieee.std_logic_unsigned.all;'을 사용하지 마십시오. –

+0

무엇이'reset_enable'입니까? 비동기 도메인에 논리를 추가하면 타이밍 클로저 문제가 발생할 수 있으므로 사용하지 않는 것이 좋습니다. – JHBonarius

답변

1

올바른 방향으로 안내 : 재설정 및 clk edge가 동시에있을 때 어떻게됩니까?

용액 :

if (reset = '1' and reset_enable = '1') then 
    q <= '0'; 
elsif (clk'event and clk = '1') then 
    q <= d; 
end if;