赞
踩
4.5倍分频,相当于9个参考时钟中包含两个对称的脉冲。
为了得到两个对称的脉冲,在第5个计时周期从下降沿采集,得到对称的两个4.5个周期。然后设计时钟脉冲,保证两边对称,即可在9个参考钟内得到两个对称的脉冲。
如图所示,改变单边时钟脉冲即可得到任意占空比的小数分频。以上示意图中设计了44%和66%的占空比。
设计思路如下:
(1)设置9位移位寄存器,复位时为:1000_0000_0
(2)每个周期向左循环移位
(3)依次产生第一个脉冲clk_pulse1和第二个脉冲clk_pulse2
(4)最后输出分频后时钟clk_out=clk_pulse1||clk_pulse2
需要注意的是,在这个设计中使用组合逻辑产生输入时钟,因此要避免毛刺的产生。
第一个脉冲clk_pulse1=cnt[1]||cnt[2]
在实际应用中,在cnt[1]寄存器拉低之后,cnt[2]由于某些电路原因延时一会儿才拉高(例如时钟skew),那么clk_pulse1=cnt[1]||cnt[2]就可能在cnt[1]和cnt[2]中间拉低,如图所示:
因此为了避免这种情况的产生,将cnt[1]反转180°,形成cnt[1]_lshift(在时钟下降沿采集),因此clk_pulse1=cnt[1]||cnt[2]||cnt[1]_lshift。
同理可得clk_pulse2=cnt[5]_lshift||cnt[6]_lshift||cnt[6]。(其中cnt[6]为了避免毛刺的产生)。
占空比66%相对于占空比44%的设计,在于将脉冲宽度扩大,同时引入两处避免产生毛刺处。
`timescale 1ns/1ps
module fra_divclk_9(
input wire sclk,
input wire rst_n,
output wire clk_out
);
reg [9:1] div_cnt;
reg cnt1_lshift;
reg cnt5_lshift;
reg cnt6_lshift;
wire clk_pulse1;
wire clk_pulse2;
always @(posedge sclk or negedge rst_n)begin
if(rst_n==1'b0)begin
div_cnt<=9'b1000_0000_0;
end
else begin
div_cnt<={div_cnt[8:1],div_cnt[9]};
end
end
always @(negedge sclk or negedge rst_n)begin
if(rst_n==1'b0)begin
cnt1_lshift<=1'b0;//=div_cnt[1]
cnt5_lshift<=1'b0;
cnt6_lshift<=1'b0;
end
else begin
cnt1_lshift<=div_cnt[1];
cnt5_lshift<=div_cnt[5];
cnt6_lshift<=div_cnt[6];
end
end
assign clk_pulse1=div_cnt[1]||div_cnt[2]||cnt1_lshift;
assign clk_pulse2=cnt5_lshift||cnt6_lshift||div_cnt[6];
assign clk_out=clk_pulse1 || clk_pulse2;
endmodule
仿真图为
`timescale 1ns/1ps
module fra_divclk_9_66(
input wire sclk,
input wire rst_n,
output wire clk_out
);
reg [9:1] div_cnt;
reg cnt1_lshift;
reg cnt2_lshift;
reg cnt5_lshift;
reg cnt6_lshift;
reg cnt7_lshift;
wire clk_pulse1;
wire clk_pulse2;
always @(posedge sclk or negedge rst_n)begin
if(rst_n==1'b0)begin
div_cnt<=9'b1000_0000_0;
end
else begin
div_cnt<={div_cnt[8:1],div_cnt[9]};
end
end
always @(negedge sclk or negedge rst_n)begin
if(rst_n==1'b0)begin
cnt1_lshift<=1'b0;//=div_cnt[1]
cnt2_lshift<=1'b0;
cnt5_lshift<=1'b0;
cnt6_lshift<=1'b0;
cnt7_lshift<=1'b0;
end
else begin
cnt1_lshift<=div_cnt[1];
cnt2_lshift<=div_cnt[2];
cnt5_lshift<=div_cnt[5];
cnt6_lshift<=div_cnt[6];
cnt7_lshift<=div_cnt[7];
end
end
assign clk_pulse1=div_cnt[1]||div_cnt[2]||div_cnt[3]||cnt1_lshift||cnt2_lshift;
assign clk_pulse2=cnt5_lshift||cnt6_lshift||cnt7_lshift||div_cnt[6]||div_cnt[7];
assign clk_out=clk_pulse1 || clk_pulse2;
endmodul
仿真图为
设计思路如下:
(1)设置7位移位寄存器,复位时为:100_0000
(2)每个周期向左循环移位
(3)依次产3第一个脉冲和第二个脉冲
(4)最后输出分频时钟clk_out=pulse1||clk_pulse2
其中,占空比57%的3.5倍分频,与4.5倍分频电路设计思路相同。
占空比28%的3.5倍分频,不同之处在于高脉冲只有一个参考时钟宽度,因此当占空比为28%时不需要额外设计滤毛刺电路。
设计思路
(1)设置3位移位寄存器,复位时为:100
(2)每个周期向左循环移位
(3)依次产生第一个脉冲和第二个脉冲
(4)最后输出分频时钟clk_out=pulse1||pulse2
注意:使用这种方法生成的1.5倍分频,只能产生66%的占空比
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。