본문 바로가기
하만 세미콘 아카데미/Verilog HDL

UART 이론 (수업시간 내용 정리)

by smileww 2024. 5. 31.

chblee@weduslution.com

 

synthesis: 베릴로그 코드를 회로도로 바꾸는 과정

 

 

 

 

 

 

 

고속이 필요하지 않을 때

  • UART는 데이터 전송 속도가 매우 빠르지 않아도 되는 통신에 적합합니다. 예를 들어, 간단한 센서 데이터를 수집하거나 작은 양의 데이터를 주고받는 장치간 통신에 사용됩니다.

저렴한 통신 수단이 필요할 때

  • UART는 하드웨어 구성이 간단하고 비용이 낮아 비용을 최소화하면서 두 장치 간 통신을 구현할 수 있습니다. 예를 들어, 마이크로컨트롤러와 센서 사이에 단일 와이어를 사용하여 데이터를 전송할 수 있습니다.

비동기 직렬 통신

  • UART는 송신기와 수신기가 필요하며, 각 방향마다 하나의 와이어만 필요하고, 또한 접지선이 필요합니다. 하드웨어가 간단하고, 전송 시작 시점과 끝 시점이 정해져 있지 않기 때문에 '비동기' 방식으로 작동합니다.

PC 장치에서의 사용 예

  • 이전에는 마우스나 모뎀과 같은 PC 장치가 비동기 직렬 통신 장치로 자주 사용되었습니다. 이는 UART가 소량의 데이터를 비교적 낮은 속도로 송수신하는데 적합하기 때문입니다.

 

 

 

 

 

이 그림에서는 두 대의 컴퓨터가 직렬 포트와 케이블을 통해 연결되어 데이터를 주고받는 과정을 보여줍니다. 이러한 방식은 데이터 통신을 위한 간단하고 효율적인 방법을 제공하며, 특히 낮은 데이터 전송 속도가 요구되는 환경에서 유용합니다.

 

직렬화: 컴퓨터나 장치에서 데이터를 전송하기 전에 데이터를 '직렬화'합니다. 이는 데이터 비트를 한 줄로 나열해 직렬 케이블을 통해 순차적으로 전송할 수 있도록 하는 과정입니다.

 

데이터 전송: 직렬화된 데이터는 직렬 케이블을 통해 다른 장치로 전송됩니다. 예를 들어, 한 PC에서 다른 PC로 또는 외부 장치로 데이터를 보낼 수 있습니다.

 

역직렬화: 데이터를 받은 장치는 받은 직렬 데이터를 원래의 형태(보통은 병렬 데이터)로 '역직렬화'하여 사용할 수 있게 합니다. 이 과정은 수신된 데이터 비트를 다시 적절한 데이터 구조로 재구성하는 것을 포함합니다.

 

 

 

 

UART의 또 다른 중요한 사용 사례인, 원거리 컴퓨터 간의 통신을 보여주는 그림으로 특히 모뎀을 통한 데이터 전송을 중점적으로 다룹니다

 

직렬화: 컴퓨터는 모뎀을 통해 전송할 데이터를 직렬화합니다. 직렬화란 데이터를 하나의 연속된 비트 스트림으로 변환하는 과정을 말합니다. 이는 데이터가 직렬 케이블을 통해 효율적으로 전송될 수 있게 합니다.

 

데이터 전송: 직렬화된 데이터는 직렬 케이블을 통해 모뎀으로 전송됩니다. 모뎀은 이 데이터를 전화선을 통해 다른 위치의 모뎀으로 보냅니다. 이 과정에서 데이터는 아날로그 신호로 변환될 수도 있습니다.

 

역직렬화: 반대쪽 모뎀에서 받은 데이터는 다시 디지털 형태로 변환되고, 연결된 컴퓨터로 전송되기 전에 역직렬화됩니다. 역직렬화는 데이터를 원래의 형태(보통은 병렬 데이터)로 재구성하는 과정입니다.

 

그림에서 보여주는 것처럼, 컴퓨터, 모뎀, 전화선, 그리고 직렬 케이블을 사용하여 먼 거리에 있는 컴퓨터 간에 데이터를 주고받을 수 있습니다. 이 방식은 특히 인터넷을 통한 데이터 통신에 널리 사용되었습니다. 이 예에서 UART는 데이터 전송의 기본적인 구성 요소로서 중요한 역할을 합니다.

 

 

 

 

 

UART의 또 다른 용도인 메인프레임 접근에 관한 그림으로. 메인프레임 컴퓨터는 큰 데이터 센터나 기업 환경에서 여러 터미널이나 워크스테이션과 연결되어 데이터를 처리하고 관리하는 데 사용되는 큰 규모의 컴퓨터 시스템입니다.

 

메인프레임: 이는 중앙집중식 컴퓨터 시스템으로, 대규모 데이터 처리 작업을 수행합니다. 메인프레임은 통상적으로 많은 수의 직렬 포트를 갖고 있어 다수의 터미널이나 기타 컴퓨팅 장치와 연결될 수 있습니다.

 

직렬 포트: 메인프레임은 수십 개의 직렬 포트를 통해 다양한 터미널과 통신할 수 있습니다. 각 포트는 UART를 사용하여 데이터를 직렬화하고 터미널로 전송합니다.

 

터미널: 이들은 메인프레임에 연결된 사용자 인터페이스 장치로서, 사용자가 메인프레임 시스템과 상호작용할 수 있게 해줍니다. 터미널은 메인프레임에서 전송된 데이터를 역직렬화하여 사용자가 이해할 수 있는 형태로 정보를 표시합니다.

 

