Cryptography Verilog有符号大值乘法

Cryptography Verilog有符号大值乘法,cryptography,verilog,fpga,Cryptography,Verilog,Fpga,所以我正在研究DSA处理器,它必须将大的有符号值相乘,以检查它们是否适合曲线。我使用的函数在python中工作,并且给出了相同的值,但是当传入Verilog时,我得到了不正确的结果。我相信它必须处理我的y&x符号值。在测试台架期间,x或y自身相乘给出了不正确的值 module on_curve ( input wire signed [511:0] point ); reg signed [255:0] x, y; always@* begin x = point[5

所以我正在研究DSA处理器,它必须将大的有符号值相乘,以检查它们是否适合曲线。我使用的函数在python中工作,并且给出了相同的值,但是当传入Verilog时,我得到了不正确的结果。我相信它必须处理我的y&x符号值。在测试台架期间,x或y自身相乘给出了不正确的值

module on_curve (
        input wire signed [511:0] point
);

reg signed [255:0] x, y;

always@*
begin
    x = point[511:256];
    y = point[255:0];

    if ((y * y - x * x * x - 0 * x - 7) % 256'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F == 0) begin
        $write("This value is on the curve");
    end

    if ((y * y - x * x * x - 0 * x - 7) % 256'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F !== 0) begin
        $write("This value is not on the curve");
    end
end
endmodule
我用于“点”的值是


这是DSA的生成点,因此它应该落在曲线上。

我将
'hFFFFF…
编辑为
256'hFFFFF…
,以便于阅读。Mod不是问题所在。甚至在verilog中测试
y*y
也会产生与python中的
y*y
不同的结果。您还没有说明verilog和python之间的
y*y
有什么不同。在我的模拟中,
y*y
512'H1461286ABE28C5F1DF2D7B4BCA391B5070F6EC678FE75B5687BF154841D1559C372D1541278BDCBEBE4F80E3D9E8B333F432BEE128FD65B7C0AC2A7CC17C14440
x*x*x
是768位的数字。您是针对SystemVerilog还是希望将其作为电路实现?乘法操作数在SystemVerilog中工作正常,但通常无法用于实现。您使用的是什么IDE/模拟器?你能提供模拟输出吗?
512'h79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8;