[an error occurred while processing this directive]
От перестановки слагаемых сумма меняется? ( Q4.2SP1, verilog)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено ReAl 17 марта 2006 г. 13:59

Есть куча параметров, определяющих положение событий в строке (периодический процесс).
Есть два их набора - для 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, 582

assign foo0 = start0, foo1 = start1, foo2 = start2, foo3 = start3;

endmodule


Если нет условного оператора и/или если суммирование в line_wrap() начинается с len - то всё нормально. Иначе - "дорогая редакция, я медленно превращаюсь в нефритовый стебель".

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru