时序逻辑基础之D触发器&分频器

一.D触发器

1.原理

  • D触发器原理如下
    在这里插入图片描述

  • D触发器模拟波形图如下
    在这里插入图片描述

由图可知Q值不仅与D有关,同时需要考虑到clk上升沿到来后有效

2.代码

module DFF(
    input clk,
    input rst_n,
    input d,
    output q
);

reg q_r;

always @(posedge clk or negedge rst_n) begin
    q_r <= d;
end

assign q = q_r;

endmodule

二.N分频器

1.原理

  • 输入一个时钟信号,将输出的信号的时钟周期变为输入信号的时钟周期的N倍,我们将这种器件叫做N分频器。

2.实验任务

  • 我们的目的是生成一个N分频器,可以实现任意比例分频。需要时仅需改变N的值即可实现不同的分频器。

3.设计思路

  • 将clk上升沿下降沿都设为敏感信号,clk变化时计数。实现N分频器,计数器从0数到N-1,输出信号反转一次。注意:由于是从0开始计数,共计N个数,只需要计到N-1即可。

4.时序图

在这里插入图片描述

  • 这里以5分频和8分频为例,分别探讨了奇数和偶数分频的情况。时序图是我们自己设想的效果,需要与我们的仿真效果比较。

5.代码

module N_divider #(parameter N = 5)(//N可以取我们需要的值,作为全局变量,它可以被更改
    input               clk,
    input               rst_n,

    output      reg     clk_out
);

    
//计数,计N个数一清零
    reg     [N-1:0]   cnt;
    wire            add_cnt;
    wire            end_cnt;

    always @(clk) begin
        if (!rst_n) begin
            cnt <= 'd0;
        end
        else if (add_cnt) begin
            if (end_cnt) begin
                cnt <= 'd0;
            end
            else begin
                cnt <= cnt + 'd1;
            end
        end
    end

    assign add_cnt = 1'b1;
    assign end_cnt = add_cnt && cnt == N - 1'd1;

//计满N个数clk_out反转一次
    always @(clk) begin
        if (!rst_n) begin
            clk_out <= 'b1;
        end
        else if (cnt == N - 1'd1) begin//计满N个数反转
            clk_out <= ~clk_out; 
        end
        else begin//其余情况保持不变
            clk_out <= clk_out;
        end
    end

endmodule

6.仿真文件

`timescale 1ns/1ns
module tb_N_divider #(parameter N = 5)();
    
    reg tb_clk;
    reg tb_rst_n;
    wire tb_clk_out;

parameter CYCLE = 20;//周期

N_divider #(.N(N)) u_N_divider(
.clk    (tb_clk),
.rst_n  (tb_rst_n),
.clk_out(tb_clk_out)
);

initial tb_clk = 1'b1;
always #(CYCLE/2) tb_clk = ~tb_clk;//半个周期反转clk

initial begin
    tb_clk = 1'b0;
    tb_rst_n = 1'b0;
    #20;
    tb_rst_n = 1'b1;
    #2000;
    $stop;
end
endmodule

7.仿真效果

  • 仍然以5分频和8分频为例,探究奇数和偶数的仿真效果

  • 5分频波形图
    在这里插入图片描述

  • 8分频波形图
    在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值