关于RAM地址位宽和数据位宽的问题

刚开始接触RAM的设计,对输入输出数据、地址及位宽的概念与关系的理解有点混乱
part 1
从书中看到Verilog定义一个存储器的语法格式为 reg [ 47 : 0 ] mem [ 0 : 255 ];
问题1:[ 47 : 0 ] 是不是可以理解为每一个地址可以存储一个位宽为48bits的数据?
问题2:[ 0:255 ] 是不是可以理解为一共有256个地址可以用来存储数据?
问题3:请问图片里的描述正确吗?

img


问题4:地址本身也要用一组二进制数来表示,那表示地址本身的二进制数的位宽该如何表示呢?
问题5:地址位宽和数据位宽之间有关联吗?如果二者有关联的话,在设计电路的时候应该注意些什么?

reg [ 47 : 0 ] mem [ 0 : 255 ];
问题1:[ 47 : 0 ] 是不是可以理解为每一个地址可以存储一个位宽为48bits的数据? 回答正确
问题2:[ 0:255 ] 是不是可以理解为一共有256个地址可以用来存储数据? 回答正确
问题3:请问图片里的描述正确吗? 图片描述正确

问题4:地址本身也要用一组二进制数来表示,那表示地址本身的二进制数的位宽该如何表示呢?
reg [ 47 : 0 ] mem [ 0 : 255 ]; //比如这个,地址深度是 256,地址位宽可以是 8
reg [7:0] mem_addr;
reg [47:0] mem_dat;
assign mem_dat = mem[mem_addr];

reg [ 21 : 0 ] mem [ 0 : 99 ]; //比如这个,地址深度是 100,地址位宽可以是 7 ,数据宽度是 22
reg [6:0] mem_addr;
reg [21:0] mem_dat;
assign mem_dat = mem[mem_addr];

问题5:地址位宽和数据位宽之间有关联吗?如果二者有关联的话,在设计电路的时候应该注意些什么?
没啥关系。(大多数用 2 的指数次方来描述数据位宽和地址位宽,用别的数也不奇怪)

大概意思就是:你定义了256个48bit位宽的寄存器,称为一个寄存器组,指定地址需要另外定义一个寄存器,数值大小0-255,那么就需要8bit位宽,地址位宽和数据位宽没有任何关系,或者说有点非直接关系,如果你位宽大了,自然地址就小了(假设容量一定),那么地址位宽就会相应变小。