2019년 11월 20일 수요일

S/PDIF , AES/EBU 오디오 DAC 보드

최근에 지인이 오디오 매니아가 있어서 자기만의 오디오 DAC를 가지고 싶었는지,
디지털 오디오를 받아서 아날로그로 변환해주는 오디오 DAC를 만들어달라는 요청이 들어왔다.
예전 방송국에서 사용하는 장비를 만들때 만들었던 기억이 있어서 당시 사용했던
Cirrus Logic 사의 CS8416칩을 디지털 입력단 칩으로 그대로 사용하기로 하였다.
그리고, DAC칩은 어떤 칩을 사용할지 고민하다가 내 경우는 고주파 음도 잘 못듣고, 막귀라서 내가 오디오 테스트를 하기에는 한계가 있어, 3가지 Type의 칩을 사용하여 총 보드 3개를 만들어서 테스트를 할수 있게 해주었다.
그래서 사용한 칩은
Digital Audio Input 칩 : Cirrus Logic "CS8416"
DAC Audio Output 칩 :
1) AsahiKASEI 사의 AK4430
2) CIRRIS Logic 사의 CS4334
3) TI 사의 PCM1794A 를 사용하였다.
Spec은 TI사의 PCM1794A가 좋기는 하지만 그건 어디까지나 Spec이고, 사람의 귀는 소리를 들을때 들을수 있는 한계치가 있어서 스펙이 좋다고 무조건 좋다고 하기는 그런거 같다. 그냥 내 귀와 내 느낌에 좋은 소리가 좋은거라고 생각한다.
아래는 위 3가지 칩을 사용하여 만든 3가지 형태의 PCB보드이다.
                                
 
입력단과 출력단은 RCA로 사용하였지만 방송용으로 사용할때는 AES/EBU BNC잭에 BNC to RCA 잭을 연결하여 사용할수 있고, 일반 소비자 제품에서 RCA단자로 되어있는 PCM, S/PDIF, COAXIAL 단자로 적혀있는 PORT에 연결하여 사용하면된다.
출력은 RCA 로 되어있기때문에 RCA를 받는 앰프나 스테레오 3.5mm를 사용하는 앰프의 경우 아래처럼 변환 케이블을 사용하여 사용하면된다.
 
                               
 
본인이 테스트 할때는 블루레이를 가지고 테스트를 하였는데, 초기 연결시 제대로 소리가 나오지 않아 오디오 옵션을 보니 몇가지 선택해주는 기능이 있어 바꿔주니 제대로 소리가 나오는것을 확인할수 있었다.
블루레이 뒤에 보면 DIGITAL OUT COAXIAL이라고 되어있는 곳에 연결하였다.
                                
 
위 사진처럼 입력에 연결을 하고 출력은 변환 케이블을 사용하여 오디오 앰프에 연결하였지만 소리가 정상적이지 않아 확인을 해보니 블루레이 CD를 사용할때는 아래 설정을 Downmix PCM으로 해줘야 정상적인 소리를 확인할수 있었고, 일반 동영상은 제대로 나왔다.
 
                                
 
나는 오디오에 대해서 귀가 민감하지 않은편이라 3가지 타입의 차이를 잘 못느끼는 부분도 있고, 특히 그런 차이를 들을만한 오디오 컨텐츠를 가지고 있지도 않다.
오디오 매니아가 들었을때 3가지 보드 차이가 있는지 추후에 한번 확인을 해보도록 하겠다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345

CLK 카운터, 주파수 카운터

이번에 테스트한 보드는 주파수 카운터이다.


명칭은 클럭(CLK)카운터이기도 하고, 주파수 카운터 둘다 된다.


최근에 주파수의 변화를 감지하여 이벤트를 발생시키는 테스트를 해야 할 일이 있어서 한번 만들어보았다.


보드는 기존에 제작된 CVBS,SDI 계측기 보드를 가지고 구현을 해보았고, 이 보드에서 동작하는 몇가지 CLK을 직접 체크해보는걸로 테스트하였다.




