波特率发生器中的N和M参数是什么?

时间:2016-02-16 10:58:53

标签: verilog fpga hdl baud-rate

我正在尝试了解U232 for RS232如何在HDL中工作。

它使用波特率发生器产生你想要的特定波特率,对吧?像9600,115200,......

这是始终出现在波特率发生器中的代码:

module mod_m_counter
#(
    parameter N = 4,
    parameter M = 10
 )
 (
    input  wire clk, reset,
    output wire max_tick,
    output wire [N-1:0] q
 );

reg [N-1:0] r_reg;
wire [N-1:0] r_next;

always@( posedge clk, posedge reset )
    if( reset )
        r_reg <= 0;
    else
        r_reg <= r_next;

assign r_next = ( r_reg == (M-1) ) ? 0 : r_reg + 1;

assign q = r_reg;

assign max_tick = ( r_reg == (M-1) ) ? 1'b1 : 1'b0;

endmodule

我不明白N和M是什么?

例如,如果我想生成9600波特率,我应该选择哪个N和M?

提前致谢。

2 个答案:

答案 0 :(得分:1)

模块名称非常具有描述性:Table23.B是一个模数为mod_m_counter的计数器(即从0到M-1计数)。当计数值等于M-1时,M信号将被提升。

max_tick应该等于N,因为它表示存储值达到并包括M-1所需的位数。

答案 1 :(得分:1)

要理解这一点,首先必须了解mod-n计数器和输入频率F之间的关系。

  

Mod-N计数器将输入频率F除以N.所以Mod-n   计数器是分频器,输出频率为F / N.

UART将与微处理器一起使用或在微控制器内使用。

现在通常,当前的微处理器速度以GHz为单位,当前的微控制器速度以KHz为单位。但UART速度远低于控制器/处理器速度。

这就是为什么你需要为UART模块提供低于CPU速度的频率,为了获得更低的频率,使用这个mod计数器。

现在要知道,只有通过查看模块的规格,才能确定应该写入M,N的特定波特率值。