USART串口通信设置波特率程序

使用Verilog代码编写的生成波特率程序:

程序目前支持9600、19200、38400、57600、115200,如需要其他波特率请根据计算方法加入代码中,输入的时钟信号为50MHz

module SpeedSet(clk,reset,cnt);

input clk,reset;

output cnt;

///波特率对应的脉冲的个数。计算方法如下:

//以9600bps为例:1s/9600/20ns=5208.33333,即有5208个周期。

parameter bps9600     = 5208,

bps19200    = 2604,

bps38400    = 1302,

bps57600    = 868,

bps115200   = 434;

//个数的一半,即在周期的中间位置。进行采样。 

parameter bps9600_2   = 2604, 

bps19200_2  = 1302,

bps38400_2  = 652,

bps57600_2  = 434,       

bps115200_2 = 217;    

reg cnt;

reg [12:0]sample;

always@(posedge clk or negedge reset)

begin

if(!reset) begin

sample<=0;

end

else if(sample==bps115200) begin

sample <= 0;

end

else begin

sample <= sample + 1'b1;

end

end

always@(posedge clk or negedge reset)

begin

if(!reset)

cnt<=1'b0;

else if(sample==bps115200)

cnt<=1'b1;

else

cnt<=1'b0;

end

endmodule