OpenCores
URL https://opencores.org/ocsvn/pairing/pairing/trunk

Subversion Repositories pairing

[/] [pairing/] [trunk/] [rtl/] [f33m.v] - Diff between revs 6 and 7

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 6 Rev 7
Line 121... Line 121...
        delay2 <= delay1; delay1 <= reset;
        delay2 <= delay1; delay1 <= reset;
      end
      end
endmodule
endmodule
 
 
// c == a^{-1} in GF(3^{3*M})
// c == a^{-1} in GF(3^{3*M})
 
module f33m_inv(clk, reset, a, c, done);
 
    input clk, reset;
 
    input [`W3:0] a;
 
    output reg [`W3:0] c;
 
    output reg done;
 
 
 
    wire [`WIDTH:0] a0, a1, a2,
 
                    c0, c1, c2,
 
                    v0, v1, v2, v3, v4, v5,
 
                    v6, v7, v8, v9, v10, v11,
 
                    v12, v13, v14, v15, v16,
 
                    v17, nv2, nv11, nv14;
 
    wire rst1, rst2, rst3, rst4,
 
         done1, done2, done3, done4,
 
         dummy;
 
    reg [4:0] K;
 
 
 
    assign {a2, a1, a0} = a;
 
    assign rst1 = reset;
 
 
 
    f3m_mult3
 
        ins1 (clk, rst1,
 
              a0, a0, v0, // v0 == a0^2
 
              a1, a1, v1, // v1 == a1^2
 
              a2, a2, v2, // v2 == a2^2
 
              done1),
 
        ins2 (clk, rst2,
 
              v0, v3, v6,  // v6 == (a0-a2)*(a0^2)
 
              v1, v4, v7,  // v7 == (a1-a0)*(a1^2)
 
              v2, v5, v8,  // v8 == (a0-a1+a2)*(a2^2)
 
              done2),
 
        ins3 (clk, rst1,
 
              a0, a2, v11, // v11 == a0*a2
 
              a0, a1, v12, // v12 == a0*a1
 
              a1, a2, v13, // v13 == a1*a2
 
              dummy),
 
        ins4 (clk, rst4,
 
              v10, v15, c0,
 
              v10, v16, c1,
 
              v10, v17, c2,
 
              done4);
 
    f3m_sub
 
        ins5 (a0, a2, v3), // v3 == a0-a2
 
        ins6 (a1, a0, v4), // v4 == a1-a0
 
        ins7 (a2, v4, v5); // v5 == a2-v4 == a0-a1+a2
 
    f3m_add3
 
        ins8 (v6, v7, v8, v9),    // v9 == v6+v7+v8
 
        ins9 (v11, v1, v13, v14), // v14 == v11+v1+v13
 
        ins10 (nv14, v0, v2, v15),  // v15 == v0+v2-(v11+v1+v13)
 
        ins11 (v1, nv2, nv11, v17); // v17 == a1^2-a0*a2-a2^2
 
    f3m_neg
 
        ins12 (v2,  nv2),  // nv2 == -v2
 
        ins13 (v11, nv11), // nv11 == -v11
 
        ins14 (v14, nv14); // nv14 == -v14 == -(v11+v1+v13)
 
    f3m_sub
 
        ins15 (v2, v12, v16); // v16 == a2^2-a0*a1
 
    f3m_inv
 
        ins16 (clk, rst3, v9, v10, done3); // v10 == v9^(-1)
 
    func6
 
        ins17 (clk, done1, rst2),
 
        ins18 (clk, done2, rst3),
 
        ins19 (clk, done3, rst4);
 
 
 
    always @ (posedge clk)
 
        if (reset) K <= 5'h10;
 
        else if ((K[4]&rst2)|(K[3]&rst3)|(K[2]&rst4)|(K[1]&done4))
 
            K <= K >> 1;
 
 
 
    always @ (posedge clk)
 
        if (reset) done <= 0;
 
        else if (K[0])
 
          begin
 
            done <= 1; c <= {c2,c1,c0};
 
          end
 
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.