2017-10-14 5 views
2

난 회로 래치는 다음과 같은 회로 VHDL 코드에서 S와 R이 둘 다 '0'일 때 진동하는 것을 알게되었습니다. 여기간단한 SR 래치 시뮬레이션 VHDL (자일링스와 함께) 발진하지 않습니다

는 SRLATCH

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity SRLATCH_VHDL is 
port(
     S : in STD_LOGIC; 
     R : in STD_LOGIC; 
     Q : inout STD_LOGIC; 
     NOTQ: inout STD_LOGIC); 
end SRLATCH_VHDL; 

architecture Behavioral of SRLATCH_VHDL is 
begin 

process(S,R,Q,NOTQ) 
    begin 
     Q <= R NOR NOTQ; 
     NOTQ<= S NOR Q; 
end process; 

end Behavioral; 

의 VHDL이며, 다음은 테스트 벤치 코드에서 처리하고 그 시뮬레이션

-- Stimulus process 
    stim_proc: process 
    begin   
    S <= '1'; R <= '0'; WAIT FOR 100NS; 
    S <= '0'; R <= '0'; WAIT FOR 100NS; 
    S <= '0'; R <= '1'; WAIT FOR 100NS; 
    S <= '0'; R <= '0'; WAIT FOR 100NS; 
    S <= '1'; R <= '1'; WAIT FOR 500NS; 
    end process; 

결과와 완전히 내가 시뮬레이션을 반영하지 않는 이유 어떤 생각이 없습니다. ..

Xilinx Simul of SR LATCH

(클릭)
+0

진동을 시연하는 [Minimal, Complete and Verifiable example] (https://stackoverflow.com/help/mcve)을 제공하지 않았으며 제공 한 자극도 그렇게하지 않았습니다. 치료법은 지연을 불균형시켜 하나가이기는 것입니다. 합의 기간을 제공하는 것과 같습니다. 클록 플립 플롭에서 이것은 마스터 슬레이브 플립 플롭을 사용하는 자극뿐만 아니라 설정 및 유지 시간이 나오는 곳입니다. 우리는 분실 된 디지털 디자인과 제로 게이트 지연을 이용한 추상화를 다루고 있습니다. – user1155120

+0

Q와 NOTQ의 할당에 일정한 지연을 추가하려면 : 1ns 후에'Q <= R NOR NOTQ; 1 초 후에 NOTQ <= S NOR Q '와 동일한 델타 싸이클 (중간에 WAIT가 없음)에서 S와 R 모두'0 '에서'1 '로 전환하면 [진동] (https : // i .stack.imgur.com/d23rt.png "srlatch_vhdl_with_delay.png") 델타 사이클을 표시하거나 최대 델타 사이클 수를 초과 할 수있는 파형 표시가 필요하지 않습니다. – user1155120

답변

1

누군가가 당신에게 잘못된 지식을 가르치고 있습니다!

SR 및 RS 기본 플립 플롭 (래치라고도 함)은 발진하지 않습니다. S = R = 1 (금지됨)의 문제는 (절 개)으로 갈 수 없기 때문에 S = R = 1을 나간 후에 상태를 알 수 없다는 것입니다. S = R = 1S = R = 0에서 S = 1; R = 0 (설정 됨) 또는 S = 0; R = 1 (재설정 됨)으로 전환됩니다. 그러면 세트 또는 이 재설정 상태로 시작되어 에 저장되고으로 저장됩니다.

VHDL은 이산 시간으로 시뮬레이트하고 모든 실행에 대해 동일한 시뮬레이션 결과를 재현한다는 점에 유의하십시오. 시뮬레이션 실행마다 다른 신호 지연을 일으키는 물리적 효과를 (쉽게) 시뮬레이션 할 수 없습니다.

btw. 당신은 VHDL 설명도 잘못입니다. QNOTQinout이 아닌 out 모드입니다. VHDL-2008을 지원하는 적절한 시뮬레이터 (아웃 포트를 다시 읽을 수 있음)를 사용하거나 중간 신호를 사용하십시오.

+0

THANX A LOT :) 나는 S = R = 1 후에 S = R = 0 상태가 진동한다는 것을 의미했습니다. 나는이 문제를 해결했다. 네가 나에게 대답하자마자, 그 일에 관한 것이었다. isim에서 시간 스케일은 '0'과 거의 동일하므로 반복 제한 '10000'이라는 isim 오류가 있습니다! 나는 행동의 정의를 늦추면서 그것을 해결했다 :) 다시 너를위한 감사 : –

