概述
分频,简单来说就是根据输入时钟,使用计数器计数输入时钟的上升沿个数或者时钟下降沿个数,而后在你想设置分频数的位置进行输出信号的高低电平翻转,以此实现将输入信号的高频率信号转变为低频率输出信号。
下面介绍分频的两种方式,原理都是一样的,只是代码编写略有不同。
1.常规操作,手动将分频系数除以2
在此处进行设置分频系数时,可手动除以2,例如设置的分频系数为4,则此处的div直接设置成2即可。
module fenpin(
clk, //system clock
rst, //reset
div, //分频系数
clk_out //输出时钟
);
input clk;
input rst;
input [3:0] div; //自行设置
output clk_out;
reg [3:0] cnt; //计数器
always @(posedge clk or negedge rst)
begin
if(!rst)
begin
cnt <= 4'b1;
clk_out <= 1'b0;
end
else
begin
if(cnt==div) //此处设置时就将分频系数先除以2
begin
cnt <= 4'b1;
clk_out <= ~clk_out;
end
else
cnt <= cnt+1'b1;
end
end
endmodule
2.在编写程序时,用if() ,else if(),来帮助判断
此处的div[3:1]可以换成div/2或者div>>1,都是除以2的意思,看个人习惯。
module fenpin(
clk, //system clock
rst, //reset
div, //分频系数
clk_out //输出时钟
);
input clk;
input rst;
input [3:0] div; //自行设置
output clk_out;
reg [3:0] cnt; //计数器
always @(posedge clk or negedge rst)
begin
if(!rst)
begin
cnt <= 4'b1;
clk_out <= 1'b0;
end
else
begin
if(cnt==div[3:1]) //相当于除以2
begin
cnt <= cnt+1'b1;
clk_out <= 1'b1;
end
else if(cnt==div)
begin
cnt <= 1'b1;
clk_out <= 1'b0;
end
else
cnt <= cnt+1'b1;
end
end
endmodule
最后
以上就是舒服钢笔为你收集整理的FPGA学习——分频的全部内容,希望文章能够帮你解决FPGA学习——分频所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复