www.pudn.com > chuankou.rar > rx_module.v, change:2013-05-02,size:1897b
//串口点灯 module rx_module(clk,rst_n,rx_pin_in,led); input clk,rst_n; input rx_pin_in; output[7:0] led; //***************检测起始信号******************************** reg key1,key2; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin key1<=1'b0; key2<=1'b0; end else begin key1<=rx_pin_in; key2<=key1; end end wire start=key2 & !key1; //********************波特率设置 N=(1/想要的波特率)/(1/时钟频率)*** reg[12:0] count; reg bps_clk; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin count<=13'b0; bps_clk<=1'b0; end else if(count==13'd5208)//9600 count<=13'd0; else if(count_sig) count<=count+1'b1; else if(count==13'd2604) bps_clk<=1'b1; else begin count<=13'b0; bps_clk<=1'b0; end end //****************************************************************** reg[3:0] i; reg[7:0] rx_data; reg count_sig; reg rx_done_sig; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin i<=4'd0; rx_data<=8'd0; count_sig<=1'b0; rx_done_sig<=1'b0; end else if(rx_en_sig) case(i) 4'd0 : if(start) begin i<=i+1'b1; count_sig<=1'b1; end 4'd1 : if(bps_clk) i<=i+1'b1; 4'd2,4'd3,4'd4,4'd5,4'd6,4'd7,4'd8,4'd9 : if(bps_clk) begin i<=i+1'b1; rx_data[i-2]<=rx_pin_in; end 4'd10 : if(bps_clk) i<=i+1'b1; 4'd11 : if(bps_clk) i<=i+1'b1; 4'd12 : begin i<=i+1'b1; count_sig<=1'b0; rx_done_sig<=1'b1; end 4'd13 : begin i<=1'b0; rx_done_sig<=1'b0; end endcase end //***************控制******************************************** reg[7:0] led; reg rx_en_sig; always@(posedge clk or negedge rst_n) begin if(!rst_n) led<=8'd0; else if(rx_done_sig) begin led<=rx_data; rx_en_sig<=1'b0; end else rx_en_sig<=1'b1; end endmodule