码迷,mamicode.com
首页 > 其他好文 > 详细

FPGA串口双字节收发

时间:2017-09-14 13:18:53      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:name   通信   9.1   nbsp   begin   设置   logs   rs232   class   

//本程序设计的目的是为了传输多字节通信,使用时添加一个主程序,把接收和发送模块进行例化就可以使用,程序使用的波特率为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=8d174; //设置波特率为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==1b0) 35 begin 36 i<=5d0; 37 C1<=8d0; 38 rData<=11d0; 39 rPin<=1b0; 40 isDone<=1b0; 41 end 42 else if(TX_En_Sig) 43 case(i) 44 45 0: 46 begin rData<={2b11,TX_Data,1b0};i<=i+1b1;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<=8d0;i<=i+1b1;end 50 else begin rPin<=rData[i-1];C1<=C1+1;end 51 52 19: 53 begin isDone<=1b1;i<=i+1b1;end 54 55 20: 56 begin isDone<=1b0;i<=5d0;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=8d174; //设置波特率为115.2K 78 /*****************************/ 79 //电平检测部分 80 reg F1; 81 reg F2; 82 reg Low_F; 83 always@(posedge clk or negedge RSTn) 84 if(RSTn==1b0) 85 begin 86 F1<=1b1; 87 F2<=1b1; 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==1b0) 102 begin 103 rData<=16dz; 104 C1<=8d0; 105 end 106 else if(Low_F) 107 case(i) 108 109 5d0,5d1: 110 if(C1==B115K2-1)begin C1<=8d0;i<=i+1b1;end 111 else begin C1<=C1+1;end 112 113 114 5d2,5d3,5d4,5d5,5d6,5d7,5d8,5d9,5d10,5d11,5d12,5d13,5d14,5d15,5d16,5d17: 115 if(C1==B115K2-1)begin C1<=8d0;i<=i+1b1;end 116 else begin rData[i-2]<=rs232_rx;C1<=C1+1;end 117 118 5d18: 119 if(C1==B115K2-1)begin C1<=8d0;i<=i+1b1;end 120 else begin C1<=C1+1;end 121 122 5d19: 123 if(C1==B115K2-1)begin C1<=8d0;i<=i+1b1;end 124 else begin C1<=C1+1;end 125 126 5d20: 127 begin i<=i+1b1;isDone<=1b1;end 128 129 5d21: 130 begin i<=5d0;isDone<=1b0;end 131 132 endcase 133 assign RX_Data=rData; 134 assign RX_Done_Sig=isDone; 135 136 /***************************************************/ 137 endmodule

 

FPGA串口双字节收发

标签:name   通信   9.1   nbsp   begin   设置   logs   rs232   class   

原文地址:http://www.cnblogs.com/stupidnan/p/7519864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!