Verilog 模m加法器的硬件实现

Verilog 模m加法器的硬件实现,verilog,fpga,system-verilog,computer-architecture,Verilog,Fpga,System Verilog,Computer Architecture,我有8个输入,它们的模和必须取模m。我知道2个输入的算法,但这里不起作用。 例如,我有sum=sum0+sum1+sum2+sum3+sum4+sum5+sum6+sum7,我必须取sum的mod m。从rom硬件实现的角度来看,如何做这个? 我也写代码,但它不工作 m3是mod3 always@(posedge clk) begin sum3a<=mod30+mod31; sum3b<=mod32+mod33; sum3c<=mod34+mod35

我有8个输入,它们的模和必须取模m。我知道2个输入的算法,但这里不起作用。 例如,我有sum=sum0+sum1+sum2+sum3+sum4+sum5+sum6+sum7,我必须取sum的mod m。从rom硬件实现的角度来看,如何做这个? 我也写代码,但它不工作 m3是mod3

 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
始终@(posedge clk)
开始

sum3a不要在同一
块中混合使用阻塞和非阻塞分配
sum3e
变量取决于
sum3a
sum3b
但同时
sum3a
sum3b
值由于非阻塞赋值而发生变化,这将导致逻辑错误。

您可以让sum3a到sum3f以m模完成,或者让逻辑从最终答案中减去m(您应该能够计算最坏情况下的管道)直到答案在0到m-1之间。