2014-04-07 5 views
1

나는 다음과 같은 음의 가장자리가 아래 D-FF를 트리거 코딩 한 : (각각 말 8의 5 NS)일반 설정/대기 시간에서이 D-FF를 어떻게 수정할 수 있습니까?

나는 일반적인 설정을 포함하는이 코드를 수정하려면
ENTITY d_ff IS 
PORT (d, cl : IN BIT; q, qbar : INOUT BIT); 
END d_ff; 

ARCHITECTURE dataflow of d_ff IS 

BEGIN 
    PROCESS (clk) 
    IF (clk = '0' AND clk'EVENT) 
    q <= d; 
    ELSE 
    q <= q; 
END IF; 
END dataflow; 

내 질문은,/유지되어 시간 내가 어떻게 그럴 수 있니? 그 시대 엔 엔티티에 GENERIC 문을 추가해야한다는 것을 알았지 만 조건에서 어떻게 사용할 수 있습니까?

If (d'STABLE(hold)) 
q <= d AFTER setup; 

또는 뭔가 비슷한 : 내가 좋아하는 뭔가 말할 수 있을까?

제공되는 모든 도움에 감사드립니다.

답변

2

대기 시간을 확인하려면 wait 문을 사용하여 DFF를 구현해야합니다. 이를 통해 시간 경과에 따른 진행을 수동으로 제어하여 시계 가장자리 이후뿐만 아니라 이전에 매개 변수를 확인할 수 있습니다. 한 가지 확실하지 않은 "트릭"은 지연주기를 사용하여 d 신호를 생성하여 델타주기 지연을 갖는 새로운 신호를 생성하는 것입니다.이 신호는 d에서의 동시 전환에서 보류 안정 특성을 측정하는 것을 피할 수있게합니다.

Clock-to-Q 매개 변수는 일반적으로 보류 시간과 같지 않으므로 독립 제네릭으로 구분했습니다. 또한이 기술은 음수 보류 또는 설정 시간에는 작동하지 않으므로 delay_length을 사용하여 제네릭을 양수 값으로 제한했습니다.

library ieee; 
use ieee.std_logic_1164.all; 

entity dff is 
    generic (
    Tsu : delay_length := 8 ns; -- Setup 
    Thld : delay_length := 5 ns; -- Hold 
    Tcq : delay_length := 6 ns -- Clock to Q delay 
); 
    port (
    clock, d : in std_logic; 
    q : out std_logic 
); 
end entity; 

architecture behavior of dff is 
begin 

    process 
    begin 
    assert Tcq >= Thld report "Tcq must be >= Thld" severity failure; 

    wait until falling_edge(clock); 
    if d'stable(Tsu) then 
     wait for Thld; 
     if d'delayed'stable(Thld) then 
     q <= d after Tcq - Thld; 
     else -- Hold violation 
     report "Hold violation" severity warning; 
     q <= 'X' after Tcq - Thld; 
     end if; 
    else -- Setup violation 
     report "Setup violation" severity warning; 
     q <= 'X' after Tcq; 
    end if; 

    end process; 
end architecture; 
+0

고마워요! 말이된다. 조건을 분리하는 것이 최선의 해결책인지 확실하지 않았지만, 당신은 그것이 나에게 확신했습니다. 건배! –