VHDL Case语句增加了显着的开销

时间:2014-09-25 13:14:01

标签: vhdl

以下是代码段:

WITH MUX SELECT
S <= ((h_sum(N-1 DOWNTO 1) XOR carry_in_internal(N-1 DOWNTO 1)) & (h_sum(0) XOR C_in_mod)) WHEN "0010" | "0110",
    carry_generate WHEN "0000",
    carry_propagate WHEN "0001",
    h_sum WHEN "0100",
    nor_val WHEN "1100",
    A WHEN OTHERS;

延迟时间差不多是17ns。在评论一组陈述时:

WITH MUX SELECT
S <= ((h_sum(N-1 DOWNTO 1) XOR carry_in_internal(N-1 DOWNTO 1)) & (h_sum(0) XOR C_in_mod)) WHEN "0010" | "0110",
    --carry_generate WHEN "0000",
    --carry_propagate WHEN "0001",
    --h_sum WHEN "0100",
    --nor_val WHEN "1100",
    A WHEN OTHERS;

延迟时间变为11ns!怎么会这样呢?如何让额外的开关增加如此多的门限开销,我无法理解。有没有更简单的方法?基本上,我假设FPGA具有从触发器或存储器块到S的输出。因此,它需要做的就是决定从哪个32位触发器读取?

1 个答案:

答案 0 :(得分:0)

问题在于,在第二种情况下,你必须只识别一个输入组合,然后你基本上有32个2to1 Mux和一个小逻辑来寻址选择器,在第一种情况下你有8to1 MUX和更多的逻辑对于选择器。 (这只是让你知道为什么你有这样的区域开销,但你的代码映射方式取决于你的FPGA和你正在使用的工具)。

不幸的是,我认为没有更好的方法来编写MUX。

你可以做的是尝试改变MUX的编码,以减少识别或尝试在多个阶段中分割MUX的位数,看看它是否加速了你的系统。

再见