2011-08-04 115 views
1

我正試圖在Verilog中實現FatICA算法。我寫了整個代碼,直到模擬顯示沒有錯誤,但是當我嘗試合成代碼時,它給出了一個錯誤,指出「」;「期待代替」。「」Verilog中的綜合錯誤

我使用四個浮點模塊進行運算使用for循環calculations.Following之間的,而我也產生總和的1000個實例,開方運算...等是代碼生成

genvar s; 

generate 
    for(s=1;s<=4000;s=(s+1)) 

    begin:cov_mul_ins 
      Float32Mul cov_mul (.CLK(clk), 
         .nRST(1'b1), 
         .leftArg(dummy_14), 
         .rightArg(dummy_15), 
         .loadArgs(1'b1) 
         ); 
    end 
endgenerate 

現在我訪問使用點運算符

的單個實例
for(d=1;d<=2;d=(d+1)) 

begin 
    for(e=1;e<=2;e=(e+1)) 
    begin 
     for(c=1;c<=1000;c=(c+1)) 
      begin 
     if((d==1)&&(e==1)) 
      begin 
      dummy_14=centered_data_copy[d][c]; 
      dummy_15=Parent.centered_data_float_trans[c][e]; 

     #10 ***cov_mul_ins[c].cov_mul***(.CLK(clk), 
          .nRST(1'b1), 
          .leftArg(dummy_14), 
          .rightArg(dummy_15), 
          .loadArgs(1'b1), 
          .product(cov_temp[c][1]) 
          ); 

我將不勝感激如果有人可以指出我正在犯的錯誤。謝謝!

+0

@osgx我認爲在生成語句中沒有錯誤,但我不確定我是否以正確的方式訪問實例化的模塊。我試圖在網上搜索它,但沒有發現任何東西。然後,在samir palnitkar的書中有一個例子,它有類似的數組實例,所以我遵循這個例子。雖然模擬它沒有顯示任何錯誤,但在綜合它給出和錯誤。 – optimus

回答

2

幾件事情需要注意:

  • 出模塊的引用不能合成。這意味着如果你希望代碼是可合成的,你不能「偷看」實例化的模塊來查看網絡或調用函數。儘管如此,它對於測試平臺來說很好。
  • 你嘗試函數調用上有一個延遲,這將被忽略,即#10 cov_mul_ins[c].cov_mul (...);

我可以看到在softwarey你的思維讓看跌,一切-IN-A-類和呼叫 - 方法的方式。這對於測試平臺來說是完美的,但綜合會抱怨,正如你所看到的。當談到硬件時,你需要考慮硬件 - 問問你自己需要構建哪些模塊才能運行算法。例如,如果您的算法在每個輸入樣本上需要30次乘法,那麼您需要30個乘法器實例或一個乘法器,並通過它對30個操作進行排序。或者15個乘法器,每個採樣週期執行2次乘法,或者10個乘法器執行3次等...

+0

感謝您的回覆。我認爲你所建議的是比我更好的方法。 – optimus

+2

你有沒有你想要構建的電路框圖?如果不是,通常繪製一個是個好主意。如果它是一個巨大的數據路徑,則不必繪製每個實例。粗略的框圖還將幫助您查看哪些塊被重複,並給你一些代碼。 – Marty

+1

另外,您需要在實例化它們時連接乘法器的輸出。 – Marty

0

嘗試刪除「#10」,因爲我認爲它不可合成。