OpenCores
URL https://opencores.org/ocsvn/ag_6502/ag_6502/trunk

Subversion Repositories ag_6502

[/] [ag_6502/] [trunk/] [agat7/] [ag_ram.v] - Blame information for rev 9

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 olegodints
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company:  BMSTU
4
// Engineer:    Odintsov Oleg
5
// 
6
// Create Date:    11:15:41 02/24/2012 
7
// Design Name: 
8
// Module Name:     ag_ram 
9
// Project Name:    Agat Hardware Project
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
 
22
// Enable the following define to use synchronous memory instead of
23
//              asynchronous (which has been used in real Agats).
24
// The use of the synchronous memory will improve hardware design on FPGA
25
`define AG_RAM_SYNCHRONOUS
26
 
27
 
28
`ifdef AG_RAM_SYNCHRONOUS
29
 
30
module RAM16Kx1(input CLK1, input[13:0] AB1, input CS1, input READ,
31
                                         output DO1, input DI1,
32
                                    input CLK2, input[13:0] AB2, input CS2, output DO2);
33
 
34
        wire DO1x, DO2x;
35
        assign DO1 = CS1? DO1x: 1'bZ;
36
        assign DO2 = CS2? DO2x: 1'bZ;
37
   // RAMB16_S1_S1: 16k x 1 Dual-Port RAM
38
   //               Spartan-3E
39
   // Xilinx HDL Language Template, version 13.3
40
 
41
   RAMB16_S1_S1 #(
42
      .INIT_A(1'b0),  // Value of output RAM registers on Port A at startup
43
      .INIT_B(1'b0),  // Value of output RAM registers on Port B at startup
44
      .SRVAL_A(1'b0), // Port A output value upon SSR assertion
45
      .SRVAL_B(1'b0), // Port B output value upon SSR assertion
46
      .WRITE_MODE_A("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE
47
      .WRITE_MODE_B("WRITE_FIRST"), // WRITE_FIRST, READ_FIRST or NO_CHANGE
48
      .SIM_COLLISION_CHECK("ALL"),  // "NONE", "WARNING_ONLY", "GENERATE_X_ONLY", "ALL" 
49
 
50
      // The following INIT_xx declarations specify the initial contents of the RAM
51
      // Address 0 to 4095
52
      .INIT_00(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
53
      .INIT_01(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
54
      .INIT_02(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
55
      .INIT_03(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
56
      .INIT_04(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
57
      .INIT_05(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
58
      .INIT_06(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
59
      .INIT_07(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
60
      .INIT_08(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
61
      .INIT_09(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
62
      .INIT_0A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
63
      .INIT_0B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
64
      .INIT_0C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
65
      .INIT_0D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
66
      .INIT_0E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
67
      .INIT_0F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
68
      // Address 4096 to 8191
69
      .INIT_10(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
70
      .INIT_11(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
71
      .INIT_12(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
72
      .INIT_13(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
73
      .INIT_14(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
74
      .INIT_15(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
75
      .INIT_16(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
76
      .INIT_17(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
77
      .INIT_18(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
78
      .INIT_19(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
79
      .INIT_1A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
80
      .INIT_1B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
81
      .INIT_1C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
82
      .INIT_1D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
83
      .INIT_1E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
84
      .INIT_1F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
85
      // Address 8192 to 12287
86
      .INIT_20(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
87
      .INIT_21(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
88
      .INIT_22(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
89
      .INIT_23(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
90
      .INIT_24(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
91
      .INIT_25(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
92
      .INIT_26(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
93
      .INIT_27(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
94
      .INIT_28(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
95
      .INIT_29(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
96
      .INIT_2A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
97
      .INIT_2B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
98
      .INIT_2C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
99
      .INIT_2D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
100
      .INIT_2E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
101
      .INIT_2F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
102
      // Address 12288 to 16383
103
      .INIT_30(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
104
      .INIT_31(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
105
      .INIT_32(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
106
      .INIT_33(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
107
      .INIT_34(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
108
      .INIT_35(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
109
      .INIT_36(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
110
      .INIT_37(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
111
      .INIT_38(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
112
      .INIT_39(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
113
      .INIT_3A(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
114
      .INIT_3B(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
115
      .INIT_3C(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
116
      .INIT_3D(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
117
      .INIT_3E(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC),
118
      .INIT_3F(256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)
119
   ) RAMB16_S1_S1_inst (
120
      .DOA(DO1x),     // Port A 1-bit Data Output
121
      .DOB(DO2x),     // Port B 1-bit Data Output
122
      .ADDRA(AB1),    // Port A 14-bit Address Input
123
      .ADDRB(AB2),    // Port B 14-bit Address Input
124
      .CLKA(CLK1),    // Port A Clock
125
      .CLKB(CLK2),    // Port B Clock
126
      .DIA(DI1),      // Port A 1-bit Data Input
127
      .DIB(1'bZ),     // Port B 1-bit Data Input
128
      .ENA(CS1),      // Port A RAM Enable Input
129
      .ENB(CS2),      // Port B RAM Enable Input
130
      .SSRA(1'b0),    // Port A Synchronous Set/Reset Input
131
      .SSRB(1'b0),    // Port B Synchronous Set/Reset Input
132
      .WEA(~READ),    // Port A Write Enable Input
133
      .WEB(1'b0)      // Port B Write Enable Input
134
   );
135
endmodule
136
 
137
 
138
`else
139
 
140
module RAM1Kx1(input CLK1, input[9:0] AB1, input CS1, input READ,
141
                                         output DO1, input DI1,
142
                                    input CLK2, input[9:0] AB2, input CS2, output DO2);
143
        parameter FILL = 256'h33333333333333333333333333333333CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;
144
        reg mem[0:'h3FF];
145
        integer i;
146
 
147
        initial
148
                for (i = 0; i < 'h400; i = i + 1)
149
                        mem[i] = (FILL&(256'b01<<(i&'hFF)))?1'b1:1'b0;
150
 
151
        assign DO1 = (CS1 && READ)? mem[AB1]: 1'bZ;
152
        assign DO2 = CS2? mem[AB2]: 1'bZ;
153
        always @(posedge CLK1) if (CS1 && !READ) mem[AB1] <= DI1;
154
endmodule
155
 
156
 
157
 
158
module RAM16Kx1(input CLK1, input[13:0] AB1, input CS1, input READ,
159
                                         output DO1, input DI1,
160
                                    input CLK2, input[13:0] AB2, input CS2, output DO2);
161
        wire[3:0] SEL1 = AB1[13:10];
162
        wire[3:0] SEL2 = AB2[13:10];
163
 
164
        RAM1Kx1 ram0(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h0), READ, DO1, DI1,
165
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h0), DO2);
166
        RAM1Kx1 ram1(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h1), READ, DO1, DI1,
167
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h1), DO2);
168
        RAM1Kx1 ram2(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h2), READ, DO1, DI1,
169
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h2), DO2);
170
        RAM1Kx1 ram3(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h3), READ, DO1, DI1,
171
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h3), DO2);
172
        RAM1Kx1 ram4(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h4), READ, DO1, DI1,
173
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h4), DO2);
174
        RAM1Kx1 ram5(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h5), READ, DO1, DI1,
175
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h5), DO2);
176
        RAM1Kx1 ram6(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h6), READ, DO1, DI1,
177
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h6), DO2);
178
        RAM1Kx1 ram7(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h7), READ, DO1, DI1,
179
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h7), DO2);
180
        RAM1Kx1 ram8(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h8), READ, DO1, DI1,
181
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h8), DO2);
182
        RAM1Kx1 ram9(CLK1, AB1[9:0], CS1 && (SEL1 == 4'h9), READ, DO1, DI1,
183
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'h9), DO2);
184
        RAM1Kx1 ramA(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hA), READ, DO1, DI1,
185
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'hA), DO2);
186
        RAM1Kx1 ramB(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hB), READ, DO1, DI1,
187
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'hB), DO2);
188
        RAM1Kx1 ramC(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hC), READ, DO1, DI1,
189
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'hC), DO2);
190
        RAM1Kx1 ramD(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hD), READ, DO1, DI1,
191
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'hD), DO2);
192
        RAM1Kx1 ramE(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hE), READ, DO1, DI1,
193
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'hE), DO2);
194
        RAM1Kx1 ramF(CLK1, AB1[9:0], CS1 && (SEL1 == 4'hF), READ, DO1, DI1,
195
                                        CLK2, AB2[9:0],  CS2 && (SEL2 == 4'hF), DO2);
196
endmodule
197
 
198
`endif // synchronous
199
 
200
 
201
/*
202
        Data bus for video controller:
203
        A0=0, DO2:               A0=1, DO2:
204
        15 14 13 12 11 10 09 08  07 06 05 04 03 02 01 00
205
        Data bus for processor:
206
        A0=0, DO1/DI1:           A0=1, DO1/DI1:
207
        07 06 05 04 03 02 01 00  07 06 05 04 03 02 01 00
208
*/
209
module RAM32Kx8x16(input CLK1, input[14:0] AB1, input CS1,
210
                                         input READ, output[7:0] DO1, input[7:0] DI1,
211
                                    input CLK2, input[13:0] AB2, input CS2, output[15:0] DO2);
212
        wire[1:0] CSM = {(~AB1[0]) & CS1, AB1[0] & CS1}; // CS for modules
213
        wire[13:0] AB1x = AB1[14:1];
214
        RAM16Kx1 ram0(CLK1, AB1x, CSM[0], READ, DO1[0], DI1[0], CLK2, AB2, CS2, DO2[0]);
215
        RAM16Kx1 ram1(CLK1, AB1x, CSM[0], READ, DO1[1], DI1[1], CLK2, AB2, CS2, DO2[1]);
216
        RAM16Kx1 ram2(CLK1, AB1x, CSM[0], READ, DO1[2], DI1[2], CLK2, AB2, CS2, DO2[2]);
217
        RAM16Kx1 ram3(CLK1, AB1x, CSM[0], READ, DO1[3], DI1[3], CLK2, AB2, CS2, DO2[3]);
218
        RAM16Kx1 ram4(CLK1, AB1x, CSM[0], READ, DO1[4], DI1[4], CLK2, AB2, CS2, DO2[4]);
219
        RAM16Kx1 ram5(CLK1, AB1x, CSM[0], READ, DO1[5], DI1[5], CLK2, AB2, CS2, DO2[5]);
220
        RAM16Kx1 ram6(CLK1, AB1x, CSM[0], READ, DO1[6], DI1[6], CLK2, AB2, CS2, DO2[6]);
221
        RAM16Kx1 ram7(CLK1, AB1x, CSM[0], READ, DO1[7], DI1[7], CLK2, AB2, CS2, DO2[7]);
222
 
223
        RAM16Kx1 ram8(CLK1, AB1x, CSM[1], READ, DO1[0], DI1[0], CLK2, AB2, CS2, DO2[8]);
224
        RAM16Kx1 ram9(CLK1, AB1x, CSM[1], READ, DO1[1], DI1[1], CLK2, AB2, CS2, DO2[9]);
225
        RAM16Kx1 ramA(CLK1, AB1x, CSM[1], READ, DO1[2], DI1[2], CLK2, AB2, CS2, DO2[10]);
226
        RAM16Kx1 ramB(CLK1, AB1x, CSM[1], READ, DO1[3], DI1[3], CLK2, AB2, CS2, DO2[11]);
227
        RAM16Kx1 ramC(CLK1, AB1x, CSM[1], READ, DO1[4], DI1[4], CLK2, AB2, CS2, DO2[12]);
228
        RAM16Kx1 ramD(CLK1, AB1x, CSM[1], READ, DO1[5], DI1[5], CLK2, AB2, CS2, DO2[13]);
229
        RAM16Kx1 ramE(CLK1, AB1x, CSM[1], READ, DO1[6], DI1[6], CLK2, AB2, CS2, DO2[14]);
230
        RAM16Kx1 ramF(CLK1, AB1x, CSM[1], READ, DO1[7], DI1[7], CLK2, AB2, CS2, DO2[15]);
231
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.