📄 rcvr.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 + -