1 // -----------------------------------------------------------------------
3 // Copyright 2004 Tommy Thorn - All Rights Reserved
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, Inc., 53 Temple Place Ste 330,
8 // Bostom MA 02111-1307, USA; either version 2 of the License, or
9 // (at your option) any later version; incorporated herein by reference.
11 // -----------------------------------------------------------------------
15 module datamem(input wire clock
,
16 input wire [ 7:0] rdaddress
,
18 input wire [ 7:0] wraddress
,
19 input wire [ 7:0] byteena_a
,
21 input wire [63:0] data
);
23 reg [ 7:0] addr_delayed
;
24 reg [ 7:0] ram0
[(1<<8) - 1:0],
34 {ram7
[addr_delayed
],ram6
[addr_delayed
],ram5
[addr_delayed
],ram4
[addr_delayed
],
35 ram3
[addr_delayed
],ram2
[addr_delayed
],ram1
[addr_delayed
],ram0
[addr_delayed
]};
38 always @(posedge clock
) begin
39 addr_delayed
<= rdaddress
;
41 if (byteena_a
[7]) ram7
[wraddress
] <= data
[63:56];
42 if (byteena_a
[6]) ram6
[wraddress
] <= data
[55:48];
43 if (byteena_a
[5]) ram5
[wraddress
] <= data
[47:40];
44 if (byteena_a
[4]) ram4
[wraddress
] <= data
[39:32];
45 if (byteena_a
[3]) ram3
[wraddress
] <= data
[31:24];
46 if (byteena_a
[2]) ram2
[wraddress
] <= data
[23:16];
47 if (byteena_a
[1]) ram1
[wraddress
] <= data
[15: 8];
48 if (byteena_a
[0]) ram0
[wraddress
] <= data
[ 7: 0];
54 for (i
= 0; i
< 256; i
= i
+ 1) begin