📄 fifo.v
字号:
module FIFO(Data_out,DIR,DOR,Clk,Data_in,Reset,Si,So);output DIR; //Full flag,0 validoutput DOR; //Empty flag,0 validoutput[9:0] Data_out;input Clk;input Si; input So;input Reset; // FIFO reset; input[9:0] Data_in;reg DIR;reg DOR;reg[9:0] Data_out;reg[9:0] Ram_buf[15:0]; //buffer use in FIFOreg[3:0] Wp;reg[3:0] Rp;integer i; always @ (negedge Clk) if(Reset) begin for(i=0;i<=15;i=i+1) Ram_buf[i] <= 0; DIR <= 1; DOR <= 0; Wp <= 0; Rp <= 15; end else begin if(Si) Write_FIFO; else if(So) Read_FIFO; end task Write_FIFO; begin if(DIR) begin DOR <= 1; Ram_buf[Wp] <= Data_in; $display("Ram_buf[%h] = %h",Wp,Ram_buf[Wp]); if(Wp==15) Wp <= 0; else Wp <= Wp+1; if(Wp == Rp) //Ram write full DIR <= 0; else DIR <= 1; end else $display("FIFO has full!!!"); endendtasktask Read_FIFO; begin if(DOR) begin DIR <= 1; Data_out <= Ram_buf[Rp]; if(Rp==15) Rp <= 0; else Rp <= Rp+1; if( ((Rp==15)&(Wp==1))||((Rp==14)&(Wp==0))||(Rp==Wp-2) ) //Ram read empty DOR <= 0; else DOR <= 1; end else $display("FIFO has empty!!!"); endendtask endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -