joysymbol
驱动牛犊
驱动牛犊
  • 注册日期2006-09-03
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
阅读:1048回复:1

CY7C68013上行传输诡异问题请教!

楼主#
更多 发布于:2007-08-28 09:53
异步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开始接收到的数据就是只有偶数部分了,很奇怪。

对此问题百思不得其解,欢迎各位大虾指教!
joysymbol
驱动牛犊
驱动牛犊
  • 注册日期2006-09-03
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-03 13:46
再顶一下,大虾们指教啊
游客

返回顶部