구현 방법은 여러가지 방법이 있겠지만 여기서는 FPGA를 이용하여 보드에서 가장 빠른 148.5Mhz를 가지고 1초 주기를 만들어서 들어오는 주파수를 직접 카운터하는 방식으로 하였다.

카운터된 숫자는 PIC18F MCU로 전달되어 몇가지 계산과 변화된 주파수 양에 따라 동작을 하고, 7인치 모니터에 숫자로 보여줄수 있게끔 FPGA에 다시 전달되게끔 하였다.


샘플링 주기를 짧게 하여 카운터하는 방식도 있는데, 실제로 하고자 하는것은 1초동안 수 Hz의 작은 변화까지 체크하는게 중요해서 1초라는 시간을 샘플링 주기로 하였다.


보드에서는 PIC18F MCU에서 사용하는 20Mhz 크리스탈과, 27Mhz 오실레이터, FPGA에서 나오는 499.675 Khz 주파수 3개를 입력으로 넣어주면서 체크를 해보았다.

                                
 

직접 보드에서 선을 납땜하여 연결해주는 방식으로 테스트 하였다.

아래 사진에서 보듯이

검은색 선 : 주파수 입력 선이다.

갈색 : 20Mhz 크리스탈 , 빨간색 : 27Mhz 오실레이터, 귤색 : 499.675Khz이다.

 
                                
 

아래 사진을 보면 검은색과 빨간색선(27Mhz)을 연결하였을때 모니터 상에 숫자가 표시된다.

27 :: 003 : 529 라고 표시가 되는데 27.003529 Mhz 이자 1초동안 27,003,529 개의 클럭이 들어오는것을 알수 있다.
 



CLK이나 주파수라는것이 실제로는 미세하게 변화가 생기기도 하고, 흔들리기도 하는데 스펙을 보면 PPM이라는 값이 있다. 이 카운터를 보게 되면 내가 지금 사용하고 있는 주파수 출력 장비가 어느정도 흔들리는지 또는 어느정도 시간이 지난다음 안정화 되는지등을 체크해볼수 있다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345

Artix7으로 DDR3 테스트

이번 보드는 Xilinx 사의 Artix7 계열의 XC7A75T FPGA를 이용하여 DDR3를 동작시키는 보드이다.

사용툴은 Vivado 2018.2를 사용하였다.

(Vivado 툴 초보자 사용법은 네이버 블로그  FPGA관련 카테고리에 올려두었다.)


지금까지 FPGA를 가지고 DDR을 구동시켰던 보드는.

1) Altera사의 CycloneIV를 이용하여 DDR2 구동.

2) Altera사의 CycloneV를 이용하여 DDR3 구동을 시켰는데 주로 영상 데이타를 캡쳐나, FIFO형태로 구동을 시켰었고, 이번 보드는 FPGA 데모보드 형태로 I/O를 LED에 연결시켜놓아서 DDR3에 Write했던 데이타를 다시 읽어서 LED에 동작시키는것으로 검증을 해보았다.


FPGA는 Xilinx의 XC7A75T (Artix7 계열) 이고, DDR3는 Micron사의 1Gb용량의 MT41K64M16TW (16bit) 를 2개 사용하여 데이타 bit는 H/W 32비트를 사용하였다.


아래 사진은 FPGA에 DDR3 가 2개 배치되어있는 보드 사진이다.



Vivado툴을 이용하여 DDR3를 구동하기 위해서는 아래와 같이 제공되는 IP인 MIG(Memory Interface Generator)를 이용하여 해당되는 DDR3의 IP를 만들어주어야 한다.

현재 보드에서는 DDR3경우 400Mhz까지 동작을 할수는 있지만 303Mhz로 외부 CLK동작을 시켰고, DDR3전원은 1.35V를 사용하기 때문에 설정을 1.35V로 해주었다.

Aritx7의 경우 DDR3를 구동할때 ALTERA CycloneV 보다는 동일조건에서 열이 좀더 나는것으로 느껴진다.



테스트는 DDR3 내부 Address에 아래와 같이 Data를 Write를 하고, READ후 LED에 순서대로 표시하는것으로 하였다.


