[an error occurred while processing this directive]
|
Есть куча параметров, определяющих положение событий в строке (периодический процесс).
Есть два их набора - для low и high разрешения - везде выбор через условный оператор.
Для удобства "моя" диаграмма смещается относительно "документации" на некую величину, от каких-то моментов надо отступать вперёд или назад -итого парметры могут стать отрицательными или выйти за пределы строки в положительную сторону. Пишу макрос для сворачивания в пределы периода. Получаю лажу для параметров, которые перед сворачиванием отрицательные.
Каким-то чудом угадываю, что надо поменять порядок в макросе с /*2*/, как было в начале, на /*1*/.
Вот сокращённый до предела код, полученный в результате исследований неразменного пятака:
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)
/* 2 */ `define line_wrap1(val) ((val + len) % len)localparam shift = 31;
localparam start0 = `line_wrap0( (low ? 7 : 12) - shift); // OK, 582
localparam start1 = `line_wrap0( 7 - shift); // OK, 582
localparam start2 = `line_wrap1( (low ? 7 : 12) - shift); // FAIL, 1000
localparam start3 = `line_wrap1( 7 - shift); // OK, 582assign foo0 = start0, foo1 = start1, foo2 = start2, foo3 = start3;
endmodule
E-mail: info@telesys.ru