FPGA 실습(5) 5. Manchester Code 맨체스터 코드는 앞절에서 설명한 SDLC의 NRZ 모드에서 별도의 클럭을 사용하지 않고 데이터에서 클럭을 추출하기 위해 사용하며, 멘체스터 코드의 코딩 방식은 다음 그림과 같다. 5.1. 송신부(Encoder) 송신부는 앞의 그림에서 살펴본 바와 같이 CLK과 NRZ를 XOR을 취해서 출력하면 된다. 그런데 CLK과 NRZ를 XOR을 취하면 서로의 위상차로 인해 glitch가 발생할 수 있으므로 전송 속도보다 아주 빠른 클럭으로 래치해서 출력하는 것이 좋다. 5.2. 수신부(Decoder) 수신부는 입력되는 맨체스터 코드로부터 데이터와 클럭을 추출하여 출력하여야 한다. 먼저 전송속도보다 아주 빠른 클럭을 이용하여 전송속도에 맞는 클럭을 생성하기 위한 카운터를 구동하여 기본적인 클럭을 생성한다. 예를 들어 전송 속도가 1Mbps인데 회로에서 사용하는 클럭이 128MHz 클럭이라고 한다면 카운터 값이 63이 된뒤 다시 0으로 돌아가도록 구성하여 카운 터값이 0일 때 반전이 일어나도록 하여 1MHz의 클럭을 생성한다. 그리고 입력되는 데이터를 전송속도 보다 아주 빠른 클럭(예: 128MHz)으로 래치를 해서 rising edge와 falling edge를 검출하고 rinsing edge나 falling edge에서 앞에서 언급한 카운터를 0으로 셋팅하여 주기를 맞춘다. 그리고 클럭 주기의 1/2되는 지점에서 sample 클럭을 생성하여 sample 클럭에서 입력되는 데이터를 래치하여 이전데이터와 비교한다. sample 데이터가 b’01이면 1로 디코딩하고 데이터가 b’10이면 0으로 디코딩하며 출력 클럭을 반전시킨다. 만일 데이터가 b’00이거나 b’11이면 디코딩하지 않으며 출력 클럭을 그대로 유지 한다. 이렇게 하면 입력되는 데이터로부터 데이터와 클럭을 추출하여 NRZ 데이터를 출력할 수 있다. 다음 그림은 Loopback되는 맨체스터코드로부터 NRZ 데이터와 출력 클럭을 시험 한 결과이다...
이 블로그의 인기 게시물
FPGA 실습(4) 4. SDLC 구현 SDLC(Synchronous Data Link Control)를 구현하여 본다 SDLC를 구현하기 위해 SDLC의 프레임의 구조를 먼저 살펴보고 SDLC 프로토콜을 구현하기 위한 IP를 제작하는 과정과 통합하여 시험하는 과정을 기술한다. 4.1 SDLC 프로토콜 개요 4.1.1 SDLC 프레임 - Flag : b’0111110의 값으로 구성되면 프레임의 시작과 끝을 나타낸다. 데이터가 없는 구간은 All High로 구성되거나 b’01111111이 반복될 수 있다. - 규격 확인이 필요한 부분임. HW 구현 관점에서는 b’01111111이 반복되는 구조가 구현을 간단히 할 수 있다. 또한 Flag이외에 필드에 b’01111110 값이 들어가면 프레임 오류가 발생할 수 있기 때문에 송신측에서는 1이 5번 반복되면 ‘0’을 하나 삽입한다. 이를 bit stuffing이라고 하며, 수신측에서는 Flag이외의 필드에서 1이 5번 반복되는 것을 발견하면 뒤에 따라오는 ‘0’을 제거하고 데이터를 처리하여야 한다. - Address/Control 부분은 당초 SDLC 규격을 만들 때 각종 토폴로지와 통신 프로토콜을 정의하기 위해 삽입된 부분으로 생각되며 우리가 흔히 사용하는 Point-to-point의 토폴로지에서는 Source Address(1byte), Destination Address(1 byte), Message ID(1byte), Data Length(2 byte)등으로 흔히 구성되며, 이는 프로토콜 정의할 때 결정하면 된다. - Data : 데이터는 사용자가 전송하고자 하는 데이터를 바이트 크기단위로 전송하는 구간이다. 데이터의 크기는 control 필드에 송수신 프로토콜을 정의하는 부분에서 정의하여야 한다.(Link 계층의 SW에서 필요한 정보 임) - FCS : Foward Control Sequence는 전송된 프레임의 오류 여부를 판별하기 위한 것으로 흔히 CCITT CRC-16을 사용하는 것으로 표시한다...
르네사스 타겟보드를 이용한 CAN통신(3)
3. RL78/F13 CAN Module 본 절에서는 르네사스사의 MCU인 RL78/F13의 CAN 모듈의 사용법과 설정하는 과정에 대해 설명한다. 3.1 CAN 모듈 개요 RL78/F13는 ISO11898-1 사양에 맞는 CAN 모듈 하나를 제공한다. 그림 9에는 CAN 모듈 블록 다이어그램을 나타냈으며, 표는 CAN 모듈의 사양을 나타내었다.[3] 그림 9. CAN 모듈 블록 다이어그램 표 4. CAN 모듈 사양 3.2 환경 설정 본 절에서는 타겟보드의 환경을 설정하는 과정을 살펴본다. 르네사스 사의 개발환경(CS+)을 이용한 상세한 환경 설정 과정은 참고문헌[4]를 참조하면 되고, 여기에서는 CAN 모듈을 구동하기 위해 특별히 유의해야 할 것만 설명한다. 먼저 클럭 설정은 타겟보드의 외부 클럭 X1이 4MHz의 발진기를 갖고 있기 때문에 4MHz로 설정하여 주면 되고, High-speed OCO clock을 24MHz로 설정하여야 한다.(그림 10 참조) 그림 10. CAN 모듈 사용을 위한 Clock 설정 그리고 그림 2에 나타낸 회로도를 살펴보면, CAN 트랜시버의 TX 핀이 MCU의 P10에 연결되어 있고, RX 핀은 MCU의 P11, MCU의 P12가 트랜시버의 S 핀에 연결되어 있다. S 핀은 트랜시버의 제어 신호로 LOW가 입력되면 정상 통신 모드이고, HIGH가 되면 Silence Mode로 CAN 버스에 아무런 신호를 전달하지 않기 위한 제어 신호이다. 따라서 P10은 출력, P11은 입력, P12는 출력으로 설정하여야 하며, P10은 기본 출력을 HIGH로, P12는 기본 출력은 LOW로 설정하여야 한다.(그림 11참조) 그림 11. Port1 설정 3.3 CAN 모듈 구동 소프트웨어 본 절에서는 CAN 모듈을 구동하기 위한 초기화과정, 메시지 송신 모듈, 메시지 수신 모듈 소프트웨어에 대해 살펴본다. 3.3.1 CAN 모듈 초기화 CAN 모듈 초기화 프로그램은 다음과 같다. 먼저 CAN 모듈을 활성화하기 위해 ...
댓글
댓글 쓰기