造价通

反馈
取消

热门搜词

造价通

取消 发送 反馈意见

波特率发生器波特率编程

2018/06/19231 作者:佚名
导读:波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示 。 波特率发生器不是产生波特率的,波特率时钟频率/波特率因子=波特率。 波特率发生器的作用是从输入时钟转换出需要的波特率clk,即波特率时钟频率。 一个完整的由verilog实现的波特率发生器: module baud_gen( clk_50MHz, rst_p, bclk ); input clk_50MHz; /*输入

波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示 。

波特率发生器不是产生波特率的,波特率时钟频率/波特率因子=波特率。

波特率发生器的作用是从输入时钟转换出需要的波特率clk,即波特率时钟频率。

一个完整的由verilog实现的波特率发生器:

module baud_gen(

clk_50MHz, rst_p, bclk

);

input clk_50MHz; /*输入的系统时钟,50MHz*/

input rst_p; /*复位脉冲,高电平有效*/

/* 倍频值16乘以9600波特率,即9600*16=153600,得到波特率发生器的实际输出信号频率为153.6kbit/s */

output bclk; // 输出信号:UART(串口)波特率发生器输出的时钟脉冲,频率:153.60kbps

//即每秒1536000个脉冲,*波特率发生器输出脉冲bclk,注意:除了主频分频之外,

//还决定了这个信号的占空比,在本例中输出信号占空比为 1:325

reg bclk; //寄存器数据类型bclk

reg [8:0] cnt; //寄存器数据类型cnt,9位,UART用它来记录接收到的主频脉冲个数,

//注意在修改输出波特率值时,若占空比小于1:511,需要增加该变量所占位数

//以下语句利用同步计数器完成时钟分频,

always @(posedge clk_50MHz) begin /* 每当信号clk_50MHz发生电平变化执行以下语句 */

if(rst_p) begin /* 如果复位脉冲信号为高电平执行以下语句 */

cnt <= 0; //对主频信号计数器cnt做非阻塞方式复位赋值,赋值为逻辑0 。此后每当时钟信号到来就变。

bclk <= 0; /* 寄存器变量bclk赋值为逻辑0,使该脉冲信号复位为低电平,以低电平作为开始*/

end

else begin

/* 50MHz除以153600(UART实际频率)等于325.5 即50_000_000 /153600 = 325.5(波特率除数) */

if(cnt > 324) begin /*如果cnt的数值大于324,即cnt计数脉冲数等于325(0-324个脉冲)*/

cnt <= 0; /* 50MHz主频信号计数器cnt值,被非阻塞方式复位*/

bclk <= 1; /*串口波特率时钟脉冲信号bclk赋值为逻辑1,使该脉冲信号跳变到高电平周期*/

end

else begin

cnt <= cnt 1; /* 50MHz主频信号计数器cnt值被非阻塞方式增量赋值(加1) */

bclk <= 0; //波特率发生器时钟脉冲信号bclk被非阻塞方式赋值为’0’,

//使该脉冲信号跳变到低电平周期*/

end

end

end

endmodule

*文章为作者独立观点,不代表造价通立场,除来源是“造价通”外。
关注微信公众号造价通(zjtcn_Largedata),获取建设行业第一手资讯

热门推荐

相关阅读