我有一个高速缓存内存模块,我想要字可寻址,但有字节的写使能信号。
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
语句?