// https://doi.org/10.3390/cryptography7040057 `timescale 1ns/1ns module modmul_tb; reg clk, rst_n; reg start; reg [255:0] a, b, m; wire [255:0] p; wire ready, busy, ready0; modmul i0 (clk, rst_n, start, a, b, m, p, ready, busy, ready0); initial begin #0 clk = 1; #0 rst_n = 0; #0 start = 0; #0 m = 256'hfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f; #0 a = 256'h9f1ad9fed6272daede24223a5641e1e100921e29c81e092c3dc48c53ffcf5069; #0 b = 256'hfd5833a8fea2bd16404e4fc0ce6e4ef00ef472b738ed849dcbd116cae5b70281; #1 rst_n = 1; #2 start = 1; #2 start = 0; wait(ready); $display("%d: p = %x", $time, p); #40 $stop; end always #1 clk = !clk; endmodule /* a = 0x9f1ad9fed6272daede24223a5641e1e100921e29c81e092c3dc48c53ffcf5069 b = 0xfd5833a8fea2bd16404e4fc0ce6e4ef00ef472b738ed849dcbd116cae5b70281 m = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f p = 0x773efa5b74213dc6562474b3fbd093caacf0443de2d46d86ad4dfa4082e3ad52 */