spi_master.v
clk_cnt与clk_div主要用来产生DCLK的周期
clk_edge_cnt用于DCLK的翻转
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时;
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时;
CPHA=0,表示数据采样是第一个边沿,数据发送在第二个边沿;
CPHA=1,表示数据采样是第二个边沿,数据发送在第一个边沿。
上图为此模块的仿真波形,在黄线处的恰为时钟sys_clk的上升沿,伴随着时钟的上升沿,对于DCLK_reg这个触发器,此时state是DCLK_EDGE这个状态,故DCLK发生翻转。而在这个上升沿之后clk_edge_cnt才会加1,此时clk_edge_cnt的值为1。