두 개의 별도 스파르탄 3E 키트로 ADC-DAC를 처리하려고합니다. 첫 번째 키트는 아날로그 신호를 받아 디지털 신호로 변환합니다. 두 번째 키트는이 변환 된 디지털 데이터를 가져 와서 다시 아날로그로 변환합니다. 성공적으로 ADC와 DAC를 성공적으로 구현했는데 어떻게 첫 번째 키트에서 다른 키트로 14 비트 디지털 데이터를 보낼 수 있습니까? (I는 클럭 동기화가 필요하십니까?)두 개의 스파르탄 3E 사이의 데이터 전송
답변
당신은
- 으로 데이터 자체를 하나의 FPGA에서 3 개의 신호를 얻을 필요 (예 : 다음 데이터 비트가 새 단어의 첫 번째 비트임을 나타냄)
단 하나의 와이어 만 사용하려는 경우 (접지 연결!)
이렇게하는 표준 방법이 있습니다. 세 가지 개별 정보를 단일 신호로 결합합니다.
시계와 데이터를 함께 결합하는 일반적인 기술 중 하나는 "맨체스터 인코딩"입니다 (이에 대한 자세한 정보는 검색 할 수 있음). 그것은 비트율의 두 배로 실행되는 클록으로 시작합니다. 모든 짝수 번호의 클럭 에지에서 신호 상태를 변경합니다. 그런 다음 홀수 클록 에지에서 해당 데이터 비트가 '1'이면 상태가 변경되고 그렇지 않으면 상태가 변경되지 않습니다.
수신기는 자신을 동기화하기 위해 클럭과 데이터 에지를 구별해야합니다. 그것은 전환 사이의 시간을 측정함으로써 수행합니다 : 누락 된 전환을 감지하자마자 데이터 비트가 있음을 알고 있으므로 다음 전환은 반드시 시계 여야합니다. 일단 동기화되면 데이터 디코딩을 시작할 수 있습니다.
이제 시계와 데이터를 결합했습니다. 우리는 프레이밍을 추가하기 만하면됩니다.
Clock^^^^^^^^^...
Data 0 0 1 0 1 1 0 0 ...
Sig 0 0 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 ...
이 작업을 수행하는 한 가지 방법은 클럭 에지를 삭제하여 누락 된 전환이 2 개 이상 있고 실제 클럭 에지가 뒤 따르는 것입니다. 이 시퀀스는 맨체스터 코딩의 일반적인 규칙을 위반하며 프리앰블 또는 프레이밍 패턴이라고합니다.
수신기는 프리앰블을 감지 할 수 있으며 다음 비트가 데이터 워드의 시작임을 알 수 있습니다. (프리앰블은 예를 들어 스테레오 신호의 왼쪽 및 오른쪽 채널을 구별하기 위해 다른 정보도 포함 할 수 있습니다.) 신호가 프리앰블 전에 1 인 경우
Clock^^^^^^^^^...
Data 0 x x 0 1 1 0 0 ...
Sig 0 0 1 0 0 0 1 1 0 1 0 1 0 0 1 1 0 ...
Pre 1 0 0 0 (note missing clock)
Count 1 2 3 4 5 ...
참고 봐, 당신은 프리앰블 을 반전 것이고, 그 다음 완전히이 기술을 사용하여 예를 일한 0 1 1 1
될 것이라고 오디오 인터페이스 표준 또는 SP/DIF 소비자 등급 파생 상품.
감사합니다! 그 정보는 내가 찾던 것과 정확히 일치한다. –
두 가지 옵션을, 당신이 다루고있는 데이터 속도에 따라 : 상대적으로 낮은 데이터 속도를 들어
(10의 순서에 - 100 kbps의), 프레임과 직렬화 귀하의 데이터를 RS-232 포트를 통해 보내십시오. 다른 쪽에서는 직렬 데이터를 받고 deserialize하고 데이터 프레임을 찾아 데이터를 선택하십시오. 데이터가 클럭주기마다 처리 될 필요가없는 한,이 경우 클록 동기화에 대해 걱정할 필요가 없습니다. 데이터 속도가 샘플이 매 사이클마다 처리되는 것과 같은 경우에는 두 보드 사이의 클럭 속도의 작은 변화가 시간이 지남에 따라 샘플을 떨어 뜨릴 수 있기 때문에 클록을 동기화해야합니다.
더 높은 데이터 속도을 보려면 FX2 커넥터를 차동 출력 (LVDS)과 함께 사용하십시오. ADC 보드가 사용하는 클럭과 함께 14 비트 (28 와이어)를 다른 보드로 보냅니다. DAC 보드에서 시계를 수신하고 로컬 시스템 클럭을 생성하는 데 사용하십시오. 그런 다음 생성 된 시스템 클럭을 사용하여 들어오는 데이터를 샘플링 할 수 있습니다. 이것은 소스 동기화 디자인이라고합니다. IOB에서 셋업/홀드 요구 사항을 위반하지 않기 위해 적절한 시간에 들어오는 데이터를 샘플링하기 위해 클록 페이징으로 놀 필요가 있습니다. 또한 데이터 비트 간의 신호 스큐는 높은 클럭 속도에서 제어하는 데 매우 중요 할 수 있습니다. 조심하지 않으면 샘플을 뒤처질 수있는 1-2 비트가 생겨 데이터가 손상 될 수 있습니다.
감사합니다.하지만 디지털 데이터를 보내려면 1 개의 와이어를 사용하고 싶습니다. 데이터를 직렬로 보내야합니다. (내 adc 및 dac 작동 2Mhz) –
디지털에서 아날로그로 데이터를 보내려면 시계 동기화 란 무엇입니까? 아날로그 부품에 시계가 있습니까? 아니면 내가 설정을 오해하고 있습니까? – shrm
2 개의 스파르탄 3E 키트. ADC의 경우 1, DAC의 경우 1. ADC의 측면에서, 내가 아날로그 신호를 얻을 것이다 (이것은 문제가되지 않습니다) 그리고 14bit 디지털로 변환, 평균 시간에 내가 GPIO 핀 (또는 뭔가가 내 문제입니다)이 14 비트 데이터를 보내드립니다 이를 디지털 입력으로 받아 아날로그 신호로 변환하는 또 다른 스파르탄 3E 키트. 나는 어떻게 1 개의 장비에서 또 다른 한개에 디지털 방식으로 자료를 보낼 수 있냐고 묻고있다? GPIO 핀을 통해 간단하게 보낼 수 있습니까? SPI 또는 I2C와 같은 프로토콜을 적용해야합니까, 2 개의 별도 키트의 시계를 동기화해야합니까? –
이제는 SPI 또는 I2C가 알 수없는 길이/감쇠/지연의 케이블로 연결된 두 개의 다른 보드 사이에서 클럭 동기화가 결코 쉽지 않기 때문에 훨씬 더 나은 옵션이라고 말할 수 있습니다. – shrm