当前位置:文档下载 > 所有分类 > 工程科技 > 信息与通信 > FPGA实现UART接收与发送
侵权投诉

FPGA实现UART接收与发送

Verilog 语言 实现 UART 接收与发送

//***************************************************************
//Uart_top mode: This module is to recieve data , then transfer data recieved , baud rate 9600
//Author: LBQ
// HIstory
//Nov/24/2014: Inital release

//***************************************************************
module uart_top(clk,n_rst,rxd,txd);
input clk;
input n_rst;
input rxd;
output txd;


///////////////////inner wire and reg ////////////
wire tra_en;
wire [7:0] rxd_data;




uart_rec my_uart_rec( .clk(clk),
.n_rst(n_rst),
.rxd(rxd),
.rxd_data(rxd_data),
.tra_en(tra_en)
);


uart_tra my_uart_tra( .clk(clk),
.n_rst(n_rst),
.txd_data(rxd_data),
.tra_en(tra_en),
.txd(txd)
);
endmodule



//***************************************************************
//Uart_rec mode: This module is to recieve data , baud rate 9600
//Author: LBQ
// HIstory
//Nov/24/2014: Inital release
//***************************************************************

module uart_rec(clk,n_rst,rxd,rxd_data,tra_en);

input clk,n_rst;// input clock and low reset
input rxd; //UART receiver
output[7:0] rxd_data;
//output recstart1;
//output recstart2;
output tra_en;
reg tra_en;

////////////////////inner reg///////////////////////////////////////////////////////////

reg[15:0] div_reg_baud8;////counter for division , 8 baund rate

reg[7:0] state_tras;//
reg[7:0] state_rec;//
reg clkbaud8x;// 8 baund rate clock


reg recstart1;
reg recstart2;
reg tra_star;


reg rxd_reg1;//
reg rxd_reg2;//
reg recstart;//

reg rxd_buf_data_vaild;
reg txd_reg;//

reg[7:0] rxd_buf;//
reg[7:0] txd_buf;//

reg count_delay_tra_en;
//////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////===parameter=====//////////////////////////////////
//parameter div_reg_baud8_par=16'h001; // *************** lbq for simulation
//parameter div_reg_baud_par=16'h008; // *************** lbq for simulation
parameter div_reg_baud8_par=16'h145;//////9600*8 (CLK 50M)
//parameter div_reg_baud_par=16'ha2C;//////9600 (CLK 50M)
//

////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////
//assign txd=txd_reg;
assign rxd_data=rxd_buf;
/////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////

always@(posedge clk)//get 8 baund rate clock
begin
if(!n_rst)
begin
div_reg_baud8<=0;
clkbaud8x<=0;
end
else
begin
if(div_reg_baud8==div_reg_baud8_par-1)
begin
div_reg_baud8<=0;
clkbaud8x<=~clkbaud8x;
end


else
div_reg_baud8<=div_reg_baud8+1;
end
end
////////////////////////////////////////////////////////////////////////////

////////////

第1页

猜你喜欢

返回顶部