векторизиран входен порт, управляващ изходен порт на единична битова мрежа

Защо тези два кода не са еквивалентни? Проверявам логическата еквивалентност между двете, те се провалят, каква може да е грешката? Ще го приеме ли като несъответствие на ширината или мрежа, управлявана от множество драйвери? Използвам каданс LEC за официална проверка

module driver (a, b);
  input [3:0] a;
  output wand b;

  assign b = a;
endmodule
module driver (a, b);
  input [3:0] a;
  output wand b;

  assign b = a[3];
  assign b = a[2];
  assign b = a[1];
  assign b = a[0];
endmodule

person VIJETH ANCHATGERI    schedule 16.04.2015    source източник
comment
В крайна сметка отговорът на този въпрос ще бъде подобен на вашия предишния един.   -  person Qiu    schedule 16.04.2015


Отговори (1)


assign b = a е еквивалентно на assign b = a[0]. Горните битове на a са извън диапазона за b.

Същата причина с препълването. Например assign sum[3:0]=a[3:0]+b[3:0] ако a=15 и b=2, сумата ще бъде 1, защото няма достатъчно битове за представяне на 17 (17 mod (2^bitwidth(4)) = 1).

person Greg    schedule 16.04.2015