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

📄 rec.v

📁 Fusion中的双口RAM编写
💻 V
字号:
/********************rec*************************
**模块名称:rec
**功能描述:uart的接收模块,接收采样率为波特率的16倍
************************************************/
module rec(clk,clkout,Dataout,RXD,RI);
input 			clk,RXD;									//时钟与数据输入
output 			clkout,RI;									//时钟输入、接收中断输出
output	[7:0]	Dataout;			 						//并行数据输出

reg 			StartF,RI;									//开始与接收中断标志
reg		[9:0] 	UartBuff;	 			 					//接收缓存区
reg		[3:0]	count,count_bit;							//位接收计数器
reg		[15:0] 	cnt;										//时钟节拍计数器
reg		[2:0]	bit_collect;								//采集数据缓存区
reg     [7:0]  Dataout;

wire 	clk_equ,bit1,bit2,bit3,bit4;						//连线

parameter cout = 312;										//时钟是48M所以16*9600的分频数为312.5,这里取整数

/*************波特率发生进程****************************/
always@(posedge clk)									//时钟节拍计数器
begin
	if(clk_equ)
		cnt = 16'd0;
	else 
		cnt=cnt+1'b1;
end

assign clk_equ = (cnt == cout);								//采样时钟
assign clkout = clk_equ;

assign   bit1 = bit_collect[0]&bit_collect[1];				//对采样数据进行判断
assign   bit2 = bit_collect[1]&bit_collect[2];				//对采样数据进行判断
assign   bit3 = bit_collect[0]&bit_collect[2];				//对采样数据进行判断
assign   bit4 = bit1|bit2|bit3;								//对采样数据进行判断,只要有两次相同就可以

always@(posedge clk)
begin
	if(clk_equ)
	begin
		if(!StartF)											//是否处于接收状态
		begin
			if(!RXD)
			begin	
				count = 4'b0;								//复位计数器
				count_bit = 4'b0;
				RI = 1'b1;	
				StartF = 1'b1; 
			end
			else  RI = 1'b1;
		end
		else 
		begin
			count = count+1'b1;								//位接收状态加1
			if(count==4'd6)
				bit_collect[0] = RXD;						//数据采集
			if(count==4'd7)
				bit_collect[1] = RXD;						//数据采集 
			if(count==4'd8)
			begin
				bit_collect[2] = RXD;						//数据采集
				UartBuff[count_bit] = bit4;
				count_bit = count_bit+1'b1;					//位计数器加1
				if((count_bit==4'd1)&&(UartBuff[0]==1'b1))	//判断开始位是否为0
				begin
					StartF = 1'b0;							//标志开始接收
				end
				RI = 1'b0;									//中断标志位低
			end	
			if(count_bit>4'd9)								//检测是否接收结束
			begin	
				RI = 1'b1;									//中断标志为高标志转换结束
				StartF = 1'b0;
			end
		end
	end
end
	
always@(posedge RI)
begin
Dataout[7:0] <= UartBuff[8:1];

end
 
endmodule

⌨️ 快捷键说明

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