[基础知识] 造一台软DAC

[复制链接] 查看: 177861|回复: 525

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

发表于 2010-4-15 22:51 | 显示全部楼层
什么是软DAC呢?软DAC就是软件DAC的意思,我生造的一个词,借用软件无线电SDR的概念,我把我做的这台DAC命名为sDAC。
  软DAC的概念起于07年,软DAC的软体现在超采样和其他信号处理的过程是用软件写的。当然,D/A还是需要的。
软件做信号处理有什么好处?我认为一个是我可以做到比专用ASIC更好的性能。另一方面是参数可以自己按照自己的口味来配置,不像ASIC,只能由着厂家的性子来,通常DAC多数是玩玩芯片,IV,LPF之类,既然这些都玩腻了,那就试试新的东西,说不定有新的发现。
  这台sDAC的曾经一度因为我工作忙的原因成了烂尾工程。所幸的是最终还是基本完成了,和最初的概念比,不仅实现了之前所有的功能需求,在性能和听感方面也有自己独特的地方,这是在设计之初也没有预料到的.

23167_1262605568.jpg

评分

参与人数 5经验 +80 威望 +1 贡献值 +6 收起 理由
BG5CJT + 10 现代DIY的趋势代表
Dulcet + 20 + 5 精品文章,学习了
scooby + 30 + 1 + 1 精品文章
明9002 + 10 期待已久~
老黄 + 10 支持

查看全部评分

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-4-15 22:51 | 显示全部楼层
在开工之前,必须给DAC定下所有的功能需求,这些需求决定了后面的DAC的方案。头脑风暴了半个月,想到最后这些需求可以概括为以下几条:
1.最低的失真度和高信噪比。这两个指标主要由D/A的性能决定,此外PCB的设计、电源也有很大影响。
2.用软件进行内插计算,最高要支持16X内插,也就是所谓的16X超采样。
3.低JITTER要求,因此必须要有本地低JITTER的PLL和FIFO做缓冲,FIFO要有一定深度以防被拉破。
4.平台化设计,作为硬件平台通过改变软件可以当其他东西用,比如信号源。
5.丰富的资料显示,DAC必须能显示采样率,超采样率,输入通道,FIFO状态等资料。
要满足需求1,就必须要用性能顶级的D/A,在07年,顶级D/A容易买到的基本上就两种PCM1794(1792),AD1955,前者是信噪比最高,失真-107dB,后者信噪比略低,但是失真-110dB,可谓各有千秋,都支持MONO的全平衡方式,这是高级DAC必须采用的方式,否则指标是做不上去的。虽然两层PCB在音频带内也可以做到比较高的信噪比,但是我做惯了高速电路,显然2层PCB不符合自己的思维习惯,最后纠结了一下,还是决定用4层,虽然平时4层板也不入法眼,不过自己DIY能这么玩已经算奢侈了。
要满足需求2,就要用到通用的信号处理器,目前我们信号处理领域里一般常用的就是DSP或者FPGA,一般说来DSP更适合完成较为复杂但是并行性不高的算法,FPGA则刚好相反,由于现在的FPGA都带有不少宝贵的DSP块,因此FPGA适合做实时性要求高,并行性要求高的信号处理,音频信号处理两者都可以,由于算法比较简单(主要是内插滤波算法和控制用PID算法),FPGA更胜任此工作,包括接口,FIFO,控制器都在FPGA里做掉了,真正的SOC。
要满足需求3,唯一的办法是用本地PLL,对本地PLL的要求是近端相噪一定要低,至少在0-20KHZ内相噪要低。本地PLL的方案中具有决定作用的是压控振荡器,做压控振荡器最好的是用高性能压控晶振,不过压控晶振的牵引范围比较小,一般才50个PPM(恒温的还要小的多)有可能会无法锁定输入偏差大的时钟。毕竟音频系统的质量参差不齐。此外另一个方法是用DDS,DDS的相噪比压控晶振略大,但是其牵引范围极大,而且是数字控制更方便。便于使用软件锁相环。考虑再三,决定使用DDS和FPGA做软件锁相环来搞定比较要命的时钟抖动问题。这个时钟抖动对听感的影响还是超乎想象的。FIFO深度的基本原则是在平时听音的时候,不会因为软锁跟踪的慢给拉破,这个一方面要靠软锁的精度保证,另一方面可以把FIFO也作为反馈环路的一部分。
要满足需求4,可以在PCB的冗余设计上做一定的考虑,比如足够的接口,FPGA资源等,这个比较简单。
要满足需求5,看来点阵式显示屏是必须的了,市场上有种1602的VFD屏,驱动方式和1602LCD类似,十分好用,显示效果远远超过LCD,唯一缺点是价格贵,不容易搞到,不过做个个把台问题也不大。(待续)

72

主题

0

好友

1463

积分

等待验证会员 当前离线

UID
6951
帖子
1462
精华
0
经验
1463 点
金钱
1483 ¥
注册时间
2005-12-25
发表于 2010-4-15 22:53 | 显示全部楼层
高 不知道这软件能在电脑上运行不?

