DLR 0 25 июня, 2005 Опубликовано 25 июня, 2005 · Жалоба Работаю в ISE6.3 + ModelSim 6.0с Использую синхронное FIFO 64 разряда на частоте 80 МГц, с одной особенностью IF DIR = 0 then DIN <= DIA; WR <= IA; DOB <= DO; RD <= IB; else DIN <= DIB; WR <= IB; DOA <= DO; RD <= IA; end if; Где DA, DB, A и B - двухнаправленные буферы, т.е. я переключаю FIFO то в одну, то в другую сторону Столкнулся вот с чем... Во временной симуляции после router и map вижу гадость на DO (некоторые разряды неопределенны!) после снятия с SINT FIFO активного уровня, то есть после снятия сброса! Что может привести к такому поведению fIFO, если но WR и RD в близлежащей временной области неактивны!!! На мой взгляд этот код должен превращаться в мультиплексоры, а значит не должно быть ни каких аварий! Как выйти из такой ситуевины :( (2 разных нельзя т.к. fIFO большое и 2 не поместяться в кристалл!) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 25 июня, 2005 Опубликовано 25 июня, 2005 · Жалоба А какое FIFO Вы используете? Может причина такого поведения - в его построении. 1) Кому-то уже давал такой совет - попробуйте промоделировать Post place and route model без SDF (или значительно уменьшите тактовую частоту в модели) - если заработает как надо, значит частота слишком высока. 2) Если сомневаетесь в том, что синтезатор Вас правильно понял (касаемо мультиплексоров) - внимательно проглядите отчет о синтезе этого модуля. P.S. Хочется заметить, что VHDL для синтезируемых схем - это не совсем (совсем не!) язык программирования - когда пишешь код, нужно четко себе представлять что хочется увидеть в железе. Многие, особенно имеющие опыт программирования на ЯВУ, часто об этом забывают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DLR 0 27 июня, 2005 Опубликовано 27 июня, 2005 · Жалоба Фифо использую Corgen-овское, и вроде от частоты не зависит! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 27 июня, 2005 Опубликовано 27 июня, 2005 · Жалоба IF DIR = 0 then DIN <= DIA; WR <= IA; DOB <= DO; RD <= IB; else DIN <= DIB; WR <= IB; DOA <= DO; RD <= IA; end if; При таком описании на DOA и DOB синтезатор будет ставить латчи, что плохо. Надо писать так: IF DIR = 0 then DIN <= DIA; WR <= IA; DOB <= DO; DOA <= 0; -- или что-то другое RD <= IB; else DIN <= DIB; WR <= IB; DOA <= DO; DOB <= 0; -- или что-то другое RD <= IA; end if; или еще проще DOA <= DO; DOB <= DO; IF DIR = 0 then DIN <= DIA; WR <= IA; RD <= IB; else DIN <= DIB; WR <= IB; RD <= IA; end if; т.е. 2 шины DOA и DOB на самом деле не нужны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 27 июня, 2005 Опубликовано 27 июня, 2005 · Жалоба При таком описании на DOA и DOB синтезатор будет ставить латчи, что плохо. Надо писать так: IF DIR = 0 then DIN <= DIA; WR <= IA; DOB <= DO; DOA <= 0; -- или что-то другое RD <= IB; else DIN <= DIB; WR <= IB; DOA <= DO; DOB <= 0; -- или что-то другое RD <= IA; end if; или еще проще DOA <= DO; DOB <= DO; IF DIR = 0 then DIN <= DIA; WR <= IA; RD <= IB; else DIN <= DIB; WR <= IB; RD <= IA; end if; т.е. 2 шины DOA и DOB на самом деле не нужны. <{POST_SNAPBACK}> Ну не факт!!! Автор же не указал какой у него процес ? он просто привел часть кода, может быть у него регистровые выходы ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 27 июня, 2005 Опубликовано 27 июня, 2005 · Жалоба Ну не факт!!! Автор же не указал какой у него процес ? он просто привел часть кода, может быть у него регистровые выходы ? :) Если в коде процесса нет других присваиваний (до или после приведенного автором оператора IF) для DOA и DOB, то код автора будет всегда приводить к появлению латчей. Я предполагал, что если проблема в этих сигналах, то автор достаточно сообразителен, чтобы привести весь текст, где эти сигналы меняются. Иначе нечего и обсуждать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 27 июня, 2005 Опубликовано 27 июня, 2005 · Жалоба Если в коде процесса нет других присваиваний (до или после приведенного автором оператора IF) для DOA и DOB, то код автора будет всегда приводить к появлению латчей. Я предполагал, что если проблема в этих сигналах, то автор достаточно сообразителен, чтобы привести весь текст, где эти сигналы меняются. Иначе нечего и обсуждать :) <{POST_SNAPBACK}> хмм а если то что он привел у него стоит в process(clock) is begin if (rising_edge (clock)) then ......... то то же будут латчи ? или все таки тригеры ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DLR 0 27 июня, 2005 Опубликовано 27 июня, 2005 · Жалоба Колнечно внутри процесса, вот http://forum.electronix.ru/index.php?act=A...pe=post&id=1447 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 27 июня, 2005 Опубликовано 27 июня, 2005 · Жалоба То ли ты подцепил не то ... в общем, ничего похожего на обсуждаемый код не обнаружилось. Зато в модуле cnt.vhd обнаружилось вот что PR : PROCESS BEGIN wait until(CLK'EVENT and CLK = '1'); ... END PROCESS; более правильно было бы так PR : PROCESS(CLK) BEGIN if (CLK'EVENT and CLK = '1') then ... end if; END PROCESS; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DLR 0 28 июня, 2005 Опубликовано 28 июня, 2005 · Жалоба Вконце файла есть строчки ......... if cntCMD = 0 or cntCMD = 8 then -- DATA if DIRECT = '0' then DIfd <= DLI; -- WRITE TODATA WRfd <= CE_LI; -- WRITE STROB TO RDfd <= RDfd2; -- READ FROM FIFO else DIfd <= DIfd2; WRfd <= WRfd2; T_L <= not CSFF; T_LCE <= not CSFF; ....... Чем IF (CLK'EVENT.... лучше Wait (CLK'EVENT.... ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 28 июня, 2005 Опубликовано 28 июня, 2005 · Жалоба Если в коде процесса нет других присваиваний (до или после приведенного автором оператора IF) для DOA и DOB, то код автора будет всегда приводить к появлению латчей. Я предполагал, что если проблема в этих сигналах, то автор достаточно сообразителен, чтобы привести весь текст, где эти сигналы меняются. Иначе нечего и обсуждать :) <{POST_SNAPBACK}> хмм а если то что он привел у него стоит в process(clock) is begin if (rising_edge (clock)) then ......... то то же будут латчи ? или все таки тригеры ? <{POST_SNAPBACK}> На самом деле неважно, триггеры или латчи. Важно что автор считает, что код должен синтезироваться в мультиплексор (как я понял, так было задумано) - а это неверно. И поскольку у них не прописано в явном виде сброса, то в начале симуляции их состояние будет неопределено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DLR 0 29 июня, 2005 Опубликовано 29 июня, 2005 · Жалоба Если в коде процесса нет других присваиваний (до или после приведенного автором оператора IF) для DOA и DOB, то код автора будет всегда приводить к появлению латчей. Я предполагал, что если проблема в этих сигналах, то автор достаточно сообразителен, чтобы привести весь текст, где эти сигналы меняются. Иначе нечего и обсуждать :) <{POST_SNAPBACK}> хмм а если то что он привел у него стоит в process(clock) is begin if (rising_edge (clock)) then ......... то то же будут латчи ? или все таки тригеры ? <{POST_SNAPBACK}> На самом деле неважно, триггеры или латчи. Важно что автор считает, что код должен синтезироваться в мультиплексор (как я понял, так было задумано) - а это неверно. И поскольку у них не прописано в явном виде сброса, то в начале симуляции их состояние будет неопределено. <{POST_SNAPBACK}> Сброс то есть но в другом процессе!, я его просто не показал. Именно после этого сброса, по заднему фронту на выходе FIFO образуется неопределенное состояние! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 июня, 2005 Опубликовано 29 июня, 2005 · Жалоба Сброс то есть но в другом процессе!, я его просто не показал. Именно после этого сброса, по заднему фронту на выходе FIFO образуется неопределенное состояние! Это как так ?? назначение в одном процессе а сброс в другом ?? тогда ясно почему непределенное состояние :) переделать на 1 процесс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DLR 0 29 июня, 2005 Опубликовано 29 июня, 2005 · Жалоба Посавил в один - то же самое!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 июня, 2005 Опубликовано 29 июня, 2005 · Жалоба Посавил в один - то же самое!!! <{POST_SNAPBACK}> а можно тогда весь код ? а не его кусок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться