软件:Quartus
语言:Verilog
代码功能:
任意分频器设计
1、可以通过参数控制分频比,即可以配置分频器的分母、分子。
设计思路为任意分频都可以拆分为2分频和3分频交叉组合而成(即最小的偶数分频和最小的奇数分频的组合)。
假设19/9分频,利用公式,(19/9)*(a+b)=2a+3b;计算a和b的值
即可以由8个2分频+1个3分频,在8*2+1*3=19个参考时钟周期内,实现19/9分频。
parameter fenzi=440;//分子
parameter fenmu=24;//分母
parameter duty=70;//占空比
fenzi/fenmu分频。换个说法,即fenzi个参考时钟refclk里,划分fenmu段
因为分母是fenmu,所以计数器是+fenmu计算的,
如果超过fenzi,意味着当前两个上升沿之间的周期大于期望周期值,
余数需要考虑进下一个周期里。
总共需要的周期数,就是前文的2a+3b=fenzi个参考时钟周期内。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件

2. 程序文件
3. 程序编译
4. Testbench
5. 仿真图
部分代码展示:
//任意分频设计 module?clk_div( input?clk,//输入时钟 input?rstn,//复位,低电平有效 output?reg?clk_div//输出分频信号 ); //设计思路为任意分频都可以拆分为2分频和3分频交叉组合而成(即最小的偶数分频和最小的奇数分频的组合)。 //假设19/9分频,利用公式,(19/9)*(a+b)=2a+3b;计算a和b的值 //即可以由8个2分频+1个3分频,在8*2+1*3=19个参考时钟周期内,实现19/9分频。 parameter?fenzi=440;//分子 parameter?fenmu=24;//分母 parameter?duty=70;//占空比 wire?[31:0]?para_cnt; assign?para_cnt=fenzi*duty/100;//根据占空比计算高电平计数值 //fenzi/fenmu分频。换个说法,即fenzi个参考时钟refclk里,划分fenmu段 //因为分母是fenmu,所以计数器是+fenmu计算的, //如果超过fenzi,意味着当前两个上升沿之间的周期大于期望周期值, //余数需要考虑进下一个周期里。 //总共需要的周期数,就是前文的2a+3b=fenzi个参考时钟周期内。
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=943
594