【转】也谈FPGA(or ASIC?)三分频电路

本文详细介绍了实现50%占空比分频器的多种方法,包括使用计数器进行N分频、异步电路实现以及Glitchfree同步置位方法。每种方法都附有代码示例,旨在帮助读者理解和应用这些技术。

记得这曾经是我同学碰到的一道面试题,回来后他出给我们,弱弱的我自然是不知道咯。近日旧事重提,却忘记当时给的解答了。

在网络上一搜索,实现方式还真不少,玆举例如下:

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

e6227e25da740d2235a80f00.jpg

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

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

always@(negedge 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

always@(negedge 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;

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

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

reg [1:0] d_reg;

wire clk_ctrl;

assign clk_ctrl = clk_1 ^ d_reg[1];
always@(posedge clk_ctrl)
begin
    if (d_reg==2)
       d_reg<=2'b00;

    else
       d_reg<=d_reg+1;
end

SignalTap II波形:

3274b9dfe72b9a51485403dd.jpg

转载于:https://www.cnblogs.com/sangreal/archive/2011/07/29/2121307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值