关于USB芯片68013的同步与异步的理解
时间:10-02
整理:3721RD
点击:
最近在弄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,不知道写的东西有没有问题。对于具体的概念也是一知半解,求大神指条明路!
谢谢~~~
只有一个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,不知道写的东西有没有问题。对于具体的概念也是一知半解,求大神指条明路!
谢谢~~~
帖子就这样沉了啊
68013里面的51核程序有没有,如果没有的话,就赶紧搞个。
最近在看这块了。想直接用Cypress给的开发包里的内容,目前还没有多少头绪。我想问下,你知道,我前面的FPGA部分有问题吗?
其实,我是比较讨厌做完之后又回来返工的,想做完一块是一块的说……
同步就是在IFCLK时钟沿进行数据读写,SLWR和SLRD是作为使能信号。异步就是在SLWR和SLRD下降沿进行数据读写,不需要IFCLK。同步模式能达到更高的读写速度。
完了。过了好几天再看,再听你的一说。我感觉我写的,就是一坨狗屎。谢谢大神!