D触发器实现计数器

1、分析

基于寄存器的计数器比较常见,时钟上升沿加1即可;基于D触发器的计数器,需要进行状态映射,将计数器的各位对应到各个触发器上,本质即为状态机的次态设计。

2、设计

以4进制计数器为例,使用D触发器实现该功能;

为实现4进制计数器,需要2个D触发器,状态编码如下:

cnt:00-01-10-11

Q1Q0:00-01-10-11

Q1Q0 Q1_nQ0_n
00 01
01 10
10 11
11 00

进一步得到状态方程:

Q0_n = ~Q0;

Q1_n = (~Q1&Q0) | (Q1&~Q0);

3、验证

代码:

`timescale 1ns / 1ps



module d_cnt(
input clk,
input rst_n,
output [1:0]cnt
    );
reg Q1,Q0;
wire Q1n,Q0n;
wire Q1_w,Q0_w;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
    begin
        {Q1,Q0} <= 2'b00;
    end
    else
    begin
        {Q1,Q0} <= {Q1n,Q0n};
    end
end

assign Q0_w = Q0;
assign Q1_w = Q1;

assign Q0n = !Q0_w;
assign Q1n = (!Q1_w&Q0_w)|(Q1_w&!Q0_w);
assign cnt = {Q1,Q0};
endmodule

仿真:

D触发器实现计数器_第1张图片

电路:

D触发器实现计数器_第2张图片

 

你可能感兴趣的:(FPGA面试专题,FPGA/Verilog基础)