Модуль, преобразующий индекс в значение: синтаксическая ошибка рядом с текстом «=»; ожидание». » или «(«

#verilog

Вопрос:

Предполагается, что этот модуль преобразует значение индекса iState в соответствующее значение в массиве sequence и возвращает его как oV . Однако я получаю эту ошибку oV = sequence[iState]; при запуске:

Ошибка (10170): Синтаксическая ошибка Verilog HDL при назначении 32498071.v(70) рядом с текстом «=»; ожидание «. » или «(«

 module StateToCountSequence(iState, oV);
    //declare the input and output 
    input iState;
    output [3:0]oV;
  
    //declare any internal wire and reg types here.
    reg [3:0]sequence[14:0];
    
    initial begin
        sequence[0] = 4'd3;
        sequence[1] = 4'd2;
        sequence[2] = 4'd4;
        sequence[3] = 4'd9;
        sequence[4] = 4'd9;
        sequence[5] = 4'd0;
        sequence[6] = 4'd7;
        sequence[7] = 4'd1;
        sequence[8] = 4'd1;
        sequence[9] = 4'd5;
        sequence[10] = 4'd1;
        sequence[11] = 4'd7;
        sequence[12] = 4'd0;
        sequence[13] = 4'd8;
        sequence[14] = 4'd9;
    end

    oV = sequence[iState];
endmodule
 

Кто-нибудь знает, что мне с этим делать?

Ответ №1:

Вам не хватает assign ключевого слова для вашего непрерывного назначения oV . Изменить:

 oV = sequence[iState];
 

Для:

 assign oV = sequence[iState];
 

Это исправляет ошибку компиляции.


Странно, что ваш индексный сигнал ( iState ) является 1-битным сигналом, что означает, что он может принимать только известные значения 0 и 1. Таким образом, вы можете получить доступ только sequence к [0] и [1].


Обратите внимание, что sequence это ключевое слово SystemVerilog, что означает, что его нельзя использовать в качестве имени сигнала, если функции SV включены в ваших инструментах. Я рекомендую сменить название на что-нибудь другое.