我想在任務內部使用generate語句。以下代碼給出了編譯錯誤(iverilog)。在verilog任務內部生成語句
task write_mem; //for generic use with 8, 16 and 32 bit mem writes
input [WIDTH-1:0] data;
input [WIDTH-1:0] addr;
output [WIDTH-1:0] MEM;
integer i;
begin
generate
genvar j;
for(j=0; j<i;j++)
MEM[addr+(i-j-1)] = data[(j*8):((j*8) + 8)-1];
endgenerate
end
endtask // write_mem
我也試圖把generate
只是行integer i
後,但仍其產生錯誤。有什麼想法嗎?
編輯:我也試過在begin
和generate
聲明genvar
聲明在上面的代碼。它仍在生產的編譯器錯誤
由於提前,
周杰倫Aurabind
非常感謝@Cliffod維也納:) –
@Cliffod維也納關於j ++的觀點。另外,我從一個「always」塊中調用這個任務。所以阻塞任務應該能夠產生可綜合的代碼,對吧? –
@JayAurabind所使用的分配類型應該反映從何處調用任務。 'always @ *'combinatorial use'='blocking。 '永遠@(posedge clk)'順序使用'<='無阻塞。 – Morgan