OpenCores
URL https://opencores.org/ocsvn/a-z80/a-z80/trunk

Subversion Repositories a-z80

[/] [a-z80/] [trunk/] [cpu/] [registers/] [test_registers.sv] - Blame information for rev 8

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

Line No. Rev Author Line
1 3 gdevic
//==============================================================
2
// Test register control and register file blocks
3
//==============================================================
4
`timescale 100 ns/ 100 ns
5
 
6
module test_registers;
7
 
8
// ----------------- CLOCKS AND RESET -----------------
9
// Define one full T-clock cycle delay
10
`define T #2
11
bit clk = 1;
12
initial repeat (36) #1 clk = ~clk;
13
 
14
logic nreset = 0;
15
 
16
// ----------------- BUSES -----------------
17
// We have 4 Bi-directional buses that can also be 3-stated:
18
 
19
// On the address-side, there are high and low 8-bit buses
20
reg  [7:0] db_lo_as=8'hz;           // Drive it using this bus
21
wire [7:0] db_lo_as_sig;            // Read it using this bus
22
 
23
reg  [7:0] db_hi_as=8'hz;           // Drive it using this bus
24
wire [7:0] db_hi_as_sig;            // Read it using this bus
25
 
26
// On the data-side, there are high and low 8-bit buses
27
reg  [7:0] db_lo_ds=8'hz;           // Drive it using this bus
28
wire [7:0] db_lo_ds_sig;            // Read it using this bus
29
 
30
reg  [7:0] db_hi_ds=8'hz;           // Drive it using this bus
31
wire [7:0] db_hi_ds_sig;            // Read it using this bus
32
 
33
// ----------------- BUS SWITCHES ------------
34
logic ctl_sw_4u_sig=0;              // Bus switch #4 upstream gate
35
logic ctl_sw_4d_sig=0;              // Bus switch #4 downstream gate
36
 
37
logic ctl_reg_in_hi_sig=0;          // Input to the register file high
38
logic ctl_reg_in_lo_sig=0;          // Input to the register file low
39
logic ctl_reg_out_hi_sig=0;         // Output from the register file high
40
logic ctl_reg_out_lo_sig=0;         // Output from the register file low
41
 
42
// ----------------- CONTROL -----------------
43
logic [1:0] ctl_reg_gp_sel_sig=0;   // Selection of a general purpose register
44
logic [1:0] ctl_reg_gp_hilo_sig=0;  // Hi/Lo selector for GP registers
45
logic ctl_reg_gp_we_sig=0;          // Write to a general purpose register
46
logic [1:0] ctl_reg_sys_hilo_sig=0; // Hi/Lo selector for system registers
47
logic ctl_reg_sys_we_lo_sig=0;      // Write to low byte of a system register
48
logic ctl_reg_sys_we_hi_sig=0;      // Write to high byte of a system register
49
logic ctl_reg_sys_we_sig=0;         // Write to system register
50
logic use_ixiy_sig=0;               // Use IX or IY
51
logic use_ix_sig=0;                 // Use IX and not IY
52
 
53
logic ctl_reg_exx_sig=0;            // Exchange register banks
54
logic ctl_reg_ex_af_sig=0;          // Exchange AF banks
55
logic ctl_reg_ex_de_hl_sig=0;       // Exchange HL/DE banks
56
logic ctl_reg_use_sp_sig=0;         // Use SP register
57
logic ctl_reg_sel_pc_sig=0;         // Select PC
58
logic ctl_reg_sel_ir_sig=0;         // Select IR
59
logic ctl_reg_sel_wz_sig=0;         // Select WZ
60
logic ctl_reg_not_pc_sig=0;         // Do not select PC
61
 
62
// ----------------- TEST -------------------
63
`define CHECK(arg) \
64
   assert({db_hi_ds_sig,db_lo_ds_sig}===arg);
65
 
66
initial begin
67
    `T  nreset = 1;
68
 
69
    //------------------------------------------------------------
70
    // Identify each 16-bit system register and check access to it
71
    `T  ctl_sw_4d_sig = 1;          // Use unified bus: downstream
72
        ctl_sw_4u_sig = 0;
73
        ctl_reg_in_hi_sig = 1;
74
        ctl_reg_in_lo_sig = 1;
75
        db_hi_ds = 8'h81;
76
        db_lo_ds = 8'h41;
77
        ctl_reg_sys_hilo_sig = 2'b11;
78
        ctl_reg_sys_we_hi_sig = 1;  // 16-bit access
79
        ctl_reg_sys_we_lo_sig = 1;  // 16-bit access
80
        ctl_reg_sel_wz_sig = 1;     // WZ
81
    `T  db_hi_ds = 8'h82;