이러한 설정은 특히 과거에 데이터 센터나 대학 등의 큰 조직에서 많이 사용되었습니다. 여기서 UART는 각 터미널과 메인프레임 간의 통신을 원활하게 만드는 데 중요한 역할을 했습니다. 이 방식은 데이터 처리와 정보 교환을 중앙에서 효율적으로 관리할 수 있는 방법을 제공했습니다.

 

 

Outbound Data (송신 데이터)

  1. 병렬에서 직렬로 변환: UART는 데이터를 병렬 형식에서 직렬 형식으로 변환합니다. 병렬 데이터는 여러 비트가 동시에 전송되는 형태인 반면, 직렬 데이터는 비트가 연속적으로 한 줄로 전송됩니다.
  2. 시작 및 정지 구분자 추가: 각 데이터 패킷의 시작과 끝을 나타내기 위해 시작 비트와 정지 비트를 추가합니다. 이는 수신기가 데이터의 시작과 끝을 인식하게 해주어 동기화를 유지하는 데 도움을 줍니다.
  3. 패리티 비트 추가: 데이터의 오류를 감지하기 위해 패리티 비트가 추가됩니다. 패리티 비트는 전송되는 데이터의 1의 개수가 홀수인지 짝수인지를 나타내어 간단한 오류를 확인할 수 있게 합니다.

Inbound Data (수신 데이터)

  1. 직렬에서 병렬로 변환: 수신된 직렬 데이터를 원래의 병렬 데이터 형식으로 되돌립니다. 이 과정을 통해 컴퓨터나 기타 장치가 데이터를 처리할 수 있게 됩니다.
  2. 시작 및 정지 구분자 제거: 데이터에서 시작 비트와 정지 비트를 제거하여 순수한 데이터만을 추출합니다.
  3. 패리티 비트 확인 및 제거: 패리티 비트를 검사하여 데이터 전송 중에 발생한 오류가 있는지 확인하고, 이후 데이터에서 패리티 비트를 제거합니다.

직렬과 병렬의 차이

더보기

병렬 데이터 전송

병렬 데이터 전송은 여러 데이터 비트를 동시에 전송하는 방식입니다. 병렬 전송은 여러 개의 전선을 사용하여 각각의 전선이 데이터의 한 비트를 동시에 전달합니다. 이 방식은 데이터를 빠르게 전송할 수 있지만, 전선이 많이 필요하고 거리가 멀어질수록 신호의 동기를 맞추는 데 어려움이 있습니다.

 

간단한 예시:

  • 생각해보세요, 여러분이 친구 8명과 함께 서 있는데, 각자 손에는 숫자가 적힌 종이 한 장씩 들고 있습니다. 친구들이 모두 한 번에 종이를 보여주면, 여러분은 한 번에 8개의 숫자를 모두 볼 수 있습니다. 이것이 병렬 전송의 모습입니다.

직렬 데이터 전송

직렬 데이터 전송은 데이터 비트를 하나씩 차례로 전송하는 방식입니다. 직렬 전송은 하나 또는 소수의 전선만 사용하여 모든 데이터 비트를 순차적으로 전달합니다. 이 방식은 전선이 적게 필요하고 더 긴 거리에 데이터를 전송하는 데 유리합니다.

 

간단한 예시:

  • 이번에는 친구 한 명만이 숫자가 적힌 종이를 들고 있고, 그 친구가 숫자를 하나씩 차례로 보여줍니다. 여러분은 각 숫자를 차례로 보게 되는데, 이것이 직렬 전송의 모습입니다.

직렬과 병렬의 차이

병렬 전송은 여러 비트를 동시에 전송할 수 있어 전송 속도가 빠르지만, 더 많은 전선이 필요하고 짧은 거리에 적합합니다. 반면, 직렬 전송은 전선 수가 적고 거리에 덜 민감하며 설치 비용이 낮지만 데이터를 한 비트씩 전송하기 때문에 전송 속도가 상대적으로 느릴 수 있습니다.

병렬과 직렬 데이터 전송의 개념 및 예시

더보기

병렬 데이터 전송직렬 데이터 전송은 데이터를 전송하는 두 가지 기본적인 방법입니다. 이 두 방식의 차이는 데이터 비트가 전송선을 통해 어떻게 이동하는지에 있습니다.

병렬 데이터 전송

병렬 데이터 전송에서는 여러 비트가 동시에 각기 다른 전송선을 통해 전송됩니다. 이 방식은 일반적으로 데이터 전송 속도를 높이기 위해 사용되지만, 더 많은 수의 전선이 필요하고 거리가 길어질수록 신호 간섭의 문제가 발생할 수 있습니다.

 

예시: 병렬 포트를 사용하는 프린터는 컴퓨터에서 여러 데이터 비트를 동시에 전송받아 빠르게 페이지를 인쇄합니다. 데이터의 각 비트는 프린터로 가는 여러 케이블을 통해 동시에 전송됩니다.

직렬 데이터 전송

직렬 데이터 전송에서는 데이터 비트가 한 줄로 순차적으로 전송됩니다. 이 방식은 비트를 차례대로 한 개의 전송선을 통해 보내기 때문에 병렬 전송보다 적은 수의 전선을 사용하며 더 긴 거리로 데이터를 보내는 데 적합합니다.

 

예시: USB 케이블은 직렬 방식을 사용하여 컴퓨터와 외부 장치 사이의 데이터를 전송합니다. 데이터는 하나의 케이블을 통해 한 비트씩 순차적으로 전송되어, 비록 한 번에 한 비트만 전송되지만, 전체적인 연결 구성이 간단하고 효율적입니다.

적용 예

