[an error occurred while processing this directive]
|
По поводу терминологии. К сожалению, с русской терминологией не знаком - чител все английское. Поэтому не могу понять, какой именно английский термин Вы имеете в виду.
Еще раз освежил свои представления о сигналаи переменных по стандартам. Ни на что не претендуя, скажу - пока что мое представление о них не изменилось. Опишу их отличия своими словами.
Да, везде ниже я имею в виду обычные, а не shared переменные (которые, кстати, несинтезируемые)
Сигнал - это существенно асинхронная сущность, а переменная - синхронная, что проявляется в:
1. Сигналы можно декларировать где угодно кроме процедур, а переменные - только в процессах и функциях, т. е. в последовательно исполняемых конструкциях.
2. Не существует оператора асинхронного присваивания переменной.
3. Значение переменной изменяется непосредственно после присваивания в тот же момент времени. Значение сигнала сразу после присваивания (игнорирую несинтезируемую конструкцию after). То есть, если мы изменили сигнал в поцессе под rising_edge - в тех же rising_edge процессах в этом такте все последующие считывания значения сигнала будут возвращать старое значение.
4. И сигнал и переменная в процессе синтезируются в триггер, за одним исключением - когда по всем путям в процессе происходит присваивание значения этой переменной до его использования. В этом случае должна синтезироваться плоская логика.
5. Modelsim показывает внутренние сигналы, но не показывает переменные.
Я что-нибудь упустил?
Ну и все эти отличия не имеют никакого отношения к тому, что выдаст синтезатор ПОСЛЕ оптимизации. Главное, что поведение схемы С ТОЧКИ ЗРЕНИЯ СИНТЕЗАТОРА сохраняется неизменным.
Да, и когда я заменял сигналы на переменные - я исходил из именно того понимания, которое описал выше.
E-mail: info@telesys.ru