在一个体系结构中,我有大量并发信号分配遵循特定的公式,在这种情况下:
x(i) <= x(i-1) XOR x(i-4) XOR ROTATE_LEFT(x(i-8), 2)
例:
architecture behavioural of blah is --Signals type sigArrayType is array(127 downto 0) of std_logic_vector(31 downto 0); signal sigArray : sigArrayType := ((others => (others => '0'))); begin sigArray(8) <= sigArray(7) XOR sigArray(4) XOR (ROTATE_LFET(sigArray(0), 2); sigArray(9) <= sigArray(8) XOR sigArray(5) XOR (ROTATE_LFET(sigArray(1), 2); sigArray(10) <= sigArray(9) XOR sigArray(6) XOR (ROTATE_LFET(sigArray(2), 2); --... --... --LOTS OF OTHER ASSIGNMENTS --... --... sigArray(127) <= sigArray(126) XOR sigArray(123) XOR (ROTATE_LFET(sigArray(119), 2); end behavioural;
有没有办法让VHDL自动执行此操作,而不是让我输入超过一百个版本?我只是在寻找一个简单的"FOR"声明或类似的东西吗?
VHDL有一个generate
带有loop(for
)的构造用于此目的,因此您可以将代码编写为:
x_gen : for i in 8 to 127 generate x(i) <= x(i-1) XOR x(i-4) XOR ROTATE_LEFT(sigArray(i-8), 2); end generate;
VHDL还有一个条件生成(if
).你可以尝试google VHDL生成语句,可以看一下generate语句.请注意,VHDL-2008增强了generate
声明.