UART는 이러한 직렬 데이터 전송 방식을 사용하여 데이터를 송수신합니다. 컴퓨터의 데이터 버스에서는 정보가 병렬로 처리되기 때문에, UART는 이를 받아서 직렬로 변환한 후 외부로 전송하거나 외부에서 받은 직렬 데이터를 다시 병렬로 변환하여 컴퓨터가 처리할 수 있도록 합니다. 이 과정에서 시작, 정지 및 패리티 비트를 추가하거나 제거하여 데이터의 정확성을 보장합니다.

 

 

 

 

데이터 비트가 어떻게 직렬로 전송되는지를 시각적으로 나타내며, 각 비트의 상태를 표시하여 UART 통신의 기본을 이해하는 데 도움을 줍니다.

타이밍 다이어그램 분석

  • 단일 와이어 사용: UART는 데이터를 전송할 때 단일 와이어를 사용합니다. 이 와이어는 데이터 비트를 순차적으로 전송하는 데 사용됩니다.
  • 비트 상태: 다이어그램에는 각 비트가 '마크'(논리 '1', 전압 높음) 또는 '스페이스'(논리 '0', 전압 낮음)의 두 가지 상태 중 하나로 표시됩니다.
  • 1비트 시간: 각 사각형 블록은 "1비트 시간"을 나타냅니다. 이는 하나의 비트가 전송되는데 걸리는 시간을 의미하며, UART 설정에 따라 다른 속도에서 이 시간은 달라질 수 있습니다.

데이터 전송 과정

  1. 전송 시작: 전송의 시작은 일반적으로 '스타트 비트'로 표시되며, 이는 보통 논리 '0'의 상태입니다.
  2. 데이터 비트: 스타트 비트 다음에는 실제 데이터 비트가 전송됩니다. 이 예제에서는 비트 값들이 연속적으로 나열되어 있습니다.
  3. 전송 종료: 데이터 비트 다음에는 종종 '스톱 비트'가 올 수 있으며, 이는 논리 '1'의 상태로 데이터의 종료를 알립니다.

이 다이어그램과 같은 타이밍 방식은 UART를 이용한 통신에서 기본적으로 적용됩니다. 예를 들어, 컴퓨터와 마이크로컨트롤러 간, 혹은 다른 종류의 직렬 통신을 필요로 하는 장치들 사이에서 데이터를 주고받을 때 사용됩니다. 이러한 방식은 데이터가 정확하게 시간에 맞춰 전송되도록 보장하여 통신 오류를 최소화합니다.

 

 

 

 

UART에서 비트 전송 시간의 개념을 설명하는 그림으로 각 비트의 전송 시간은 UART의 전송 속도(보드레이트)에 따라 결정됩니다. 이 그림에서는 전송 속도가 1200 bps(초당 비트 수)인 경우를 보여주고 있습니다.

비트 전송 시간 계산

  • 보드레이트: UART의 전송 속도는 보드레이트로 표시되며, 이는 초당 전송되는 비트 수를 나타냅니다. 여기서는 1200 bps입니다.
  • 비트 시간: 각 비트의 전송에 소요되는 시간은 보드레이트의 역수로 계산됩니다. 즉, 1200 bps의 경우, 각 비트는 1/1200초, 또는 약 833.3 마이크로초(μs) 동안 지속됩니다.

타이밍 다이어그램

  • 다이어그램: 슬라이드에 나타난 타이밍 다이어그램은 각 비트의 지속 시간을 시각적으로 보여 줍니다. 여기서 각 사각형은 하나의 비트를 나타내며, 그 길이는 비트가 전송선에 존재하는 시간을 표현합니다.

적용 예

  • 이런 타이밍은 데이터를 전송할 때 각 비트가 얼마나 오래 전송선에 존재해야 하는지를 정확하게 제어할 수 있게 해 줍니다. 이는 수신기가 정확한 타이밍으로 데이터를 읽을 수 있도록 보장하며, 데이터 전송의 정확성과 신뢰성을 높이는 데 중요합니다.

UART 통신에서 이러한 비트 타이밍을 정확히 유지하는 것은 특히 장거리 통신이나 속도가 민감한 애플리케이션에서 매우 중요합니다. 각 비트의 정확한 지속 시간은 데이터가 올바르게 수신되고 해석되도록 하는 핵심 요소입니다.

 

 

 

스타트 비트는 데이터 프레임의 시작을 나타내는 신호로, 데이터 전송의 시작점을 정의합니다.

스타트 비트의 역할

  • 데이터 프레임의 시작을 알림: UART 데이터 전송은 스타트 비트로 시작합니다. 이 비트는 보통 논리적 '0'으로 설정되어, 수신기가 데이터 스트림의 시작을 인지할 수 있도록 합니다.
  • 수신기와의 동기화: 스타트 비트가 감지되면, 수신기는 데이터 스트림과 동기화를 시작합니다. 이는 수신기가 정확한 타이밍으로 후속 비트를 읽을 수 있게 하는 기준점을 제공합니다.

타이밍 다이어그램

  • 다이어그램: 제공된 타이밍 다이어그램은 스타트 비트 다음에 위치한 데이터 비트들을 시각적으로 보여줍니다. 각 사각형은 하나의 비트를 나타내며, 스타트 비트가 전송 후 첫 번째로 오는 점을 강조합니다.

데이터 전송 과정

  • 데이터 전송이 시작되기 전, 통신 라인은 보통 '아이들 상태'(논리 '1')를 유지합니다.
  • 스타트 비트가 전송되면, 라인이 논리 '0'으로 떨어지고 이는 데이터 전송의 시작을 알립니다.
  • 스타트 비트 후에 실제 데이터 비트들이 뒤따르며, 이 비트들은 전송하고자 하는 실제 정보를 포함합니다.

