HDLBits刷题Day9,3.2.1.1 D flip-flop - 3.2.1.6 DFF with byte enable

本文详细介绍了D触发器的基本概念、使用方法以及不同类型的DFlip-flop,包括同步复位、异步复位、字节enable控制的16位D触发器等。讨论了这些特性在电路设计中的优势与不足,强调了时钟同步的重要性以及资源优化策略。
摘要由CSDN通过智能技术生成
3.2.1.1 D flip-flop

问题描述

D触发器是一种存储位并定期更新的电路,通常在时钟信号的上升沿触发。

当使用时钟控制的always 块时,逻辑合成器会创建 D 触发器。D触发器是“组合逻辑块后接触发器”的最简单形式,其中组合逻辑部分只是一条线。创建一个 D 触发器。

代码: 

module top_module (
    input clk,    // Clocks are used in sequential circuits
    input d,
    output reg q );//
 
    // Use a clocked always block
    //   copy d to q at every positive edge of clk
    //   Clocked always blocks should use non-blocking assignments
    always @(posedge clk) begin
        q<=d;
    end
endmodule

 

3.2.1.2 D flip-flops

问题描述

创建 8 位 D 触发器。所有 DFF 都应由clk的上升沿触发。

代码: 

module top_module (
    input clk,
    input [7:0] d,
    output [7:0] q
);
    always @(posedge clk) begin
        q<=d;
    end
endmodule

 

3.2.1.3 DFF with reset

问题描述 

 创建 8 位具有高电平有效同步复位的 D 触发器。所有 DFF 都应由clk的上升沿触发。

相关知识:同步复位,当复位信号有效并且时钟沿到来时,产生复位操作。

优点:

  • 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺,增强电路的稳定性;
  • 有利于静态时序分析工具的分析
  • 有利于基于周期的仿真工具的仿真

缺点:

  • 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑如:时钟偏移、组合逻辑路径延时、复位延时等因素;
  • 由于大多数的厂商目标库内的触发器都只有异步复位端口,采用同步复位的话,综合器就会在寄存器的数据输入端插入组合逻辑,耗费更多的逻辑资源;
  • 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。

 代码:

module top_module (
    input clk,
    input reset,            // Synchronous reset
    input [7:0] d,
    output [7:0] q
);
    always@(posedge clk) begin
       if(reset)
           q<=8'd0;
       else
           q<=d; 
    end
endmodule

3.2.1.4 DFF with reset value

问题描述

创建 8 位具有高电平有效同步复位的 D 触发器。触发器必须重置为 0x34 而不是零。所有 DFF 都应由clk的下降沿触发。将寄存器重置为“1”有时称为“预设”

代码:

module top_module (
    input clk,
    input reset,
    input [7:0] d,
    output [7:0] q
);
    always @(negedge clk)
        begin
            if(reset)
                q <= 8'h0x34;
            else
                q <= d;
        end
endmodule

3.2.1.5 DFF with asynchronous reset

问题描述 

创建 8 位具有高电平有效异步复位的 D 触发器。所有 DFF 都应由clk的上升沿触发。

同步和异步复位触发器之间代码的唯一区别在于灵敏度列表。

相关知识:异步复位,无论时钟边沿到来与否,只要复位信号有效,输出就会被复位。 

优点:

  • 大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源,设计相对简单。
  • 异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。

缺点:

  • 在复位信号释放的随机性,可能导致时序违规。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,如下图;
  • 复位信号容易受到毛刺的影响

代码:

module top_module (
    input clk,
    input areset,   // active high asynchronous reset
    input [7:0] d,
    output [7:0] q
);
    always @(posedge clk or posedge areset) begin
        if(areset)
            q<=8'd0;
        else
            q<=d;
    end
endmodule

 

 拓展知识:异步复位,同步释放

优点:

  • 避免复位信号释放的时候造成亚稳态问题
  • 只要复位信号一有效,电路就处于复位状态,与时钟沿无关
  • 有效捕捉复位,即使是短脉冲复位也不会丢失
  • 有明确的复位撤销行为。复位的撤离是同步信号,因此有良好的的撤离时序和足够的恢复时间。
  • 具体例子推荐异步复位,同步释放 - 知乎
3.2.1.6 DFF with byte enable

问题描述

创建 16 位D 触发器。有时只修改一组触发器的一部分很有用。字节使能输入控制 16 个寄存器中的每个字节是否应在该周期写入。byteena[1]控制高字节d[15:8],而byteena[0]控制低字节d[7:0]。resetn是一个同步的低电平有效复位。所有 DFF 都应由clk的上升沿触发。

代码:

module top_module (
    input clk,
    input resetn,
    input [1:0] byteena,
    input [15:0] d,
    output [15:0] q
);
    always @(posedge clk) begin
        if(!resetn)
            q<=16'd0;
        else 
            begin
                q[7:0]<=byteena[0]?d[7:0]:q[7:0];
                q[15:8]<=byteena[1]?d[15:8]:q[15:8];
            end
            // else后面有两条语句,begin...end不能省略
    end
endmodule

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值