我正在尝试了解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?
提前致谢。
答案 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的特定波特率值。