중요성

스타트 비트는 UART 통신에서 데이터의 정확한 시작 시점을 수신기에게 명확하게 알려주는 중요한 역할을 합니다. 이를 통해 수신기는 시작 지점을 기준으로 데이터 비트를 올바르게 읽을 수 있으며, 데이터의 무결성을 보장하는 데 기여합니다.

 

 

 

 

UART 통신에서 데이터 비트의 전송 순서로 특히, 데이터 비트가 전송될 때 가장 덜 중요한 비트(Least Significant Bit, LSB)부터 시작합니다.

데이터 비트의 전송

  • 데이터 비트: 이 다이어그램에서는 총 7개의 데이터 비트를 보여주고 있으며, UART 설정에 따라 7개 또는 8개의 데이터 비트를 사용할 수 있습니다.
  • 전송 순서: 데이터 비트는 가장 낮은 가중치를 가진 비트(가장 덜 중요한 비트, LSB)부터 전송됩니다. 이는 데이터를 좌에서 우로 읽으면서 첫 번째 비트가 가장 낮은 가중치를 가진 비트임을 의미합니다.

타이밍 다이어그램

  • 스타트 비트 후 데이터 비트: 타이밍 다이어그램은 스타트 비트 직후에 데이터 비트가 어떻게 전송되는지 보여줍니다. 스타트 비트는 보통 '0'(저 전압)이고, 데이터 비트는 스타트 비트 후 바로 전송됩니다.
  • 비트의 시각적 표현: 다이어그램에 있는 각 직사각형은 하나의 비트를 나타내며, 색이 칠해진 부분은 데이터 비트가 '1'일 가능성을 나타내는 것이고, 빈 부분은 '0'일 가능성을 나타냅니다.

중요성

UART에서 LSB를 먼저 보내는 것은 데이터를 효율적으로 전송하고 수신기에서 쉽게 해석할 수 있도록 하는 데 중요합니다. 이 방식은 데이터의 정확한 해석을 돕고, 통신 중 오류 발생 시 오류를 더 쉽게 식별하고 수정할 수 있게 합니다. 이러한 방식은 다른 많은 직렬 통신 프로토콜에서도 일반적으로 사용됩니다.

 

 

UART 통신에서 사용되는 패리티 비트의 역할로 패리티 비트는 데이터 전송 과정에서 오류를 감지하는 데 사용되는 중요한 메커니즘 중 하나입니다.

패리티 비트의 역할

  • 오류 감지: 패리티 비트는 데이터 전송 중에 발생할 수 있는 단일 비트 오류를 감지하는 데 사용됩니다. 이 비트는 데이터 비트와 함께 전송되어 수신기가 전송 오류를 확인할 수 있게 합니다.
  • 짝수 패리티(Even Parity): 데이터 프레임 내의 '1'의 총 개수를 짝수로 만들기 위해 패리티 비트가 설정됩니다. 예를 들어, 데이터 비트 내의 '1'의 수가 홀수라면, 패리티 비트는 '1'이 됩니다.
  • 홀수 패리티(Odd Parity): 데이터 프레임 내의 '1'의 총 개수를 홀수로 만들기 위해 패리티 비트가 설정됩니다. 예를 들어, 데이터 비트 내의 '1'의 수가 짝수라면, 패리티 비트는 '1'이 됩니다.

타이밍 다이어그램

  • 패리티 비트 위치: 다이어그램에서 패리티 비트는 데이터 비트 바로 후에 위치하며, 이는 데이터의 끝을 나타내는 스톱 비트 전에 배치됩니다.
  • 비트의 표현: 슬라이드에 나타난 패리티 비트는 다른 데이터 비트들과 구분되어 색칠된 상태로 표시되어 있습니다. 이는 패리티 비트가 데이터 프레임의 일부임을 강조하며, 수신기가 이를 사용하여 데이터의 무결성을 검증할 수 있음을 나타냅니다.

중요성

패리티 비트는 UART 통신의 신뢰성을 높이는데 중요한 역할을 합니다. 비록 모든 유형의 오류를 감지할 수는 없지만, 패리티 비트는 특히 단일 비트 오류를 효과적으로 감지할 수 있어 데이터 전송의 정확성을 개선합니다. 이러한 간단한 메커니즘 덕분에, 통신 오류가 발생했을 때 적절한 조치를 취할 수 있습니다.

 

 

 

UART 통신에서 '스톱 비트'의 역할과 중요성을 설명하는 그림으로 스톱 비트는 데이터 프레임의 끝을 나타내는 역할을 하며, 다음 데이터 프레임의 시작점을 구분하는 데 사용됩니다.

스톱 비트의 역할

  • 전송 종료 신호: 스톱 비트는 데이터 프레임의 끝을 나타내며, 수신기가 프레임이 종료됨을 인지할 수 있도록 합니다.
  • 수신기 확인: 스톱 비트는 항상 논리 '1' (높은 전압)입니다. 수신기는 스톱 비트를 감지하여 데이터 프레임이 정상적으로 종료되었는지 확인합니다.
  • 데이터 구분: 스톱 비트는 연속된 데이터 프레임 간에 명확한 구분을 제공합니다. 이는 수신기가 다음 데이터 프레임의 스타트 비트를 정확하게 식별할 수 있게 해 줍니다.

타이밍 다이어그램

  • 다이어그램 구조: 타이밍 다이어그램은 스타트 비트, 데이터 비트, 패리티 비트, 그리고 스톱 비트를 순서대로 보여줍니다. 스톱 비트는 데이터 전송의 마지막 부분에 위치하며, 이후에 새로운 데이터 프레임의 스타트 비트가 올 수 있습니다.
  • 시각적 표현: 스톱 비트는 다이어그램에서 높은 전압 상태로 표시되어 있으며, 이는 수신기가 전송이 완료되었음을 알 수 있는 신호입니다.

