summaryrefslogtreecommitdiff
path: root/datamem/v0.1/data_memory.v
blob: bf29390b252643f03f85f49c4ac4ac61106e5f62 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
`include "parameters.h"

module data_memory(
    input clk,
    input [15:0]mem_access_addr, //address input
    input [15:0]mem_write_data,  //data to be written
    input mem_write_en,   
    input mem_read,
    output [15:0] mem_read_data  //read data
);

//amount of memory
reg [`col-1:0]memory[`row_d-1:0];
integer f;
wire [2:0]ram_addr=mem_access_addr[2:0];

//load data to memory
initial begin 
    $readmemb("test.data",memory);
    f = $fopen(`filename);
    $monitor(f,"time=%d\n",$time,
        "\tmemory[0] = %b\n", memory[0],   
        "\tmemory[1] = %b\n", memory[1],
        "\tmemory[2] = %b\n", memory[2],
        "\tmemory[3] = %b\n", memory[3],
        "\tmemory[4] = %b\n", memory[4],
        "\tmemory[5] = %b\n", memory[5],
        "\tmemory[6] = %b\n", memory[6],
        "\tmemory[7] = %b\n", memory[7]
    );
    `simulation_time;
    $fclose(f);
end

//if memory write is enable write to memory
always @(posedge clk) begin
    if (mem_write_en)
        memory[ram_addr] <= mem_write_data;
end




//if memory read is enabled then read memory otherwise output zeros
assign mem_read_data = (mem_read==1'b1) ? memory[ram_addr]: 16'd0;


endmodule