13.よくあるエラー

・手続き代入文でreg宣言されていない。
   always やinitial文での左辺値は、reg宣言がされていないといけない。
   wire a;
    always begin
        a=1;=> aは、wire宣言されているのでNGです。
    end

  module test;
   output [3:0] a;
   
   always @(posedge clock) a<=1'b1;// reg [3:0] a;宣言がない。output[3:0] aではregの代わりにはならない。
                           
  endmodule

・begin endを忘れている
    function func;
      input a;
      reg b;
      b=a;
       func=b
;この二つは複文なのでbegin endで囲まないといけない。
    endfunction 

・;を忘れている
      input a  //がない
     input b; 

・'と ‘の違い
     `define a=3'b100 //OK
     'define a=3`b100 //NG both wrong

・マクロの展開は文字列の置き換えであることを忘れている
     `define a_pulas_b(a,b) a+b // (a+b)が正解
      a_pulas_b(a,b)*c => a+b*cになってしまう。 

・継続代入文の左辺にreg
      reg a;
      assign a=1; // reg宣言したaは継続代入文のの左辺におけない。

・ビットVectorでの接続で宣言がない 

       test test1(w1,w2);// たとえば、wire [3:0] w1; wire[3:0] w2;の宣言を忘れている。宣言がないと1ビットの接続とみなされる。     

・連接演算子でビット幅指定がない
   {10,2’b00、b100}
 // 10は暗黙的に32ビットと解釈される場合もあるが、多くのシミュレータではNG、'b100もビット幅の明示指定がないのでNG
・連接演算子の連接
   {3{2'b00} //NG
   {{3{2'b00}}} //とする。

・@( a || b) =>NG
    @(a or b) ,もしくは、@(a,b)とする。

・if 文のネスト if 文のelse
    if (a)
    else if(b)
         if(c)
         else d //このelseはどのif文に帰属?=>最近接のif文に帰属するが、紛らわしいのはbeign  end にすること。

・モジュールインスタンス名を忘れている。
 module test_bench;
   test (w1,w2); // => test test1(w1,w2);
 endmodule