중요성

스톱 비트는 UART 통신의 신뢰성을 높이는 데 중요한 역할을 합니다. 스톱 비트를 통해 수신기는 데이터의 끝을 정확하게 감지하고, 오류 없이 다음 데이터를 준비할 수 있습니다. 이는 통신 과정에서의 실수를 최소화하고, 데이터의 정확한 전송을 보장하는 데 기여합니다.

 

 

UART 데이터 프레임의 구성을 보여주며, 총 7비트의 데이터를 전송하는 데 10비트가 필요합니다.

UART 데이터 프레임 구성

  • 스타트 비트: 모든 UART 통신은 스타트 비트로 시작합니다. 이 비트는 항상 로우(0) 상태이며, 데이터 프레임의 시작을 알립니다.
  • 7 데이터 비트: 이 프레임은 7개의 데이터 비트를 포함합니다. 데이터 비트는 가장 덜 중요한 비트(LSB)부터 가장 중요한 비트(MSB)까지 순서대로 전송됩니다.
  • 패리티 비트: 데이터의 무결성을 확인하기 위해 패리티 비트가 추가됩니다. 이 비트는 데이터 비트 내의 1의 총 수가 짝수(짝수 패리티) 또는 홀수(홀수 패리티)가 되도록 설정됩니다.
  • 스톱 비트: 데이터 프레임의 끝을 나타내며, 수신기가 다음 데이터 프레임을 대기하는 동안 데이터 라인을 아이들 상태(1)로 유지합니다.

타이밍 다이어그램

  • 비트 시퀀스: 타이밍 다이어그램은 스타트 비트에서 시작하여 7개의 데이터 비트, 패리티 비트, 그리고 스톱 비트 순으로 배열됩니다. 각 비트는 전송선 위에서 특정 시간 동안 유지됩니다.
  • 시각적 표현: 각 비트의 상태가 다이어그램에서 명확히 구분됩니다. 스타트 비트는 로우 상태, 스톱 비트는 하이 상태로 표시되며, 데이터 비트와 패리티 비트는 전송할 데이터에 따라 변화합니다.

중요성

이러한 구성은 UART 통신의 신뢰성을 보장하며, 오류 감지와 프레임의 정확한 해석을 가능하게 합니다. 스타트 비트와 스톱 비트는 데이터 프레임의 시작과 끝을 명확히 하여, 수신기가 정확한 시점에서 데이터를 읽을 수 있도록 합니다. 패리티 비트는 전송 오류가 있는지 없는지를 검사하는 추가적인 수단을 제공합니다.

 

 

UART를 통해 ASCII 문자 'W'를 전송하는 예를 보여줍니다. 여기서 문자 'W'의 ASCII 코드는 이진수로 1010111입니다. 이 그림은 데이터 비트의 순서, 스타트 비트, 패리티 비트, 그리고 스톱 비트의 사용을 설명하며 UART 통신의 전체 프로세스를 나타냅니다.

UART 전송 예제 설명

  1. 라인 아이들링(Line Idling): 데이터 전송 전과 후의 라인 상태는 '마크'(high voltage) 상태입니다. 이 상태는 라인이 활성 상태임을 나타내며 데이터 전송이 시작되기 전의 기본 상태입니다.
  2. 스타트 비트: 전송이 시작될 때, 스타트 비트로 로우(low voltage) 신호를 보내 데이터의 시작을 알립니다.
  3. 데이터 비트: ASCII 코드 1010111은 가장 덜 중요한 비트(Least Significant Bit, LSB)부터 전송됩니다. 이 순서로 보면 1110101로 전송됩니다.
  4. 패리티 비트: 이 예에서는 홀수 패리티(Odd Parity)가 사용됩니다. 전송되는 데이터 비트 중 '1'의 개수가 짝수가 되도록 하기 위해 패리티 비트는 '0'으로 설정됩니다.
  5. 스톱 비트: 데이터 전송이 끝난 후, 스톱 비트는 '1' (high voltage)으로 설정되어 데이터 프레임의 종료를 알립니다. 이어서 라인은 다시 아이들링 상태로 돌아갑니다.

중요성

이 타이밍 다이어그램은 UART 데이터 프레임의 구성을 이해하는 데 중요합니다. 각 구성 요소의 역할을 명확히 이해함으로써, 데이터의 전송과 수신 과정에서 발생할 수 있는 오류를 최소화하고 통신의 신뢰성을 높일 수 있습니다. 또한, 스타트 비트, 데이터 비트, 패리티 비트, 스톱 비트 각각의 명확한 역할 이해는 통신 프로토콜의 설계와 문제 해결에 있어 핵심적입니다.

 

 

 

 

 

UART에서 문자를 수신하는 과정과 수신기가 데이터 비트를 어떻게 샘플링하는지를 설명하고 있습니다. 이 과정은 수신기가 정확하게 데이터를 읽어들일 수 있도록 설계된 매우 중요한 단계입니다.

