1. 程式人生 > >FPGA串口雙字節收發

FPGA串口雙字節收發

code i+1 esc 部分 param 設計 bsp 使用 sed

//本程序設計的目的是為了傳輸多字節通信,使用時添加一個主程序,把接收和發送模塊進行例化就可以使用,程序使用的波特率為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<=11
d0; 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串口雙字節收發