哦 这是不是就是CPLD写的?
  CPLD(Complex Programmable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
  CPLD主要是由可编程逻辑宏单元(MC,Macro Cell)围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-4-15 23:03 | 显示全部楼层
高 不知道这软件能在电脑上运行不?
mjsong 发表于 2010-4-15 22:53

是固化在板子上的固件,和电脑上的软件不是一个概念

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-4-15 23:09 | 显示全部楼层
(继续)
sDAC原理图设计主要用MENTOR公司的DxDesigner,PCB设计用MENTOR WG的Expedition PCB,这两个EDA工具是PCB设计中的高级工具,业余爱好者喜欢用Protel99,但在大型设计中,完全见不到Protel的影子,基本都是MENTOR和Cadence公司产品的天下,用protel的自动化功能少,设计效率是很低下。
  sDAC的显示控制面板原理图是用Cadence公司的Orcad Capture设计配合MENTOR的PCB工具进行的,因为手头的DxDesigner是2004版的,虽然强大,但是Bug多的太离谱了,即使到了2005版,也没有根本改观。另一个原因是sDAC设计的时候时间跨度大,当时画显示控制面板的时候正在做的项目原理图用的是Orcad,我是抓到啥工具用啥工具。
  虽然是个比较简单的4层板,但是关键信号线还是用HyperLynx简单做了下信号完整性分析(SI),HyperLynx同为MENTOR GRAPHICS的产品,可以和Expedtion  PCB交互使用,边画边仿真,还是很先进的。我这次是画完后仿真。
上一个WG的图,PCB花花绿绿的很好看。
sDAC_LAYOUT.jpg
(待续)
头像被屏蔽

34

主题

2

好友

3581

积分

禁止发言 当前离线

来自天堂的魔鬼

UID
7302
帖子
3515
精华
2
经验
3581 点
金钱
3467 ¥
注册时间
2006-1-18
发表于 2010-4-15 23:13 | 显示全部楼层
到现在我看到的技术含量最高的东西
支持一下

2

主题

0

好友

1670

积分

侠之大者 当前离线

火星叔叔

Rank: 6Rank: 6

UID
88875
帖子
2223
精华
1
经验
1670 点
金钱
1630 ¥
注册时间
2009-3-17
发表于 2010-4-15 23:21 | 显示全部楼层
喜欢先进的技术,高超的水平

22

主题

1

好友

583

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
35285
帖子
2400
精华
0
经验
583 点
金钱
578 ¥
注册时间
2008-2-8
发表于 2010-4-15 23:25 | 显示全部楼层
支持,这个有技术含量

128

主题

4

好友

5474

积分

贵宾 当前离线

农夫,山前有点田!

Rank: 3Rank: 3

UID
17787
帖子
6485
精华
4
经验
5474 点
金钱
3816 ¥
注册时间
2007-1-21

社区贡献 论坛贵宾

发表于 2010-4-15 23:32 | 显示全部楼层
占位学习,支持一下先。

88

主题

0

好友

2137

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
7437
帖子
2285
精华
0
经验
2137 点
金钱
2033 ¥
注册时间
2006-2-1
发表于 2010-4-15 23:33 | 显示全部楼层
不错,软硬结合。期待更精彩的分析。

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-4-15 23:38 | 显示全部楼层
6# FUMAC
  多谢FUMAC兄捧场,现在继续
  音响PCB设计有很多传说,过分夸大了布线的影响,实际上对于业界,怎么布线都有一些通行原则,对于一个经验丰富的设计者,这些只是实实在在的问题,并不神秘。音响不是神器,不过是个家用电器而已。4层PCB的布线布局都要比双面板好做的多。不过对于DAC这种电路,通行的叫法是“数模混合电路”,这种电路的设计难度相对来说是比较大的,因为高速数字电路容易对模拟电路造成干扰,模拟电路的工作频率越高,高速数字电路的信号边沿斜率越大,影响就越大,最后直接影响就是信噪比。所幸的是,音频电路的带宽很窄,在几十KHZ的带宽内,数字电路带来的噪声尚不足以在测量时在信噪比指标上反映出来。举个例子,E-MU的1212M音频卡作为内置音频卡在电脑电磁环境如此恶劣的条件下RMAA创造了120dB的信噪比的惊人记录,就是因为信噪比的测量带宽在几十KHZ以内。
  不过设计习惯的原因,我希望音频带外的噪声也尽量的低,因此要采用模拟完整地平面的设计,由于没有辐射骚扰的要求,因此可以用数字地模拟地分割的方式,通过良好的布局可以获得比较好的信噪比并兼顾带外的噪声,左右声道用一个模拟地,不过这种设计的缺点是会对高频的声道分离度有一定影响,这个在最后的测试中会反映出来。
D/A的接地也有很多传说,不同的AN说法都不同,有的说AD,DA的数字地要作为模拟地用,有的说AD,DA数字地作为系统的数字地,即使同一个公司的不同的大牛说法也不尽一致,不过就以前做项目的经验来看,在高速A/D下,采取将整个A/D作为模拟器件,数字地管脚连到模拟地和不分割地平面效果不错,因此这里也借鉴下以前的经验,整片D/A作为模拟器件连到模拟地上,模拟地和数字地之间在数据线下方用0欧电阻连接。
  很多爱好者喜欢用磁珠连接模拟地和数字地,看似没有问题,但是实际上不是很好的方式。

(待续)

10

主题

0

好友

1089

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
52141
帖子
1153
精华
0
经验
1089 点
金钱
1076 ¥
注册时间
2008-8-26
发表于 2010-4-15 23:52 | 显示全部楼层
传说中的大作,不过这个软件dac能超过中端的声卡么?现在一般的专业声卡都可以16倍超采样了最便宜的maya都可以了,其他的功能似乎都在pc上可以找到,其实可以在通用RISC平台上做么。

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-4-15 23:58 | 显示全部楼层
传说中的大作,不过这个软件dac能超过中端的声卡么?现在一般的专业声卡都可以16倍超采样了最便宜的maya都可以了,其他的功能似乎都在pc上可以找到,其实可以在通用RISC平台上做么。
dione 发表于 2010-4-15 23:52

声卡的作用和DAC不同。16倍超采样,96khz输入下,D/A的采样频率为FS=96x16=1.536MHZ,这对一般D/A不是特别容易达到的指标
maya可以做到1.5MHZ以上采样率?
至于RISC还是CISC,这些都不是在考虑范围之内的东西。

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-4-16 00:18 | 显示全部楼层
谢谢大伙捧场,下面继续
  sDAC的输入解调用的是DIR9001,不是说DIR9001有多好,而是在当时实在没的可选的东西用,DIR9001只支持到96KHZ采样,50ps的抖动看似还可以,实际上近端相噪根据实测情况看100HZ内的能量还是比较高的,因此也坚定了我用本地锁相环的决心。
  本地时钟最初的方案是定做一片压控晶振,再配以外部模拟电荷泵鉴相器的方法,这种模拟方法的优点是远端相噪很小,但是由于9001的近端相噪比较高,模拟锁相环很难做到窄带宽,对于很近端的相噪几乎是直通的,所以音频带宽内相噪抑制效果有限,我认为时钟抖动的相位噪声主要在音频带宽以内对听感有影响,表现在听感变“糊”。高端的在听觉范围之外是听不到的。所以要求锁相环的环路滤波器要能够在音频带宽内压制输入时钟的相位噪声。因此,比较好的办法就是“软锁”,即软件锁相环。
  软件锁相环的最大优点是可以通过软件进行配置修改,可以做到低鉴相频率,20HZ以下的极窄带宽,基本算法是基于PID,其中PI更多些,软件滤波后输出通过D/A驱动压控晶振来调整晶振的频率。这个方法效果是最好的,但是压控晶振的压控范围很小,考虑到输入时钟频率可能会偏离压控晶振的牵引范围,最后稳妥为先,改用DDS代替压控晶振产生系统所需要的频率,对于DDS来说,其参考时钟就变得至关重要。
下图是定做的一部分晶振,因为方案变了没用上,我的money啊。。。(待续)
sDAC中落选的部分TCXO,VCXO.jpg

212

主题

2

好友

2446

积分
     

罗宾汉 当前离线

蚂蚁

Rank: 7Rank: 7Rank: 7

UID
121824
帖子
10495
精华
0
经验
2446 点
金钱
2177 ¥
注册时间
2009-8-1
发表于 2010-4-16 00:37 | 显示全部楼层
大作啊,期待下文

1

主题

0

好友

599

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
25026
帖子
1860
精华
0
经验
599 点
金钱
568 ¥
注册时间
2007-7-24
发表于 2010-4-16 00:39 | 显示全部楼层
期待laurel兄的大作

10

主题

0

好友

1089

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
52141
帖子
1153
精华
0
经验
1089 点
金钱
1076 ¥
注册时间
2008-8-26
发表于 2010-4-16 00:48 | 显示全部楼层
13# laurel


maya是软件插值的

326

主题

3

好友

8192

积分
     

贵宾 当前离线

辉记DIY

Rank: 3Rank: 3

UID
6311
帖子
13401
精华
3
经验
8192 点
金钱
6427 ¥
注册时间
2005-11-12

社区贡献 论坛贵宾

发表于 2010-4-16 00:49 | 显示全部楼层
软件锁相环,FPGA希望做得比这张卡好!
这卡的时钟误差还是比较不让人满意
00003600_01.jpg

55

主题

2

好友

775

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
2280
帖子
1030
精华
0
经验
775 点
金钱
415 ¥
注册时间
2004-11-27
发表于 2010-4-16 00:56 | 显示全部楼层
终于完工了

0

主题

0

好友

80

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
190465
帖子
159
精华
0
经验
80 点
金钱
80 ¥
注册时间
2010-4-11
发表于 2010-4-16 01:05 | 显示全部楼层
占位学习,能否上多几张图欣赏?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部