[an error occurred while processing this directive]
Борьба с "X" в временной модели (+)
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

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

Отправлено -=Sergei=- 20 апреля 2005 г. 11:01

итак. Имеем post place&route модель микроконтроллера, верификация проводится на FPGA Xilinx, САПР ISE 6.3i.

Два основных куска: ядро процессора работающее на частотах до 33 Мгц. и ядро контроллера USB работающего на частотах 48 или 8 Мгц. Внутри кристалла необходимо обеспечить передачу данных между блоками.

Устроено примерно так:
В регистр блока А по частоте блока А записывается данные и взводится флаг. Сигнал флага уходит в блок B и защелкивается в триггере по частоте блока B, после чего защелкивается последовательно еще в двух триггерах В1 и B2. выделяем фронт сигнала по функции ~B2&B1 и при наличии этого сигнала по частоте блока Б из регистра данных блока А переписываем данные в регистр данных блока Б. При этом сигнал ~B2&B1 является ресетом для флага в блоке А. Наличие флага или ~B2&B1 блокирует запись в регистр данных блока А.

Вот, типа вступление.

Теперь проблема. Так как частоты могут иметь практически любое соотношение, то при моделировании возникают моменты когда фронт флага совпадает с фронтом клока блока Б, и при этом в первом триггере блока Б и тригеррах B1 и B2 как минимум на один такт выставляется "X" (из за несоблюдения времени предустоновки) и только после этого "1". Отсекая фронт этого сигнала вместо "1" диной в один период получаем "X" длиной в один период. который соответснвенно потом "разматывает" в X всю схему. Необходимо избавиться от этого Х при передачи флагов, но только в этом месте, так как в других местах появление "X" говорит о неработоспособности.

Что делал.
Ввел вот такую компанентику между первым триггером и B1.

module antix ( I ,O );

input I ;
wire I ;
output O ;
reg Ot ;

assign O = Ot;
always @(I)
case (I)
1'b0 : Ot <= 1'b0;
1'b1 : Ot <= 1'b1;
1'bx : Ot <= 1'b0;
1'bz : Ot <= 1'b0;
endcase
endmodule

Т.е. просто пропускает только 1, все остально 0. После синтеза превращается в просто провод, но с учетм сохранения иерархии в проекте не оптимизируется. После получения временной модели и ее компилации в библиотеки заменяю временную модель блока antix на поведенческую (не синтезированную).

Но!

В момент Мапинга ISE всеже разбирается в структуре и проекта и на вход тригерра B1 подает не выход antix а вход (выход первого триггера) т.е. оптимизирует передачу через antix и X проскочит. Постоянно подправлять нетлист руками желания нет, А хочется сделать железобетонную конструкцию, так как тестированием занимаются другие люди которые будут гонять на временной модели свои тесты и просто говорить мне потом где и когда у них что "упало" или временные ограничения не соблились.

Вот вопрос:
Как сделать красиво и правильно?

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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru