Аппаратная реализация сумматора по модулю

У меня есть 8 входов, чью сумму по модулю я должен взять с модулем mi знаю алгоритм для 2 входов, но он здесь не работает. Например, у меня есть сумма = сумма0+ сумма1+ сумма2+ сумма3+ сумма4+ сумма5+ сумма6+ сумма7, и я должен взять мод m суммы. Как сделать это с точки зрения аппаратной реализации? я также пишу код, но его не работает м3 является мод3

 always@(posedge clk)
 begin
    sum3a<=mod30+mod31;
    sum3b<=mod32+mod33;
    sum3c<=mod34+mod35;
    sum3d<=mod36+mod37;
    sum3e<=sum3a+sum3b;
    sum3f<=sum3c+sum3d;

   x31= (sum3e+sum3f);
   x32= (sum3e-m3);

    if (x32>=0 )
      sum3 <= x32;
    else
     sum3 <= x31;

 end

1 ответ

Решение

Не смешивайте блокирующие и неблокирующие назначения в одном always блок. sum3e переменная зависит от sum3a а также sum3b но в то же время sum3a а также sum3b значение изменяется из-за неблокирующих назначений, это приведет к логическим ошибкам.

Другие вопросы по тегам