波特率发生器实际上是一个分频器,从给定的系统时钟频率得到要求的波特率。一般来讲,为了提高系统的容错性处理,要求波特率发生器的输出时钟为实际串口数据波特率的N倍,N可以取值为8、16、32、64等。在本设计中,取N为16,因此波特率发生器的输出号频率应改为9600*16=153.6kbps。
由于串口速率较低,其16倍频率值也不高,因此在设计中,可以不要求波特率发生器输出信号的占空比为50%,在本例中,其占空比为1:325。设计中的波特率发生器的代码(baud_gen.v)如下所列。
module baud_gen(
clk_50MHz,rst_p,bclk
);
input clk_50MHz;
input rst_p;
output bclk;//153.60kbps
reg bclk;
reg [8:0]cnt;//50000000/153600=325.5
always @(posedge clk_50MHz)
begin
if(rst_p)
begin
cnt<=0;
bclk<=0;
end
else
begin
if(cnt>324)
begin
cnt<=0;
bclk<=1;
end
else
begin
cnt<=cnt+1;
bclk<=0;
end
end
end
endmodule