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

Subversion Repositories alternascope

[/] [alternascope/] [tags/] [Development/] [VGA/] [d_VgaRamBuffer.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 smpickett
//==================================================================
2
// File:    d_VgaRamBuffer.v
3
// Version: 0.01
4
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
5
// Copyright Stephen Pickett
6
//   April 28, 2005
7
//------------------------------------------------------------------
8
// Revisions:
9
// Ver 0.01     Apr 28, 2005    Initial Release
10
//
11
//==================================================================
12
module VGADataBuffer(
13
    CLK_50MHZ, MASTER_RST,
14
    VGA_RAM_DATA, VGA_RAM_ADDR, VGA_RAM_OE, VGA_RAM_WE, VGA_RAM_CS,
15
    VGA_RAM_ACCESS_OK,
16
    ADC_RAM_DATA, ADC_RAM_ADDR, ADC_RAM_CLK,
17
    TIME_BASE,
18
    TRIG_ADDR, VGA_WRITE_DONE
19
    );
20
//==================================================================//
21
// VARIABLE DEFINITIONS                                             //
22
//==================================================================//
23
//----------------------//
24
// INPUTS / OUTPUTS     //
25
//----------------------//
26
input CLK_50MHZ;                // System wide clock
27
input MASTER_RST;               // System wide reset
28
 
29
output[15:0] VGA_RAM_DATA;
30
output[17:0] VGA_RAM_ADDR;
31
output       VGA_RAM_OE, VGA_RAM_WE, VGA_RAM_CS;
32
input        VGA_RAM_ACCESS_OK;
33
 
34
input[7:0]   ADC_RAM_DATA;
35
output[10:0] ADC_RAM_ADDR;
36
output       ADC_RAM_CLK;
37
 
38
input[5:0] TIME_BASE;
39
 
40
output      VGA_WRITE_DONE;
41
input[10:0] TRIG_ADDR;
42
 
43
 
44
//----------------------//
45
// WIRES / NODES        //
46
//----------------------//
47
wire CLK_50MHZ;                // System wide clock
48
wire MASTER_RST;               // System wide reset
49
wire[15:0] VGA_RAM_DATA;
50
reg[17:0] VGA_RAM_ADDR;
51
reg VGA_RAM_OE, VGA_RAM_WE, VGA_RAM_CS;
52
wire  VGA_RAM_ACCESS_OK;
53
wire[7:0] ADC_RAM_DATA;
54
reg[10:0] ADC_RAM_ADDR;
55
wire ADC_RAM_CLK;
56
wire[5:0] TIME_BASE;
57
reg VGA_WRITE_DONE;
58
wire[10:0] TRIG_ADDR;
59
 
60
 
61
//----------------------//
62
// REGISTERS            //
63
//----------------------//
64
reg[4:0]  vcnt;
65
reg[9:0]  hcnt;
66
reg[15:0] data_to_ram;
67
reg[8:0]  adc_data_scale;
68
reg[10:0] TRIG_ADDR_buffered;
69
 
70
 
71
//==================================================================//
72
// FUNCTIONAL DEFINITIONS                                           //
73
//==================================================================//
74
always @ (posedge CLK_50MHZ or posedge MASTER_RST) begin
75
    if(MASTER_RST == 1'b1) begin
76
        vcnt <= 5'd0;
77
    end else if(VGA_RAM_ACCESS_OK && hcnt != 10'd640) begin
78
        if(vcnt == 5'd24)
79
            vcnt <= 5'b0;
80
        else
81
            vcnt <= vcnt + 1'b1;
82
    end else begin
83
        vcnt <= 5'd0;
84
    end
85
end
86
 
87
always @ (posedge CLK_50MHZ or posedge MASTER_RST) begin
88
    if(MASTER_RST == 1'b1) begin
89
        hcnt <= 10'd0;
90
    end else if(VGA_RAM_ACCESS_OK) begin
91
        if(hcnt == 10'd640)
92
            hcnt <= hcnt;
93
        else if(vcnt == 5'd24)
94
            hcnt <= hcnt + 1'b1;
95
        else
96
            hcnt <= hcnt;
97
    end else begin
98
        hcnt <= 10'b0;
99
    end
100
end
101
 
102
/* VGA_WRITE_DONE -> BASED ON hcnt */
103
always @ (hcnt) begin
104
    if(hcnt == 10'd640)
105
        VGA_WRITE_DONE = 1'b1;
106
    else
107
        VGA_WRITE_DONE = 1'b0;
108
end
109
 
110
/* TRIG_ADDR modified */
111
always @ (TRIG_ADDR) begin
112
    if(TRIG_ADDR < 10'd320)
113
        TRIG_ADDR_buffered = (10'd2048 - 10'd1 - 10'd320) - TRIG_ADDR;
114
    else
115
        TRIG_ADDR_buffered = TRIG_ADDR;
116
end
117
 
118
 
119
always @ (posedge CLK_50MHZ or posedge MASTER_RST) begin
120
    if(MASTER_RST == 1'b1) begin
121
        ADC_RAM_ADDR <= 11'b0;
122
    end else if(VGA_RAM_ACCESS_OK) begin
123
        if((hcnt == 10'd640) || !(vcnt == 5'd24))
124
            ADC_RAM_ADDR <= ADC_RAM_ADDR;
125
        else
126
            ADC_RAM_ADDR <= ADC_RAM_ADDR + 1'b1;
127
    end else begin
128
        ADC_RAM_ADDR <= TRIG_ADDR_buffered;
129
    end
130
end
131
 
132
always @ (ADC_RAM_DATA) begin
133
    adc_data_scale = ADC_RAM_DATA + (ADC_RAM_DATA>>1);
134
end
135
 
136
 
137
always @ (posedge CLK_50MHZ or posedge MASTER_RST) begin
138
    if(MASTER_RST == 1'b1) begin
139
        VGA_RAM_ADDR <= 18'b0;
140
    end else if(VGA_RAM_ACCESS_OK) begin
141
        if(hcnt == 10'd640)
142
            VGA_RAM_ADDR <= VGA_RAM_ADDR;
143
        else
144
            VGA_RAM_ADDR <= VGA_RAM_ADDR + 1'b1;
145
    end else begin
146
        VGA_RAM_ADDR <= 18'b0;
147
    end
148
end
149
/*
150
always @ (vcnt or VGA_RAM_ACCESS_OK or adc_data_scale) begin
151
    if(VGA_RAM_ACCESS_OK) begin
152
        if(vcnt == adc_data_scale[8:4]) begin
153
            data_to_ram = (adc_data_scale[3:0] == 4'd0)  & 16'h0001 |
154
                          (adc_data_scale[3:0] == 4'd1)  & 16'h0002 |
155
                          (adc_data_scale[3:0] == 4'd2)  & 16'h0004 |
156
                          (adc_data_scale[3:0] == 4'd3)  & 16'h0008 |
157
                          (adc_data_scale[3:0] == 4'd4)  & 16'h0010 |
158
                          (adc_data_scale[3:0] == 4'd5)  & 16'h0020 |
159
                          (adc_data_scale[3:0] == 4'd6)  & 16'h0040 |
160
                          (adc_data_scale[3:0] == 4'd7)  & 16'h0080 |
161
                          (adc_data_scale[3:0] == 4'd8)  & 16'h0100 |
162
                          (adc_data_scale[3:0] == 4'd9)  & 16'h0200 |
163
                          (adc_data_scale[3:0] == 4'd10) & 16'h0400 |
164
                          (adc_data_scale[3:0] == 4'd11) & 16'h0800 |
165
                          (adc_data_scale[3:0] == 4'd12) & 16'h1000 |
166
                          (adc_data_scale[3:0] == 4'd13) & 16'h2000 |
167
                          (adc_data_scale[3:0] == 4'd14) & 16'h4000 |
168
                          (adc_data_scale[3:0] == 4'd15) & 16'h8000;
169
        end else begin
170
            data_to_ram = 16'b0;
171
        end
172
    end else begin
173
        data_to_ram = 16'bZ;
174
    end
175
end
176
*/
177
 
178
always @ (vcnt or VGA_RAM_ACCESS_OK or adc_data_scale) begin
179
    if(VGA_RAM_ACCESS_OK) begin
180
        if(vcnt == adc_data_scale[8:4]) begin
181
            if(adc_data_scale[3:0] == 4'd0)
182
                data_to_ram = 16'h0001;
183
            else if(adc_data_scale[3:0] == 4'd1)
184
                data_to_ram = 16'h0002;
185
            else if(adc_data_scale[3:0] == 4'd2)
186
                data_to_ram = 16'h0004;
187
            else if(adc_data_scale[3:0] == 4'd3)
188
                data_to_ram = 16'h0008;
189
            else if(adc_data_scale[3:0] == 4'd4)
190
                data_to_ram = 16'h0010;
191
            else if(adc_data_scale[3:0] == 4'd5)
192
                data_to_ram = 16'h0020;
193
            else if(adc_data_scale[3:0] == 4'd6)
194
                data_to_ram = 16'h0040;
195
            else if(adc_data_scale[3:0] == 4'd7)
196
                data_to_ram = 16'h0080;
197
            else if(adc_data_scale[3:0] == 4'd8)
198
                data_to_ram = 16'h0100;
199
            else if(adc_data_scale[3:0] == 4'd9)
200
                data_to_ram = 16'h0200;
201
            else if(adc_data_scale[3:0] == 4'd10)
202
                data_to_ram = 16'h0400;
203
            else if(adc_data_scale[3:0] == 4'd11)
204
                data_to_ram = 16'h0800;
205
            else if(adc_data_scale[3:0] == 4'd12)
206
                data_to_ram = 16'h1000;
207
            else if(adc_data_scale[3:0] == 4'd13)
208
                data_to_ram = 16'h2000;
209
            else if(adc_data_scale[3:0] == 4'd14)
210
                data_to_ram = 16'h4000;
211
            else if(adc_data_scale[3:0] == 4'd15)
212
                data_to_ram = 16'h8000;
213
            else
214
                data_to_ram = 16'hFFFF;
215
        end else //end bigIF
216
            data_to_ram = 16'b0;
217
    end else begin
218
        data_to_ram = 16'bZ;
219
    end
220
end
221
 
222
/*
223
always @ (vcnt or VGA_RAM_ACCESS_OK or ADC_RAM_DATA) begin
224
    if(VGA_RAM_ACCESS_OK) begin
225
        if((vcnt[3:0] == ADC_RAM_DATA[7:4]) && vcnt[4] != 1'b1) begin
226
            if(ADC_RAM_DATA[3:0] == 4'd0)
227
                data_to_ram = 16'h0001;
228
            else if(ADC_RAM_DATA[3:0] == 4'd1)
229
                data_to_ram = 16'h0002;
230
            else if(ADC_RAM_DATA[3:0] == 4'd2)
231
                data_to_ram = 16'h0004;
232
            else if(ADC_RAM_DATA[3:0] == 4'd3)
233
                data_to_ram = 16'h0008;
234
            else if(ADC_RAM_DATA[3:0] == 4'd4)
235
                data_to_ram = 16'h0010;
236
            else if(ADC_RAM_DATA[3:0] == 4'd5)
237
                data_to_ram = 16'h0020;
238
            else if(ADC_RAM_DATA[3:0] == 4'd6)
239
                data_to_ram = 16'h0040;
240
            else if(ADC_RAM_DATA[3:0] == 4'd7)
241
                data_to_ram = 16'h0080;
242
            else if(ADC_RAM_DATA[3:0] == 4'd8)
243
                data_to_ram = 16'h0100;
244
            else if(ADC_RAM_DATA[3:0] == 4'd9)
245
                data_to_ram = 16'h0200;
246
            else if(ADC_RAM_DATA[3:0] == 4'd10)
247
                data_to_ram = 16'h0400;
248
            else if(ADC_RAM_DATA[3:0] == 4'd11)
249
                data_to_ram = 16'h0800;
250
            else if(ADC_RAM_DATA[3:0] == 4'd12)
251
                data_to_ram = 16'h1000;
252
            else if(ADC_RAM_DATA[3:0] == 4'd13)
253
                data_to_ram = 16'h2000;
254
            else if(ADC_RAM_DATA[3:0] == 4'd14)
255
                data_to_ram = 16'h4000;
256
            else if(ADC_RAM_DATA[3:0] == 4'd15)
257
                data_to_ram = 16'h8000;
258
            else
259
                data_to_ram = 16'hFFFF;
260
        end else //end bigIF
261
            data_to_ram = 16'b0;
262
    end else begin
263
        data_to_ram = 16'bZ;
264
    end
265
end
266
*/
267
/*
268
always @ (vcnt) begin
269
    if(vcnt == 5'd00 && hcnt <= 10'd319)
270
        data_to_ram = 16'h000F;
271
    else
272
        data_to_ram = 16'b0;
273
end
274
*/
275
 
276
assign ADC_RAM_CLK = CLK_50MHZ;
277
 
278
assign VGA_RAM_DATA = data_to_ram;
279
 
280
always begin
281
    VGA_RAM_OE = 1'b1;
282
    VGA_RAM_WE = 1'b0;
283
    VGA_RAM_CS = 1'b0;
284
end
285
 
286
 
287
 
288
 
289
 
290
 
291
 
292
 
293
 
294
 
295
 
296
 
297
endmodule

powered by: WebSVN 2.1.0

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