功能:
波特率指的是数据对载波的调制速率,他用单位时间内载波调制状态改变次数来表示。
波特率发生器的作用是从输入时钟转换出需要的波特率Clk
功能说明:该模块接收任意频率的输入频率(clock),输出频率(baud_rate)由baud_freq和baud_limit_i根据以下公式计算,使用时首先需要根据输入频率和输出频率计算出baud_freq和baud_limit这两个参数。
计算公式:
baud_freq=16*baud_rate/gcd(global_clock_freq,16 * baud_rate)
baud_limit = (global_clock_freq / gcd(global_clock_freq, 16*baud_rate)) - baud_freq
注意:
baud_limit为计数器计数上限,系统时钟计数满则产生一个分频的脉冲信号。
baud_freq为计数器计数步长值。
gcd:求最大公约数
我是使用的时系统时钟频率为50MHZ,串口频率为9600HZ。
module baud_gen(
clock,
reset,
cout_clk,
baud_freq,
baud_limit
);
input clock;
input reset;
output cout_clk; // baud rate multiplyed(乘以)by 16
input [11:0] baud_freq; // baud rate setting registers - see header description
input [15:0] baud_limit;
reg cout_clk;
reg [15:0] counter;
always@(posedge clock or posedge reset)
begin
if(reset)
counter<=16'd0;
else if(counter<=baud_limit)
counter<=counter-baud_limit;
else
counter<=counter+baud_freq;
end
always@(posedge clock or posedge reset)
begin
if(reset)
cout_clk<=1'b0;
else if(counter<=baud_limit)
cout_clk<=1'b1;
else
cout_clk<=1'b0;
end
endmodule
参考文献:
【1】opencores
转载自原文链接, 如需删除请联系管理员。
原文链接:波特率发生器--verilog实现,转载请注明来源!