Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
С гонками фронтов борюсь
Отправлено
vitalyn 03 июля 2009, г. 13:46
В ответ на:
Зачем по двум фронтам работать? отправлено пользователем
druzhin 03 июля 2009, г. 12:42
Даже глобальный клок приходит на триггера неодновременно и этого разбега хватает для глюков.
У меня все сигналы делятся на 2 группы - тактируемые по фронту глобального клока, и тактируемые по спаду. Если какой-то сигнал тактируется по фронту, то он вычисляется только от сигналов, тактируемых по спаду. И наоборот.
Вот, например, длинный счётчик.
Если он короткий, то можно сделать и так
reg [0:3] cnt;
always @ (posedge CLK)
cnt = cnt + 1;
А вот если длинный, то делаю
reg [0:31] cnt;
reg [0:31] cnt_;
always @ (negedge CLK)
cnt_ = cnt + 1;
always @ (posedge CLK)
cnt = cnt_;
потому что даже carry-chain не помогает на длинных регистрах.
Да, расход триггеров в 2 раза больше, но зато всегда работает. Да и обычно у меня LUTов расходуется гораздо больше, чем триггеров, так что лишних ячеек такая тактика не использует.
Составить ответ | Вернуться на конференцию.
Ответы