FPGA串口双字节收发

//本程序设计的目的是为了传输多字节通信,使用时添加一个主程序,把接收和发送模块进行例化就可以使用,程序使用的波特率为115.2K

1
//company:电子科技大学 2 //engineer:昌磊 3 //create data:2017.09.14 4 //Design name :多字节串口收发程序 5 //module name: 6 //descirption:可以实现多字节的串口收发通信 7 8 /**********************************************/ 9 //串口发送程序 10 module tx_module( 11 input clk, 12 input RSTn, 13 14 input TX_En_Sig, 15 output TX_Done_Sig, 16 17 input [15:0]TX_Data, 18 output TX_Pin_Out 19 ); 20 21 /*****************************************************/ 22 23 parameter B115K2=8'd174; //设置波特率为115.2K 24 25 /*******************************************************/ 26 27 reg [4:0]i; 28 reg [7:0]C1; 29 reg [17:0]rData; 30 reg rPin; 31 reg isDone; 32 33 always@(posedge clk or negedge RSTn) 34 if(RSTn==1'b0) 35 begin 36 i<=5'd0; 37 C1<=8'd0; 38 rData<=11'd0; 39 rPin<=1'b0; 40 isDone<=1'b0; 41 end 42 else if(TX_En_Sig) 43 case(i) 44 45 0: 46 begin rData<={2'b11,TX_Data,1'b0};i<=i+1'b1;end //按照串口发送的格式拼接数据 47 48 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18: 49 if(C1==B115K2-1)begin C1<=8'd0;i<=i+1'b1;end 50 else begin rPin<=rData[i-1];C1<=C1+1;end 51 52 19: 53 begin isDone<=1'b1;i<=i+1'b1;end 54 55 20: 56 begin isDone<=1'b0;i<=5'd0;end 57 58 endcase 59 /************************************************************************/ 60 61 assign TX_Pin_Out=rPin; 62 assign TX_Done_Sig=isDone; 63 /***********************************************************/ 64 65 endmodule 66 /********************************************************/ 67 //串口接收程序 68 module rx_module( 69 input clk, 70 input RSTn, 71 72 input rs232_rx, 73 output [15:0]RX_Data, 74 output RX_Done_Sig 75 ); 76 77 parameter B115K2=8'd174; //设置波特率为115.2K 78 /*****************************/ 79 //电平检测部分 80 reg F1; 81 reg F2; 82 reg Low_F; 83 always@(posedge clk or negedge RSTn) 84 if(RSTn==1'b0) 85 begin 86 F1<=1'b1; 87 F2<=1'b1; 88 end 89 else 90 begin 91 F1<=rs232_rx; 92 F2<=F1; 93 end 94 95 assign Low_F=F2&!F1; 96 97 reg [7:0]C1; 98 reg [4:0]i; 99 reg [15:0]rData; 100 always@(posedge clk or negedge RSTn) 101 if(RSTn==1'b0) 102 begin 103 rData<=16'dz; 104 C1<=8'd0; 105 end 106 else if(Low_F) 107 case(i) 108 109 5'd0,5'd1: 110 if(C1==B115K2-1)begin C1<=8'd0;i<=i+1'b1;end 111 else begin C1<=C1+1;end 112 113 114 5'd2,5'd3,5'd4,5'd5,5'd6,5'd7,5'd8,5'd9,5'd10,5'd11,5'd12,5'd13,5'd14,5'd15,5'd16,5'd17: 115 if(C1==B115K2-1)begin C1<=8'd0;i<=i+1'b1;end 116 else begin rData[i-2]<=rs232_rx;C1<=C1+1;end 117 118 5'd18: 119 if(C1==B115K2-1)begin C1<=8'd0;i<=i+1'b1;end 120 else begin C1<=C1+1;end 121 122 5'd19: 123 if(C1==B115K2-1)begin C1<=8'd0;i<=i+1'b1;end 124 else begin C1<=C1+1;end 125 126 5'd20: 127 begin i<=i+1'b1;isDone<=1'b1;end 128 129 5'd21: 130 begin i<=5'd0;isDone<=1'b0;end 131 132 endcase 133 assign RX_Data=rData; 134 assign RX_Done_Sig=isDone; 135 136 /***************************************************/ 137 endmodule

 

转载于:https://www.cnblogs.com/stupidnan/p/7519864.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值