赞
踩
单口 RAM 的写地址与读地址共用一个地址,代码如下,其中
reg [7:0] ram [63:0];
意思是定义了 64 个 8 位宽度的数据。其中定义了 addr_reg,可以保持住读地址,延迟一周期之后将数据送出。
代码如下:
(CSDN代码块不支持Verilog,代码复制到notepad++编辑器中,语言选择Verilog,看得更清楚)
- module top
- (
- input [7:0] data,
- input [5:0] addr,
- input wr,
- input clk,
- output [7:0] q
- );
- reg [7:0] ram[63:0]; //declare ram
- reg [5:0] addr_reg; //addr register
- always @ (posedge clk)
- begin
- if (wr) //write
- ram[addr] <= data;
- addr_reg <= addr;
- end
- assign q = ram[addr_reg]; //read data
- endmodule
激励文件如下:
- `timescale 1 ns/1 ns
- module top_tb() ;
- reg [7:0] data ;
- reg [5:0] addr ;
- reg wr ;
- reg clk ;
- wire [7:0] q ;
- initial
- begin
- data = 0 ;
- addr = 0 ;
- wr = 1 ;
- clk = 0 ;
- end
- always #10 clk = ~clk ;
- always @(posedge clk)
- begin
- data <= data + 1'b1 ;
- addr <= addr + 1'b1 ;
- end
- top t0(.data(data),
- .addr(addr),
- .clk(clk),
- .wr(wr),
- .q(q)) ;
- endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。