我有一個高速緩存內存模塊,我希望字可尋址但具有字節寫入使能信號。For循環始終阻止
always @ (posedge clk) begin
//stuff...
if(write) begin
//Word accessible only
//memData[lastInIndex][lastInOffset] <= lastWriteData;
//Supporting byte accessible
if(lastWrEn[0])
memData[lastInIndex][lastInOffset][7:0] <= lastWriteData[7:0];
if(lastWrEn[1])
memData[lastInIndex][lastInOffset][15:8] <= lastWriteData[15:8];
if(lastWrEn[2])
memData[lastInIndex][lastInOffset][23:16] <= lastWriteData[23:16];
if(lastWrEn[3])
memData[lastInIndex][lastInOffset][31:24] <= lastWriteData[31:24];
end
//more stuff...
end
如果我正在寫一個字到內存中,我可以指定哪些字節應該被忽略,哪些字節應該被寫入每個字中。我測試了這個代碼,它模擬得很好。我想參數化一個字中有多少個字節(在64位的情況下,每個字現在有8個字節)。我不希望複製和粘貼更多幾乎相同的行,而是希望有一些for循環來實例化我的邏輯。
always @ (posedge clk) begin
//stuff...
if(write) begin
//Word accessible only
//memData[lastInIndex][lastInOffset] <= lastWriteData;
//Supporting byte accessible
begin : BYTE_SELECTION_GENERATE
integer i;
for(i=0; i<bytesPerWord; i=i+1)
if(lastWrEn[i])
memData[lastInIndex][lastInOffset][i*8+7:i*8] <= lastWriteData[i*8+7:i*8];
end
end
//more stuff...
end
我有一個名爲wordSize
參數,用於指定每個字有多少位含有(通常爲32或64)。還有另一個參數是parameter bytesPerWord = wordSize/8
。當我嘗試編譯這個版本時,我收到一個錯誤,說i is not a constant
。我也嘗試過genvar
和generate
,但是這些都是不允許的。有沒有一種方法可以根據bytesPerWord
參數生成我想要的硬件,或者我將不得不依賴一串醜陋的`ifdef
語句?
現在*有*是一個模糊的語法,沒有記錄在我讀過的任何教程中! lol tyvm – Suedocode
這在技術上是Verilog2001的一個特性,所以它可能不是很老的教程的一部分。 – Tim