以下是代码段:
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位触发器读取?
答案 0 :(得分:0)
问题在于,在第二种情况下,你必须只识别一个输入组合,然后你基本上有32个2to1 Mux和一个小逻辑来寻址选择器,在第一种情况下你有8to1 MUX和更多的逻辑对于选择器。 (这只是让你知道为什么你有这样的区域开销,但你的代码映射方式取决于你的FPGA和你正在使用的工具)。
不幸的是,我认为没有更好的方法来编写MUX。
你可以做的是尝试改变MUX的编码,以减少识别或尝试在多个阶段中分割MUX的位数,看看它是否加速了你的系统。
再见