|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
这是一个可综合的任意整数分频器,占空比均可调,本代码为升级版Duty=50%
- module Divclk(clk,tg_clk,rst);
- input clk,rst;
- output tg_clk;
- reg[23:0]counter;
- reg temp_tgp,temp_tgn;
- parameter countN=27000000/3200000; //N=clkin/clkout 此处小数点是无意义的
- always@(posedge clk or posedge rst) //频率近似,小数分频将在后面帖子讨论
- begin
- if(rst)
- counter<=24'b0;
- else if(counter>(countN-2))
- counter<=24'b0;
- else
- counter<=counter+1'b1;
- end
- always@(*) //Duty 任意调整begin
- if(countN%2)
- begin
- if(counter>(countN-3)/2)//counter odd
- temp_tgp<=1'b0;
- else
- temp_tgp<=1'b1;
- end
- else
- begin
- if(counter>(countN-2)/2)//counter even
- temp_tgp=1'b0;
- else
- temp_tgp=1'b1;
- end
- end
- //以下完成Duty=50%调整,非50%占空比可以省略以下代码
- always@(negedge clk or posedge rst)
- begin
- if(rst)
- temp_tgn<=1'b0;
- else
- temp_tgn<=temp_tgp;
- end
- assign tg_clk=(countN%2)?(temp_tgp|temp_tgn):temp_tgp;
- endmodule
复制代码
由于输入的时钟不能精确,所以在确定分频数的时候存在取整。countN不是完整四舍五入,但可以
由调试者进行四舍五入中的五入。偶数分频直接在占空比调整就可完成,奇数分频需要一个延迟,
以3分频为例:
首先循环计数3,然后将输出调节占空比为1/3,接着将占空比=1/3信号通过DFF在原时钟负跳沿下延
迟,将此DFF的输入输出进行OR操作就行。 |
|