UART 문자 수신 과정 설명

  1. 스타트 비트 감지: 수신기는 통신 라인에서 스타트 비트를 감지합니다. 스타트 비트는 논리적 '0'(로우) 상태이며, 이는 새로운 문자의 전송이 시작될 것임을 수신기에 알립니다.
  2. 타이머 리셋: 스타트 비트가 감지되면, 수신기는 내부 타이머(카운터)를 리셋하여 데이터 비트들의 샘플링을 시작할 준비를 합니다.
  3. 중간 샘플링: 각 비트의 가운데 지점에서 샘플링을 수행해야 합니다. 이는 비트 값이 안정적인 상태를 유지하고 있는 최적의 시점을 포착하기 위함입니다. 이 방법은 전송 도중 발생할 수 있는 타이밍 오류나 노이즈의 영향을 최소화합니다.
  4. 비트 너비 인지: 수신기는 각 비트의 시간 너비(비트 너비)를 알고 있어야 합니다. 이 정보는 각 비트의 중간 지점을 정확히 계산하고 적절한 시간에 데이터를 샘플링할 수 있게 합니다.

중요성

  • 정확한 샘플링: UART 통신에서 수신 정확도를 높이기 위해서는 각 비트의 중앙에서 정확하게 샘플링하는 것이 중요합니다. 이는 데이터의 손실이나 오류를 방지하는 데 필수적입니다.
  • 타이밍 조절: 스타트 비트로부터 각 비트의 샘플링 시점까지의 타이밍은 통신의 품질과 직결되며, 이를 위해 수신기는 전송 속도를 정확히 알고 있어야 합니다.

이러한 과정은 UART를 사용하는 모든 디바이스에 있어 기본적이면서도 필수적인 부분이며, 수신된 데이터의 정확성과 신뢰성을 보장하는 데 중요한 역할을 합니다.

 

 

UART 수신기가 비트를 너무 빨리 샘플링할 경우 발생할 수 있는 문제를 보여주고 있습니다. 수신기가 각 비트의 시작 부분에서 샘플링을 수행하는 경우, 비트 값이 안정화되기 전에 데이터를 읽게 되어 잘못된 데이터를 수신할 수 있습니다.

문제 설명

  • 샘플링 타이밍: 이 다이어그램은 수신기가 각 비트의 매우 초반에 샘플링을 수행하고 있음을 보여줍니다. 이러한 샘플링은 비트 값이 전환되는 순간 근처에서 발생할 가능성이 있어, 잘못된 값을 읽을 위험이 높습니다.
  • 비트 전환 지연: UART 통신에서 비트 값이 하나에서 다른 값으로 전환될 때 즉시 모든 수신기에서 변경이 감지되는 것은 아닙니다. 전송 라인의 물리적 특성과 전기적 잡음 등으로 인해 실제 비트 값이 변경되기까지 약간의 지연이 발생할 수 있습니다.

잠재적 오류

  • 잘못된 데이터 수신: 수신기가 비트의 시작부분에서 너무 빨리 샘플링하면, 이전 비트의 잔류 신호를 읽거나 비트 값이 완전히 안정되기 전에 샘플링을 수행할 수 있습니다. 이는 잘못된 데이터를 수신하고 결과적으로 통신 오류로 이어질 수 있습니다.

해결 방안

  • 비트 중간 샘플링: 수신기는 각 비트의 중간 지점에서 데이터를 샘플링해야 합니다. 이 시점은 비트 값이 가장 안정적일 때이며, 전환 지연이 발생하더라도 정확한 데이터 값을 읽을 가능성이 가장 높습니다.
  • 타이밍 조정: 수신기의 타이밍 설정을 조정하여 각 비트의 중간 지점에서 샘플링이 이루어지도록 해야 합니다. 이는 수신기의 내부 타이머 또는 카운터를 정밀하게 조정함으로써 달성할 수 있습니다.

이 슬라이드는 UART 통신의 정확성을 보장하기 위해 적절한 샘플링 타이밍의 중요성을 강조하며, 수신 과정에서 발생할 수 있는 흔한 문제와 그 해결책을 제시합니다.

 

 

 

UART 수신기가 비트를 너무 느리게 샘플링할 경우의 문제점을 보여줍니다. 수신기가 각 비트의 끝 부분에서 샘플링을 수행하는 경우, 비트 전환 지연이나 다음 비트로의 전환 시간 오차로 인해 잘못된 데이터를 읽을 수 있습니다.

문제 설명

  • 샘플링 타이밍: 다이어그램에서는 수신기가 각 비트의 끝쪽에서 샘플링을 수행하고 있습니다. 이 때문에 수신기가 다음 비트의 신호를 잘못 읽을 위험이 있습니다, 특히 비트 전환이 빠르게 일어나는 경우에는 더욱 그렇습니다.
  • 비트 전환 지연: UART 통신에서 비트 값이 변할 때 즉각적으로 모든 수신기에서 그 변화가 감지되는 것은 아닙니다. 물리적 특성이나 전기적 잡음의 영향으로 인해 신호 변화에 소량의 지연이 발생할 수 있습니다.

잠재적 오류

  • 데이터 오류 수신: 수신기가 비트의 끝 부분에서 샘플링을 하면, 이전 비트의 잔류 신호를 읽거나 비트 값이 전환되기 시작하는 순간의 신호를 캐치할 수 있습니다. 이는 데이터의 오류를 유발하며 전체 통신의 신뢰성을 저하시킬 수 있습니다.

해결 방안

  • 적절한 샘플링 지점 설정: 수신기는 각 비트의 중간 지점에서 샘플링을 수행해야 합니다. 이는 비트 값이 가장 안정적이고 전환의 영향을 가장 적게 받는 시점입니다.
  • 타이밍 조절: 수신기의 타이밍을 조절하여 각 비트의 중간 지점에서 정확하게 샘플링하도록 설정해야 합니다. 이는 내부 타이머나 카운터의 정밀한 조정을 통해 이루어질 수 있습니다.

UART 통신에서 정확한 데이터 수신을 보장하기 위해 적절한 샘플링 타이밍의 중요성을 강조하고 있습니다. 적절한 샘플링 지점을 확보하는 것은 수신된 데이터의 정확성을 크게 향상시키며 통신 오류를 줄이는 데 기여합니다.

 

 

 

 

