📄 fifofile.v
字号:
module fifo(clk,rstp,din,writep,readp,dout,emptyp,fullp);input clk;input rstp ;input[15:0] din;input readp;input writep;output[15:0] dout;output emptyp;output fullp;parameter DEPTH=2,MAX_COUNT=2'b11;reg[15:0] dout;reg emptyp;reg fullp;reg[(DEPTH-1):0] tail;reg[(DEPTH-1):0] head;reg[(DEPTH-1):0] count;reg[15:0] fifomem[0:MAX_COUNT];always@(posedge clk)begin if(rstp==1) begin dout<=16'h0000; end else if(readp==1'b1&&emptyp==1'b0) begin dout<=fifomem[tail]; endendalways@(posedge clk)begin if(rstp==1'b0&&writep==1'b1&&fullp==1'b0) begin fifomem[head]<=din; endend//update head pointeralways@(posedge clk)begin if(rstp==1'b1) begin head<=2'b00; end else begin if(writep==1'b1&&fullp==1'b0) begin head<=head+1; end endend//update tail pointeralways@(posedge clk) begin if(rstp==1'b1) begin tail<=2'b00; end else begin if(readp==1'b1&&emptyp==1'b0) begin tail<=tail+1; end endend//update counteralways@(posedge clk)begin if(rstp==1'b1) begin count<=2'b00; endelsebegin case({readp,writep}) 2'b00: count<=count; 2'b01: if(count!=MAX_COUNT) count<=count+1; 2'b10: if(count!=2'b00) count<=count-1; 2'b11: count<=count;endcaseendend//update emptyp logalways@(count)begin if(count==2'b00) emptyp<=1'b1; else emptyp<=1'b0;end//update fullp logalways@(count)begin if(count==MAX_COUNT) fullp<=1'b1; else fullp<=1'b0;endendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -