2015-10-29 63 views
-1

我需要通過for循環來訪問模塊實例的端口使用verilg代碼中,我試圖發送輸入模塊實例一再希望每次輸出相應的輸入得到更新,不幸的是,它不會發生,因爲輸入只有在執行退出程序塊後才能通過,請找到下面的代碼並讓我知道可能性,事先要感謝。將值傳遞給通過迴路模塊實例口內始終阻止VERILOG

integer i,j; 
[email protected](g_mtx,gi_mtx) 
begin 
for (i=1;i<3;i=i+1) 
for (j=1;j<3;i=j+1) 
    if(i!=j) 
     begin 
     L_in1=g_mtx[j][j]; 
     L_in2=gi_mtx[i][i]; 
     L_in3=gi_mtx[j][i]; 
     L_in4=g_mtx[j][i]; 
     Lmd[i][j]= L_out ; 
     end 
end 
Lamda_top lmd (L_out,L_in1,L_in2,L_in3,L_in4,clk);//instance 

//here g_mtx,gi_mtx,Lmd are memories. 

回答

0

該解決方案因環境而異。

如果這是一個測試平臺,所有你需要做的就是添加某種形式的延遲的模擬輸入後。看到,因爲你使用的是時鐘的Lamda_top模塊,您可以使用相同的時鐘延遲源,以確保有足夠的時間已經過去了:

always @(g_mtx,gi_mtx) begin 
    for (i=1; i<3; i=i+1) begin 
    for (j=1; j<3; j=j+1) begin 
     if(i!=j) begin 
     L_in1=g_mtx[j][j]; 
     L_in2=gi_mtx[i][i]; 
     L_in3=gi_mtx[j][i]; 
     L_in4=g_mtx[j][i]; 

     repeat ([number of cycles it takes for Lamda_top to finish]) begin 
      @(posedge clk); 
     end 
     @(negedge clk); // Ensure L_out has gotten the value from the function 
     Lmd[i][j] = L_out; 
     end 
    end 
    end 
end 

但是,如果這是不是爲實際的,綜合的代碼,你會需要實現某種FSM來序列化for循環,以便一次只輸入一組L_inX變量。

最終,雙方解決方案涉及確保只有一組L_inX通過每個時鐘通過。不知道更多情況下,很難說如何最好地處理這個問題(也許應該是某種管道的,但那是很多更多的工作來修補所提供的代碼來實現)

+0

其實這是設計規範的一部分(MIMO信道Equilizer )不是一個試驗檯,即使我把等待週期值僅傳遞後循環執行退出Lamda_top,所以纔有了最終的輸入通過,我將嘗試使用FSM,讓你知道的狀態,感謝您的答覆。 – Aevin

相關問題