parameter [7:0] spi_data=8'b1010_1010;
reg [3:0] cnt_bit;
always@(posedge clk_50M or negedge reset)
begin
if(!reset)
begin cnt_bit<=0; end
else
if(spi_clk_down==1)
begin
if(cnt_bit==10)
cnt_bit<=0;
else
cnt_bit<=cnt_bit+1;
end
end
/*一定要把mosi并行写 不能直接接到上边那个alway块里面,会延迟一个时钟miso 导致错误,所以一般采用状态机最好
if(spi_clk_down==1)
begin
if(cnt_bit==10)
cnt_bit<=0;
else
cnt_bit<=cnt_bit+1;
if(cnt_bit>=1&& cnt_bit<=8)
mosi<=spi_data[8-cnt_bit];
else
mosi<=1'b1;
end
*/
always@(posedge clk_50M or negedge reset)
begin
if(!reset)
mosi<=0;
else
if(cnt_bit>=1&& cnt_bit<=8)
mosi<=spi_data[8-cnt_bit];
else
mosi<=1'b1;
end
assign cs=(cnt_bit>=1 && cnt_bit<=9)?1'b0:1'b1; //产生片选信号