그레이코드를 왜 쓰는거죠...?

Sikieiki   
   조회 8739   추천 0    

 숫자 바뀔때마다 1개씩만 바뀐다고 하는데

그것이 필요한 장소를 도무지 모르겠습니다

매번 숫자가 들어오면 변환을 해야하는데

그럼 부하만늘어나는것이 아닌지..,..>?

Yesterday is history, tomorrow is a mystery, So Today is a present
짧은글 일수록 신중하게.
무아 2020-12
저도 예전에 학교다닐 때 저런 코드가 왜 필요할까 생각해봤는데 (결론은 제 추측이란 얘기 입니다)
로터리 스위치 같이 그 값이 순차적으로 증가하고 감소하는 경우의 어플리케이션의 경우 (또는 별도의 동기 클럭이 없는 경우)
값이 1 증가 하거나 감소할 때 (또는 값이 변경 될 때) 순간적으로라도 예상하지 않은 다른 코드가 발생할 확률이 0 가 되는 장점이 있습니다.
     
서완호 2020-12
아하 그 엔코더 기판에 순간 떨어지고 붇는 중간타이밍에 오류가 생길수 있겠군요!
깨우침에 절말 감사드립니다!
ItsJaemin 2020-12
값이 변할때 타이밍 안맞는건 Sync를 잘못 맞춘 설계에서나 그렇고
그레이코드 사용 유무와는 상관없습니다. 그 확률이 0이 되는걸 보장해주지도 않구요

그레이코드가 CPU상에서 돌아가는 소프트웨어 only 개발에서는 별로 의미가 없는게 맞습니다.

하드웨어 의존적인 마이크로 컨트롤러나 FPGA같은 곳에서
하드웨어 적으로 Pin을 Low -> High로 변환하는데에 전력이 소모됩니다.
한번에 여러개의 핀을 동시에 On 하게 되면 순간적으로 전원을 확 끌어다 쓰기도 해서 오동작 등의 문제가 될 수도 있구요

그걸 최소화 하겠다는 컨셉입니다.
요즘은 칩들이 워낙 저전력으로 잘 나오다보니 크게 활용도가 높지는 않습니다만..
     
무아 2020-12
디지털로만 돌아가는 세상에선 별 의미가 없지만
물리적인 위치값을 디지털로 바꾸는 과정에선 분명 그레이코드가 유리하긴 합니다.

위키를 검색해보니 이런 말이 있습니다.
The problem with natural binary codes is that physical switches are not ideal: it is very unlikely that physical switches will change states exactly in synchrony. In the transition between the two states shown above, all three switches change state. In the brief period while all are changing, the switches will read some spurious position. Even without keybounce, the transition might look like 011 — 001 — 101 — 100. When the switches appear to be in position 001, the observer cannot tell if that is the "real" position 001, or a transitional state between two other positions. If the output feeds into a sequential system, possibly via combinational logic, then the sequential system may store a false value.
          
ItsJaemin 2020-12
밑에글 다는중에 댓글을 다셨군요,
(요 댓글 다는중에 위키내용을 다시 추가하셔서 내용이 좀 안맞네요)

그레이코드가 제한적인 오류검사 기능을 가지고 있어서 유리한것은 맞는데
그건 맨 윗글에서 말씀하신 것과는 좀 다릅니다.
설명하신 내용은 비동기 또는 동기 디지털 회로에서 데이터를 래치하는 타이밍에서 기인하는 오류에 대한 설명과 유사한 내용입니다.
그래서 제가 그 이야기인줄 알고 위와 같은 댓글을 달았던 것이고..

엔코더나 카운터 등에서는 연속적인 숫자가 들어오는데, 그레이코드를 사용하게되면 연속적인 숫자의 변화가 모두 비트 1개의 변화로 나타나고
그게 아닌 경우(다음 값이 들어왔는데 비트가 여러개 바뀐 경우)는 오류라고 판단할 수 있다는 장점이 있어서 유리한거죠.
ItsJaemin 2020-12
아.. 그리고 한가지더 추가하자면
윗분이 말씀해주신것 처럼 숫자가 순차적으로 증가하는 카운터 등에서만 제한적으로 사용됩니다.
숫자가 랜덤으로 왔다갔다 하는 애들은 그레이코드화 할 수가 없지요

한다고 해도, 비트가 1개씩만 변화한다는 장점이 사라집니다.
the촌놈 2020-12
연속된 숫자의 오류검사가 매우 간단해집니다.
죠슈아 2020-12
그레이코드는 두개의 서로다른 클럭 주파수를 갖는 FIFO 설계시 포인터 전달시 크로스도메인클럭 이슈를 해결하기 위한 방법으로 사용됩니다.
값의 증가나 감소가 발생 하는 시점에 다른 도메인으로 전달될때 하나의 비트만 바뀌기 때문에 리컨버젼스 문제가 발생하지 않기때문이죠

Bin -> bin2gary -> gray code -> cdc sync -> gray code -> gray2bin -> Bin
cdc sync 이전 이후 클럭 주파수 와 페이즈가 달라도 하나의 비트만이 바뀌므로 클럭간 동기회로가 다중비트 변경때와 다르게 리컨버전스 이슈를
회피하게되어 잘못된 데이터 전송의 문제가 발생 하지 않게 됩니다


QnA
제목Page 4790/5718
2014-05   5206296   정은준1
2015-12   1738273   백메가
2013-05   8712   정은준1
2003-06   8712   고대준
2011-12   8713   김동민
2005-02   8713   박준혁
2020-05   8713   iddqd
2010-07   8713   예관신규식
2014-05   8713   VSPress
2014-10   8714   송주환
2008-02   8714   이창묵
2015-09   8714   캡틴아메리카노
2014-12   8714   대한민국
2003-08   8714   김정중
2016-04   8714   PiPPuuP
2004-02   8714   김건우
2011-08   8714   호랑이곰
2003-08   8714   예병기
2009-07   8714   푸릉이
2009-10   8714   Sico
2010-05   8715   수퍼맨1
2016-11   8715   노성호