|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
//////////////////////////////////////////////////////////////////////////////////
// Module Name : UART_TXCLK_v1_4.v
// Project Name :
// Target Devices:
// Tool Versions :
// Description : UART发送波特率产生
// Dependencies :
// Revision 1.4
// Additional Comments:
//////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps
module UART_TXCLK_v1_4#(
parameter SYS_FREQ = 50_000_000 //输入时钟
,parameter UART_BAUD = 115_200 //波特率
)(
input clk //输入时钟
,input rst_n //复位信号
,input tx_en //发送波特率使能
,output tx_clk //UART发送时钟
);
//*********************************************************************
//本地参数:
//*********************************************************************
localparam BAUDCNT = SYS_FREQ / UART_BAUD; //波特率计数值
//*********************************************************************
//函数
//*********************************************************************
function integer clog2(input integer freq);
integer i;
begin
for(i=0;i<32;i=i+1)
if(freq[i]) clog2 = i + 1;
end
endfunction
//*********************************************************************
//UART发送时钟
//*********************************************************************
localparam C_DW = clog2(BAUDCNT); //计数器位宽
reg [C_DW-1:0] cnt; //波特率分频计数
always@(posedge clk ) begin
if(!rst_n)
cnt <= {C_DW{1'b0}};
else if(cnt==BAUDCNT-1)
cnt <= {C_DW{1'b0}};
else if(tx_en)
cnt <= cnt + 1'b1;
else cnt <= {C_DW{1'b0}};
end
assign tx_clk = (cnt==1) ? 1'b1 : 1'b0;
endmodule
|
|