波特率发生器--verilog实现

功能:
波特率指的是数据对载波的调制速率,他用单位时间内载波调制状态改变次数来表示。
波特率发生器的作用是从输入时钟转换出需要的波特率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

发布了50 篇原创文章 · 获赞 5 · 访问量 2704

猜你喜欢

转载自blog.csdn.net/qq_43042339/article/details/103798512