UART 수신 과정 중 스톱 비트의 검증과 프레이밍 에러의 처리 방법에 대해 설명하고 있습니다. 스톱 비트는 데이터 프레임이 제대로 끝났는지 확인하는 중요한 구성 요소입니다.

스톱 비트 검증

  • 스톱 비트 확인: 수신기는 스톱 비트가 '1' (high state)인지 확인합니다. 이는 데이터 프레임이 제대로 종료되었는지를 판단하는 기준입니다.
  • 프레이밍 에러: 만약 스톱 비트가 '1'이 아니라면, 수신기는 프레이밍 에러가 발생했다고 판단하고 이를 호스트 시스템에 보고합니다. 프레이밍 에러는 데이터 프레임의 끝부분이 올바르게 형성되지 않았음을 의미합니다.

데이터 수신 재동기화

  • 새로운 스타트 비트 감지: 스톱 비트 후에는 새로운 스타트 비트가 등장할 수 있으며, 이는 새로운 데이터 프레임의 시작을 알립니다.
  • 스타트 비트에 따른 재동기화: 수신기는 각 스타트 비트를 감지할 때마다 타이밍을 재설정하고 데이터 프레임의 수신을 준비합니다. 이는 연속된 데이터 프레임을 정확하게 처리하기 위해 필수적입니다.

중요성

  • 데이터 무결성 보장: 스톱 비트의 정확한 확인은 데이터의 무결성을 보장하는데 중요합니다. 스톱 비트의 상태를 확인함으로써, 수신된 데이터 프레임이 올바른 형태로 완성되었는지를 검증할 수 있습니다.
  • 연속 데이터 처리: 수신기가 스타트 비트를 기준으로 재동기화를 수행함으로써, 연속적으로 전송되는 데이터 프레임들을 효과적으로 처리할 수 있습니다. 이는 데이터 스트림에서 정확성과 연속성을 유지하는 데 기여합니다.

이 슬라이드는 UART 통신에서 스톱 비트의 역할과 수신 데이터 처리의 중요한 측면을 강조하며, 수신 오류를 방지하고 데이터 품질을 유지하는 방법을 설명합니다.

 

 

 

 

UART 설정의 다양한 프로그래머블 옵션들을 보여주고 있습니다. UART는 범용 비동기 수신/송신 장치로서, 다양한 통신 요구사항에 맞춰 설정을 조정할 수 있습니다.

UART 구성 옵션

  1. 데이터 비트(Data Bits): 데이터를 전송하는 데 사용되는 비트의 수를 선택할 수 있습니다. 일반적으로 7비트 또는 8비트가 사용됩니다. 7비트는 주로 ASCII 문자 전송에 사용되고, 8비트는 바이너리 데이터 전송에 유용합니다.
  2. 패리티 비트(Parity): 데이터의 무결성을 검사하는 데 사용되며, 짝수 패리티(even), 홀수 패리티(odd), 패리티 없음(none), 마크 패리티(mark), 스페이스 패리티(space) 중 선택할 수 있습니다.
    • 짝수 패리티(Even): 전송된 데이터 비트 중 1의 개수가 짝수가 되도록 패리티 비트가 설정됩니다.
    • 홀수 패리티(Odd): 1의 개수가 홀수가 되도록 설정됩니다.
    • 마크와 스페이스: 패리티 비트를 항상 1(Mark) 또는 0(Space)로 고정합니다.
  3. 스톱 비트(Stop Bits): 데이터 프레임의 끝을 나타내는 비트 수를 의미하며, 1, 1.5, 또는 2 스톱 비트를 선택할 수 있습니다. 스톱 비트는 수신기가 데이터를 올바르게 동기화하고 처리하는 데 도움을 줍니다.
  4. 보드 레이트(Baud Rate): 데이터 전송 속도를 의미하며, 초당 전송되는 비트 수를 나타냅니다. 일반적인 설정값으로는 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 등이 있습니다. 보드 레이트는 통신할 장치 간에 일치해야 합니다.

중요성 및 적용

UART 설정 옵션들은 통신 환경과 요구사항에 따라 유연하게 조정될 수 있어, 다양한 장치 및 애플리케이션과의 호환성을 제공합니다. 예를 들어, 노이즈가 많은 환경에서는 패리티 비트를 사용하여 데이터의 무결성을 보장할 수 있고, 빠른 데이터 전송이 필요한 경우에는 높은 보드 레이트를 설정할 수 있습니다. 이러한 옵션들을 통해 사용자는 시스템의 특정 요구사항에 맞게 UART를 구성할 수 있습니다.

 

 

 

 

UART에서 보드 레이트(baud rate)의 정의와 계산 방법을 설명하고 있습니다. 보드 레이트는 데이터 전송 속도를 측정하는 중요한 단위로, 통신 시스템에서 매우 중요합니다.

보드 레이트의 정의

  • 보드 레이트: UART 통신에서 보드 레이트는 초당 전송되는 신호 변화의 수를 의미합니다. 간단히 말해, 이는 초당 전송되는 비트 수와 동일합니다. 각 신호 요소(비트)는 데이터를 나타냅니다.
  • 심볼 레이트: 일반적으로 다른 통신 시스템에서는 심볼 레이트가 사용되며, 각 심볼이 여러 비트를 포함할 수 있습니다. 그러나 UART에서는 심볼 레이트가 보드 레이트와 같으며, 각 심볼이 단일 비트를 나타냅니다.

