gpt4 book ai didi

verilog - 在Verilog中编写寄存器路径哪种方式更好

转载 作者:行者123 更新时间:2023-12-02 18:10:27 25 4
gpt4 key购买 nike

解决方案1

reg q;
always @(posedge clk or negedge rst_n)
if (!rst_n)
q <= 1'b0;
else
if (en_a)
q <= da;
else if (en_b)
q <= db;
else if (en_c)
q <= dc;

解决方案2

reg qw, qr;
always @(*)
if (en_a)
qw = da;
else if (en_b)
qw = db;
else if (en_c)
qw = dc;

always @(posedge clk or negedge rst_n)
if (!rst_n)
qr <= 1'b0;
else
qr <= qw;

我经常使用解决方案1,并且我可以在许多其他工程师的代码中找到它。 解决方案2将组合逻辑部分和时序逻辑部分分开,这是经典的FSM风格。

我的问题是,(对于解决方案 2)比解决方案 1 有实际优势吗?两种解决方案有什么区别?

最佳答案

这部分取决于设计和合成器的大小。对于大型 FSM 设计,与等效的一个always block 相比,两个always block 方法使用的面积更小,通常具有更好的时序和更少的代码行。 This paper Cliff Cummings 详细介绍了一、二、三始终阻塞方法之间的差异。他在一些旧论文中推荐这种风格已经有一段时间了 herehere 。几年来,我的团队将这些样式与我们自己的代码和工具进行了比较;我们可以得出与Cliff相同的结论。你应该尝试自己比较。

始终阻止的两个优点是:

  • 在波形或显示语句中查看时钟之前触发器的下一个值。使用一个always block ,您需要计算值。
  • 不会意外地创建意外的触发器
    • 注意:存在推断出非预期锁存器的风险,但由于设计中几乎没有预期的锁存器,因此很容易在 linting 和综合工具的报告中发现它们。意外的翻转更难发现。
  • 所有组合逻辑都组合在一起。
  • 更简单的手动 ECO。通常需要更改的代码行更少。
  • 无需担心意外混合阻塞和非阻塞
  • 对于大型设计:
    • 几行代码
    • 面积较小
    • 更好的时机

始终阻碍的一个优点是:

  • 一般来说,一个always block 比两个always block 稍微更有模拟效率 - (Cliff SNUG1998SJ FSM,第10页)
  • 不会意外推断出意外的闩锁
  • 严格遵循 IEEE1364-1995 时:
    • @(*) 已添加到 IEEE1364-2001 中。在IEEE1364-1995中,组合always block 中使用的每个信号外部驱动信号都需要列在敏感列表中。
      • 示例:@(en_a 或 en_b 或 en_c 或 da 或 db 或 dc 或 qr)
  • 对于小型设计:
    • 只有一个街区可供查看

关于verilog - 在Verilog中编写寄存器路径哪种方式更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com