module data_mem(
input clk,
input [31:0] addr,
input [31:0] wdata,
input wr_en,
input rd_en,
output [31:0] rdata
);
reg [7:0] Mem [255:0];
assign rdata = rd_en ? Mem[addr]:32'bxxxxxxxx;
always @ (posedge clk) begin
if (wr_en)
Mem[addr] <= wdata;
end
endmodule
当wr_en标志为1时,希望将4字节Mem[3:0]分配给wdata进行写入。更准确地说是Mem[addr+3:addr]。我该怎么做?
三个选项:
-
使用级联:
{Mem[addr+3],Mem[addr+2],Mem[addr+1],Mem[addr]} <= wdata;
-
显式范围选择:
begin
Mem[addr+3] <= wdata[31:24];
// other assigments
Mem[addr] <= wdata[7:0];
end
- 或者您可以用+索引向量和数组:这允许
for(i=0;i<4;i=i+1) Mem[addr+i] <= wdata[i*8 +: 8]