请教:RAM地址定制中2**ADDR_WIDTH-1什么意思啊
时间:10-02
整理:3721RD
点击:
以下是 Quartus II 中自带的一个定制ram的Template
不明白其中的2**ADDR_WIDTH-1是为什么 特别是其中的**是什么意思?
大虾们赐教下啊!
// Quartus II Verilog Template
// True Dual Port RAM with dual clocks
module ram1
#(parameter DATA_WIDTH=8, ADDR_WIDTH=10)
(
input [(DATA_WIDTH-1):0] data_a,
input [(ADDR_WIDTH-1):0] addr_a, addr_b,
input wr_a, rd_b, clk_a, clk_b,
output reg [(DATA_WIDTH-1):0] q_b
);
// Declare the RAM variable
reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];
always @ (posedge clk_a)
begin
// Port A
if (wr_a)
begin
ram[addr_a] <= data_a;
end
else ;
end
always @ (posedge clk_b)
begin
// Port B
if (rd_b)
begin
q_b <= ram[addr_b];
end
else ;
end
endmodule
不明白其中的2**ADDR_WIDTH-1是为什么 特别是其中的**是什么意思?
大虾们赐教下啊!
// Quartus II Verilog Template
// True Dual Port RAM with dual clocks
module ram1
#(parameter DATA_WIDTH=8, ADDR_WIDTH=10)
(
input [(DATA_WIDTH-1):0] data_a,
input [(ADDR_WIDTH-1):0] addr_a, addr_b,
input wr_a, rd_b, clk_a, clk_b,
output reg [(DATA_WIDTH-1):0] q_b
);
// Declare the RAM variable
reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];
always @ (posedge clk_a)
begin
// Port A
if (wr_a)
begin
ram[addr_a] <= data_a;
end
else ;
end
always @ (posedge clk_b)
begin
// Port B
if (rd_b)
begin
q_b <= ram[addr_b];
end
else ;
end
endmodule
2的次方
2的ADDR_WIDTH-1次幂,在这就表示RAM的可寻址空间
11111111111111
2的ADDR_WIDTH次幂-1
2的幂
谢谢 茅塞顿开 呵呵!
2的幂指数
学学!
就是2的ADDR_WIDTH-1次幂,
因为地址宽度直接决定了ram的深度