DDR3 0 ~ 39 번지 Address에 각각 Address와 동일한 0~39 Data를 Write하고 29번지 Address에만 전혀 다른 값을 Write를 해주었다.


이후에 5군데 Address 6 , 7 , 8 , 9 , 특정값 넣은 Add 순서대로 Read하여 오른쪽 LED 라인에 위에서 아래순서에 맞춰 각각 해당되는 값을 표시하였다.

                                
 

이 부분은 User가 본인이 DDR3를 구동하기 위하여 만든 코드를 테스트하기 위한 보드 구성이고,Xilinx의 경우 Vivado 툴에서 IP생성후에 아래와 같이 "Open IP Example Design" 을 이용하여 예제로 만들어진 코드를 가지고 검증하는 방법도 있다.
 

                              
 

보드가 처음 나오면 "Open IP Example Design"을 이용하여 먼저 H/W 검증을 마치고, 이후에 본인이 구동하는 코드를 만들어서 검증을 하면서 동작시키면 된다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345

RS232, USB to RS232 시리얼분배기


이번 보드는 "RS232 분배기" 및 "USB to RS232" 기능을 갖춘 보드이다.
예전 장비들을 RS232로 여러 대 동작시킬 때 가끔씩 필요할 때가 있는데 요즘은 RS232 포트 없이 USB 단자만 있는 노트북이나 PC들이 많이 있어서 요즘 PC에서도 사용이 가능하게끔 "USB to RS232" 기능까지 내장을 하여 만들어 보았다.
하지만 USB특성이 사용중 또는 접속시 문제가 될때가 간혹 발생하기때문에 안정적인 사용은 RS232로 하는게 더 좋다. 물론 감안하고 사용한다고 하면 괜찮지만..
내 경우 USB 마우스나 키보드, 외장하드를 사용할때 가끔씩 인식이 안될때가 있어서 그냥 다시 뺏다 수초후 다시 연결하고 그냥 사용한다.
현재 제작된 보드 블럭도와 사진은 아래와 같다.
1. 입력 단자는 RS232 D-SUB 9PIN 단자와 USB MINI B 단자이다.
2. 출력쪽은 D-SUB 9PIN 4개 이다.
3. 전원은 DC +5V를 별도로 넣어주거나 USB Port연결시 USB전원을
사용하면 된다.
4. LED로 전원 상태 및 RX, TX 통신 상태를 보여준다.
분배기 기능을 FPGA로 구현을 하면서
1. 출력 4 Port에 대해서 D-SUB입력 또는 USB입력을 선택해주는 기능이
가능하게 되었다.
2. 그리고, 추가로 현재 통신되는 속도를 FND를 이용하여 보여줄수 있다.
물론 RS232통신 특성상 약속된 문자를 보낼때 통신속도가 제대로 보여진다.
스위치에 1번에 의해서 선택될때 아래와 같이 동작된다.
FND에서 RS232포트가 선택된것을 알려준다.
FND에서 USB포트가 선택된것을 알려준다.
그리고, RS232는 RS422이나 RS485와는 다르게 1:1 통신을 원칙으로 하기때문에 1:N 통신을 위해서는 TX는 모든 N채널에 줄수 있지만 RX는 오로지 하나에서만 받을 수 있다.
아래 블럭도가 현재 보드에서 1:N 통신에서 RX,TX가 연결되는 모습을 보여준다.
아래 사진을 보면 보드 1번 RS232 D-SUB 단자에 RX,TX를 서로 쇼트하여 내장된 USB to RS232로 통신되는 것을 보여주고 있다.
이때 대문자 'U' 나 "0x55" 를 전송하게 되면 통신 속도를 FND로 보여줄수 있다.
통신 속도가 올라가면 오차값이 커질때가 있는데 현재 연결된 시리얼 통신이 제대로 됐는지 정도 체크할정도로 사용하기에는 무리가 없어보인다.
아래 사진을 보면 통신 속도 9,600으로 하고 대문자 'U'를 전송시 FND에 9.6 이
표시되는것을 볼수 있다. FND가 4개짜리라서 최소 단위가 백단위부터 시작한다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345