des00 25 11 октября, 2005 Опубликовано 11 октября, 2005 · Жалоба один из примеров ------------------------------------------------------------------ -- LMAS register. ------------------------------------------------------------------ LMAS_REGISTER: process( CLK ) begin if( rising_edge( CLK ) ) then if( RST = '1' ) then LMAS1 <= '0'; LMAS0 <= '0'; elsif( LASMAS = '1' ) then LMAS1 <= LGNT(1); LMAS0 <= LGNT(0); else LMAS1 <= LMAS1; -- объясните тайный смысл вот этих строк LMAS0 <= LMAS0; end if; end if; end process LMAS_REGISTER; собственно вопрос в виде комента :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 11 октября, 2005 Опубликовано 11 октября, 2005 · Жалоба des Как я понимаю, явное сохранение. Видимо, для тупого синтезатор специально. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 октября, 2005 Опубликовано 11 октября, 2005 · Жалоба des Как я понимаю, явное сохранение. Видимо, для тупого синтезатор специально. :) <{POST_SNAPBACK}> :) похоже на то Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YuryL 0 12 октября, 2005 Опубликовано 12 октября, 2005 · Жалоба В моем понимании строчка LMAS1 <= LMAS1; должна заставить синтезатор на входе триггера поставить мультиплексор, а вход clk оставить чистым. Без этой строчки вход clk должен стробироваться LASMAS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 12 октября, 2005 Опубликовано 12 октября, 2005 · Жалоба В моем понимании строчка LMAS1 <= LMAS1; должна заставить синтезатор на входе триггера поставить мультиплексор, а вход clk оставить чистым. Формально да. Но если синтезатор умный, он поймет... Без этой строчки вход clk должен стробироваться LASMAS <{POST_SNAPBACK}> Ничего подобного. Со входом Clk ни там, ни там ничего не будет, gated clock не возникнет. Просто в одном случае LASMAS будет управлять мультиплексором (типа, эмуляция ClockEnable триггера), а в другом он и будет ClockEnable'ом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
YuryL 0 12 октября, 2005 Опубликовано 12 октября, 2005 · Жалоба 2 andrew_b что значит Но если синтезатор умный, он поймет... Попробовал синтезить на Леонардо, ему без разницы какая конструкция Синопсис четко различает и строит схемы как я описал выше. Возможно зависит от настроек синтезатора. p.s.А что такое clk enable? Тот же гейтовый клок но встроенный в библиотечный элемент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 12 октября, 2005 Опубликовано 12 октября, 2005 · Жалоба 2 andrew_b что значит Но если синтезатор умный, он поймет... Ну, он разберется, что надо вместо мультеплексора использовать CE-вход триггера. p.s.А что такое clk enable? Тот же гейтовый клок но встроенный в библиотечный элемент. <{POST_SNAPBACK}> Только вот если такой клок сделать вне триггера, то можно нарваться на неприятности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 октября, 2005 Опубликовано 13 октября, 2005 · Жалоба хмм столкнулся с интересной штукой есть стейт машина if rising_edge(clk) then ............. when s0 => if (bla-bla) then state <= s1; end if; ..... when s3 => s4; when s4 => state <= s0; ............ при максимальной оптимизации в симплифае, при bla-bla = falshe есть переход в состояние s4 (которого быть не должно), проверял чипскпом. если же переписать так if rising_edge(clk) then ....... when s0 => if (bla-bla) then state <= s1; else state <= s0; end if; ..... when s3 => s4; when s4 => state <= s0; .............. тогда все работает верно при любых оптимизациях. Симплифай 8.2 ИСЕ 7.1сп4. Кодирование "safe, onehot" Как нибудь разумно можно это объяснить ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 13 октября, 2005 Опубликовано 13 октября, 2005 · Жалоба Это не типичная ситуация. Т.к. по идее выхода из состояния s0 нет, вот синтезатор и позволил себе вольности. Он должен был матюгнуться на это дело. Правильный вариант №2. Можно настроить значение по умолчанию для машины, записав перед case state <= s0, тогда везде, где возникнут подобные ситуации(недоопределение) синтезатор должен вставить переход в s0. Лучше автомат описывать так :триггеры в одном процессе(state<=new_state), а логика в другом. В этом случае проще анализировать/прогнозировать оптимизацию схемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 октября, 2005 Опубликовано 13 октября, 2005 · Жалоба Это не типичная ситуация. Т.к. по идее выхода из состояния s0 нет, вот синтезатор и позволил себе вольности. Он должен был матюгнуться на это дело. Правильный вариант №2. Можно настроить значение по умолчанию для машины, записав перед case state <= s0, тогда везде, где возникнут подобные ситуации(недоопределение) синтезатор должен вставить переход в s0. Лучше автомат описывать так :триггеры в одном процессе(state<=new_state), а логика в другом. В этом случае проще анализировать/прогнозировать оптимизацию схемы. <{POST_SNAPBACK}> Хмммм, не сочтите за ламерство почему это выхода из состояния s0 нет ? из s0 выход есть по сигналу bla-bla в состояние s1, иначе перехода никуда быть не должно, т.е. машина должна "висеть" в состоянии s0 все описанно в 1ом синхронном процессе (всего 5 состояний, зачем городить 2-х процесную стейт машину). Или я не правильно понимаю концепцию програмирования FSM?? ведь по сути это регистр, который защелкивает состояния по клоку, или тут вылезает "гонка" сигналов возбуждения состояний ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 13 октября, 2005 Опубликовано 13 октября, 2005 · Жалоба Я bla-bla принял за логическое выражение :). Два процесса позволяют более правильно описать условия переходов, куча-мала многие вещи очевидные в статической составляющей(не знаю как правильнее это назвать) съедает за счет присутствия триггера. В общем второй процесс желателен для увеличения контролируемости логики. В симплифае можно графически посмотреть ваш автомат, в rtl viewer щелкните на автомат, и проверьте все ли там получилось так как вы описали. PS: классическая, рекомендуемая во многих информационных материалах схема состоит именно из 2-х процессов. К примеру Examples of VHDL Descriptions.pdf. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 октября, 2005 Опубликовано 13 октября, 2005 · Жалоба В общем второй процесс желателен для увеличения контролируемости логики. В симплифае можно графически посмотреть ваш автомат, в rtl viewer щелкните на автомат, и проверьте все ли там получилось так как вы описали. PS: классическая, рекомендуемая во многих информационных материалах схема состоит именно из 2-х процессов. К примеру Examples of VHDL Descriptions.pdf. <{POST_SNAPBACK}> понял спасибо, и тогда последний вопрос на эту тему не подскаже в ВХДЛ есть аналог верилоговского always @(*) - учитывать все сигналы процесса в списке чувствиетельности ? (одна из немногих причин, по которой я не люблю асинхронные процессы) в стандарте я этого не нашел :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 13 октября, 2005 Опубликовано 13 октября, 2005 · Жалоба В прямом виде о такой аналогии не слышал, и не знаю. В языке присутствует урезанная версия процесса. q1<= ... when (expr) else ... when (expr) else ... when (expr) else ...; и пр. Любое присваивание, за пределами явно выраженного процесса, вызывает порождение процесса, который можно сравнить с данной конструкцией т.к. он обладает автоматическим списком чуствительности. Но это, фактически теория и можно считать, что этого нет. Если пишите прямо в железо, без симуляции, то можно позволить себе указывать список не полностью, что у синтезатора вызовет warning, но так лучше не делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 октября, 2005 Опубликовано 13 октября, 2005 · Жалоба В прямом виде о такой аналогии не слышал, и не знаю. Любое присваивание, за пределами явно выраженного процесса, вызывает порождение процесса, который можно сравнить с данной конструкцией т.к. он обладает автоматическим списком чуствительности. Но это, фактически теория и можно считать, что этого нет. Если пишите прямо в железо, без симуляции, то можно позволить себе указывать список не полностью, что у синтезатора вызовет warning, но так лучше не делать. Понятно, спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pyadvychuk 0 18 октября, 2005 Опубликовано 18 октября, 2005 · Жалоба des Как я понимаю, явное сохранение. Видимо, для тупого синтезатор специально. :) <{POST_SNAPBACK}> если не ошибаюсь - это пример арбитра для вишбона, а он изначально собирался на опенсерс симуляторе (не помню точно на каком), и этот симулятор как раз явную заглушку в состояниях триггера и хотел видеть.. так что никакого тайного смысла нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться