Digital_Design_Lab_Manual
29 строк · 647.0 Байт
1module ram_reg #(
2parameter DATA_WIDTH = 8,
3parameter ADDR_WIDTH = 16
4) (
5input clk,
6input we,
7input [DATA_WIDTH-1:0] data_in,
8input [ADDR_WIDTH-1:0] addr_in,
9output [DATA_WIDTH-1:0] data_out,
10output [ADDR_WIDTH-1:0] addr_out
11);
12
13reg [DATA_WIDTH-1:0] ram [0:2**ADDR_WIDTH-1];
14reg [ADDR_WIDTH-1:0] addr_reg;
15reg [DATA_WIDTH-1:0] data_in_reg;
16reg [DATA_WIDTH-1:0] data_out_reg
17
18always @(posedge clk) begin
19if (we)
20ram[addr_in] <= data_in_reg;
21data_in_reg <= data_in;
22data_out_reg <= ram[addr_in];
23addr_reg <= addr_in;
24end
25
26assign data_out = data_out_reg;
27assign addr_out = addr_reg;
28
29endmodule
30