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

Subversion Repositories aoocs

[/] [aoocs/] [trunk/] [tests/] [tb_ocs_floppy.v.old] - 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 tb_ocs_floppy();
4
 
5
reg clk_30;
6
reg reset_n;
7
 
8
reg [31:0] master_DAT_I;
9
reg ACK_I;
10
wire CYC_O;
11
wire STB_O;
12
wire WE_O;
13
wire [31:2] ADR_O;
14
wire [3:0] SEL_O;
15
wire [31:0] master_DAT_O;
16
 
17
reg CYC_I;
18
reg STB_I;
19
reg WE_I;
20
reg [8:2] ADR_I;
21
reg [3:0] SEL_I;
22
reg [31:0] slave_DAT_I;
23
wire ACK_O;
24
 
25
reg na_dskbytr_read;
26
wire [15:0] na_dskbytr;
27
 
28
reg fl_mtr_n;
29
reg [3:0] fl_sel_n;
30
reg fl_side_n;
31
reg fl_dir;
32
reg fl_step_n;
33
 
34
wire floppy_blk_irq;
35
 
36
ocs_floppy ocs_floppy_inst(
37
    .clk_30(clk_30),
38
    .reset_n(reset_n),
39
 
40
    // line counter
41
    .line_start(1'b1),
42
 
43
    // management
44
    .man_floppy_inserted(1'b1),
45
    .man_floppy_sector(32'd600),
46
    .floppy_error(),
47
 
48
    // WISHBONE master
49
    .CYC_O(CYC_O),
50
    .STB_O(STB_O),
51
    .WE_O(WE_O),
52
    .ADR_O(ADR_O),
53
    .SEL_O(SEL_O),
54
    .master_DAT_O(master_DAT_O),
55
    .master_DAT_I(master_DAT_I),
56
    .ACK_I(ACK_I),
57
 
58
    // WISHBONE slave
59
    .CYC_I(CYC_I),
60
    .STB_I(STB_I),
61
    .WE_I(WE_I),
62
    .ADR_I(ADR_I),
63
    .SEL_I(SEL_I),
64
    .slave_DAT_I(slave_DAT_I),
65
    .ACK_O(ACK_O),
66
 
67
    // dma enable
68
    .dma_con(16'hFFFF),
69
    .adk_con(16'hFFFF),
70
 
71
    .floppy_syn_irq(),
72
    .floppy_blk_irq(floppy_blk_irq),
73
 
74
    // Not Aligned address support
75
        // DSKBYTR read not implemented here
76
    .na_dskbytr_read(na_dskbytr_read),
77
    .na_dskbytr(na_dskbytr),
78
 
79
    // floppy CIA interface
80
    .fl_rdy_n(),
81
    .fl_tk0_n(),
82
    .fl_wpro_n(),
83
    .fl_chng_n(),
84
    .fl_index_n(),
85
 
86
    .fl_mtr_n(fl_mtr_n),
87
    .fl_sel_n(fl_sel_n),
88
    .fl_side_n(fl_side_n),
89
    .fl_dir(fl_dir),
90
    .fl_step_n(fl_step_n)
91
);
92
 
93
initial begin
94
    clk_30 = 1'b0;
95
    forever #5 clk_30 = ~clk_30;
96
end
97
 
98
integer i,j0,j1,j2,j3,j4,j5,j6,j7;
99
integer read_complete;
100
reg [511:0] string;
101
reg [31:0] adr;
102
reg [3:0] sel;
103
reg [31:0] val;
104
parameter [31:0]    STDIN = 32'h8000_0000,
105
                    STDOUT = 32'h8000_0001;
106
 
107
initial begin
108
    $dumpfile("tb_ocs_floppy.vcd");
109
    $dumpvars(0);
110
    $dumpon();
111
 
112
    read_complete = 0;
113
 
114
    reset_n = 1'b0;
115
    ACK_I = 1'b0;
116
    #10 reset_n = 1'b1;
117
 
118
    //write register: adr=1, sel=2, val=3
119
    forever begin
120
 
121
        string = 512'd0;
122
        while(string[7:0] != "\n") begin
123
            string = { string[503:0], 8'd0 };
124
            string[7:0] = $fgetc(STDIN);
125
        end
126
$display("got: %s\n", string);
127
        j0 = $sscanf(string, "write register: adr=%h, sel=%h, val=%h", adr, sel, val);
128
        j1 = $sscanf(string, "fl_mtr_n=%h", val);
129
        j2 = $sscanf(string, "fl_sel_n=%h", val);
130
        j3 = $sscanf(string, "fl_side_n=%h", val);
131
        j4 = $sscanf(string, "fl_dir=%h", val);
132
        j5 = $sscanf(string, "fl_step_n=%h", val);
133
        j6 = $sscanf(string, "step=%d", val);
134
        j7 = $sscanf(string, "memory: adr=%h, val=%h", adr, val);
135
 
136
        if(j0 != 3 && j1 != 1 && j2 != 1 && j3 != 1 && j4 != 1 && j5 != 1 && j6 != 1 && j7 != 2) begin
137
            $display("error: read failed: j0=%d, j1=%d, j2=%d, j3=%d, j4=%d, j5=%d, j6=%d, j7=%d", j0,j1,j2,j3,j4,j5,j6,j7);
138
            $finish_and_return(-1);
139
        end
140
 
141
        #10 ;
142
 
143
        if(j1 == 1) fl_mtr_n = val;
144
        if(j2 == 1) fl_sel_n = val;
145
        if(j3 == 1) fl_side_n = val;
146
        if(j4 == 1) fl_dir = val;
147
        if(j5 == 1) fl_step_n = val;
148
        if(j6 == 1) begin
149
            if(val == 0) begin
150
                $dumpflush();
151
                $display("done");
152
                $fflush(STDOUT);
153
                $finish_and_return(val);
154
            end
155
            else begin
156
                for(j6=0; j6
157
                $dumpflush();
158
            end
159
        end
160
 
161
        if(j0 == 3) begin
162
            ADR_I = adr[8:2];
163
            slave_DAT_I = val;
164
            STB_I = 1'b1;
165
            CYC_I = 1'b1;
166
            WE_I = 1'b1;
167
            SEL_I = sel;
168
 
169
            while(ACK_O == 1'b0) #10;
170
            while(ACK_O == 1'b1) #10;
171
 
172
            STB_I = 1'b0;
173
            CYC_I = 1'b0;
174
        end
175
 
176
        if(j7 == 2 && read_complete == 1) begin
177
            if({ADR_O, 2'b0} != adr) begin
178
                $display("read memory address mismatch");
179
                $fflush(STDOUT);
180
                $finish_and_return(-1);
181
            end
182
 
183
            #5
184
            master_DAT_I = val;
185
            ACK_I = 1'b1;
186
 
187
            #10
188
            master_DAT_I = 32'd0;
189
            ACK_I = 1'b0;
190
 
191
            #5 ;
192
            read_complete = 0;
193
        end
194
 
195
        if(CYC_O == 1'b1 && STB_O == 1'b1 && WE_O == 1'b0 && read_complete == 0) begin
196
            $display("read memory: adr=%h", {ADR_O, 2'b0});
197
            $fflush(STDOUT);
198
 
199
            read_complete = 1;
200
        end
201
        else if(CYC_O == 1'b1 && STB_O == 1'b1 && WE_O == 1'b1) begin
202
            $display("write memory: adr=%h, sel=%h, val=%h", {ADR_O, 2'b0}, SEL_O, master_DAT_O);
203
            $fflush(STDOUT);
204
 
205
            #5
206
            ACK_I = 1'b1;
207
 
208
            #10
209
            ACK_I = 1'b0;
210
 
211
            #5 ;
212
        end
213
 
214
    end
215
end
216
 
217
endmodule
218
 

powered by: WebSVN 2.1.0

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