module single_port_ram
(
input [7:0] data,
input [5:0] addr,
input we, clk,
output [7:0] q
);
// Declare the RAM variable
reg [7:0] ram[63:0];
// Variable to hold the registered read address
reg [5:0] addr_reg;
always @ (posedge clk)
begin
// Write
if (we)
ram[addr] <= data;
addr_reg <= addr;
end
assign q = ram[addr_reg];
endmodule
这段代码中的ram[addr_reg],是什么意思?
此帖出自
小平头技术问答
这是verilog语言里面描述数组的概念。reg [7:0] 定义了存储器中每个存储单元的大小,即ram是一个8位的寄存器。ram后面的[63:0]定义了有64个这样的寄存器,可以理解为地址。参考夏老师的书memory型的介绍。
这样就可以理解上面的代码了,输入了一个地址addr,输出了这个地址的数据assign q = ram[addr_reg];
不错,学习了!
一周热门 更多>