- 积分
- 265
- 在线时间
- 847 小时
- 最后登录
- 2023-5-3
- 阅读权限
- 50
- 精华
- 0
- UID
- 248901
- 帖子
- 238
- 精华
- 0
- 经验
- 265 点
- 金钱
- 238 ¥
- 注册时间
- 2010-10-10
|
本帖最后由 ljpwed 于 2016-2-2 13:07 编辑
平时经常测试各种DAC和数字端口,老是在各种板和机之间换来换去,感觉很麻烦,年底了就决定做一款全功能的测试平台!
整个PCB做得比较简单,当然这个只是一个炮灰板,后面会做个更完美的PCB!
1:带有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 驱动并不是我的在行的(虽然难搞一些比较简单的),在者国内驱动开发的资料少得要死,那些从入门到精通都他么的在扯蛋!
2:FPGA内部带有一个自行设计的SPDIF接收器。SPDIF最高可以接收PCM 384K,既然可以接收384K那么DSD128 DOP接收就不是问题了! SPDIP解码设计最重要的技术是CDR(时钟数据恢复),比如说在数据传输方面的光纤通信,硬盘SATA接口,USB接口等都是要用到这个技术。如果把传输速度的难道先不说,SPDIF解码以个人观点应该是比较其它的要难!原因在于SPDIF是一种变码率的信号,而且还有两种晶振模式(44.1 48),这样就把解码器变得更复杂! 板上用的是一片ALTEAR EP4的FPGA,其内部逻辑速度可以达到400M左右,达到400MHZ的速度是在简单逻辑上是可以实现的,时序也是能很好的满足的,如果放在复杂的逻辑运算中,那基本不太可能!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输出的源:
底下是一台PS3主机,主机上最左的是一片很久以前做的一个意大利模块,CDLP部分用的是ALTEAR MAX II (还是自己搞的)同样支持SPDIF PCM384K DSD128 DOP输出,后面的板子,我想大家都知道是什么,年后,还会找一两台老的CD机做测试! 实际上只要SPDIF输出的码率误差不小于3%-5%(主要看输出采样是多少),就可以完美接收!!
3:FPGA还内置了一个IIS接收器!! 以前做IIS接收器的时候 都是使用的被动接收,这种 接收方式容易受IIS源时钟的干扰,会产生很大的失真,为了解决这个问题,我是采用一个类似SPDIF 的接收方式,IIS解码同样有一个CDR,产生同步接收的BCLK,这样MCLK,LRCK,BCLK就是主动式的,这样IIS的MCLK就完全不用,即使BCLK在短时内产生大的抖动,也不会影响FPGA的数据接收! IIS接收器制作起来要简单一样,原因是BCLK的脉冲长度是相同的!! IIS解码还带一个SPDIF输出,原理和功能上和意大利一样!!
4: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的板子到时候实际测试给大家评评!
|
评分
-
查看全部评分
|