关于USB芯片68013的同步与异步的理解

2019-07-15 22:07发布

最近在弄FPGA通过USB传输数据至PC,用到了68013的芯片,使用slaveFIFO模式进行写数据。现在还没有考虑驱动的部分,在同步和异步上的理解,我就有点糊涂了……
只有一个ifclk的接口呀,这个接口是不是读FD的数据的时钟啊?就一个输入时钟,它同步到底是和谁同步?异步是与谁异步?
我理解的意思是:同步就是读和写的速度一样,异步就是不一样,要注意它到底能缓存多少,最终的速率是否满足。我只要给FIFO里面写数据就好,只要不超过芯片手册里的最大传输速度。
看了一些网上写的verilog,表示对他们所表示的各个状态的实现都较难理解。网上说在slrd下沿的时候,进行写数据,我试着写了一个,还没有测试,请各位大神看一下~
always @(posedge ifclk or negedge rst)
begin
        if(!rst)
        begin
                STATE_NUM <= 3'd0;
                u_slcs <= 1'd1;
                u_sloe <= 1'd0;
                u_slwr <= 1'd1;
                u_slrd <= 1'd1;
        end
        else
        begin
                case(STATE_NUM)
               
                ////////////判断控制信号进入1,否则维持///////////
                3'd0:
                begin
                        if(!u_slcs)
                                STATE_NUM <= 3'd1;
                        else
                                STATE_NUM <= 3'd0;
                end
               
                ////////////判断是否为空选择slaveFIFO模式2,否则返回1/////////
                3'd1:
                begin
                        if(u_flagc)
                        begin
                                usb_address <= 2'b10;
                                STATE_NUM <= 3'd2;
                        end
                        else
                                STATE_NUM <= 3'd1;
                end
               
                ///////////判断是否满,若满则维持,若非满则进入3////////////
                3'd2:
                begin
                        if(u_flagb)
                                STATE_NUM <= 3'd3;
                        else
                        begin
                                u_slwr <= 1;
                                STATE_NUM <= 3'd2;
                        end
                end
               
                /////////////时钟下沿写入数据////////////////////
                3'd3:
                begin
                        DATA_OUT <= DATA;
                        u_slwr <= ~u_slwr;
                        STATE_NUM <= 3'd4;
                end
               
                /////////////若无数据则返回0,有则返回1///////////
                3'd4:
                begin
                        u_slwr <= 1;
                        if(DATA == 16'b0)
                                STATE_NUM <= 3'd0;
                        else
                                STATE_NUM <= 3'd1;
                end
               
                default:STATE_NUM <= 3'd0;
               
                endcase
        end


end

小弟刚刚学习FPGA,不知道写的东西有没有问题。对于具体的概念也是一知半解,求大神指条明路!!!
谢谢~~~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。