82
        db_lo_ds = 8'h42;
83
        ctl_reg_sel_wz_sig = 0;     // WZ off
84
        ctl_reg_sel_pc_sig = 1;     // PC
85
    `T  db_hi_ds = 8'h83;
86
        db_lo_ds = 8'h43;
87
        ctl_reg_sel_pc_sig = 0;     // PC off
88
        ctl_reg_sel_ir_sig = 1;     // IR
89
    `T  db_hi_ds = 'z;
90
        db_lo_ds = 'z;
91
        ctl_reg_sel_ir_sig = 0;     // IR off
92
    // Read back
93
        ctl_sw_4d_sig = 0;
94
        ctl_sw_4u_sig = 0;          // Upstream
95
        ctl_reg_in_hi_sig = 0;
96
        ctl_reg_in_lo_sig = 0;
97
        ctl_reg_out_hi_sig = 1;
98
        ctl_reg_out_lo_sig = 1;
99
        ctl_reg_sys_we_hi_sig = 0;
100
        ctl_reg_sys_we_lo_sig = 0;
101
        ctl_reg_sel_wz_sig = 1;     // WZ
102
    `T `CHECK(16'h8141);
103
        ctl_reg_sel_wz_sig = 0;     // WZ off
104
        ctl_sw_4u_sig = 1;          // Upstream
105
        ctl_reg_sel_pc_sig = 1;     // PC
106
    `T `CHECK(16'h8242);
107
        ctl_reg_sel_pc_sig = 0;     // PC off
108
        ctl_reg_sel_ir_sig = 1;     // IR
109
    `T `CHECK(16'h8343);
110
        ctl_reg_sel_ir_sig = 0;     // IR off
111
        ctl_sw_4d_sig = 0;
112
        ctl_sw_4u_sig = 0;
113
        ctl_reg_sys_hilo_sig = 2'b00;
114
 
115
    //------------------------------------------------------------
116
    // Identify a 16-bit system register and check access to it
117
    `T  ctl_reg_in_hi_sig = 1;
118
        ctl_reg_in_lo_sig = 1;
119
        ctl_reg_out_hi_sig = 0;
120
        ctl_reg_out_lo_sig = 0;
121
        ctl_reg_gp_we_sig = 1;      // Write to a GP register
122
        ctl_reg_gp_hilo_sig = 2'b11;// 16-bit write
123
        db_hi_ds = 8'hAA;
124
        db_lo_ds = 8'h55;
125
        ctl_reg_gp_sel_sig = 2'b00; // AF
126
    `T  db_hi_ds = 8'hAB;
127
        db_lo_ds = 8'h56;
128
        ctl_reg_gp_sel_sig = 2'b01; // BC
129
    `T  db_hi_ds = 8'hAC;
130
        db_lo_ds = 8'h57;
131
        ctl_reg_gp_sel_sig = 2'b10; // DE
132
    `T  db_hi_ds = 8'hAD;
133
        db_lo_ds = 8'h58;
134
        ctl_reg_gp_sel_sig = 2'b11; // HL
135
    `T  db_hi_ds = 'z;
136
        db_lo_ds = 'z;
137
    // Read back
138
        ctl_reg_in_hi_sig = 0;
139
        ctl_reg_in_lo_sig = 0;
140
        ctl_reg_out_hi_sig = 1;
141
        ctl_reg_out_lo_sig = 1;
142
        ctl_reg_gp_we_sig = 0;
143
        ctl_reg_gp_sel_sig = 2'b00; // Check AF
144
    `T `CHECK(16'hAA55);
145
        ctl_reg_gp_sel_sig = 2'b01; // Check BC
146
    `T `CHECK(16'hAB56);
147
        ctl_reg_gp_sel_sig = 2'b10; // Check DE
148
    `T `CHECK(16'hAC57);
149
        ctl_reg_gp_sel_sig = 2'b11; // Check HL
150
    `T `CHECK(16'hAD58);
151
 
152
    `T  $display("End of test");
153
end
154
 
155
// Drive 3-state bidirectional buses with these statements
156
assign db_lo_as_sig = db_lo_as;
157
assign db_hi_as_sig = db_hi_as;
158
 
159
assign db_lo_ds_sig = db_lo_ds;
160
assign db_hi_ds_sig = db_hi_ds;
161
 
162
// Instantiate register control block
163
reg_control reg_control_inst
164
(
165
    .ctl_reg_gp_sel(ctl_reg_gp_sel_sig) ,   // input [1:0] ctl_reg_gp_sel_sig
166
    .ctl_reg_sys_hilo(ctl_reg_sys_hilo_sig),// input [1:0] ctl_reg_sys_hilo_sig
167
    .ctl_reg_exx(ctl_reg_exx_sig) ,         // input  ctl_reg_exx_sig
168
    .ctl_reg_ex_af(ctl_reg_ex_af_sig) ,     // input  ctl_reg_ex_af_sig
169
    .ctl_reg_ex_de_hl(ctl_reg_ex_de_hl_sig),// input  ctl_reg_ex_de_hl_sig
170
    .ctl_reg_use_sp(ctl_reg_use_sp_sig) ,   // input  ctl_reg_use_sp_sig
171
    .ctl_reg_gp_hilo(ctl_reg_gp_hilo_sig) , // input [1:0] ctl_reg_gp_hilo_sig
172
    .nreset(nreset) ,                       // input  nreset
173
    .ctl_reg_sel_pc(ctl_reg_sel_pc_sig) ,   // input  ctl_reg_sel_pc_sig
174
    .ctl_reg_sel_ir(ctl_reg_sel_ir_sig) ,   // input  ctl_reg_sel_ir_sig
175
    .ctl_reg_sel_wz(ctl_reg_sel_wz_sig) ,   // input  ctl_reg_sel_wz_sig
176
    .ctl_reg_gp_we(ctl_reg_gp_we_sig) ,     // input  ctl_reg_gp_we_sig
177
    .ctl_reg_not_pc(ctl_reg_not_pc_sig) ,   // input  ctl_reg_not_pc_sig
178
    .use_ixiy(use_ixiy_sig) ,               // input  use_ixiy_sig
179
    .use_ix(use_ix_sig) ,                   // input  use_ix_sig
180
    .ctl_reg_sys_we_lo(ctl_reg_sys_we_lo_sig),// input  ctl_reg_sys_we_lo_sig
181
    .ctl_reg_sys_we_hi(ctl_reg_sys_we_hi_sig),// input  ctl_reg_sys_we_hi_sig
182
    .ctl_reg_sys_we(ctl_reg_sys_we_sig) ,   // input  ctl_reg_sys_we_sig
183
    .clk(clk) ,                             // input  clk
184 8 gdevic
    .ctl_sw_4d (ctl_sw_4d_sig) ,            // input  ctl_sw_4d
185 3 gdevic
    .reg_sel_bc(reg_sel_bc_sig) ,           // output  reg_sel_bc_sig
186
    .reg_sel_bc2(reg_sel_bc2_sig) ,         // output  reg_sel_bc2_sig
187
    .reg_sel_ix(reg_sel_ix_sig) ,           // output  reg_sel_ix_sig
188
    .reg_sel_iy(reg_sel_iy_sig) ,           // output  reg_sel_iy_sig
189
    .reg_sel_de(reg_sel_de_sig) ,           // output  reg_sel_de_sig
190
    .reg_sel_hl(reg_sel_hl_sig) ,           // output  reg_sel_hl_sig
191
    .reg_sel_de2(reg_sel_de2_sig) ,         // output  reg_sel_de2_sig
192
    .reg_sel_hl2(reg_sel_hl2_sig) ,         // output  reg_sel_hl2_sig
193
    .reg_sel_af(reg_sel_af_sig) ,           // output  reg_sel_af_sig
194
    .reg_sel_af2(reg_sel_af2_sig) ,         // output  reg_sel_af2_sig
195
    .reg_sel_wz(reg_sel_wz_sig) ,           // output  reg_sel_wz_sig
196
    .reg_sel_pc(reg_sel_pc_sig) ,           // output  reg_sel_pc_sig
197
    .reg_sel_ir(reg_sel_ir_sig) ,           // output  reg_sel_ir_sig
198
    .reg_sel_sp(reg_sel_sp_sig) ,           // output  reg_sel_sp_sig
199
    .reg_sel_gp_hi(reg_sel_gp_hi_sig) ,     // output  reg_sel_gp_hi_sig
200
    .reg_sel_gp_lo(reg_sel_gp_lo_sig) ,     // output  reg_sel_gp_lo_sig
201
    .reg_sel_sys_lo(reg_sel_sys_lo_sig) ,   // output  reg_sel_sys_lo_sig
202
    .reg_sel_sys_hi(reg_sel_sys_hi_sig) ,   // output  reg_sel_sys_hi_sig
203
    .reg_gp_we(reg_gp_we_sig) ,             // output  reg_gp_we_sig
204
    .reg_sys_we_lo(reg_sys_we_lo_sig) ,     // output  reg_sys_we_lo_sig
205 8 gdevic
    .reg_sys_we_hi(reg_sys_we_hi_sig) ,     // output  reg_sys_we_hi_sig
206
    .reg_sw_4d_lo (reg_sw_4d_lo_sig) ,      // output  reg_sw_4d_lo_sig
207
    .reg_sw_4d_hi (reg_sw_4d_hi_sig)        // output  reg_sw_4d_hi_sig
208 3 gdevic
);
209
 
210
// Instantiate register file block
211
reg_file reg_file_inst
212
(
213
    .reg_sel_sys_lo(reg_sel_sys_lo_sig) ,   // input  reg_sel_sys_lo_sig
214
    .reg_sel_gp_lo(reg_sel_gp_lo_sig) ,     // input  reg_sel_gp_lo_sig
215
    .reg_sel_sys_hi(reg_sel_sys_hi_sig) ,   // input  reg_sel_sys_hi_sig
216
    .reg_sel_gp_hi(reg_sel_gp_hi_sig) ,     // input  reg_sel_gp_hi_sig
217
    .reg_sel_ir(reg_sel_ir_sig) ,           // input  reg_sel_ir_sig
218
    .reg_sel_pc(reg_sel_pc_sig) ,           // input  reg_sel_pc_sig
219 8 gdevic
    .reg_sw_4d_lo(reg_sw_4d_lo_sig) ,       // input  reg_sw_4d_lo_sig
220
    .reg_sw_4d_hi(reg_sw_4d_hi_sig) ,       // input  reg_sw_4d_hi_sig
221 3 gdevic
    .ctl_sw_4u(ctl_sw_4u_sig) ,             // input  ctl_sw_4u_sig
222
    .reg_sel_wz(reg_sel_wz_sig) ,           // input  reg_sel_wz_sig
223
    .reg_sel_sp(reg_sel_sp_sig) ,           // input  reg_sel_sp_sig
224
    .reg_sel_iy(reg_sel_iy_sig) ,           // input  reg_sel_iy_sig
225
    .reg_sel_ix(reg_sel_ix_sig) ,           // input  reg_sel_ix_sig
226
    .reg_sel_hl2(reg_sel_hl2_sig) ,         // input  reg_sel_hl2_sig
227
    .reg_sel_hl(reg_sel_hl_sig) ,           // input  reg_sel_hl_sig
228
    .reg_sel_de2(reg_sel_de2_sig) ,         // input  reg_sel_de2_sig
229
    .reg_sel_de(reg_sel_de_sig) ,           // input  reg_sel_de_sig
230
    .reg_sel_bc2(reg_sel_bc2_sig) ,         // input  reg_sel_bc2_sig
231
    .reg_sel_bc(reg_sel_bc_sig) ,           // input  reg_sel_bc_sig
232
    .reg_sel_af2(reg_sel_af2_sig) ,         // input  reg_sel_af2_sig
233
    .reg_sel_af(reg_sel_af_sig) ,           // input  reg_sel_af_sig
234
    .reg_gp_we(reg_gp_we_sig) ,             // input  reg_gp_we_sig
235
    .reg_sys_we_lo(reg_sys_we_lo_sig) ,     // input  reg_sys_we_lo_sig
236
    .reg_sys_we_hi(reg_sys_we_hi_sig) ,     // input  reg_sys_we_hi_sig
237
    .ctl_reg_in_hi(ctl_reg_in_hi_sig) ,     // input  ctl_reg_in_hi_sig
238
    .ctl_reg_in_lo(ctl_reg_in_lo_sig) ,     // input  ctl_reg_in_lo_sig
239
    .ctl_reg_out_lo(ctl_reg_out_lo_sig) ,   // input  ctl_reg_out_lo_sig
240
    .ctl_reg_out_hi(ctl_reg_out_hi_sig) ,   // input  ctl_reg_out_hi_sig
241
    .clk(clk) ,                             // input  clk
242
    .db_lo_ds(db_lo_ds_sig) ,               // inout [7:0] db_lo_ds_sig
243
    .db_hi_ds(db_hi_ds_sig) ,               // inout [7:0] db_hi_ds_sig
244
    .db_lo_as(db_lo_as_sig) ,               // inout [7:0] db_lo_as_sig
245
    .db_hi_as(db_hi_as_sig)                 // inout [7:0] db_hi_as_sig
246
);
247
 
248
endmodule

powered by: WebSVN 2.1.0

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