fpga_feixiang 发表于 2018-12-24 14:05:39

fifo设计






















0111       1000


格雷码可保证每次一次跳变,降低了毛刺产生的概率,如果用次地址去判断空满标志,极大的提高了标志的准确性

格雷码的空满标志判断

0 110   1110

0 101    1101


full=wr_addr == {~rd_addr,rd_addr};
当写地址和读地址的最高位和此高位不同,其余位相同的时候则可判断FIFO满

empty= wr_addr == rd_addr;
当写地址和读地址的最高位和此高位相同,其余位相同的时候则可判断FIFO满
module fifo
(
        input rst_n,
input rd_clk,
        input rd_en,
output dout,

input wr_clk,
input wr_en,
input din,

output full,
empty
);
//定义FIFO深度为8
reg fifo_rem;//数组的定义
reg wr_addr,rd_addr;
//FIFO的写
always @(posedge wr_clkor negedge rst_n)
          if(~rst_n)
                        wr_addr <=4’d0;
          else if(wr_en&&(~full))begin
if(wr_addr==4’b1111)       
                                        wr_addr <=4’d0;
                          else
wr_addr <= wr_addr +1’b1;
                  fifo_rem]<= din;
       end       
//fifo读操作
assign dout= fifo_rem ];
always @(posedge rd_clk or negedge rst_n)
          if(~rst_n)
                        rd_addr<=4’d0;
          else if(rd_en&&(~empty))begin
                        if(rd_addr==4’b1111)
                                rd_addr<=4’d0;
                        else
                                rd_addr<= rd_addr+1’b1;
          end       
//****************************************************************************、、//空满标志判断
wire rd_addr_g,        wr_addr_g;
assign wr_addr_g= wr_addr ^{1’b0, wr_addr };//写地址格雷码转换
assign rd_addr_g= rd_addr ^{1’b0, rd_addr };//读地址格雷码转换
//地址同步
reg rd_addr_g_r1, rd_addr_g_r2;//读地址同步
alwqays @(posedge wr_clk)begin
           rd_addr_g_r1<= rd_addr_g;
           rd_addr_g_r2<= rd_addr_g_r1;
end
reg wr_addr_g_r1, wr_addr_g_r2;//写地址同步
alwqays @(posedge rd_clk)begin
wr_addr_g_r1<= wr_addr_g;
wr_addr_g_r2<= wr_addr_g_r1;
end

assign full= (wr_addr_g== {~rd_addr_g_r2, rd_addr_g_r2}?1’b1:1’b0;
assing empty=( rd_addr_g== wr_addr_g_r2)?1’b1:1’b0;
endmodule

zhangyukun 发表于 2018-12-25 09:16:17

fifo设计:):)

fpga_feixiang 发表于 2018-12-30 14:04:45

顶~~~~~~~~~~~~~~~~~~~

lixirui 发表于 2018-12-31 10:30:02

fifo设计
页: [1]
查看完整版本: fifo设计