当前位置: 首页 > article >正文

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

文章目录

  • 前言
  • 一、实现方式
    • 1.always_ff
    • 2. always
  • 二、比较

前言

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

一、实现方式

1.always_ff

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

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_combSystemVerilog 的组合逻辑描述方式,自动管理敏感列表。


http://www.kler.cn/a/374237.html

相关文章:

  • 企业物流管理数据仓库建设的全面指南
  • redis详细教程(6.主从复制)
  • QTreeWidget使用记录(2)
  • git:将多个提交合并为一个
  • windows下xinference无法加载本地大模型问题解决
  • JavaScript 赛博八音盒调制《ENDER LILIES-Harmonious》
  • 使用GitLab CI/CD流水线自动化软件交付
  • 讲讲 kafka 维护消费状态跟踪的方法?
  • 线程的状态及其查看
  • ElementUI el-table 多选以及点击某一行的任意位置就勾选上
  • 【零售和消费品&厨房】厨房食材检测图像分割系统源码&数据集全套:改进yolo11-goldyolo
  • Django创建项目模块+创建映射类+视图
  • 拍拍贷鸿蒙版H5容器之路
  • axios源码分析之请求adapter
  • 【Python】实战:使用input()从键盘获取一个字符串,判断这个字符串在列表中是否存在(函数体不能使用in),返回结果为True或False
  • Mysql的行锁,改一行锁一行
  • 使用 LIBLR 解析带注释的 JSON
  • echarts地图,柱状图,折线图实战
  • ML 系列:第 18 部 - 高级概率论:条件概率、随机变量和概率分布
  • 【MyBatis源码】SqlSessionFactoryBuilder源码分析
  • 从零开始的c++之旅——C++ 类和对象(下)
  • C++学习笔记3——存储持续性、作用域和链接性
  • Web应用程序安全与风险
  • C++——String类讲解
  • Linux下的pipe函数详解
  • 干货--并发编程提高-计算CPU利用率(二十二)