一个关于存储器赋值的小问题

目的:我的目的是想将mem的每一个地址所存的数据全部赋值为“0000_0001”。
出现错误

img


修改方法:把“1'b1”改为“8‘d1”就可以了
问题:请问为什么写成“1'b1”会导致mem中只有第一个地址被赋值,而且是255而不是1呢?即赋值符号左右两侧位数不对,但是赋值的时候不是会将右侧的高位自动补0吗?

在 for 中对数组赋值时会有些不一样的变化
for 按赋值的位宽对步长做调整。这只针对for 中赋值的常数
给你贴点代码和对应的图,帮助你对这东西的理解

reg    [3:0]    xx;
reg    [7:0][7:0]    mem_xxx1;
reg    [7:0][7:0]    mem_xxx2;
reg    [7:0][7:0]    mem_xxx3;
reg    [7:0][7:0]    mem_xxx4;
initial
begin
    #1000
    for(xx=0;xx<4;xx=xx+1)
    begin
        mem_xxx1[xx]    <= 1;
        mem_xxx2[xx]    <= 12'b0_1111_1111;
        mem_xxx3[xx]    <= 1'b1;
        mem_xxx4[xx]    <= xx;
    end
end

img

我用modelsim仿真的,就是“00000001”。所以跟仿真器有关,尽量不要这么用,老老实实该怎么赋值怎么赋值。

img