- 积分
- 168
- 在线时间
- 163 小时
- 最后登录
- 2023-11-25
- 阅读权限
- 50
- 精华
- 0
- UID
- 336820
- 帖子
- 181
- 精华
- 0
- 经验
- 168 点
- 金钱
- 161 ¥
- 注册时间
- 2011-5-19
|
本帖最后由 tcjie 于 2023-11-10 14:26 编辑
近日利用USB Phy + FPGA 做了一个高速USB2.0的异步界面,实现了USB界面的基本功能,主要器件是用国产芯片。因为现在购买国外名厂的零件价格比较高。接触一下国产的这类型的芯片看看性能如何,都是用业余时间慢慢来研究。做下来觉得国产器件也不错。性价比高。
仔细研究了这颗FPGA后发现有64Mb的SDRAM,利用它建立环形FIFO队列先存放数据,再用本地时钟将其取出进行SPDIF和I2S传输,摆脱USB的传输干扰,使重播的品质更稳定。
64Mb = 32b x 2M,对于双通道32bit的取样可以存放1M帧,44.1K取样可存放1M/44.1K = 23.2秒,48K取样可存放1M/48K = 21.3秒。96K的音乐可存放大约10秒。播放44.1K的音乐先用一半的内存来存放数据,大约可存放11秒,再进行播放,相当于音乐播放延迟了11秒再播放,使数据量在一半内存里摆动,根据内存数据量来进行USB流量控制,最大限度延长内存上溢,下溢的时间。在电脑这边做个软件观察这个内存的数据量变化情况,发现在播放过程中,这个数据量基本没什么变化,也就是说FIFO的进出动态平衡,可见异步USB流量控制起作用。既然这缓冲区的数据量基本不变,可根据需要设置这缓冲区的深度:深,中,浅,分别是1/2,1/4,1/8内存。对于播放视频,可设置旁路这缓冲区,实现画面和声音同步。
实现这些功能后,发现这颗FPGA还有大量的资源空间,下一步打算将SPDIF接收的功能做进去,同样做数据缓冲。相当于实现SPDIF接收-》大缓冲区-》I2S输出,也就实现了SPDIF传输的DOP转为DSD由I2S输出。由于SPDIF没有流控,可能会因为发送方和接收方时钟的差异会使缓冲区上溢或下溢。到时根据情况需要看能否利用这颗FPGA现有的资源做一个PLL,同步一下SPDIF的输入时钟。
电脑端软件可对USB界面固件改写,并进行播放设置和监测。
以后就在使用中发现问题,修改问题了。或在现有的板上硬件资源修改固件增加功能了。 |
|