2013-12-20 50 views
3

在一个架构我有大量的按照特定的公式,在这种情况下,并发信号分配的:大量的VHDL信号分配...可以压缩吗?

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”语句或类似的东西?

回答

4

VHDL有generate建设与循环(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 statement,可能会看到generate statement。请注意,VHDL-2008增强了generate声明。

+0

谢谢你。我知道这很简单。从我看到的文档看来,它看起来像用于创建组件的“生成”语句,但也许这只是另一种用法。 –

+1

generate语句用于制作重复的和有条件的并发语句。这本书“[VHDL设计指南 - 第3版](http://www.amazon.com/s?search-alias=stripbooks&field-isbn=0120887851)”有一章“生成语句”。 –