계산 예시

  • 9600 보드 레이트: 9600 baud의 설정은 초당 9600 비트를 전송한다는 것을 의미합니다. 이를 통해 각 비트의 지속 시간을 계산할 수 있습니다.
    • 각 비트의 길이는 19600\frac{1}{9600} 초, 즉 약 104.17 마이크로초(μs)입니다.

중요 지적

  • 데이터 처리량과의 차이: 보드 레이트는 단순히 신호의 전송 속도를 의미하며, 이는 실제 데이터 처리량과는 다를 수 있습니다. 실제 데이터 처리량은 스타트 비트, 스톱 비트, 패리티 비트 등의 오버헤드 때문에 보드 레이트보다 낮을 수 있습니다.

중요성

보드 레이트는 UART 통신의 기본적이며 중요한 설정입니다. 통신하는 장치 간에 보드 레이트가 일치해야 데이터가 정확하게 전송되고 해석됩니다. 설정이 서로 다른 경우, 데이터 손실이나 통신 오류가 발생할 수 있습니다. 이러한 이유로, 통신 장치를 구성할 때 보드 레이트를 올바르게 설정하는 것이 중요합니다.

 

 

 

 

UART 통신에서 데이터 처리량(throughput)을 계산하는 예를 제공합니다. 이 예에서는 19200 보드(baud)에서 데이터를 전송하는 설정을 가정하고, 실제 데이터 처리량을 계산하는 방법을 설명하고 있습니다.

데이터 처리량 계산 과정

  1. 기본 설정:
    • 보드 레이트: 19200 baud
    • 데이터 비트: 8 bits
    • 패리티 비트: 없음
    • 스톱 비트: 1 bit
  2. 총 비트 수:
    • 각 데이터 프레임은 시작 비트 1개, 데이터 비트 8개, 스톱 비트 1개로 구성됩니다. 따라서 총 10개의 비트가 필요합니다.
  3. 비트당 데이터 처리량:
    • 19200 baud는 초당 19200 비트를 전송함을 의미합니다.
    • 10개의 비트가 하나의 데이터 바이트를 전송하는 데 사용되므로, 실제 데이터 처리량은 19200÷10=192019200 \div 10 = 1920 bytes per second입니다.
  4. 킬로바이트 단위로 변환:
    • 1 byte = 8 bits
    • 1 KB = 1024 bytes
    • 1920 bytes per second÷1024=1.8751920 \text{ bytes per second} \div 1024 = 1.875 KB/s

최종 결과

따라서 이 설정에서의 실제 데이터 처리량은 초당 약 1.875 킬로바이트입니다. 이 계산은 UART 설정에서 오버헤드(스타트 비트와 스톱 비트)를 고려하여 실제로 유용한 데이터가 얼마나 전송되는지를 나타냅니다.

이러한 계산은 통신 시스템을 설계하거나 문제를 진단할 때 매우 중요합니다. 데이터 처리량을 이해함으로써 시스템의 성능을 최적화하고 필요한 통신 속도를 보장할 수 있습니다. 이는 시스템의 요구 사항을 충족시키기 위해 필요한 하드웨어 및 소프트웨어 리소스를 적절하게 할당하는 데 도움이 됩니다.

 

 

UART 송신기를 설계하는 데 필요한 주요 사양을 제공합니다. 여기에서는 UART 통신을 구현하기 위한 기본 파라미터와 입력/출력 인터페이스 요구 사항을 정의하고 있습니다.

사양 요약

  1. 파라미터 설정:
    • 보드 레이트: 300 baud
    • 데이터 비트 수: 7 bits
    • 스톱 비트 수: 1 bit
    • 패리티: 짝수(even) 또는 홀수(odd) 패리티 선택 가능
  2. 입력 신호:
    • Din[6:0]: 7비트의 병렬 데이터 입력. 이는 UART 송신기로 전송될 데이터입니다.
    • Send: 송신기에 데이터 전송을 시작하라는 신호를 제공합니다.
    • ParitySelect: 패리티 선택을 위한 입력으로, 0은 짝수 패리티, 1은 홀수 패리티를 선택하게 합니다.
  3. 출력 신호:
    • Dout: 직렬 데이터 출력. 이 포트를 통해 데이터가 외부 장치로 전송됩니다.
    • Busy: 현재 데이터 전송 중임을 나타내는 신호. 이는 호스트 시스템에 송신기가 바쁘다는 것을 알립니다.

설계 고려사항

  • 타이밍: 300 baud에서 데이터의 각 비트는 1300\frac{1}{300}초 동안 지속되어야 합니다. 이는 각 비트가 약 3.33ms 동안 지속됨을 의미합니다.
  • 패리티 처리: 짝수 또는 홀수 패리티 설정에 따라 데이터 비트 중 '1'의 개수에 따라 추가 패리티 비트가 계산되어야 합니다.
  • 송신 준비 완료 신호: Busy 신호는 다른 데이터 전송을 시작하기 전에 이전 전송이 완료됨을 보장합니다. 이는 데이터 충돌을 방지하는 데 중요합니다.

이 설계 사양은 UART 송신기를 구현할 때 필요한 주요 인터페이스와 기능적 요구사항을 명확히 합니다. 이 정보는 설계자가 통신 프로토콜에 맞게 송신기를 올바르게 구현하도록 돕습니다.

'하만 세미콘 아카데미 > Verilog HDL' 카테고리의 다른 글

AXI 수업내용 정리 및 실습  (0) 2024.06.14
Verilog HDL 실습 (UART)  (0) 2024.05.31
Verilog HDL 실습 (Stop_Watch)  (0) 2024.05.31
Verilog HDL 실습 (Traffic)  (0) 2024.05.31
Verilog HDL 실습 (Security)  (0) 2024.05.31