로직분석기란?

직분석기는 많은 디지털 신호를 한번에 캡쳐하고 캡쳐된 디지털신호간의 타이밍 정보를 표시하여 주는 매우 편리한 툴로, 특히 디지털 회로를 검증하고 디버깅하는데 유용하며 타이밍때문에 발생하는 문제를 해결하는데 매우 유용합니다.

로직분석기와 오실로스코프

디지털회로를 검증하고 테스트하기 위해 여러가지 형태의 측정툴이 사용이 되고 있는데, 디지털 오실로스코프도 흔히 사용되는 그러한 장치중에 하나입니다. 오실로스코프는 신호를 보기 위해서 범용적으로 사용이 되고 신호의 rising, falling 시간, 주파수, 에지 사이간 경과시간, 등 과같은 다양한 신호의 특정을 정교하게 측정합니다. 일반적인 디지털 오실로스코프는 4개의 신호입력을 가지고 있는데, 이 것은 동시에 4개의 신호와 신호속성을 관찰할 수 있다는 이야기가 됩니다.

하지만 만약에 32비트 마이크로프로세서 버스상의 디지털 신호들을 측정하고자 한다면, 오실로스코프는 채널이 많지 않기 때문에 별 도움이 되지 않기 때문에 로직분석기가 필요합니다. 로직분석기는 오실로스코프에 그 기원을 두고 있는 제품이지만 오실로스코프와는 신호를 다르게 분석하며 성능도 다릅니다. 아날로그 신호의 여러 정보를 측정하는 것 대신 로직분석기는 오직 신호의 로직상태만을 검출합니다. 그리고 많은 신호라인의 로직 상태를 한번에 캡쳐하기 때문에 신호간 타이밍을 검증하는데 도움이 되며, 마이크로프로세서 버스에서 전송되어 온 정보를 디코드하여 알아 볼 수 있는 형태로 표시하여 볼수 있습니다.

로직분석기는 데이터를 수평 시간축과 로직상태를 표시하는 하이 혹은 로우의 수직축으로 표시합니다. 그렇기때문에 로직분석기를 디지털회로에 연결한 후에는 아날로그 신호가 아닌 신호의 로직상태에 대해서만 신경을 쓰면됩니다. 그리고 로직분석기는 데이터를 실시간으로 보여주지 못하기 때문에, 먼저 데이터를 캡쳐한 후에 나중에 그것들을 디스플레이시켜 데이터를 살펴보아야 합니다.

로직분석기는 샘플링할 수 있는 채널의 갯수, 샘플링 레이트, 메모리뎁스가 제품 특성에 있어 제일 중요한 특성입니다. 메모리뎁스는 채널당 얼마나 많은 샘플이 저장될수 있는지를 의미하는데, 로직분석기가 32K 뎁스를 가지고 있다면 채널당 32K의 샘플을 저장할 수 있는 것입니다. 만약 초당 1mps의 샘플링 주기를 가지고 있다면, 32ms이면 메모리를 가득 채울 수 있습니다. 따라서 메모리 뎁스가 크면 좀더 오래 데이터를 샘플링할 수 있습니다.

모드

로직분석기는 두개의 기본모드가 있는데 하나는 타이밍모드이며 다른 하나는 상태모드입니다.

타이밍 모드에서는 로직분석기 내부 클럭에 의해 주기적인 간격으로 데이터를 샘플링을 하기 때문에, 샘플들과 타켓시스템과의 사이의 고정된 타이밍관계는 없습니다. 샘플은 메모리에 저장되고 나중에 신호들간 타이밍정보를 분석하기 위해 사용됩니다. 그렇기 때문에 비동기획득 모드라고도 하고 대부분의 하드웨어 디버깅에서 사용이 됩니다. 신호간 타이밍 관계는 소프트웨어와 관련된 문제를 해결하기 위해서는 특별히 유용하지 않습니다. 소프트웨어 엔지니어는 프로그램 명령의 흐름을 보는 것에 더 관심이 있습니다. 상태모드에서는, 타켓장치에서 오는 신호(보통 클럭)로 샘플링 위치를 결정합니다. 타켓 장치로부터 받은 매 클럭 신호의 에지에서 신호가 캡쳐되는 것입니다. 이런 경우에 신호들간의 상호 타이밍 정보는 별로 중요하지 않게 됩니다. 왜냐하면 샘플된 데이터가 실제 시스템클럭의 에지중에 수집되었고 실제 타켓시스템의 상태를 표시하기 때문입니다. 그래서 여러번의 샘플링을 통하면, 시스템의 연속적인 상태를 순차적으로 캡쳐하고 표시할 수 있게 되는 것입니다. 이점이 타이밍모드와 상태모드의 차이점입니다. 하지만 대다수의 로직분석기는 상태모드를 지원하지 않습니다.

트리거링

사용자는 로직분석기에게 샘플링을 언제부터 시작할 것인지 알려주는 신호가 필요한데 이러한 신호를 트리거 신호라고합니다. 메모리의 용량이 제한되어 있기 때문에 필요한 부분의 샘플만을 캡쳐할 수 있게 하는데 도움이 되는 신호입니다. 트리거는 보통 샘플링되는 데이터상의 로직 상태로 정의가 가능합니다. 예를 들어 어떤 한 라인의 로직 상태가 변했을때를 트리거로 사용이 가능합니다. 비슷하게 좀더 복잡한 시스템에서는 버스상에서 특정 이진값이 검출되거나 미리 정의된 데이터 값들이 트리거 가 될 수 있습니다.

샘플링 테스트

Saleae Logic 분석기 샘플링 테스트를 하기 위해 I/O핀을 0과 1로 계속 토글 시키는 간단한 아두이노 프로그램을 사용하였습니다. 두개의 입출력 핀중 하나를 이렇게 토클 시키고, 다른 하나는 다른 핀 토글작업 전에 하이상태로 바꾸어 트리거 신호로 사용하였습니다.

1
2
3
4
5
6
7
8
9
void loop() {
  digitalWrite(0, HIGH);
  for (int i=0; i<10; i++) {
    digitalWrite(1, LOW);
    digitalWrite(1, HIGH);
  }
  digitalWrite(0, LOW);
  delay(500);
}

로직분석기의 프로브를 핀 0, 1번에 후크시키고 회색 그라운드 핀은 아두이노 그라운드에 연결합니다.


위의 그림은 두개의 입력 핀이 로직분석기에 의해 캡쳐된 모습입니다. Pin D0가 0에서 1로 상태가 변환될때 트리거가 되어 로직분석기가 샘플링을 시작합니다.


Comments