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],是什么意思?
关键看懂这句 reg [7:0] ram[63:0];
这是verilog语言里面描述数组的概念。reg [7:0] 定义了存储器中每个存储单元的大小,即ram是一个8位的寄存器。ram后面的[63:0]定义了有64个这样的寄存器,可以理解为地址。参考夏老师的书memory型的介绍。
这样就可以理解上面的代码了,输入了一个地址addr,输出了这个地址的数据assign q = ram[addr_reg];
ram的位宽为8位,addr_reg其实就是地址值,ram有64个8位,ram[addr_reg]对应的地址为addr_reg的ram值
学习了
http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!