always @(posedge clk) begin case(state) //通过状态跳转实现协议中的电平信号传输,并行变串行 0: begin out_num<=1; finish<=0; temp<=0; if(start==1) //考虑到模块最终在系统中所处位置,采用电平触发方式,只需调整控制信号长度即可 state<=1; else state<=0; end 1: begin out_num<=0; //起始位 temp1<=temp1+1; if(temp1==15) //clk信号每16个周期发送一位数据,temp变量用于计数,下同 begin state<=2; temp1<=0; end else state<=1; end 2: begin out_num<=in_num[0]; //并行变串行,最低位,下同 temp2<=temp2+1; if(temp2==15) begin state<=3; temp2<=0; end else state<=2; end 3: begin out_num<=in_num[1]; temp3<=temp3+1; if(temp3==15) begin state<=4; temp3<=0; end else state<=3; end 4: begin out_num<=in_num[2]; temp4<=temp4+1; if(temp4==15) begin state<=5; temp4<=0; end else state<=4; end 5: begin out_num<=in_num[3]; temp5<=temp5+1; if(temp5==15) begin state<=6; temp5<=0; end else state<=5; end 6: begin out_num<=in_num[4]; temp6<=temp6+1; if(temp6==15) begin state<=7; temp6<=0; end else state<=6; end 7: begin out_num<=in_num[5]; temp7<=temp7+1; if(temp7==15) begin state<=8; temp7<=0; end else state<=7; end 8: begin out_num<=in_num[6]; temp8<=temp8+1; if(temp8==15) begin state<=9; temp8<=0; end else state<=8; end 9: begin out_num<=in_num[7]; temp9<=temp9+1; if(temp9==15) begin state<=10; temp9<=0; end else state<=9; end 10: begin finish<=1; temp<=temp+1; out_num<=1; if(temp>=50) //控制状态时间长度,便于接口衔接 state<=0; else state<=10; end endcase end endmodule