如何在当前时刻采样上一拍的值?always_ff always

文章目录

前言

如何在当前时刻采样上一拍的值?采用always_ff 和 always

一、实现方式

1.always_ff

bash 复制代码
module example_always_ff (
    input logic clk,
    input logic rstn,
    input logic a,
    output logic q
);

always_ff @(posedge clk or negedge rstn) begin
    if (!rstn) begin
        q <= 0;  // 使用非阻塞赋值
    end else begin
        q <= a;  // 使用非阻塞赋值
    end
end
endmodule
  1. 敏感列表:明确要求只能在时钟边沿或复位信号变化时触发。
  2. 赋值方式:只允许使用非阻塞赋值 (<=),确保在时钟边沿时更新信号的行为符合时序逻辑的预期。一般推荐在时序逻辑中使用非阻塞赋值(<=)

2. always

bash 复制代码
module example_always (
    input logic clk,
    input logic rstn,
    input logic a,
    output logic q
);

always @(posedge clk or negedge rstn) begin
    if (!rstn) begin
        q = 0;  // 使用阻塞赋值
    end else begin
        q = a;  // 使用阻塞赋值
    end
end
endmodule
  1. 敏感列表:指定时钟和复位信号。
  2. 赋值方式:使用了阻塞赋值 (=),这可能导致在同一时钟周期内出现时序问题

二、比较

通常建议使用 always_ff,原因如下:

  1. 语义清晰:
    always_ff 明确表示这是一个时序逻辑块,适合描述寄存器或触发器的行为。这种清晰的语义使得代码更易于理解和维护。
    always 可以用于组合和时序逻辑,可能导致混淆,尤其是在复杂设计中。

  2. 敏感列表管理:
    always_ff 自动管理敏感列表,只允许时钟边沿和复位信号,减少了设计错误的机会。
    always 需要手动指定敏感列表,容易出现遗漏或错误。

  3. 赋值方式:
    always_ff 只 允许使用非阻塞赋值 (<=),这有助于确保时序逻辑的正确性,避免潜在的时序问题。
    always 可以使用阻塞赋值(=),在时序逻辑中可能导致意外的行为。

总的来说,推荐使用 always_ff 来实现时序逻辑,因为它提供了更好的可读性、可维护性和设计安全性。在设计复杂的数字电路时,使用 always_ff 可以减少错误并提高代码的质量。如果你的设计环境支持 SystemVerilog,尽量利用这些新特性。

always :适用于组合逻辑和时序逻辑,但需要手动管理敏感列表和赋值方式。
always_ff :专门用于时序逻辑,强制使用非阻塞赋值,减少设计错误。
always_comb : SystemVerilog 的组合逻辑描述方式,自动管理敏感列表。

相关推荐
FPGA小迷弟16 小时前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha12816 小时前
CPU 内部结构是什么?---deepseek
fpga开发
abc light17 小时前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
156082072191 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot1 天前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
樱木花道長1 天前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
FPGA小迷弟1 天前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
低慢小uav2 天前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
szxinmai主板定制专家2 天前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576
女神下凡2 天前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范