Что такое VHDL-эквивалент оператора «+:» в verilog 2001? - PullRequest
0 голосов
/ 26 июня 2019

В Verilog 2001 и SystemVerilog я могу разделить логический вектор с помощью оператора «+:» следующим образом:

module testit;

    reg [31:0] avec;
    reg [7:0]  a0, a1, a2;

    initial begin
        avec = 32'hABCD1234;

        a0 = avec[0*8 +: 8];  //same as: a0 = avec[7:0]
        a1 = avec[1*8 +: 8];  //same as: a1 = avec[15:8]
        a2 = avec[2*8 +: 8];  //same as: a2 = avec[23:16]
    end 

endmodule

Имеет ли VHDL аналогичную функцию в стандартном IEEE или другом пакете? или есть способ реализовать эту функцию как функцию VHDL?

1 Ответ

2 голосов
/ 27 июня 2019

Это похоже на проблему XY . Оператор Verilog :+ (или -:) - это своего рода хак, чтобы обойти тот факт, что такие вещи:

S(some_variable to some_other_variable)

законно в VHDL, но это:

S[some_variable:some_other_variable]

незаконно в Верилоге. Как правило, вы хотите сделать что-то более похожее на это:

S[some_variable:some_variable-7]

но это также незаконно в Verilog. Но вы можете, как вы знаете, сделать это:

S[some_variable-:8]

вместо этого. Итак, в VHDL вам не нужен оператор +: (или -:), вы можете просто сделать что-то вроде этого:

S(some_variable downto some_variable-7)
...