所以我使用了生成語句在我一直在處理的測試平臺中創建一些振盪器。SystemVerilog將值分配給生成的塊
我也有一個稱爲OSC_PER的實數陣列,其中陣列中的每個元素都是振盪器的ns週期。
我一直在試圖讓我的測試平臺工作,以便我給它一個參數(要測試的設備數量),並在我的測試臺和模擬中生成語句,實例化模塊並將所有東西連接起來。到目前爲止,這一切都進展順利,但我認爲我已經碰到了將振動週期分配給振盪器的問題。
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]));
end
endgenerate
因此,這裏是如何我試圖分配值:
foreach(OSC_PER[i])
generate_my_oscillators[i].osc_c_osc.per = OSC_PER[i];
這給了我NOTPAR錯誤;我想這是非法的嘗試迭代genvar語句之外的實例編號。好吧,也許我可以蠻力,只是手動奠定了這一切:
generate_my_oscillators[1].osc_c_osc.per = OSC_PER[1]
if(number_devices >= 2)
generate_my_oscillators[2].osc_c_osc.per = OSC_PER[2]
if(number_devices >= 3)
generate_my_oscillators[3].osc_c_osc.per = OSC_PER[3]
.
.
.
但是,如果我有= 2,然後在第三個條件,我得到CUVFGS(無效的換生成指數),其次是number_devices CUVUNF(未能查找第三個設備的組件名稱)。
如果我有想要分配給正在生成的振盪器的每個實例的值,我應該怎麼做呢?在這一點上我有點難過。也許我可以讓它在generate-for循環中分配?
編輯:我已經嘗試了一些更多的東西:
如果我動過OSC_PER的到我的測試平臺的定義,並試圖分配週期值在生成的語句是這樣,我得到花費「期待關鍵字 '端'「:
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]));
.per = OSC_PER[i];
end
endgenerate
好吧,我嘗試這樣做:
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]));
osc_c_osc.per = OSC_PER[i];
end
endgenerate
...我得到EXPLA:期待左括號。
期間在每個OSC內部信號,所以我不能把它作爲這樣的:
generate
for(i=1; i<=num_duts; i++)
begin: generate_my_oscillators
osc osc_c_osc(.en(osc_en[i]), .out(osc_c[i]), .per(OSC_PER[i]);
end
endgenerate
如果我這樣做,我得到CUVPOM:「每個」端口名稱無效或有多個連接。
現在我真的沒有想法。有什麼建議麼?
'per'是'parameter','reg'還是'wire'?每個「 – Greg
」是一個「真實」 –