#concatenation #verilog
#конкатенация #verilog
Вопрос:
У меня странная ошибка в компиляции Verilog RTL. У меня есть 2 определения, и их объединение приводит к ошибке.
`define ARRAY1 = 3'b001;
`define ARRAY2 = 3'b011;
[...]
next_state = {`ARRAY1,`ARRAY2};
xmvlog: *E,ILLPRI (./../rtl/LVDS_ctrl_phy.v,271|37): illegal expression primary [4.2(IEEE)].
(`define macro: ARRAY1 [./../rtl/LVDS_ctrl_phy.v line 1], file: ./../rtl/LVDS_ctrl_phy.v line 271)
next_state = {`ARRAY1,`ARRAY2};
Поскольку define
это просто подстановка текста, это не должно приводить к ошибке, верно?
Но, если я заменю соответствующим текстом
next_state = {3'b001,3'b011};
это не приводит к ошибке.
У вас есть какие-либо идеи, почему это происходит?
Ответ №1:
Определение галочки похоже на поиск и замену в текстовом редакторе. Эти галочки определяют
`define ARRAY1 = 3'b001;
`define ARRAY2 = 3'b011;
фактически означает
replace all occurrences of `ARRAY1 with "= 3'b001;"
replace all occurrences of `ARRAY2 with "= 3'b021;"
итак
next_state = {`ARRAY1,`ARRAY2};
становится
next_state = {= 3'b001;,= 3'b021;};
что является бессмыслицей. В принципе, удалите точки с запятой и равные из этих строк:
`define ARRAY1 3'b001
`define ARRAY2 3'b011
Комментарии:
1. Или используйте
parameter ARRAY1 = 3'b001; parameter ARRAY2 = 3'b011;
вместо