hdl 中的管道多路复用器

Posted

技术标签:

【中文标题】hdl 中的管道多路复用器【英文标题】:Pipeline muxes in hdl 【发布时间】:2017-12-30 12:13:01 【问题描述】:

我正在做一些简单的测试来评估流水线时数字电路中时钟速度的增加情况。

我使用 2 个 5to1 和 1 个 2to1 流水线化一个 10to1 多路复用器。我从 fpga 合成器(altera)中获得了一些时钟速度的提高。然后我再添加一个阶段,用 2to1 和 3to1 以及适当的寄存器替换 he 5to1 多路复用器。在后一种情况下,时钟速度会下降。我不明白为什么添加寄存器和流水线阶段会降低时钟速度……有什么解释吗?

【问题讨论】:

Fpga 没有多路复用器。综合工具将您的 VHDL 代码转换并优化为适合 FPGA 构建块的逻辑。块之间的路由延迟通常占主导地位。 【参考方案1】:

大多数 FPGA 中的最小逻辑门是查找表 (LUT),它们带有 3 到 6 个输入。 Altera 的 ALM 可通过多种方式进行配置。无论哪种方式,如果多路复用器大小小于等效 LUT 大小,则 Fmax 不会进一步提高。

您可以将所有多路复用器大小描述为 2:1 多路复用器的树。综合将优化生成的方程式并将它们映射到您的 FPGA 设备的 LUT 结构和配置。

您可以进一步使用用户定义的rising_edge 函数来创建变量流水线:

function registered(signal Clock : std_logic; constant IsRegistered : boolean) return boolean is
begin
  if IsRegistered then
    return rising_edge(Clock);
  end if
  return TRUE;
end function;

(来源:PoC-Library - components 包)

此功能允许您选择性地启用和禁用管道阶段。

【讨论】:

你的意思是如果最小LUT输入数是3,不建议在两个2to1中'break'一个4to1 mux? 例如Xilinx 具有 LUT6 结构。这匹配具有 4 个数据输入和 2 个选择信号的 4:1 多路复用器。任何较小的多路复用器都将产生一个具有未使用功能的 LUT6 结构。

以上是关于hdl 中的管道多路复用器的主要内容,如果未能解决你的问题,请参考以下文章

使用 select 多路复用未命名管道和其他文件描述符

五种I/O 模式——阻塞(默认IO模式),非阻塞(常用语管道),I/O多路复用(IO多路复用的应用场景),信号I/O,异步I/O

多路复用数据流

HTTP协议篇:多路复用数据流

IO多路复用机制(转)

Kotlin 协程协程中的多路复用技术 ① ( 多路复用技术 | await 协程多路复用 | Channel 通道多路复用 )