+0

OP는 당신에게 접목을 말하는거야 <= '0'; r ≤ '0'; 100 ns 기다린다;'s <= '1'에 이어 기존 stim_proc의 끝까지; r <= '1'; 델타 사이클 오실 레이션을 일으킬 것입니다. - 시뮬레이션은 멈춤에 의해 멈 춥니 다. OP의 질문은 [Minimal, Complete and Verifiable example] (https://stackoverflow.com/help/mcve)을 제공하지 않는 문제를 보여주지 않으며 그가 일화와 관련된 문제를 해결하지도 않습니다. – user1155120

+0

Q와 NOTQ에 동일한 지정 지연을 사용하면 진동을 나타내는 파형을 얻을 수 있습니다. S와 R이 둘 다 '1'일 때 지연과 언밸런스를 불균형시킵니다. 공감대 - google * hazard logic * 또는 * Earle latch * (진동을 막기위한 합의 용어가있는 D 래치, IBM의 Earle)를 사용하는 쉬운 방법이 있습니다. S와 R이 동시에 '1'에서 '0'으로 동시에 이동하는 것을 본질적으로 금지하는 것은 없습니다. 물리적 인 구현에서는 드물지만 종료 될 수는 있지만 일반적으로 설정 또는 대기 시간 위반을 나타냅니다. 라우팅은 불균형을 지연시키는 경향이 있습니다. – user1155120

2

강사가 맞습니다.이 회로는 S와 R이 모두 "같은"시간에 해제되면 진동합니다. 귀하의 문제는 결핵이 일을하지 않는 것입니다, 그러나 이것은 수행합니다 이것은 수있는 좋은 방법이 아니다

enter image description here

:

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity TOP is 
end entity TOP; 

architecture A of TOP is 
    signal S,R,Q,NOTQ: std_logic; 

    component SRLATCH_VHDL is 
    port(
     S : in std_logic; 
     R : in std_logic; 
     Q : inout std_logic; 
     NOTQ : inout std_logic); 
    end component SRLATCH_VHDL; 

begin 
    U1 : SRLATCH_VHDL port map(S, R, Q, NOTQ); 

    process is 
    begin 
    S <= '1'; 
    R <= '1'; 
    wait for 10 ns; 
    S <= '0'; 
    R <= '0'; 
    wait; 
    end process; 
end architecture A; 

이 무한 델타 지연 진동을 생성합니다 비동기 동작을 보여줍니다. 회로의 물리적 특성을 효과적으로 단순화하고 VHDL 스케줄러를 사용하여 '델타 지연'을 사용하여 문제가 있음을 보여주기 때문입니다. 이를 수행하는 더 좋은 방법은 신호 지연을 추가하여 실제 회로 동작을 모델링하는 것입니다 (이것은 타이밍 시뮬레이션을 위해 백 - 주석을 달 때 도구가 수행하는 것과 정확히 같습니다). 신호 할당을 after으로 찾아보고 전송과 관성 지연 간의 차이점을 찾으십시오. 회로 다이어그램을 그리면 두 번째 제어 신호가 변경되기 전에 회로 주변의 신호 전파가 완료되지 않는 '작은'시간 창에서 SR이 모두 해제되면 문제가 발생한다는 것을 알 수 있습니다. 이제이 시간 창 내에 SR을 변경하는 테스트 벤치를 작성해야합니다.

SR 회로와 똑같은 방식으로 설계 한 거의 모든 것이 비동기식입니다.우리는 입력 신호가 동시에 변하지 않도록함으로써 회로를 '동기식'으로 만듭니다. 타이밍 도구의 임무는 '동일'이 실제로 의미하는 바를 알려주는 것입니다. 보고서 또는 데이터 시트 값을 설정 또는 보류 시간으로 지정하면 숫자는 단순히 '같지 않음'의 숫자 버전입니다.