본문 바로가기
공부/논리회로설계

논리회로설계(레지스터)

by 맑은청이 2020. 6. 4.
728x90
반응형

오늘 배운 강의를 복습해보겠습니다. 오늘은 레지스터에 대해 배워보았습니다.

 

 

저번 시간 강의 내용입니다.

https://com24everyday.tistory.com/105

 

논리회로와 설계

스펙에서부터 상태천이도를 구하는 과정을 알아봅시다. FSM(Finite State Machine) 상태유한기는 상태가 유한한 회로인데 즉 순차회로라는 뜻입니다. 다음 순차회로는 Binary String에서 특별한 패턴 "1011"

com24everyday.tistory.com

일단 저번 시간에 복습으로 원핫 코딩을 사용하여 구해진 부울식이 최소길이를 사용하여 구해진 부울식보다 간단합니다. 간단하다는 의미를 사용하는 게이트 수 적다는 겁니다. 원핫 코드가 플립플롭은 많이 사용하지만 성능향상은 조합회로를 간단하게 하는거에 사용되기 때문에 원핫코드를 사용되는 이유는 충분합니다.

 

 

 

(a) Asynchronous Reset

비동기적 리셋이 되는 D 플립플롭입니다. 

비동기적 리셋이란 R = 1 이면 클럭 라이징 에지를 기다리지 않고(즉 클럭과 상관없이) Y가 0이 되는 것입니다. 

 

(b) Synchronous Reset

이와과 같이 인에이블 로직이 붙으면 이건 동기적 리셋이 되는 D 플립플롭입니다.

동기적 리셋이란 R(RESET) = 1 이면 무조건 리셋이 되는 게 아니라 클럭이 rising 되는 시점에서 R =1 이어야만 Y = 0이 된다는 겁니다. 

(AND 게이트 출력의 0이 D의 입력으로 들어감으로써) 

즉 RESET =1 이 되는 시점이 clock 의 rising edge 시점과 동기화 되어야 리셋


Chapter 6. Register and Register Transfer 

 

정말 중요한 단원입니다. 왜 중요하냐? 레지스터가 중요하기 때문입니다. 

그럼 레지스터가 왜 중요하냐구요?

레지스터소프트웨어에서 변수같은 역할을 합니다. 

변수가 없으면 프로그래밍 할 수 없죠.

동일하게 레지스터가 없으면 하드웨어 만들기가 불가능합니다 .

 

레지스터를 단순히 이야기 하자면 n-비트 데이터를 저장할 수 있는 n-비트 D 플립플롭입니다.

즉 D 플립플롭이 4개면 4비트 레지스터, 64개면 64비트 레지스터 입니다.

 

그럼 단원명인 Register Transfer 는 뭘까요.

소프트웨어에서 variable assignment 는 이를 통해 한 변수에서 다른 변수로 값을 넘겨주는겁니다. 

 

int a = 5;

int b;

b = a;

 

이런 느낌으로.

 

하드웨어에서도 한 레지스터에서 다른 레지스터로 값을 옮기는 겁니다.

하드웨어도 수많은 register transfer 이 존재합니다. 

 

다음 사진은 4비트 레지스터입니다.

간단하게 표현하면 다음과 같습니다.

더 간단해지면 다음과 같습니다.

16비트 레지스터 입니다.

나중에는 숫자도 안 쓸 수 있습니다.

 

 

 

 

 

레지스터 전송의 의미는 이러합니다.

'Transfering the data from one register to the other at the specific time'

 

여기서 중요한 건 특정 시간에 레지스터전송이 일어나야 한다는 겁니다.

 

소프트웨어 프로그래밍에서도 변수선언이 막 일어나면 안되죠? 하드웨어도 마찬가지입니다. 우리가 원하는 시점에서만 일어나야 합니다. 그럼 어떻게 해야할까요?

 

주기적 신호인 클럭을 통하여 가능합니다 . 

