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

Subversion Repositories aoocs

[/] [aoocs/] [trunk/] [tests/] [ocs_video_tb.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
`timescale 10ns / 1ns
2
 
3
module ocs_video_tb(
4
);
5
 
6
// inputs
7
reg clk;
8
reg rst_n;
9
 
10
reg [10:0] dma_con;
11
reg na_clx_dat_read;
12
 
13
wire video_request;
14
 
15
ocs_video ocs_video_inst(
16
    .CLK_I(clk),
17
    .reset_n(rst_n),
18
 
19
    // WISHBONE master
20
    .CYC_O(CYC_O),
21
    .STB_O(STB_O),
22
    .WE_O(WE_O),
23
    .ADR_O(ADR_O), /*[31:2]*/
24
    .SEL_O(SEL_O), /*[3:0]*/
25
    .master_DAT_I(master_DAT_I), /*[31:0]*/
26
    .ACK_I(ACK_I),
27
 
28
    // WISHBONE slave
29
    .CYC_I(CYC_I),
30
    .STB_I(STB_I),
31
    .WE_I(WE_I),
32
    .ADR_I(ADR_I), /*[8:2]*/
33
    .SEL_I(SEL_I), /*[3:0]*/
34
    .slave_DAT_I(slave_DAT_I), /*[31:0]*/
35
    .ACK_O(ACK_O),
36
 
37
    // video interface
38
    .video_request(video_request),
39
    .video_address(), /*[31:2]*/
40
    .video_data(), /*[35:0]*/
41
    .video_ready(video_ready),
42
 
43
    // line counter
44
    .line_start(line_start),
45
    .line_pre_start(line_pre_start),
46
    .line_number(line_number), /*[8:0]*/
47
    .column_number(column_number), /*[8:0]*/
48
    .line_dma_active(),
49
 
50
    // Not Aligned address support
51
        // CLXDAT not implemented here
52
    .na_clx_dat_read(na_clx_dat_read),
53
    .na_clx_dat(), /*[14:0]*/
54
        // INTENA implemented here
55
    .na_int_ena_write(),
56
    .na_int_ena(), /*[15:0]*/
57
    .na_int_ena_sel(), /*[1:0]*/
58
        // DMACON implemented here
59
    .na_dma_con_write(),
60
    .na_dma_con(), /*[15:0]*/
61
    .na_dma_con_sel(), /*[1:0]*/
62
 
63
    // dma enable
64
   .dma_con(dma_con) /*[10:0]*/
65
);
66
 
67
initial begin
68
        clk = 1'b0;
69
        forever #2 clk = ~clk;
70
end
71
 
72
reg line_start;
73
reg line_pre_start;
74
reg [8:0] line_number;
75
reg [8:0] column_number;
76
 
77
reg video_ready;
78
 
79
always @(posedge clk or negedge rst_n) begin
80
    if(rst_n == 1'b0)               video_ready <= 1'b0;
81
    else if(video_request == 1'b1)  video_ready <= 1'b1;
82
    else                            video_ready <= 1'b0;
83
end
84
 
85
reg long_frame;
86
reg [10:0] column_counter;
87
always @(posedge clk or negedge rst_n) begin
88
    if(rst_n == 1'b0) begin
89
        line_start <= 1'b0;
90
        line_pre_start <= 1'b0;
91
        line_number <= 9'd0;
92
        column_number <= 9'd0;
93
 
94
        column_counter <= 11'd0;
95
        long_frame <= 1'b0;
96
    end
97
    else begin
98
        if(column_counter == 11'd1919)  column_counter <= 11'd0;
99
        else                            column_counter <= column_counter + 11'd1;
100
 
101
        if(column_counter == 11'd1918)  line_pre_start <= 1'b1;
102
        else                            line_pre_start <= 1'b0;
103
 
104
        if(column_counter == 11'd1919)  line_start <= 1'b1;
105
        else                            line_start <= 1'b0;
106
 
107
        if(column_counter == 11'd1919) begin
108
            column_number <= 9'd0;
109
 
110
            if(line_number == 9'd311 && long_frame == 1'b0) begin
111
                line_number <= 9'd0;
112
                long_frame <= 1'b1;
113
            end
114
            else if(line_number == 9'd312 && long_frame == 1'b1) begin
115
                line_number <= 9'd0;
116
                long_frame <= 1'b0;
117
            end
118
            else line_number <= line_number + 9'd1;
119
        end
120
        else if(column_counter > 11'd600 /*time for 6 bitplain*/) begin
121
            if(column_counter[0] == 1'b1 && column_number < 9'd452 /*226*2*/)  column_number <= column_number + 9'd1;
122
        end
123
    end
124
end
125
 
126
// WISHBONE slave
127
reg CYC_I;
128
reg STB_I;
129
reg WE_I;
130
reg [8:2] ADR_I;
131
reg [3:0] SEL_I;
132
reg [31:0] slave_DAT_I;
133
 
134
wire ACK_O;
135
 
136
reg slave_state;
137
always @(posedge clk or negedge rst_n) begin
138
    if(rst_n == 1'b0) begin
139
        CYC_I <= 1'b0;
140
        STB_I <= 1'b0;
141
        WE_I <= 1'b0;
142
        ADR_I <= 7'b0;
143
        SEL_I <= 4'b0;
144
        slave_DAT_I <= 32'b0;
145
 
146
        slave_state <= 1'b0;
147
    end
148
    else if(slave_state == 1'b0 && ACK_O == 1'b0) begin
149
        CYC_I <= 1'b1;
150
        STB_I <= 1'b1;
151
        WE_I <= 1'b1;
152
        ADR_I <= 7'h60;
153
        SEL_I <= 4'b1100;
154
        slave_DAT_I <= 32'hA9000000;
155
    end
156
    else if(slave_state == 1'b0 && ACK_O == 1'b1) begin
157
        CYC_I <= 1'b0;
158
        STB_I <= 1'b0;
159
        WE_I <= 1'b0;
160
        ADR_I <= 7'b0;
161
        SEL_I <= 4'b0;
162
        slave_DAT_I <= 32'b0;
163
 
164
        slave_state <= 1'b1;
165
    end
166
end
167
 
168
// WISHBONE master
169
wire CYC_O;
170
wire STB_O;
171
wire WE_O;
172
wire [31:2] ADR_O;
173
wire [3:0] SEL_O;
174
 
175
reg [31:0] master_DAT_I;
176
reg ACK_I;
177
 
178
always @(posedge clk or negedge rst_n) begin
179
    if(rst_n == 1'b0) begin
180
        master_DAT_I <= 32'd0;
181
        ACK_I <= 1'b0;
182
    end
183
end
184
 
185
initial begin
186
    $dumpfile("ocs_video.vcd");
187
        $dumpvars(0);
188
        $dumpon();
189
 
190
        rst_n = 1'b0;
191
 
192
        dma_con = 11'b0;
193
    na_clx_dat_read = 1'b0;
194
 
195
        #10
196
        rst_n = 1'b1;
197
 
198
        //full frame: #2500000
199
        #500000
200
 
201
        $dumpoff();
202
 
203
        $finish();
204
end
205
 
206
endmodule
207
 

powered by: WebSVN 2.1.0

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