1、写程序先直接写出时钟信号
1 //-----------------产生串行时钟scl,为输入时钟的二分频--------- 2 always@(negedge clk)//二分频表示频率小了,周期大了 3 if(reset) 4 scl<=0; 5 else 6 scl<=~scl;
2、然后直接写主状态程序
1 always@(posedge clk) 2 if(reset)//复位 3 begin 4 link_read<=no;//各大开关信号关闭 5 link_head<=no; 6 link_write<=no; 7 link_stop<=no; 8 link_sda<=no; 9 ack<=0; 10 rf<=0;//各大标志位赋值 11 wf<=0;//写状态标志位 12 ff<=0;//寄存器标志位 13 main_state<=idle;//主状态进入空闲了 14 end 15 else 16 begin 17 casex(main_state) 18 idle://空闲状态也是要空闲 19 begin 20 link_read<=no;//各大开关 21 if(wr)//写信号 26 begin 27 wf<=1; 28 main_state<=ready; 29 end 30 else if(rd)//读信号 31 begin 32 rf<=1;// 33 main_state<=ready; 34 end 35 else 36 begin 37 wf<=0; 38 rf<=0; 39 main_state<=idle; 40 end 41 end 42 ready: 43 begin 44 head_state<=head_begin; 52 ff<=0; 53 ack<=0; 54 main_state<=write_start; 55 end 56 write_start: 57 begin 58 59 end
3、写程序的过程中每一个根线都应该是加上寄存器和标志位和开关。
1)输出和输入:加寄存器
2)输入输出是否完成:加标志位
3)未完待续。。。。。。。。。。。。。。。