реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> достоинства и недостатки variable?, Давайте совместно разберемся!
Мур
сообщение Jun 23 2017, 07:58
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 762
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Приветствую всех!
Практика использования VHDL дает возможность применять кроме SIGNAL еще и variable. Не знаю, как вам, а мне хватало всегда SIGNAL. Но вот когда стал смотреть чужой код, что столкнулся с проблемой невозможности наблюдения в ModelSim этих самых variable..
Тупая замена на SIGNAL - верный прием наблюдать желаемое

НО! Остается вопрос, где эти самые variable просто незаменимы?

Что скажут корифеии HDL-дизайна?.. Должна быть (не только у меня) ясность в этом вопросе. 1111493779.gif
Спасибо!
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 23 2017, 08:29
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Мур @ Jun 23 2017, 10:58) *
Но вот когда стал смотреть чужой код, что столкнулся с проблемой невозможности наблюдения в ModelSim этих самых variable..
Разумеется. Переменные не имеют истории.

Цитата
Тупая замена на SIGNAL - верный прием наблюдать желаемое
Это в общем случае не так. Переменная может использоваться для описания логики перед триггером, замена переменной на сигнал приведёт к созданию ещё одного триггера.

Цитата
НО! Остается вопрос, где эти самые variable просто незаменимы?
Я не назову таких случаев, чтобы вот просто незаменимы.
Их можно использовать для хранения больших массивов данных, история изменений которых не важна, чтобы уменьшить количество используемой памяти ЭВМ при симуляции. Например, через переменные можно описать модели памяти.

Код
process
variable x : std_logic;
begin
    if (ce2 = '1') then
        x := i;
    else
        o (0) <= i;
        o (1) <= x;
    end if;
end process;

Это преобразование последовательного 1-битного потока данных в 2-битный параллельный. x можно сделать сигналом. Но поскольку он используется только в одном процессе, используется переменная, чтобы не засорять пространство имён архитектуры вспомогательными сигналами.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jun 23 2017, 08:33
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 762
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(andrew_b @ Jun 23 2017, 11:22) *
Разумеется. Переменные не имеют истории.

Понятно. Это мера углубляться в архитектуру для экзотических случаев чего-то там не использовать или наоборот, как в for.
Цитата
Это в общем случае не так. Переменная может использоваться для описания логики перед триггером, замена переменной на сигнал приведёт к созданию ещё одного триггера.

Чувствуется верилоговец. Это не так. Триггер будет только в случае запоминания при тактировании. Кстати, с точки зрения ресурса макроячейка будет использована(без триггера) на логику
Цитата
Я не назову таких случаев, чтобы вот просто незаменимы.
Их можно использовать для хранения больших массивов данных, история изменений которых не важна, чтобы уменьшить количество используемой памяти ЭВМ при симуляции. Например, через переменные можно описать модели памяти.

Пожалуй - это аргумент для бенча. Чтобы не нагружать машину дурной работой.
Цитата
Это преобразование последовательного 1-битного потока данных в 2-битный параллельный. x можно сделать сигналом. Но поскольку он используется только в одном процессе, используется переменная, чтобы не засорять пространство имён архитектуры вспомогательными сигналами.

Локализация понятна. Четко отмечено!
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 23 2017, 08:41
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Мур @ Jun 23 2017, 11:33) *
Чувствуется верилоговец.
Бог миловал.

Цитата
Это не так. Триггер будет только в случае запоминания при тактировании.

Код
process (clk)
variable s : unsigned ();
begin
    if (rising_edge (clk)) then
        s := a + b;
        o <= s;
    end if;
end process;

Замена s на сигнал приведет к созданию триггера и задержке на один такт, о чём я и говорил.

Цитата
Локализация понятна. Четко отмечено!
Я там в процессе клок забыл, но идея понятна.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jun 23 2017, 08:47
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 762
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(andrew_b @ Jun 23 2017, 11:41) *
Замена s на сигнал приведет к созданию триггера и задержке на один такт, о чём я и говорил.

Так это же под клоком. Естественно будет триггер!..
Скорее удобно применять в generate, чтобы изящнее отразить особенность архитектуры подключений...
Go to the top of the page
 
+Quote Post
Amurak
сообщение Jun 23 2017, 08:53
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 18-11-12
Пользователь №: 74 459



При написании функций (function) переменные незаменимы.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jun 23 2017, 08:55
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 762
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Amurak @ Jun 23 2017, 11:53) *
При написании функций (function) переменные незаменимы.


Нет возражений. Конечно!))
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 23 2017, 08:57
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Мур @ Jun 23 2017, 11:47) *
Так это же под клоком. Естественно будет триггер!..

