ASI Transmitter模块的作用是,先进行8B10B编码,再把并行的27 MHz数据按照标准协议转成270 MHz的串行数据。
ASI Receiver模块则是ASI Transmitter的逆过程,先进行串并转换,用5倍时钟采样对数据进行校准,然后分析同步包头等信息,再进行8B10B解码,得到8位并行数据。
SDI部分与ASI十分相似,不重复介绍。
码流播放器是全双工设计,但是,因为FPGA与USB芯片之间的数据传输管脚是复用的,不能同时双向传输。所以,在FPGA与USB芯片之间需要不停的快速切换读和写(1μs切换一次),即可实现“同时”发送和接收数据。
同时发送和接收数据时,受切换的影响,速率减半,且USB接口时钟最大支持仅为48 MHz,所以当收发同时进行的时候,传输速度无法达到理论最大的216 Mbps。如果只是单向发送或者接受数据,系统会自动切换成接收或者发送模式,基本可以达到数据传输理论最大值的216 Mbps。
发送码流时,可以在上位机软件的操作界面上输入发送速率(从0到216,000,000 bps),上位机通过USB芯片,把发送速率传到FPGA,FPGA就可以按照所得速率,精确控制发送码流的速度。
为了达到码流收发的理论最大值,在FPGA上外挂一个RAM,通过对RAM的读写的控制,实现先入先出(FIFO)的缓存功能。FPGA对RAM的读写控制是编写Verilog HDL的难点之一,为了节约成本,码流播放器选择价格低、体积小、速度快、容量大的SDRAM,给Verilog程序编写增加了不少难度。相比控制简单的SRAM,DRAM每隔一段时间必须自刷新和预充,且数据线与行列地址都是复用的,切换读写时极容易出现时序上的偏差,出现写错,读错,重复读,丢数等等问题。
SDRAM上电复位后,计数器控制在200μs后,进行SDRAM初始化配置,对所有BANK进行预充,接着是多个Reflash,然后进入SDRAM工作模式设置。之后进入空闲状态,执行读写数据和自刷新等任务。
由于USB程序设置为Slave-FIFO模式,将FIFO的空满状态发送到FPGA,而FPGA作为Master,需要根据USB内FIFO的空满信号,综合SDRAM的空满状态,对读写状态进行判断,并给出读写使能。
3.2 USB收发器及控制器固件程序
赛普拉斯公司提供了非常好的程序框架,免去了用户自己编写一些通用性比较强、模式化的程序。在框架的基础上,用户只需在相应的地方写相应的代码即可完成USB工作。
码流传输因为数据量大,而且传输和接受数据上又没有带宽和间隔时间要求所以采用的是Bulk传输方式。
计算机和USB外设端点0(EP0)之间的传输是典型的控制传输,主要进行查询配置和给USB设备发送通用的命令;控制传输是双向传输,数据量通常较小,而且数据传送是无损性的。