for による組み合わせ回路
昨日の回路を少し改善してみた。
functionとforを組み合わせることで超シンプルな回路として書けた。
wireで実装するよりシミュレーション速度も速い。(仕方ないか。。。)
合成後の速度は分からないが、、、
なぜ自分がわざわざこんなことをやっているかというと、JavaRockがスゲー!って思ったからです。
JavaRock
module modexp1 ( e ,n,m, r); input[511:0] e,n,m; output[511:0] r; assign r = modexp(e,n,m); function [511:0] modexp; input [511:0] e,n,m; integer i; reg [1023:0] m1; reg [1023:0] r1; begin for(i=0;i<512;i=i+1) begin if ( i == 0) begin m1 = m; r1 = (e[0]? m : 1) % n; end else begin m1 = twice_mod(m1,n); r1 = mult_non_zero(r1, e[i],m1) % n; end end modexp = r1; end endfunction function [1023:0] mult; input [511:0] m,n; mult = m * n; endfunction function [1023:0] mult_non_zero; input [511:0] r; input [1:0] b; input [511:0] m; mult_non_zero = mult(r , (b == 1'b1 ? m : 1) ); endfunction function [511:0] twice_mod; input [511:0] m, n; twice_mod = mult(m,m) % n; endfunction endmodule