烧机好主力 数字端口输入输出试验板制作

来源:bbs.hifidiy.net 发布者:ljpwed 版权:原创

笔者平时经常测试各种DAC和数字端口,需要在各种板、机之间换来换去,感觉很麻烦,就决定做一款全功能的测试平台!带USB输入、FPGA内部带SPDIF接收器、IIS接收器及正弦波发生器...

笔者平时经常测试各种DAC和数字端口,需要在各种板、机之间换来换去,感觉很麻烦,就决定做一款全功能的测试平台!

因为是实验板,整个PCB做得比较简单,后面会做个更完美的PCB!

实验板

实验板

带USB输入

USB输入用的是意大利模块的ARM部分,而CDLP部分则用FPGA自己编写!IIS输出方面和官方模块完全一样,另外为了实验方便,还有一个SPDIF输出,SPDIF和IIS是同步输出,并支持DSD DOP同步输出,也就是说即使播放DSD,IIS和SPDIF也可以同时输出,非常方便! 

IIS支持的采样:PCM,44.1k-384K,DSD为DSD64-DSD512,而SPDIF PCM输出最大可达到384K(实际上可以实现768K和1536K输出,但是一方面是当前这么高的码率基本用不上,再者要输出1536K的话还要用到FPGA的PLL),DSD DOP则可以最大输出DSD128。为什么要输出384K呢,后面会说到!

用别人的东西虽然并不是我的风格,但是如果自己开发一个USB 解码并不是容易的事,硬件开发并不难,但是windows 驱动并不是我的在行的,在者国内驱动开发的资料少得要死,那些从入门到精通都他么的在扯蛋!
FPGA内部带有一个自行设计的SPDIF接收器。

SPDIF最高可以接收PCM 384K,既然可以接收384K那么DSD128 DOP接收就不是问题了! SPDIP解码设计最重要的技术是CDR(时钟数据恢复),比如说在数据传输方面的光纤通信,硬盘SATA接口,USB接口等都是要用到这个技术。

传输速度的难道先不说,以个人观点SPDIF解码应该是比较其它的要难!原因在于SPDIF是一种变码率的信号,而且还有两种晶振模式(44.1 48),这样就把解码器变得更复杂! 板上用的是一片ALTEAR EP4的FPGA,其内部逻辑速度可以达到400M左右(在简单逻辑上是可以实现的),时序也是能很好的满足的,如果放在复杂的逻辑运算中,那基本不太可能!

SPDIF接收器基本上是一种复杂的逻辑,本板的SPDIF接收器主时钟运行在250MHZ左右!这个频率在FPGA复杂的运算中可以说是非常高了(以和EP4 相同种类的FPGA来说),为了满足时序要求,我也是花了不少心思做时序优化!用FPGA做SPDIF解码难度大,原因在于FPGA的速度问题,如果要像AK4118等这样的芯片那样接收,那么FPGA的逻辑速度至少也要GHZ以上的,但那种FPGA成本太高了,虽然EP4的PLL输出可以达到1.3GHZ,不过逻辑速度就差远了,所以要样解码SPDIF那么就要双晶振模式,使用双晶振模式相对AK4118这种单晶振模式(IIS输出是用内部高速PLL分频)输出的IIS精度要高一些(其实也差不了多少,如果用示波器看的话还是很明显的),当然了AK4118锁定速度要比 FPGA SPDIF解码的要快几个采样!

别一方面,由于FPGA单口IO输出电压要3.3v,那么就要有电压转换器,板上有一个LMV7219作为整形! 这款板子的SPDIF接收稳定性上是完全没有问题,为了测试稳定性我也是找来了很多SPDIF输出的源:

spdif输出板

底下是一台PS3主机,主机上最左的是一片很久以前做的一个意大利模块,CDLP部分用的是ALTEAR MAX II (还是自己搞的)同样支持SPDIF PCM384K DSD128 DOP输出,后面的板子,我想大家都知道是什么,年后,还会找一两台老的CD机做测试! 实际上只要SPDIF输出的码率误差不小于3%-5%(主要看输出采样是多少),就可以完美接收!

FPGA内置了一个IIS接收器!

以前,做IIS接收器的时候都是使用的被动接收,这种接收方式容易受IIS源时钟的干扰,会产生很大的失真,为了解决这个问题,我便采用一个类似SPDIF的接收方式——IIS解码同样有一个CDR,产生同步接收的BCLK,这样MCLK、LRCK、BCLK就是主动式的,IIS的MCLK就完全不用了,即使BCLK在短时内产生大的抖动,也不会影响FPGA的数据接收!

IIS接收器制作起来要简单一样,原因是BCLK的脉冲长度是相同的!IIS解码还带一个SPDIF输出,原理和功能上和意大利一样。

FPGA内置一个正弦波发生器。

正弦波发生器可以输出PCM 44.1k-1536k的采样(1536k的我并没有测试),输出频率1Hz~35KHz,IIS输出32bit!! 正弦波发生器采用的是CORDIC算法,Quartus是带有这个IP核,很省事,虽然省事但这个IP并不好用,这个IP都是浮点输入和输出,还是弧度角,这样计算角速度的时候就写一大堆代码,还要用到浮点加减乘,这样FPGA用掉的资源就差不多是7500个逻辑了......好在上面三个解码器只用到1500多个逻辑,还是有余量的!

整个正弦IP可以运行在100MHZ左右(时序是满足的),而整个计算会有差不多50个时钟,这样就可以产生2MHZ的采样率(输出1536k的采样不是问题)!后面我会自己做一个整数类型的CORDIC,只为了减少FPGA的资源使用量。年底PCB产厂都过年了,不好打样!年后会做一个带DAC的板子实际测试评评!

DAC实验板

关注【HIFI音响】公众平台

    ID:HIFI中国音响网 ID:hifidiy_2016