Как предположил Дэвид, это невозможно синтезировать, потому что вы управляете temp
из 2 разных блоков always. Чтобы заставить его работать, вам нужно объединить их обоих в один.
первый всегда представляет собой полный беспорядок, который будет вести себя как беспорядочный флоп при моделировании из-за усеченного список чувствительности. Даже если инструменты синтеза что-то сделают с блоком, результат не будет соответствовать моделированию.
Второй блок может быть синтезируемым, но он, вероятно, будет вести себя иначе на аппаратном уровне, чем при моделировании из-за на смешанное использование назначений блокировки / неблокирования для одних и тех же варов.
Итак, что делать.
- вам нужно создать единственный всегда блок из двух из них. Трудно понять, каковы ваши намерения, но в целом это, вероятно, будет выглядеть так:
always @(posedge clk) begin
if (rst) ...
else if (deterministicEnable) ...
else if if((bistMode==1) && (enable==1)) ..
end
кажется, что и temp
, и generatePattern
являются внутренними переменными и не требуют сброса. Итак, удалите их из if (rst)
cluase. Я вообще не вижу необходимости в temp
в вашем коде. Вы можете удалить его полностью. Также нет смысла использовать seedVal
, поэтому я не понимаю, зачем вы их вообще инициализируете.
вы правы, используя назначения блокировки (=) для присвоения temp
и до generatePattern
, потому что это внутренние переменные. Однако value0
не является внутренним, и вы должны использовать nba (<=) для назначения. По этой причине переменная <code>value0 должна быть инициализирована сигналом rst
, это не так.