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

 
 
> достоинства и недостатки variable?, Давайте совместно разберемся!
Мур
сообщение Jun 23 2017, 07:58
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 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
 
Start new topic
Ответов
andrew_b
сообщение Jun 23 2017, 08:29
Сообщение #2


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

Группа: Свой
Сообщений: 1 975
Регистрация: 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


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 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 975
Регистрация: 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


Знающий
****

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



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

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

Сообщений в этой теме
- Мур   достоинства и недостатки variable?   Jun 23 2017, 07:58
|- - andrew_b   Цитата(Мур @ Jun 23 2017, 11:47) Так это ...   Jun 23 2017, 08:57
|- - Мур   Цитата(andrew_b @ Jun 23 2017, 11:57) Вы ...   Jun 23 2017, 09:10
- - Amurak   При написании функций (function) переменные незаме...   Jun 23 2017, 08:53
|- - Мур   Цитата(Amurak @ Jun 23 2017, 11:53) При н...   Jun 23 2017, 08:55
- - Maverick   Цитата(Мур @ Jun 23 2017, 10:58) Приветст...   Jun 23 2017, 09:25
|- - Мур   Цитата(Maverick @ Jun 23 2017, 12:25) сде...   Jun 23 2017, 09:30
- - KalashKS   Не знаю, как в моделсиме, а в NCsim и Aldec переме...   Jun 23 2017, 12:35
- - FPG   Вот применение! Пользуюсь регулярно! где-т...   Jun 29 2017, 15:20
|- - andrew_b   Цитата(FPG @ Jun 29 2017, 18:20) Вот прим...   Jun 29 2017, 17:39
- - FPG   функция дешифрации основана как раз на свойстве va...   Jul 3 2017, 10:52
- - andrew_b   Цитата(FPG @ Jul 3 2017, 13:52) функция д...   Jul 3 2017, 14:52


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:43
Рейтинг@Mail.ru


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