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

📄 vsr_4_3_rx_alignment_buffer.v

📁 甚短距离互联(Veryshort reach VSR)协议编成实现
💻 V
字号:
/////////////////////////////////////////////////////////////////////
////                                                             ////
////  vsr_4_03	rx deskew buffer				 ////
////                                                             ////
////  Author: liyu	                                         ////
////          acousticdream@163.com                              ////
////          		                                         ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
////                                                             ////
//// Copyright (C) 2004 liyu                        		 ////
////                    acousticdream@163.com                    ////
////                                                             ////
//// This source file may be used and distributed without        ////
//// restriction provided that this copyright statement is not   ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer.////
////                                                             ////
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
////                                                             ////
/////////////////////////////////////////////////////////////////////

//synopsys translate_off
`include "timescale.v"
//synopsys translate_on
module vsr_4_3_alignment_buffer(
		din0,
		din1,
		din2,
		din3,
		fr0,
		fr1,
		fr2,
		fr3,
		syn_state,
		dout,
		clk0,
		clk1,
		clk2,
		clk3,
		rst
		);
input	[15:0]	din0;
input	[15:0]	din1;
input	[15:0]	din2;
input	[15:0]	din3;
input		fr0;
input		fr1;
input		fr2;
input		fr3;
input	[2:0]	syn_state;
input		clk0;
input		clk1;
input		clk2;
input		clk3;
input		rst;
output	[63:0]	dout;

wire		all_sync=(syn_state==3'b100)?1'b1:1'b0;

reg	[15:0]	buffer0	[7:0];
reg	[15:0]	buffer1	[7:0];
reg	[15:0]	buffer2	[7:0];
reg	[15:0]	buffer3	[7:0];
reg	[2:0]	waddr0;
reg	[2:0]	waddr1;
reg	[2:0]	waddr2;
reg	[2:0]	waddr3;
reg	[2:0]	raddr;

wire	[63:0]	dout;

always@(posedge clk0 or posedge rst)
begin
	if (rst)
		waddr0<=3'b000;
	else begin
		if (fr0||waddr0==3'b111)
			waddr0<=3'b000;
		else 
			waddr0<=waddr0+3'b001;			
	end	
end	

always@(posedge clk1 or posedge rst)
begin
	if (rst)
		waddr1<=3'b000;
	else begin
		if (fr1||waddr1==3'b111)
			waddr1<=3'b000;
		else 
			waddr1<=waddr1+3'b001;			
	end	
end	

always@(posedge clk2 or posedge rst)
begin
	if (rst)
		waddr2<=3'b000;
	else begin
		if (fr2||waddr2==3'b111)
			waddr2<=3'b000;
		else 
			waddr2<=waddr2+3'b001;			
	end	
end	

always@(posedge clk3 or posedge rst)
begin
	if (rst)
		waddr3<=3'b000;
	else begin
		if (fr3||waddr3==3'b111)
			waddr3<=3'b000;
		else 
			waddr3<=waddr3+3'b001;			
	end	
end	

always@(posedge clk0)
begin
	buffer0[waddr0]<=din0;
end	

always@(posedge clk1)
begin
	buffer1[waddr1]<=din1;
end	

always@(posedge clk2)
begin
	buffer2[waddr2]<=din2;
end	


always@(posedge clk3)
begin
	buffer3[waddr3]<=din3;
end		

always@(posedge clk0 or posedge rst)
begin
	if (rst)
		raddr<=3'b000;
	else begin
		if (fr0)
			raddr<=3'b100;
		else begin
			if (raddr==3'b111)
				raddr<=3'b000;
			else	
				raddr<=raddr+3'b001;	
		end				
	end	
end		
		
assign	dout={buffer0[raddr],buffer1[raddr],buffer2[raddr],buffer3[raddr]};		
endmodule		

⌨️ 快捷键说明

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