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

📄 rcvr.v

📁 一个UART的FPGA core
💻 V
字号:
`timescale 1 ns / 100psmodule rcvr ( clk,rst,rxd,baud_clk,baud_clk1,              fifor_cs,              data_out,EF,AE,AF,FF) ;  //接收模块input clk,rst ;input baud_clk,baud_clk1;input fifor_cs;input rxd ;  //接收串口数据output [7:0] data_out; //输出到8位总线output EF,AE,AF,FF;reg rxd1 ;reg baud_clk_enable ;reg [7:0] rsr ; //reg [3:0] no_bits_rcvd ;//顺序控制计数器wire baud_clk ;wire [7:0] data_out;reg wr; wire pop = fifor_cs & !EF; //保护FIFO不会溢出错误UART_FIFO u1( .clk( clk ),              .rst( rst ),		      .data_in( rsr ),		      .data_out( data_out ),		      .push( wr ),		      .pop(pop),		      .EF( EF ),		      .AE( AE ),		      .AF( AF ),		      .FF( FF )		    );always @(posedge clk or posedge rst)begin	 if (rst)	 rxd1 <= 1'b1 ;              else 	     rxd1 <= rxd ;  //延一拍         endalways @(posedge clk or posedge rst)	          if (rst)	      baud_clk_enable <= 1'b0;           else if (rxd && !rxd1)   baud_clk_enable <= 1'b1 ; //串口接收开始标志位 rxd 下降沿                else if (no_bits_rcvd == 4'b1001)  baud_clk_enable <= 1'b0 ;//标志位产生后至少维持10个周期 一次串口接收结束 reg state1 ;always @(posedge baud_clk1 or posedge rst)if (rst)    begin            rsr <= 8'b0 ;			state1 <= 0 ;			endelse        begin    if ( (no_bits_rcvd >= 4'b0001) & (no_bits_rcvd <= 4'b1000) )   //1-8拍			                         begin					 //case(state1) 					 //0  :  if(baud_clk) begin                                        rsr[7] <= rxd1 ;  //串入数据                                        rsr[6:0] <= rsr[7:1] ; 					//	                state1 <= 1;                                        //end					 //1  :  if(!baud_clk) state1 <= 0 ;					 //endcase                     end			endreg state ;always @(posedge clk or posedge rst)  if(rst)  begin            state <= 0;           wr <= 0;		   end  else     begin           case(state)		   0 : if( (no_bits_rcvd == 4'b1001) && !FF ) begin		                                              wr <= 1;				                                      state <= 1 ; 				                                      end           1 : begin		       wr <= 0 ;               if( no_bits_rcvd == 4'b0000) state <= 0;			   end           endcase           end///////////////////always @(posedge baud_clk or posedge rst or negedge baud_clk_enable)       if (rst)		         no_bits_rcvd = 4'b0000;       else  if (!baud_clk_enable)  	         no_bits_rcvd = 4'b0000 ;        else	   	         no_bits_rcvd = no_bits_rcvd + 1 ;endmodule

⌨️ 快捷键说明

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