下面是用Verilog写的时钟分频,想请问一下该代码的分频原理,最好能在关键的代码后面加上注释,谢谢

下面是用Verilog写的时钟分频,想请问一下该代码的分频原理,最好能在关键的代码后面加上注释,谢谢,第1张

你这个似是占空比50%的?cntoput没有初值,利用计数器计数使脉冲反转

input clk;

output clkout;

reg clkout;

reg [15:0] cnt;

always@(posedge clk)

begin

if(cnt==16'd1) //如果计数器为1,

begin

clkout<=1'b1 //输出脉冲为一

cnt<=cnt+16'd1 ; //计数器继续加

end

else if(cnt==16'd3) //计数到3时,翻转,原理同上

begin

clkout<=1'b0;

cnt<=16'd0;

end

else

begin

cnt<=cnt+16'd1;

end

end

endmodule

APB1最大频率是36Mhz,这个在初始化的时候就已经设置了的,如果用库函数默认就是36Mhz,在main函数运行前就设置了,一般可以不管。如果自己 *** 作寄存器就不一定了。

然后psc的问题:其实里面有两个分频的概念,APB预分频和计数器时钟频率(CK_PSC)的关系指的是AHB分频得到APB1,一般AHB取最大72Mhz,所以APB1是AHB的2分频,既然不是1分频,所以计数器时钟就是APB1的2倍了。而最终定时器的时钟频率(CK_CNT)是对CK_PSC进行psc值的分频得到的,这个值就是我们用来定时计算的数值。

图中CK_PSC就是从APB1得到的时钟,预分频控制寄存器的值就是PSC里面的值,而CK_CNT就是分频最终得到的值。

以上就是关于下面是用Verilog写的时钟分频,想请问一下该代码的分频原理,最好能在关键的代码后面加上注释,谢谢全部的内容,包括:下面是用Verilog写的时钟分频,想请问一下该代码的分频原理,最好能在关键的代码后面加上注释,谢谢、STM32的APB时钟预分频数到底是怎么确定的AHB的频率到底是72MH还是什么是有什么决定的、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10167657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存