Могу ли я использовать переменную внутри оператора генерирования? - PullRequest
1 голос
/ 15 марта 2011

Мне интересно, возможно ли использовать переменную внутри оператора генерации .

signal bitmap_nodes : std_logic_vector(0 to NB_NODES-1) := (others => '0');

CIRCULAR: if (CLOCKWISE = 0) generate
    variable index : integer := 0;
    begin
    GENERATE_NODE : for i in NB_NODES-1 to 0 generate
    begin        
        node_inst: node
        port map (                    
            rx_bitmap => bitmap_nodes(index)
        );

        -- Increment index
        index := index + 1;

    end generate GENERATE_NODE;

end generate CIRCULAR;

Здесь переменная используется только для нарезки векторов.Что он сделает, так это назначит следующее (предположим, что NB_NODES равно 4):

NODE0 -> bitmap_nodes(3)
NODE1 -> bitmap_nodes(2)
NODE2 -> bitmap_nodes(1)
NODE3 -> bitmap_nodes(0)

1 Ответ

2 голосов
/ 15 марта 2011

Это похоже на:

   LAST: if (i = 0) generate
            firstnode : node
            port map (
                rx_bitmap => bitmap_nodes(NB_NODES-1)
            );
        end generate LAST;

не так ли?

РЕДАКТИРОВАТЬ:

Мне все еще не ясно почему вы хотели бы сделать это, но вы можете (post-VHDL87) поместить shared variable в эту область (вы можете рассматривать это так же, как часть между architecture и begin),Помните, что общие переменные должны иметь тип protected, если у вас не будет проблем с условиями гонки.

Однако вы не можете увеличивать переменную так, как делаетеОператор generate должен быть заполнен параллельными операторами (а назначения переменных - нет).

Опять же, мне было бы очень интересно увидеть пример, где эта функциональность необходима (или это скорее академический вопрос?)

...