Почему моя переменная регистра «data» сбрасывается в 0, когда testbench попадает в условный блок fr_count? - PullRequest
0 голосов
/ 22 апреля 2019

Вот мой модуль, о котором идет речь , и когда я устанавливаю точку останова на первую строку в разделе (если fr_count == 20 миллионов), я могу прокручивать регистр 'data' и регистр 'data_store' и они оба читаются как 0. Мне нужно, чтобы они правильно установили регистры mailbox и prev_mailbox, но по какой-то причине они сбрасываются, как будто они назначаются путем блокирования назначений, как только этот условный блок начинает выполняться.

Почему это происходит? Как я могу это исправить?

Я пытался закомментировать единственные строки, в которых я сбрасывал регистры в 0, но они все еще настаивают на сбросе.

Неправильно ли я ожидаю сброса результатов в конце блока posedge clk? Единственные строки, где он сбрасывается, - это неблокирующие назначения:

data <= 0; а также data_store <= 0;

1 Ответ

1 голос
/ 22 апреля 2019

Вы присваиваете значения и data, и data_store в двух разных блоках всегда.Это большое НЕТ НЕТ !!

За исключением особых обстоятельств (например, сигналов трех состояний), вы должны присваивать значение только из одного блока всегда.(или от одного assign...)

Не может быть синтезировано: вы получите предупреждение об синтезе.

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

...