Audio PLL经过上面表格里面的分频,可以分出target中的频率(Mhz)。
我FPGA验证的时候跑的是48K采样率的音乐,所以clock的设置如下:
BitClock = ASYSCLK / D = OverSampClock / D = 36.864 / 6 = 6.144Mhz //D的值是软件控制的
DataClock = 6.144 / 2 = 3.072 Mhz
SampClock = 3.072 / 64 = 48Khz
Abby有一个版本的bitfile可以配置ASYSCLK:
通过
devmem 0x8399038 读出该寄存器原来的值:
0x80000011
devmem 0x8399038 32 0x80000111 可以将bit8设置成1,来获取另外一个ASYSCLK。
BitClock = ASYSCLK / D = OverSampClock / D = 33.8688 / 6 = 5.6448 Mhz //D的值是软件控制的
DataClock = 5.6448 / 2 = 2.8224 Mhz
SampClock = 2.8224 / 64 = 44.1 Khz
SPDIF只有一根输出线,clk,data信息都通过这根线传输,
SPDIF的数据格式如下:
1 Block (192 * 64 = 12288 bits ) = 192 Frames
1 Frame (32*2 = 64 bits ) = 2 SubFrames
1 SubFrame (32 bits) = 1 Preamble(4 bits) + 1 Channel(28 bits)
1 Channel (28 bits) = 1 AuxData(4 bits) + 1 AudioData(20 bits) + 1 MiscData(4 bits)
SPDIF 使用的是Biphase-Mark Encoding
上图中,最下面的是SPDIF实际量出的波形,虚线对应的各个点肯定是跳变沿,两根虚线之间如果有数据跳变,则对应的中间的Data为1,如果没有数据跳变,中间的Data为0。
SPDIF中的引导码,分为3种:
ZX2000 SPDIF前4个frame(8个subframe)是没有Z前导码的,是用来进行校验的。第五个frame才会出现Z前导码。
前导码是不符合上面说的,虚线边沿数据跳变规则的,所以很容易能够从波形里面找出来。
量SPDIF的bitclk,可以量上面单独存在的1的周期,然后换算成频率。Bitclk/2/64就可算出采样率了