tj328111241 发表于 2013-4-25 16:15:13

[求助]verilog语法问题!!!!!!关于sha256计算~~~~~~~~~~~~~~~~

以下是本人写的verilog模块,用于计算sha256中的一个块

维基百科的伪代码表述:
http://zh.wikipedia.org/wiki/SHA ... 4.E7.AE.97.E6.B3.95



编译器:                ModelSim Se10.1a
编译环境:      win xp sp3


提示错误:
** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(115): near "genvar": syntax error, unexpected genvar

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(116): (vlog-2730) Undefined variable: 'i'.

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(116): near ")": syntax error, unexpected ')', expecting ';'

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(120): near "endgenerate": syntax error, unexpected endgenerate

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(123): near ")": syntax error, unexpected ')', expecting ';'

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(131): near "endgenerate": syntax error, unexpected endgenerate

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(144): near ")": syntax error, unexpected ')', expecting ';'

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(148): (vlog-2730) Undefined variable: 's0'.

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(149): near "maj": syntax error, unexpected IDENTIFIER, expecting ';'

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(189): (vlog-2730) Undefined variable: 'rightrotate_32bit'.

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(189): (vlog-2730) Undefined variable: 'n'.

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(189): (vlog-2730) Undefined variable: 'data'.

** Error: E:\modeltech_10.1a\my project\sha-256-calcblock.v(191): near "endfunction": syntax error, unexpected endfunction
代 码:
module sha256calcblock(input w, output reg hash);

   

    reg k256 ;

    reg hh ;

    reg ww ;

   

    initial

    fork

      k256 = 32'h428a2f98;

      k256 = 32'h71374491;

      k256 = 32'hb5c0fbcf;

      k256 = 32'he9b5dba5;

      k256 = 32'h3956c25b;

      k256 = 32'h59f111f1;

      k256 = 32'h923f82a4;

      k256 = 32'hab1c5ed5;

      k256 = 32'hd807aa98;

      k256 = 32'h12835b01;

      k256 = 32'h243185be;

      k256 = 32'h550c7dc3;

      k256 = 32'h72be5d74;

      k256 = 32'h80deb1fe;

      k256 = 32'h9bdc06a7;

      k256 = 32'hc19bf174;

      k256 = 32'he49b69c1;

      k256 = 32'hefbe4786;

      k256 = 32'h0fc19dc6;

      k256 = 32'h240ca1cc;

      k256 = 32'h2de92c6f;

      k256 = 32'h4a7484aa;

      k256 = 32'h5cb0a9dc;

      k256 = 32'h76f988da;

      k256 = 32'h983e5152;

      k256 = 32'ha831c66d;

      k256 = 32'hb00327c8;

      k256 = 32'hbf597fc7;

      k256 = 32'hc6e00bf3;

      k256 = 32'hd5a79147;

      k256 = 32'h06ca6351;

      k256 = 32'h14292967;

      k256 = 32'h27b70a85;

      k256 = 32'h2e1b2138;

      k256 = 32'h4d2c6dfc;

      k256 = 32'h53380d13;

      k256 = 32'h650a7354;

      k256 = 32'h766a0abb;

      k256 = 32'h81c2c92e;

      k256 = 32'h92722c85;

      k256 = 32'ha2bfe8a1;

      k256 = 32'ha81a664b;

      k256 = 32'hc24b8b70;

      k256 = 32'hc76c51a3;

      k256 = 32'hd192e819;

      k256 = 32'hd6990624;

      k256 = 32'hf40e3585;

      k256 = 32'h106aa070;

      k256 = 32'h19a4c116;

      k256 = 32'h1e376c08;

      k256 = 32'h2748774c;

      k256 = 32'h34b0bcb5;

      k256 = 32'h391c0cb3;

      k256 = 32'h4ed8aa4a;

      k256 = 32'h5b9cca4f;

      k256 = 32'h682e6ff3;

      k256 = 32'h748f82ee;

      k256 = 32'h78a5636f;

      k256 = 32'h84c87814;

      k256 = 32'h8cc70208;

      k256 = 32'h90befffa;

      k256 = 32'ha4506ceb;

      k256 = 32'hbef9a3f7;

      k256 = 32'hc67178f2;

      hh = 32'h6a09e667;

      hh = 32'hbb67ae85;

      hh = 32'h3c6ef372;

      hh = 32'ha54ff53a;

      hh = 32'h510e527f;

      hh = 32'h9b05688c;

      hh = 32'h1f83d9ab;

      hh = 32'h5be0cd19;

    join

   

    reg a;

    reg b;

    reg c;

    reg d;

    reg e;

    reg f;

    reg g;

    reg h;

    always @(w)

    begin

      genvar i, s0, s1, maj, t1, t2, ch;

      generate for(i = 0; i < 16 ; i = i + 1)

            fork

                ww <= w;

            join

      endgenerate

      

      generate for(i = 16; i < 63 ; i = i + 1)

            fork

                //s0 = rightrotate_32bit(ww , 7) ^ rightrotate_32bit(ww , 18) ^ (ww >> 3);

                //s1 = rightrotate_32bit(ww , 17) ^ rightrotate_32bit(ww , 19) ^ (ww >> 10);

                //ww = ww + s0 + ww + s1;

                ww = ww + rightrotate_32bit(ww , 7) ^ rightrotate_32bit(ww , 18) ^ (ww >> 3) + ww + rightrotate_32bit(ww , 17) ^ rightrotate_32bit(ww , 19) ^ (ww >> 10);

            join

      endgenerate

   

      fork

            a = hh

            b = hh

            c = hh

            d = hh

            e = hh

            f = hh

            g = hh

            h = hh

      join

      

      generate for(i = 0; i < 63 ; i = i + 1)

            begin

                fork

                  begin

                        s0 = rightrotate_32bit(a , 2) ^ rightrotate_32bit(a , 13) ^ rightrotate_32bit(a , 22)

                        maj = (a & b) ^ (a & c) ^ (b & c)

                        t2 = s0 + maj

                  end

                  begin

                        s1 = rightrotate_32bit(e , 6) ^ rightrotate_32bit(e , 11) ^ rightrotate_32bit(e , 25)

                        ch = (e & f) ^ ((~ e) & g)

                        t1 = h + s1 + ch + k + w

                  end

                join

                fork

                  h = g

                  g = f

                  f = e

                  e = d + t1

                  d = c

                  c = b

                  b = a

                  a = t1 + t2

                join

            end

      endgenerate


      fork

            hh = hh + a

            hh = hh + b

            hh = hh + c

            hh = hh + d

            hh = hh + e

            hh = hh + f

            hh = hh + g

            hh = hh + h

      join

    end

endmodule

function rightrotate_32bit(input data, input n);

begin

    rightrotate_32bit = (data[(31 - n):0] << (32 - n)) | ( data >> n);

end

endfunction
页: [1]
查看完整版本: [求助]verilog语法问题!!!!!!关于sha256计算~~~~~~~~~~~~~~~~