Cummings异步FIFO——第一篇 (2)

Cummings异步FIFO——第一篇

wire clk,rst_n;
wire [n-1:0] bnext,gnext;
wire inc,full; // 写时钟域的格雷码转换器
reg [n-1:0] ptr; //输出的n位格雷码
reg [n-1:0] bin;
integer i;

assign bnext = bnext+(inc && !full)?1:0;
assign gnext = (bnext>>1) ^ bnext; //二进制转格雷码
always @(posedge clk or negedge rst_n) begin
if(rst_n==1'b0) {ptr,bin}<=0;
   else {ptr,bin} <={gnext,bnext};
end
4. fifo结构图

Cummings异步FIFO——第一篇

5. 空满标志位

空标志位在读时钟域产生;满标志位在写时钟域产生。

5.1 空标志位

地址比实际地址增加一位。

读时钟域的格雷码读地址 与 同步过来的格雷码写地址相同,说明满

assign rempty_val = (rgraynext == rq2_wptr); // 读时钟域的格雷码读地址 与 同步过来的格雷码写地址相同,说明满
always @(posedge rclk or negedge rrst_n) // 读时钟
if (!rrst_n) rempty <= 1'b1;
else rempty <= rempty_val;
5.2 满标志位

地址比实际地址增加一位。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxjfj.html