클럭의 여러 사이클 중에서 특정 주기에서 레지스터 전송이 일어나게 해주어야 하는 것이 매우 중요한 겁니다. 

그걸 가능케 해주는 게 다음 그림입니다.

 

D플립플롭에 2-to-1 MUX가 달려있는 겁니다. 위아래 그림은 동일 합니다. 

-EN =0 

현재 Q의 값이 선택되어 D로 다시 들어감으로 클럭의 라이징 에지에서 이 값을 받아들이더라도 값 변화가 일어나지 않습니다. 

 

-EN = 1

외부에서 들어가는 D값이 선택되어 들어감으로 클럭의 라이징 에지에서 이 값을 받아들여서 새로운 값이 써지고 이게 '레지스터 전송' 입니다. 

 

EN = 0 레지스터 전송 X / EN = 1 레지스터 전송 O

 

 

이 걸 축약 시키면 다음 심볼과 같습니다.

이걸 4비트로 이으면 

그럼 이 회로와 다음 회로의 차이는 무엇일까요? 


왼쪽 회로는 무조건 매 클럭 사이클에서 레지스터 트랜스퍼가 됩니다. 

오른쪽 회로는 EN을 가지고 원하는 시점에서만 레지스터 트랜스퍼가 일어납니다. 

이 둘의 차이는 둘 다 동기적이지만 EN의 유무로

 

"원하는 때(특정 클럭 사이클에서)만 레지스터 트랜스퍼가 가능합니다" 

 


질문 하나 하겠습니다. 이 그림의 어디에서 레지스터 전송이 발생하나요. 

물론 '딜레이를  생각해야하나요?' 라는 질문이 있을 수 있습니다. 

맞는거 같지만 아닙니다. 지연시간은 중요한 부분이지만 기능적 설계를 할때는 고려하지 않기 때문입니다. 딜레이는 항상 존재합니다.

 

답은 다음과 같습니다.

클럭의 두번째 주기에 라이징에서만 이루어집니다. 왜냐 두번째 Load에서는 클럭 동기화가 일어나지 않기 때문입니다. 

클럭 라이징 에지시점에서 LOAD =1 이 되어야만 register transfer 가 일어납니다.

 

그럼 다음 그림은 어디에서 레지스터 전송이 발생할까요?

첫번째 라이징 에지일까요 두번째 에지일까요?

답은 두번째 입니다. 

이유는 딜레이 때문입니다. 실제로 Load는 딜레이 때문에 주황색과 같이 발생합니다. 

그렇기 때문에 초록색 라이징 에지에서 레지스터 전송이 되지 않는겁니다. 

 

 

여기서 또 질문

'클럭은 Delay 가 일어나지 않나요?'

맞는 말입니다.

 

클럭의 역할에 대해 생각해봅시다. 클럭은 하드웨어에서 주기적 신호를 줌으로서 전체 하드웨어에게 시간개념을 주는 역할 입니다. 그러므로 클럭의 딜레이가 과도하게 발생하면 시간 개념이 흔들립니다. 따라서 클럭에서는 지연 시간이 거의 발생하지 않도록 설계에서는 고려하지 않습니다. -> 즉 상대적으로 작음으로 무시해도 된다는 말입니다.

 

 

또다른 질문

파랑색 처럼 Load를 주면 어떨까요? 

 

 

 

 

레지스터 트랜스터가 일어나지 않습니다. 그러니 이렇게 Load 를 발생시키면 안됩니다. 즉 Load 신호의 1의 길이가 클럭 1주기보다 짧으면 안됩니다. 외부적인 요인 없이도 클럭 1주기보다 짧으면 레이스터 전송이 안 일어날 가능성이 매애애애애우 높습니다.

 

 

 

 

오늘은 레지스터와 클럭 라이징 동기화에 대해 알아보았습니다. 수고하셨습니다. 

728x90
반응형