雕虫小技

FPGA三分频电路

 

第一种方法是用计数器进行N分频,N这里是奇数。然后利用分频后占空比不是50%的输出信号和原始时钟信号通过组合逻辑处理,构成50%占空比的奇数分频器。

d1

第二种思路是,将第一种方法类似的计数器的输出用时钟信号的下降沿延时半个时钟周期,然后两者相与或者或

产生50%占空比的分频信号:

resetn or posedge clk)
begin
if (resetn==1’b0)
begin
cnt1[1:0]<=2’d0;
clk1<=1’b0;
end
else
begin
if(cnt1[1:0]==2’d2)
begin
cnt1[1:0]<=2’d0;
clk1<=1’b1;
end
else
begin
cnt1[1:0]<=cnt1[1:0]+1;
clk1<=1’b0;
end
end
end

resetn or negedge clk)
begin
if (resetn==1’b0)
begin
clk2<=2’d0;
end
else
begin
clk2<=clk1;
end
end

assign clk_out = clk1 | clk2;

第三种方法,异步电路实现:

d2
最后一种方法,算是我想到的,因为我没见过一样的(但是前人肯定早想到了)。用同步置位的方式实现,似乎是Glitch free?

reg [1:0] d_reg;

wire clk_ctrl;

assign clk_ctrl = clk_1 ^ d_reg[1];
clk_ctrl)
begin
if (d_reg==2)
d_reg<=2’b00;

else
d_reg<=d_reg+1;
end

SignalTap II波形:

d3

Leave a Reply

Your email address will not be published. Required fields are marked *