【发布时间】:2019-08-14 15:29:14
【问题描述】:
综合后我无法识别 FPGA 中的 VHDL 常量。 在综合后,我能够在网表中识别我的逻辑。但不适用于常量参数。 FPGA 中是否真的会推断出常量?
【问题讨论】:
-
我投票结束这个问题,因为它不是关于编程的。 (这是关于硬件设计的。)电子堆栈交换网站会更合适。
-
这是关于合成器的工作原理,我认为这是 RTL 的基本关键之一。
综合后我无法识别 FPGA 中的 VHDL 常量。 在综合后,我能够在网表中识别我的逻辑。但不适用于常量参数。 FPGA 中是否真的会推断出常量?
【问题讨论】:
合成器可简化您的设计。
合成器减少逻辑方程以去除常数并使用更少的 LUT。
因此,您的常量包含在 LUT 中。
一个例子,当你写的时候:
constant C_CONSTANT : std_logic_vector(3 downto 0) := "1111"
...
if a = C_CONSTANT then
b <= '1';
else
b <= '0';
end if;
逻辑方程为:
b = eq(a(0),C_CONSTANT(0)).eq(a(1),C_CONSTANT(1)).eq(a(2),C_CONSTANT(2)).eq(a(3),C_CONSTANT(3))
=> b = (a(0).C_CONSTANT(0) + /a(0)./C_CONSTANT(0)).(a(1).C_CONSTANT(1) + /a(1)./C_CONSTANT(1)).(a(2).C_CONSTANT(2) + /a(2)./C_CONSTANT(2)).(a(3).C_CONSTANT(3) + /a(3)./C_CONSTANT(3))
=> b = (a(0).1 + /a(0).0).(a(1).1 + /a(1).0).(a(2).1 + /a(2).1).(a(3).1 + /a(3).0)
=> b = a(0).a(1).a(2).a(3)
【讨论】: