본문 바로가기

RISC-V CPU 설계

[RISC-V] 4.2 순차회로 : flip-flop ??

 

-  순차회로 :  출력이 ‘현재 입력’과 ‘과거 입력’에 의해 결정되는 회로이다. 

 

현재 입력 > 지금 인가하는 입력   ,, '과거 입력'은 어떻게 사용하는 걸까 ??

 

하드웨어에서는 입력된 데이터를 저장할 수 있는 모듈   >> 플립플롭  ( flip - flop )

 

 >> 과거의 입력을 가공해 형태를 바꿔 flip-flop에 저장하면  state ( 상태 ) 라고도 부른다.

 

따라서, 순차회로를 다시 표현하면 출력이 '현재 입력'과 '현재 상태'에 의해 결정되는 회로

 

ex) 300원짜리 콜라를 빼 먹는 자동판매기 

 

>>  지금까지 200원을 넣은 '현재 상태'에서 , 여기에 추가로 100원 ('현재 입력') 을 넣으면 출력으로 콜라를  뺄 수 있다.

 

 

 

 

Clock  , 클럭  = 오실레이터 , 크리스탈 , 크리스탈 오실레이터 , 주파수 으로 혼용

>> 플립플롭에 입력 데이터를 저장할 때 , 저장할 시점을 알려주는 중요한 신호 

cf) synchronous logic > 하드웨어를 말할때 synchronous라는 단어가 들어 있으면 클럭에 동기화되어 동작한다는 말이다

+) synchronous sequential logic, asynchronous sequential logic

 

 

플립플롭  >> 데이터를 저장하기 위해 사용하는모듈이다

>> clock의 상승에지에서 input 값을 output에 저장

 

 

>> 플립플롭을 만들때는 항상 always @ (posedge clk)을 넣어야 한다.

 

 

 

>> 시간에 따라 입력 D에 임의의 값을 넣어주고 출력 Q가 제대로 나오는지 확인 하는 것

 

매 rising-edge마다 입렫 D값을 출력 Q에 저장한다. 

 

여기서 delay는 flip-flop의 cell delay를 의미한다.

 

 

 

** 출력 Q에 저장할때 하면 안되는 상황

 

 

>> 플립플롭이 입력D를 Q에 저장하려는 순간 (클럭의 rising-edge) 입력 D가 다른 값으로 변했다.

 

sol ) rising-edge 전과 후 잠시 입력 D가 변하면 안된다!

 

 

그러면 입력 D가 rising-edge 전과 후 입력이 변하지 말아야 할 구간 조건은 어떤게 있을까?

 

>>  (1) Setup time =  클럭의 rising-edge 전에 입력 D가 안정되어 있어야 할 (변하지 말아야 할) 최소 시간을 말한다.

     

      (2) hold time = 클럭의 rising-edge 후에 입력 D가 변하지 말고 그대로 유지되어 있어야 할 최소시간을 말한다.

 

 

** 조건이 지켜지지 않으면 violation이 발생되는데  합성하는 CADtool이 발생하지 않도록 자동으로 하드웨어를 만든다.

 

그럼에도 violation이 발생한다면 그 지점을 찾아 조치를 해야한다.

 

ex) RV32I CPU와 같은 간단한 로직을 설계할때는 이런 violation이 발생하지 않지만

   

      AP 같은 큰 디지털 로직설계에서는 자주 발생한다.

 

 

 

 

 

출처 : 원리부터 설계까지 쉽고 명확한 컴퓨터구조 RISC-V 중심으로 - 서태원 지음