zynq实现对振镜的控制,通过XY2-100协议,该协议和SPI的CPOL=0/CPHA=1的模式很接近,先用verilog实现SPI再实现XY2-100。
SPI实现
verilog包括几个部分,引脚定义、状态机和代码实现。
引脚定义
除了SPI本身的4路信号:O_CLK,O_CS,O_MOSI,I_MISO,和FPGA必须的SYS_CLK和RSTN,还有有用与状态判断的I_TXEN,I_RXEN,O_TXDONE,O_RXDONE,和传输的并行数据I_DATAIN,O_DATAOUT。
其中
I_TXEN为主机给从机发送数据的使能信号,其为高时主机才会发送信号;
I_RXEN为主机给从机接收数据的使能信号,其为高时主机才会接收信号;
O_TXDONE为主机给从机发送数据完毕的标志位,发送完毕后给一个高电平脉冲;
O_RXDONE为为主机给从机接收数据完毕的标志位,接收完毕后给一个高电平脉冲。
状态机
先贴一下CPOL=0/CPHA=0模式的图。
主机实现一个8bit数据的发送,需要将片选信号O_CS置低后完成以下16个状态。在完成16个状态之后发送标志位O_TXDONE并将O_CS置高。
状态0:SCK为0,MOSI为要发送的数据的最高位,即I_data_in[7]
状态1:SCK为1,