Цитата
Тупая замена на SIGNAL - верный прием наблюдать желаемое

Вы путаетесь в показаниях.
Цитата
Скорее удобно применять в generate
Это вряд ли.

Цитата(Amurak @ Jun 23 2017, 11:53) *
При написании функций (function) переменные незаменимы.
С учётом того, что внутри функции нельзя использовать сигналы (только как аргументы), это само собой разумещееся.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jun 23 2017, 09:10
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 762
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(andrew_b @ Jun 23 2017, 11:57) *
Вы путаетесь в показаниях.

Скорее это связано с текстом, что писал новичок.
Цитата
Это вряд ли.

Акцентирую внимание на описание в секции коммутаций сущностей. Там история не нужна конечно.
Цитата
С учётом того, что внутри функции нельзя использовать сигналы (только как аргументы), это само собой разумещееся.
Это понятно из природы применения функций. Сигналы описываться в декларативной части функции, не могут
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jun 23 2017, 09:25
Сообщение #10


я только учусь...
******

Группа: Модераторы
Сообщений: 3 383
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(Мур @ Jun 23 2017, 10:58) *
Приветствую всех!
Практика использования VHDL дает возможность применять кроме SIGNAL еще и variable. Не знаю, как вам, а мне хватало всегда SIGNAL. Но вот когда стал смотреть чужой код, что столкнулся с проблемой невозможности наблюдения в ModelSim этих самых variable..
Тупая замена на SIGNAL - верный прием наблюдать желаемое

сделать например
Код
signal ODD : std_logic := '0';

process (A)
   variable TMP : std_logic := '0';
begin
   TMP := '0';
   for I in A'low to A'high loop
      TMP := TMP xor A(I);
   end loop;
   ODD <= TMP;
end process;


для моделсима выводите сигнал ODD

Латчей синтезатор не выдает?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Мур
сообщение Jun 23 2017, 09:30
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 762
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Maverick @ Jun 23 2017, 12:25) *
сделать например
Код
signal ODD : std_logic := '0';

process (A)
   variable TMP : std_logic := '0';
begin
   TMP := '0';
   for I in A'low to A'high loop
      TMP := TMP xor A(I);
   end loop;
   ODD <= TMP;
end process;


для моделсима выводите сигнал ODD


По любому предстоит дополнительная компиляция... Я так тоже делаю. Под настроение... Спасибо!

Цитата
Латчей синтезатор не выдает?

Хорошее замечание. Тут ушки на макушке!... Может быть. Надо смотреть пространство перебора и синхронность. Ничего не пропустил?.. Если пропущено, то синтезатор вставит латч. Особенно при асинхроне!
Идея понятна.
Go to the top of the page
 
+Quote Post
KalashKS
сообщение Jun 23 2017, 12:35
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 208
Регистрация: 7-02-11
Пользователь №: 62 755



Не знаю, как в моделсиме, а в NCsim и Aldec переменные вполне наблюдаются. Просто они объявлены внутри процесса и искать их надо внутри процесса, а не архитектуры.
Незаменимыми я их не назову, но в ряде случаев, как в примере выше, они сильно экономят время написания и уменьшают объем/увеличивают читаемость кода.
Go to the top of the page
 
+Quote Post
FPG
сообщение Jun 29 2017, 15:20
Сообщение #13





Группа: Участник
Сообщений: 6
Регистрация: 31-05-17
Пользователь №: 97 406



Вот применение! Пользуюсь регулярно! где-то спер идею )))


process(ADDR_in)
variable tmp0 : std_logic := '0';
begin
tmp0 := '1';

for i in 23 downto 0 loop
tmp0 := tmp0 and not (ADDR_in(i) xor conv_std_logic(ADDR,24)(i));
end loop;

decoder_yes <= tmp0;
end process;
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 29 2017, 17:39
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 817
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(FPG @ Jun 29 2017, 18:20) *
Вот применение! Пользуюсь регулярно! где-то спер идею )))
Я что-то сходу не соображу, в чём тут идея. По-хорошему, такие вещи надо описывать функцией, тогда и переменные не понадобятся. А у функции должно быть говорящее имя (код должен стремиться к тому, чтобы быть самодокументируемым).
Go to the top of the page
 
+Quote Post
FPG
сообщение Jul 3 2017, 10:52
Сообщение #15





Группа: Участник
Сообщений: 6
Регистрация: 31-05-17
Пользователь №: 97 406



функция дешифрации основана как раз на свойстве variable по неблокирующему присваиванию
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th October 2017 - 11:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016