#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 включены в ваших инструментах. Я рекомендую сменить название на что-нибудь другое.