最近在弄
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,不知道写的东西有没有问题。对于具体的概念也是一知半解,求大神指条明路!!!
谢谢~~~
一周热门 更多>