2015-05-09 5 views
0

Я пишу последовательный счетчик, который состоит из серии компонентов с одним счетчиком, которые используют компоненты D-flip-flop. В пределах одного счетчика мне нужно начинать с начального значения '0' для q, но у меня возникают проблемы с инициализацией этого.VHDL Initialize std_logic

q является STD_LOGIC сигнал, и я попытался инициализировать его следующим образом:

signal q : STD_LOGIC := '0'; 

Однако, когда я запускаю программу с помощью ModelSim она показывает значение U как будто это Unassigned. Если я принудительно заморожу сигнал '0' до q, когда я запускаю его в ModelSim, тогда он работает.

Это единственный способ выполнить это, чтобы проверить значение в начале описания поведения и установить его на '0', если он не назначен?

Если я использую BIT вместо STD_LOGIC, все работает отлично.

Я бы опубликовал свой код, но я не хочу рисковать нарушениями академической целостности, поскольку это касается школьного проекта.

+0

Что-нибудь еще диск Q? Обратите внимание, что если начальное значение равно «0», и есть драйвер, управляющий «U», два значения разрешаются «U». (И если вы этого не поняли, прочитайте о функциях разрешения). –

+0

Ну, я порт сопоставляю вывод 'q' с компонентом D-flip-flop на' q', указанный в вопросе. Это то, что вы имеете в виду? –

+2

Да, это твоя проблема. Вам нужно очистить «U» от триггера, либо сбросив его, либо синхронизируя в «0» или «1». –

ответ

0

Причина, по которой это работает для BIT, а не STD_LOGIC, состоит в том, что BIT имеет два значения: «1» и «0» (нет значения для представления неинициализированных), а STD_LOGIC имеет 9 значений, один из которых является «U», который является значением, которое используется, чтобы сказать, что «это значение еще не установлено».

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

Если вам интересно, почему инициализация в объявлении вашего сигнала не работает, это связано с тем, что не все инструменты синтеза подтверждают эту инициализацию, и ModelSim является одним из этих инструментов. Когда вы придете, чтобы поместить это на FPGA, Quartus действительно подтверждает эту инициализацию, но Lattice Diamond или Xilinx ISE могут не так, но поскольку большинство устройств снабжены POR (Power On Reset), если вы включаете условие сброса, q всегда будет инициализирован, поэтому это хорошая практика.

Смежные вопросы