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

📄 receiver.v.bak

📁 串口通信程序.在波特率为9600的串口通信程序
💻 BAK
字号:
`timescale 1 ns / 1 ns

module rcvr (data_ready,rxd,clk16x,rst,rdn,dout) ;

		input rxd ;//data input
		input clk16x ;
		input rst ;
		input rdn ;//读锁存信号
		output [7:0] dout ;
		output data_ready ;//数据接收完毕
		
		reg rxd1 ;
		reg rxd2 ;
		reg clk1x_enable ;
		reg[3:0]  bits_rcvd;
		reg [3:0] clkdiv ;
		reg [8:0] rsr ;//接收移位寄存器
		reg [7:0] rbr ;//数据接收缓冲器
		
		
		reg data_ready ;
		wire clk1x ;
		
  	assign dout = (!rdn) ? rbr:8'b11111111 ;//低电平处于读状态
	//  assign dout = 8'b00001111 ;
		
		
		always @(posedge clk16x or posedge rst)
		begin
		if (rst)
		begin
		rxd1 <= 1'b1 ;
		rxd2 <= 1'b1 ;    
		end
		else 
		begin
		rxd1 <= rxd ;  //非阻塞语句左侧的值是始终沿到来前就已经存在的值,而右边的事时钟沿到来时新产生的值;在此,begin和end之间并不是串行的顺序
		rxd2 <= rxd1 ;//寄存上一时刻的值
		end
		end
		
		always @(posedge clk16x or posedge rst)
		begin
			if (rst)
				clk1x_enable <= 1'b0;
			else if (!rxd1 && rxd2)            //下降沿开始数据的传输
				clk1x_enable <= 1'b1 ;
			else if (bits_rcvd == 4'b1100)          //数据超过9位的时候不再接收
				clk1x_enable <= 1'b0 ;
		end
		
		always @(posedge clk16x or posedge rst or negedge rdn)
		begin
			if (rst)
				data_ready = 1'b0 ;
			else if (!rdn)					  //接收的时候为低
				data_ready = 1'b0 ;
			else if (bits_rcvd == 4'b1011)	  //接收完毕以后data_ready置高
				data_ready = 1'b1 ;
		end
		
		always @(posedge clk16x or posedge rst)
		begin
		if (rst)
			clkdiv = 4'b0000 ;
		else if (clk1x_enable)
			clkdiv = clkdiv +1 ;
		end
		
		assign clk1x = clkdiv[3] ;//16分频得到波特率
		
		always @(posedge clk1x or posedge rst)
		if (rst)
			begin
			rsr <= 9'b0 ;
			rbr <= 8'b0 ;
			end
		else 
		begin
			if (bits_rcvd >= 4'b0001 && bits_rcvd <= 4'b1001) 
				begin
				rsr[0] <= rxd2 ;
				rsr[8:1] <= rsr[7:0] ;
				end
			else if (bits_rcvd == 4'b1010)
		    rbr <= rsr[8:1] ;
		end
		
		always @(posedge clk1x or posedge rst or negedge clk1x_enable)
		if (rst)
			bits_rcvd = 4'b0000;
		else
			if (!clk1x_enable)
				bits_rcvd = 4'b0000 ;
			else
				bits_rcvd = bits_rcvd + 1 ;

endmodule

⌨️ 快捷键说明

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