Перейти к содержанию
    

Знатоки ВХДЛ просвятите (+)

один из примеров

 

    ------------------------------------------------------------------
   -- 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;

собственно вопрос в виде комента :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

des

Как я понимаю, явное сохранение. Видимо, для тупого синтезатор специально. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

des

Как я понимаю, явное сохранение. Видимо, для тупого синтезатор специально. :)

 

:) похоже на то

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моем понимании строчка LMAS1 <= LMAS1;

должна заставить синтезатор на входе триггера

поставить мультиплексор, а вход clk оставить

чистым.

Без этой строчки вход clk должен стробироваться LASMAS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моем понимании строчка  LMAS1 <= LMAS1;

должна заставить синтезатор на входе триггера

поставить мультиплексор, а вход clk оставить

чистым.

Формально да. Но если синтезатор умный, он поймет...

Без этой строчки вход clk должен стробироваться LASMAS

Ничего подобного. Со входом Clk ни там, ни там ничего не будет, gated clock не возникнет. Просто в одном случае LASMAS будет управлять мультиплексором (типа, эмуляция ClockEnable триггера), а в другом он и будет ClockEnable'ом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 andrew_b

что значит Но если синтезатор умный, он поймет...

 

Попробовал синтезить на Леонардо, ему без разницы какая конструкция

Синопсис четко различает и строит схемы как я описал выше.

Возможно зависит от настроек синтезатора.

 

p.s.А что такое clk enable? Тот же гейтовый клок но встроенный в библиотечный

элемент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 andrew_b

что значит    Но если синтезатор умный, он поймет...

Ну, он разберется, что надо вместо мультеплексора использовать CE-вход триггера.

p.s.А что такое clk enable? Тот же гейтовый клок но встроенный в библиотечный

элемент.

Только вот если такой клок сделать вне триггера, то можно нарваться на неприятности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хмм столкнулся с интересной штукой

есть стейт машина

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"

Как нибудь разумно можно это объяснить ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это не типичная ситуация. Т.к. по идее выхода из состояния s0 нет, вот синтезатор и позволил себе вольности. Он должен был матюгнуться на это дело.

Правильный вариант №2.

Можно настроить значение по умолчанию для машины, записав перед case state <= s0, тогда везде, где возникнут подобные ситуации(недоопределение) синтезатор должен вставить переход в s0.

 

Лучше автомат описывать так :триггеры в одном процессе(state<=new_state), а логика в другом. В этом случае проще анализировать/прогнозировать оптимизацию схемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это не типичная ситуация. Т.к. по идее выхода из состояния s0 нет, вот синтезатор и позволил себе вольности. Он должен был матюгнуться на это дело.

Правильный вариант №2.

Можно настроить значение по умолчанию для машины, записав перед case state <= s0, тогда везде, где возникнут подобные ситуации(недоопределение) синтезатор должен вставить переход в s0.

 

Лучше автомат описывать так :триггеры в одном процессе(state<=new_state), а логика в другом. В этом случае проще анализировать/прогнозировать оптимизацию схемы.

 

Хмммм, не сочтите за ламерство почему это выхода из состояния s0 нет ?

из s0 выход есть по сигналу bla-bla в состояние s1, иначе перехода никуда быть не должно, т.е. машина должна "висеть" в состоянии s0

все описанно в 1ом синхронном процессе (всего 5 состояний, зачем городить 2-х процесную стейт машину).

 

Или я не правильно понимаю концепцию програмирования FSM??

ведь по сути это регистр, который защелкивает состояния по клоку, или

тут вылезает "гонка" сигналов возбуждения состояний ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я bla-bla принял за логическое выражение :).

 

Два процесса позволяют более правильно описать условия переходов, куча-мала многие вещи очевидные в статической составляющей(не знаю как правильнее это назвать) съедает за счет присутствия триггера. В общем второй процесс желателен для увеличения контролируемости логики.

 

В симплифае можно графически посмотреть ваш автомат, в rtl viewer щелкните на автомат, и проверьте все ли там получилось так как вы описали.

 

PS: классическая, рекомендуемая во многих информационных материалах схема состоит именно из 2-х процессов. К примеру Examples of VHDL Descriptions.pdf.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем второй процесс желателен для увеличения контролируемости логики.

 

В симплифае можно графически посмотреть ваш автомат, в rtl viewer щелкните на автомат, и проверьте все ли там получилось так как вы описали.

 

PS: классическая, рекомендуемая во многих информационных материалах схема состоит именно из 2-х процессов. К примеру Examples of VHDL Descriptions.pdf.

 

понял спасибо,

и тогда последний вопрос на эту тему не подскаже в ВХДЛ есть аналог верилоговского always @(*) - учитывать все сигналы процесса в списке чувствиетельности ? (одна из немногих причин, по которой я не люблю асинхронные процессы)

в стандарте я этого не нашел :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В прямом виде о такой аналогии не слышал, и не знаю.

 

В языке присутствует урезанная версия процесса.

q1<=

... when (expr) else

... when (expr) else

... when (expr) else ...;

и пр.

 

Любое присваивание, за пределами явно выраженного процесса, вызывает порождение процесса, который можно сравнить с данной конструкцией т.к. он обладает автоматическим списком чуствительности. Но это, фактически теория и можно считать, что этого нет.

 

Если пишите прямо в железо, без симуляции, то можно позволить себе указывать список не полностью, что у синтезатора вызовет warning, но так лучше не делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В прямом виде о такой аналогии не слышал, и не знаю.

 

Любое присваивание, за пределами явно выраженного процесса,  вызывает порождение процесса, который можно сравнить с данной конструкцией т.к. он обладает автоматическим списком чуствительности. Но это, фактически теория и можно считать, что этого нет.

 

Если пишите прямо в железо, без симуляции, то можно позволить себе указывать список не полностью, что у синтезатора вызовет warning, но так лучше не делать.

 

Понятно, спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

des

Как я понимаю, явное сохранение. Видимо, для тупого синтезатор специально. :)

 

если не ошибаюсь - это пример арбитра для вишбона, а он изначально собирался на опенсерс симуляторе (не помню точно на каком), и этот симулятор как раз явную заглушку в состояниях триггера и хотел видеть..

так что никакого тайного смысла нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...