[an error occurred while processing this directive]
|
Видимо, в расширителе макросов Quartus'a есть ошибка, поскольку расширенное вручную выражение вычисляется правильно. Выяснил, что
к правильному результату приводит код, из которого селектор вытащен в отдельный параметр.
module foo ( foo0, foo1, foo2, foo3 ); output [9:0] foo0, foo1, foo2, foo3; localparam low = 1, len = 606; /* 1 */`define line_wrap0(val) ((len + val) % len) localparam shift = 31; localparam start0= `line_wrap0( select - shift);// OK, 582 assign foo0 = start0; endmodule
/* 2 */`define line_wrap1(val) ((val + len) % len)
localparam select = low ? 7 : 12;
localparam start1= `line_wrap0( 7 - shift);// OK, 582
localparam start2= `line_wrap1( select - shift);// FAIL, 1000
localparam start3= `line_wrap1( 7 - shift);// OK, 582
assign foo1 = start1;
assign foo2 = start2;
assign foo3 = start3;
E-mail: info@telesys.ru