⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rptr_empty.v

📁 多时钟域下同步逻辑的RTL代码(包括数据同步器和控制信号万能同步器)
💻 V
字号:
/************************************************** *		模块名:rptr_empty *		时  间:2007-05-14 *    设计者:张波涛 *    说  明:异步FIFO的判空逻辑 **************************************************/ //`include "timescale.v" module rptr_empty(	rempty,		//FIFO的空信号	raddr,      //读地址, (n-1)位Gray码	rptr,       //读指针, n位Gray码, 送往写时钟域	rwptr2,     //同步写指针,从写时钟域来	rinc,       //读请求信号	rclk,       //读时钟	rrst_n      //读时钟域复位信号	);      	parameter ADDRSIZE = 4;		output rempty;   output [ADDRSIZE-1:0]	raddr;   output [ADDRSIZE:0] 		rptr;      input [ADDRSIZE:0] rwptr2;   input rinc,rclk,rrst_n;          reg[ADDRSIZE:0] rptr,rbin,rgnext,rbnext;	//当前读指针(Gray), 读地址(二进制), 下一拍读指针(Gray), 读地址(二进制)   reg rempty,raddrmsb;      //Gray码产生器       always @(posedge rclk or negedge rrst_n)   begin      if(!rrst_n)          begin            rptr <= 0;            raddrmsb <= 0;          end      else           begin            rptr <= rgnext;            raddrmsb <=rgnext[ADDRSIZE]^rgnext[ADDRSIZE-1];          end   end      //产生下一拍的地址和指针         always @(rptr or rinc)    begin: Gray_inc       integer i;		        for(i= 0;i<=ADDRSIZE;i= i+1)          rbin[i] = ^(rptr >> i);			           if(!rempty)             rbnext = rbin + rinc;          else              rbnext = rbin;				           rgnext = (rbnext >> 1)^rbnext;   end		//读地址(Gray)	    assign raddr = {raddrmsb,rptr[ADDRSIZE-2:0]};		//判空逻辑	always @(posedge rclk or negedge rrst_n)	begin		if(!rrst_n)		  rempty <= 1;		else		  rempty <= (rgnext == rwptr2);	end	  endmodule      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -