module FPGAUSB
(
// {{ALTERA_ARGS_BEGIN}} DO NOT REMOVE THIS LINE!
FLAGA, FLAGB, FLAGC, SLOE, SLRD, PKTEND, SLWR, FIFOADR, FLAGD, FD
// {{ALTERA_ARGS_END}} DO NOT REMOVE THIS LINE!
);
// Port Declaration
// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
input FLAGA;
input FLAGB;
input FLAGC;
output SLOE;
output SLRD;
output PKTEND;
output SLWR;
output [1:0]FIFOADR;
inout FLAGD;
inout [7:0]FD;
// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
reg [7:0]FD_buf[63:0];//512 buff data
reg [1:0]FIFO; // FIFOaddress
reg state=0;
reg empty,full,count=0;
reg SLOE,SLWR,PKTEND,SLRD;
parameter IDEL=1'b0;
//assign full=FLAGB;
//assign empty=FLAGC;
always@(negedge SLOE or negedge SLRD)//case 1,2,3,4
begin
case(state)
IDEL:begin
SLOE<=1'b1;
SLWR<=1'b1;
PKTEND<=1'b1;
state<=1;
end
1:begin
FIFO<=1'b00;// choice EP2 OUT
state<=2;
end //end state 1
2:begin
if(!FLAGC)begin state<=3;end
else state<=2;
end //end state 2
3:begin
fork
SLOE<=1'b0;
SLRD<=1'b0;//read
join
// for(;count<63;count++)//count the 512 byte data
// begin
FD_buf[count]<=FD;//read the data into buffer
count=count+1;
// end
fork
SLOE<=1'b1;
SLRD<=1'b1;//read reset
join
state<=4;
end //end state 3
4:begin
if(count==64)state<=0;
else state<=IDEL;
end //end state 4
default:state<=0;
endcase
end
endmodule
完成的过程是:
外部主控器典型的进程如下:
IDLE:当写事件发生时,转到状态1
状态1:指向OUT FIFO,激活FIFOADR[1:0],转向状态2
状态2:激活SLOE,如果FIFO空标志为“假”(FIFO不空),则转向状态3;否则,停留状态2.
状态3:激活SLOE、SLRD,传送总线采样数据;撤销激活SLRD(指针加1)和SLOE,转向状态4.
状态4:如果有更多的数据要读,则转向状态2;否则转向IDLE
我是verilog学习的新手,请指教啊!!!! |