【问题标题】:Shift Register Vs Multiplexer [closed]移位寄存器与多路复用器
【发布时间】:2025-11-27 07:45:02
【问题描述】:

我不确定实施。我有一个多路复用器 8 输入、1 输出和 3 选择信号。这些选择信号之一顺序获取位向量的所有值。现在我可以选择两种方式。

第一种方法是使用另一个多路复用器,其中输入是位向量,选择信号是输入的计数器 log2。

第二种方式是使用移位寄存器,取向量的LSB位。

就 FPGA 的面积而言,最佳解决方案是什么?

【问题讨论】:

  • 我想你会在这里得到更好的答案:electronics.stackexchange.com
  • 我觉得可以在这里发帖。我已经看到有标签,所以我认为没关系。感谢您的帮助。
  • 这个问题似乎是题外话,因为它是在 EE 上交叉发布的。 electronics.stackexchange.com/questions/144254/…
  • @Morgan:SO 和 Electronics SE 之间的区别在这里显然很模糊。 C 源算法编译为机器代码指令,作为 CPU 的本机资源,我希望大多数人都同意关于高效 C 算法的讨论属于 SO。 VHDL 源算法编译为门,作为 FPGA 的原生资源,因此类比 VHDL 算法效率讨论也应该属于 SO。
  • @MortenZilmer,我同意这条线很模糊。这部分是因为我不太热衷于打击交叉发布。如果在问题中披露,我认为应该允许。我个人很乐意就 SO 提出更多问题,但发现越往下走的 FPGA/ASIC 路径越模糊。这些是我的意见,不能被视为普遍共识,但我认为这有助于新用户对在哪里发帖有所了解。

标签: hardware vhdl verilog fpga


【解决方案1】:

让(对于不正确的开始)假设 FPGA 仅提供普通逻辑元素和触发器,并且位向量为 N 位并在选择使用的位时保持该值,那么两者使用的资源解决方案是:

  • 班次解决方案:
    • 用于移位的 N 个触发器
    • N 2-1 多路复用器用于触发器加载
  • 多路复用器解决方案:
    • (N - 1) 2-1 多路复用器用于较大的 N-1 多路复用器
    • 计数器的 log2(N) 触发器

因此,这对多路复用器解决方案很重要,因为由于需要初始加载 N 位移位寄存器,两者都需要几乎相同数量的 2-1 多路复用器,但多路复用器解决方案需要更少的触发器。

然而,FPGA 严重依赖 LUT,而 LUT 通常基于小内存,另外一个特点是这些小内存通常也可以用作移位寄存器。具有此功能的 FPGA 允许直接写入 LUT 存储器,然后进行移位,这可以在没有任何 2-1 多路复用器加载的情况下完成。所以在这种情况下,用于轮班解决方案的资源是:

  • 使用 LUT 进行移位的移位解决方案:
    • ?用于加载和移位的 LUT

因此得出的结论是,确定和实现 FPGA 最佳解决方案的最佳方法是了解和利用特定目标 FPGA 的特性,然后尝试实现以确保综合工具正确映射设计.

【讨论】:

  • 对于任何一种解决方案,您都需要存储来存储迭代的值。您还没有将它包含在多路复用器解决方案中,它移位寄存器。所以我会说多路复用解决方案总是会失败。
  • @PaulS:我在第一段中明确假设“......位向量......在选择使用的位时保持值......”,因此没有存储多路复用解决方案中的位向量。如果 FPGA 在 LUT 中具有移位功能,则始终首选使用这些。
  • 你说得对,我确实错过了那句话。不过,我认为值得说明的是,您通常会免费获得移位寄存器的存储空间,只是因为您已经需要一个寄存器(例如用于计时,或者驱动逻辑可以开始下一次计算)。跨度>