阅读:1048回复:1
CY7C68013上行传输诡异问题请教!
异步bulk传输,Slave FIFO方式
第一步是做一个发送程序,状态机控制发送数据,发送数据直接在状态机内部产生,00~FF递增,在接受端可以正常接收数据(通过控制面板接受,点击那个bulk/int键接受一个512Bytes)。 case (mstate) 4'b1001 : mstate<=4'b0101; 4'b0101 : mstate<=4'b0011; 4'b0011 : begin mstate<=4'b1111; data_cnt<=data_cnt+8'b0000_0001; //count up; end 4'b1111 : begin if(full) //fifo not full begin mstate<=4'b1110; //sl_wr='1' end else begin mstate<=4'b1111; data_cnt<=data_cnt; end end 4'b1110 : mstate<=4'b0111; //sl_wr='0'; 4'b0111 : mstate<=4'b1001; //sl_wr='1' 4'b1001 : mstate<=4'b1111; //return to intial state and loop*/ default : mstate<=4'b1111; endcase 程序中mstate的最后一位作为slwr写选通信号。 因为要从外部系统接收数据,因此下一步需要在发送端状态机外部增加一个FIFO,有一个小程序往FIFO中写数据,满即停止。而发送端状态机要从这个FIFO中读取数据再发送到CY7C68013。 case (mstate) 4'b1001 : begin if(!empty) begin rd_en <= 1'b1; mstate<=4'b0011; //sl_wr='1' end else begin rd_en <= 1'b0; mstate<=4'b1001; end end 4'b0011 : begin mstate<=4'b1111;//0808 data_cnt<=rd_data; //count up; end 4'b1111 : if(full) //fifo not full mstate<=4'b1110; //sl_wr='1' 4'b1110 : mstate<=4'b0111; //sl_wr='0'; 4'b0111 : mstate<=4'b1001; //sl_wr='1' default : mstate<=4'b1111; endcase 但是在状态机前端加上一个读取外部FIFO的操作之后数据接收就不正常了,第一个512Bytes还正常,从第二个512bytes开始接收到的数据就是只有偶数部分了,很奇怪。 对此问题百思不得其解,欢迎各位大虾指教! |
|
沙发#
发布于:2007-09-03 13:46
再顶一下,大虾们指教啊
|
|