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

Небольшая задачка, VHDL

Хочется сделать функцию, осуществляющую задержку на такт, по сути Д-триггер. Объявлять его как компонент не хочется, много букв. Вводить промежуточные сигналы - тоже не охота напрягать человека, который будет код читать. Т.е., в идеале хочется видеть что-то типа " A <= delay(B) "

 

Может всё же есть какой-нибудь красивый способ? Заранее предчувствую отрицательный ответ..

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


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

Хочется сделать функцию, осуществляющую задержку на такт, по сути Д-триггер. Объявлять его как компонент не хочется, много букв. Вводить промежуточные сигналы - тоже не охота напрягать человека, который будет код читать. Т.е., в идеале хочется видеть что-то типа " A <= delay(B) "

 

Может всё же есть какой-нибудь красивый способ? Заранее предчувствую отрицательный ответ..

 

сделать можно, но :

 

1. Синтезироваться она не будет

2. В ВХДЛ функция будет блокирующей (в SV можно сделать и так и так).

3. Если для моделирования то атрибут 'last_value или 'delayed уже не рулит ?

 

 

Удачи !!!

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


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

Ну а если что-то типа такого :

 

d_out <= d_in when (clk'event and clk = '1');

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


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

Ну а если что-то типа такого :

 

d_out <= d_in when (clk'event and clk = '1');

 

А Вы уверены в коректности кода? И какую схему сделает синтезатор?

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


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

А Вы уверены в коректности кода? И какую схему сделает синтезатор?

Уверен :)

Синтезатор сделает самый что нинаесть обычный D-триггер.

Проверьте сами, если не верите.

Вот результат :

post-843-1216371960_thumb.jpg

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


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

Все это конечно хорошо, но когда в двадцати местах нужно делать задержки на несколько тактов, получается некрасиво. И надо чтоб синтезировалось конечно.

Ладно, раз программисты не хотят бороться с неудобствами, придётся мне бороться со своим идеализмом и жалостью к потомкам =)

Где-то в соседней теме было упоминание про "объявление компонентов как функций". Возможно, это ключ к решению.

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


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

Хочется сделать функцию, осуществляющую задержку на такт, по сути Д-триггер. Объявлять его как компонент не хочется, много букв. Вводить промежуточные сигналы - тоже не охота напрягать человека, который будет код читать. Т.е., в идеале хочется видеть что-то типа " A <= delay(B) "

 

Может всё же есть какой-нибудь красивый способ? Заранее предчувствую отрицательный ответ..

 

КРАСИВЫЙ не всегда правильно при профессиональной деятельности, нужно использовать ПРАВИЛЬНЫЙ (то есть принятый большинством) подход, то есть описать process, в котором описан регистр, это будет понятно читающему

 

конкурентное присваивание, предложенное Stewart Little тоже стандартно, но по-моему менее понятно, так как может встречаться в разных местах кода, а process группирует все тригера в одном месте. если при этом пользоваться какой-то разумной системой имен, то код станет совсем "прозрачным"

 

regs : process(clk,rst)

begin

 

if rising_edge(clk) then

r <= ri;

if rst = '0' then

r.icnt <= (others => '0');

end if;

end if;

 

if rst = '0' then

r.bdrive <= '0';

r.sdcsn <= (others => '1');

end if;

end process;

 

типа так - здесь описаны и триггера без сброса, и с инхронным, и с асинхронным сбросом

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


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

Может всё же есть какой-нибудь красивый способ? Заранее предчувствую отрицательный ответ..

 

самый красивый способ - это изучить xst.pdf с сайта xilinx.

Все, что Вам тут насоветовали - это усмешка профессионалов.

Со студентами они гораздо корректнее обходятся.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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