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

Subversion Repositories i650

[/] [i650/] [trunk/] [rtl/] [toplev.v] - Blame information for rev 29

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 eightycc
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// IBM 650 Reconstruction in Verilog (i650)
4
// 
5
// This file is part of the IBM 650 Reconstruction in Verilog (i650) project
6
// http:////www.opencores.org/project,i650
7
//
8
// Description: Top level.
9
// 
10 23 eightycc
// Additional Comments: 
11 12 eightycc
//
12
// Copyright (c) 2015 Robert Abeles
13
//
14
// This source file is free software; you can redistribute it
15
// and/or modify it under the terms of the GNU Lesser General
16
// Public License as published by the Free Software Foundation;
17
// either version 2.1 of the License, or (at your option) any
18
// later version.
19
//
20
// This source is distributed in the hope that it will be
21
// useful, but WITHOUT ANY WARRANTY; without even the implied
22
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
23
// PURPOSE.  See the GNU Lesser General Public License for more
24
// details.
25
//
26
// You should have received a copy of the GNU Lesser General
27
// Public License along with this source; if not, download it
28
// from http://www.opencores.org/lgpl.shtml
29
//////////////////////////////////////////////////////////////////////////////////
30
`include "defines.v"
31
 
32
module toplev (
33
      input clk,
34
      input rst,
35
 
36 13 eightycc
      input [0:6] cmd_digit_in, io_buffer_in,
37
      input [0:5] command,
38 12 eightycc
 
39 15 eightycc
      output [0:6] cmd_digit_out, display_digit,
40 13 eightycc
      output busy, digit_ready, punch_card, read_card, card_digit_ready,
41 15 eightycc
      output digit_sync, word_upper,
42
      output [0:3] digit_ctr
43 12 eightycc
  );
44
 
45 13 eightycc
   wire ap, bp, cp, dp;
46
   wire dx, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10,
47
        d1_d5, d5_dx, d5_d10, d1_dx, d5_d9, d10_d1_d5,
48
        dxl, dxu, d0l, d0u, d1l, d1u, d2l, d10u;
49
   wire w0, w1, w2, w3, w4, w5, w6, w7, w8, w9,
50
        wl, wu, ewl;
51
   wire s0, s1, s2, s3, s4, hp;
52
   wire [0:9] digit_idx;
53
   wire [0:3] early_idx, ontime_idx;
54
 
55 15 eightycc
   assign digit_sync = bp;
56
   assign digit_ctr = ontime_idx;
57
   assign word_upper = wu;
58 13 eightycc
 
59
   timing tm (
60 12 eightycc
    .clk(clk),
61
    .rst(rst),
62
    .ap(ap),
63
    .bp(bp),
64
    .cp(cp),
65
    .dp(dp),
66
    .dx(dx),
67
    .d0(d0),
68
    .d1(d1),
69
    .d2(d2),
70
    .d3(d3),
71
    .d4(d4),
72
    .d5(d5),
73
    .d6(d6),
74
    .d7(d7),
75
    .d8(d8),
76
    .d9(d9),
77
    .d10(d10),
78
    .d1_d5(d1_d5),
79
    .d5_dx(d5_dx),
80
    .d5_d10(d5_d10),
81
    .d1_dx(d1_dx),
82
    .d5_d9(d5_d9),
83
    .d10_d1_d5(d10_d1_d5),
84
    .dxl(dxl),
85
    .dxu(dxu),
86
    .d0l(d0l),
87
    .d0u(d0u),
88
    .d1l(d1l),
89
    .d1u(d1u),
90
    .d2l(d2l),
91
    .d10u(d10u),
92
    .w0(w0),
93
    .w1(w1),
94
    .w2(w2),
95
    .w3(w3),
96
    .w4(w4),
97
    .w5(w5),
98
    .w6(w6),
99
    .w7(w7),
100
    .w8(w8),
101
    .w9(w9),
102
    .wl(wl),
103
    .wu(wu),
104
    .ewl(ewl),
105
    .s0(s0),
106
    .s1(s1),
107
    .s2(s2),
108
    .s3(s3),
109
    .s4(s4),
110
    .hp(hp),
111
    .digit_idx(digit_idx),
112
    .early_idx(early_idx),
113
    .ontime_idx(ontime_idx)
114
   );
115 13 eightycc
 
116 12 eightycc
   //-----------------------------------------------------------------------------
117 21 eightycc
   // Adder input muxes
118
   //-----------------------------------------------------------------------------
119
   wire [0:6] aa_entry_a, ab_entry_b;
120
 
121
   //-----------------------------------------------------------------------------
122 15 eightycc
   // Accumulator
123
   //-----------------------------------------------------------------------------
124
   wire [0:6] ac_early_out, ac_ontime_out, ac_ped_out;
125 22 eightycc
 
126
   //-----------------------------------------------------------------------------
127
   // Adder
128
   //-----------------------------------------------------------------------------
129
   wire [0:6] ad_adder_out;
130
   wire ad_carry_test, ad_no_carry_test, ad_d0l_carry_sig, ad_overflow_stop,
131
        ad_overflow_light, ad_overflow_sense_sig;
132 20 eightycc
 
133
   //-----------------------------------------------------------------------------
134 21 eightycc
   // Address register
135
   //-----------------------------------------------------------------------------
136
   wire [0:6] ar_addr_th, ar_addr_h, ar_addr_t, ar_addr_u;
137
   wire ar_dynamic_addr_hit, ar_addr_no_800x, ar_addr_8000, ar_addr_8001,
138
        ar_addr_8002, ar_addr_8003, ar_addr_8002_8003, ar_invalid_addr;
139
 
140
   //-----------------------------------------------------------------------------
141 29 eightycc
   // Arithmetic control
142
   //-----------------------------------------------------------------------------
143
   wire at_end_of_operation, at_arith_restart_d5, at_zero_insert, at_carry_blank,
144
        at_no_carry_blank, at_carry_insert, at_no_carry_insert, at_compl_adj,
145
        at_divide, at_multiply, at_acc_true_add, at_half_correct, at_hc_add_5;
146
 
147
   //-----------------------------------------------------------------------------
148 23 eightycc
   // Accumulator and TLU validity checking
149
   //-----------------------------------------------------------------------------
150
   wire ca_acc_zero, ca_acc_no_zero, ca_check_latch;
151
 
152
   //-----------------------------------------------------------------------------
153 27 eightycc
   // Control commutator
154
   //-----------------------------------------------------------------------------
155
   wire cc_restart_a, cc_restart_b, cc_i_alt, cc_d_alt, cc_man_stop_start,
156
        cc_run_latch, cc_enable_ri, cc_man_ri_storage, cc_man_ro_storage,
157
        cc_man_start_ri_dist_latch, cc_i_control_pulse, cc_i_control,
158
        cc_d_control, cc_d_control_no_8001, cc_start_ri, cc_rips_ri_dist_intlk_a,
159
        cc_rips_ri_dist_intlk_b, cc_op_intlk, cc_single_intlk, cc_rips,
160
        cc_ri_dist, cc_acc_to_dist_ri_latch, cc_start_acc_to_dist_ri,
161
        cc_end_acc_to_dist_ri, cc_rigs, cc_end_rigs;
162
 
163
   //-----------------------------------------------------------------------------
164 23 eightycc
   // Register validity checking
165
   //-----------------------------------------------------------------------------
166
   wire ck_error_stop, ck_acc_check_light, ck_prog_check_light,
167
        ck_dist_check_light;
168
 
169
   //-----------------------------------------------------------------------------
170
   // Decode control
171
   //-----------------------------------------------------------------------------
172
   wire dc_all_restarts, dc_use_d_for_i, dc_turn_on_single_intlk,
173
        dc_turn_on_op_intlk, dc_stop_code, dc_code_69, dc_tlu_sig, dc_mult_sig,
174
        dc_divide_sig, dc_reset_sig, dc_no_reset_sig, dc_abs_sig, dc_no_abs_sig,
175
        dc_lower_sig, dc_upper_sig, dc_add_sig, dc_subt_sig, dc_right_shift_sig,
176
        dc_left_shift_sig, dc_half_correct_sig, dc_shift_count_sig,
177 28 eightycc
        dc_end_shift_control, dc_overflow_sense_latch;
178 23 eightycc
 
179
   //-----------------------------------------------------------------------------
180 20 eightycc
   // Distributor
181
   //-----------------------------------------------------------------------------
182
   wire [0:6] ds_early_out, ds_ontime_out;
183
   wire ds_back_sig;
184 15 eightycc
 
185
   //-----------------------------------------------------------------------------
186 23 eightycc
   // Error stop
187 18 eightycc
   //-----------------------------------------------------------------------------
188 27 eightycc
   wire es_err_stop, es_err_sense_light, es_err_stop_ed0u, es_err_sense_restart,
189 23 eightycc
        es_restart_reset;
190 18 eightycc
 
191
   //-----------------------------------------------------------------------------
192 12 eightycc
   // General storage
193
   //-----------------------------------------------------------------------------
194 13 eightycc
   wire [0:4] gs_out;
195
   wire gs_double_write, gs_no_write;
196
 
197 12 eightycc
   //-----------------------------------------------------------------------------
198 21 eightycc
   // Opcode register
199
   //-----------------------------------------------------------------------------
200
   wire [0:6] op_opreg_t, op_opreg_u;
201
   wire op_ri_addr_reg;
202
 
203
   //-----------------------------------------------------------------------------
204 12 eightycc
   // Operator controls
205
   //-----------------------------------------------------------------------------
206 15 eightycc
   wire [0:6] oc_data_out, oc_addr_out, oc_console_out, oc_display_digit;
207 21 eightycc
   wire oc_console_to_addr, oc_acc_ri_console;
208 13 eightycc
   wire [0:14] oc_gs_ram_addr;
209
   wire oc_read_gs, oc_write_gs;
210
   wire oc_pgm_start, oc_pgm_stop, oc_err_reset, oc_err_sense_reset;
211
   wire oc_run_control, oc_half_or_pgm_stop, oc_ri_storage, oc_ro_storage,
212 23 eightycc
        oc_storage_control, oc_err_restart_sw, oc_ovflw_stop_sw,
213 27 eightycc
        oc_ovflw_sense_sw, oc_pgm_stop_sw;
214 13 eightycc
   wire oc_man_pgm_reset, oc_man_acc_reset, oc_set_8000, oc_reset_8000,
215 12 eightycc
        oc_hard_reset;
216 22 eightycc
   wire oc_restart_reset_busy;
217 15 eightycc
   assign display_digit = oc_display_digit;
218
 
219 12 eightycc
   //-----------------------------------------------------------------------------
220 20 eightycc
   // Program step register
221
   //-----------------------------------------------------------------------------
222
   wire [0:6] ps_early_out, ps_ontime_out, ps_ped_out;
223
   wire ps_restart_sig;
224 21 eightycc
 
225
   //-----------------------------------------------------------------------------
226
   // Storage select
227
   //-----------------------------------------------------------------------------
228
   wire [0:6] ss_selected_out;
229 20 eightycc
 
230
   //-----------------------------------------------------------------------------
231 27 eightycc
   // Table look-up
232
   //-----------------------------------------------------------------------------
233
   wire tl_tlu_on, tl_early_dist_zero_entry, tl_early_dist_zero_control,
234
        tl_prog_to_acc_add, tl_prog_add, tl_prog_add_d0, tl_prog_ped_regen,
235
        tl_tlu_band_change, tl_dist_blank_gate, tl_sel_stor_add_gate,
236
        tl_ontime_dist_add_gate, tl_upper_lower_check;
237
   wire [0:9] tl_special_digit;
238
 
239
   //-----------------------------------------------------------------------------
240 12 eightycc
   // Translators
241
   //-----------------------------------------------------------------------------
242 13 eightycc
   wire tr_gs_write;
243
   wire [0:4] tr_gs_in;
244 21 eightycc
   wire [0:6] tr_gs_out;
245 23 eightycc
 
246
   //-----------------------------------------------------------------------------
247
   // Accumulator zero check
248
   //-----------------------------------------------------------------------------
249
   wire zc_acc_no_zero_test, zc_acc_zero_test;
250 12 eightycc
 
251 21 eightycc
   add_in_a aa (
252
    .acc_early_out(ac_early_out),
253
    .acc_ontime_out(ac_ontime_out),
254
    .prog_step_early_out(ps_early_out),
255
    .select_storage_out(ss_selected_out),
256
    .addr_u(ar_addr_u),
257 29 eightycc
    .acc_true_add_gate(at_acc_true_add),
258 28 eightycc
    .acc_compl_add_gate(1'b0),               // 85r
259
    .left_shift_gate(1'b0),                  // 85b 
260
    .prog_step_add_gate(tl_prog_add),
261
    .shift_num_gate(1'b0),                   // 85a
262 27 eightycc
    .select_stor_add_gate(tl_sel_stor_add_gate),
263 21 eightycc
    .adder_entry_a(aa_entry_a)
264
    );
265
 
266
   add_in_b ab (
267
    .dist_early_out(ds_early_out),
268
    .dist_ontime_out(ds_ontime_out),
269 27 eightycc
    .special_int_entry(tl_special_digit),
270
    .ontime_dist_add_gate_tlu(tl_ontime_dist_add_gate),
271 28 eightycc
    .dist_compl_add_gate(1'b0),              // 85r
272 27 eightycc
    .upper_lower_check(tl_upper_lower_check),
273
    .dist_blank_gate(tl_dist_blank_gate),
274 28 eightycc
    .early_dist_zero_entry(tl_early_dist_zero_entry),
275
    .dist_true_add_gate(1'b0),               // 85r
276 21 eightycc
    .adder_entry_b(ab_entry_b)
277
    );
278
 
279 15 eightycc
   accumulator ac (
280 21 eightycc
    .rst(oc_hard_reset),
281 15 eightycc
    .ap(ap),
282
    .bp(bp),
283 18 eightycc
    .dp(dp),
284
    .dx(dx),
285 15 eightycc
    .d1(d1),
286
    .d2(d2),
287 21 eightycc
    .d10(d10),
288 15 eightycc
    .dxu(dxu),
289
    .d0u(d0u),
290
    .wu(wu),
291
    .wl(wl),
292 22 eightycc
    .adder_out(ad_adder_out),
293 21 eightycc
    .console_out(oc_console_out),
294 28 eightycc
    .acc_regen_gate(1'b1),                   // 85c
295
    .right_shift_gate(1'b0),                 // 85f
296
    .acc_ri_gate(1'b0),                      // 85c
297 21 eightycc
    .acc_ri_console(oc_acc_ri_console),
298 28 eightycc
    .zero_shift_count(1'b0),                 // 85b
299 15 eightycc
    .man_acc_reset(oc_man_acc_reset),
300 27 eightycc
    .reset_op(dc_reset_sig),
301 15 eightycc
    .early_idx(early_idx),
302
    .ontime_idx(ontime_idx),
303
    .early_out(ac_early_out),
304
    .ontime_out(ac_ontime_out),
305
    .ped_out(ac_ped_out)
306
    );
307
 
308 22 eightycc
   adder ad (
309 23 eightycc
    .rst(oc_hard_reset),
310 22 eightycc
    .ap(ap),
311
    .bp(bp),
312
    .dp(dp),
313
    .dxu(dxu),
314
    .dx(dx),
315
    .d0u(d0u),
316
    .d1(d1),
317
    .d1l(d1l),
318
    .d10(d10),
319
    .d10u(d10u),
320
    .wl(wl),
321
    .entry_a(aa_entry_a),
322
    .entry_b(ab_entry_b),
323 28 eightycc
    .tlu_on(tl_tlu_on),
324
    .left_shift_off(1'b1),                   // 85d
325
    .left_shift_on(1'b0),                    // 85d
326 29 eightycc
    .no_carry_insert(at_no_carry_insert),
327
    .no_carry_blank(at_no_carry_blank),
328
    .carry_insert(at_carry_insert),
329
    .carry_blank(at_carry_blank),
330
    .zero_insert(at_zero_insert),
331 22 eightycc
    .error_reset(oc_err_reset),
332 28 eightycc
    .quotient_digit_on(1'b0),                // 85p
333 23 eightycc
    .overflow_stop_sw(oc_ovflw_stop_sw),
334
    .overflow_sense_sw(oc_ovflw_sense_sw),
335 28 eightycc
    .mult_div_off(1'b0),                     // 85k
336
    .dist_true_add_gate(1'b0),               // 85r
337 29 eightycc
    .acc_true_add_latch(at_acc_true_add),
338 28 eightycc
    .shift_overflow(1'b0),                   // 85b
339 22 eightycc
    .adder_out(ad_adder_out),
340
    .carry_test(ad_carry_test),
341
    .no_carry_test(ad_no_carry_test),
342
    .d0l_carry_sig(ad_d0l_carry_sig),
343
    .overflow_stop(ad_overflow_stop),
344
    .overflow_light(ad_overflow_light),
345
    .overflow_sense_sig(ad_overflow_sense_sig)
346
    );
347
 
348 21 eightycc
   addr_reg ar (
349 23 eightycc
    .rst(oc_hard_reset),
350 21 eightycc
    .ap(ap),
351 18 eightycc
    .bp(bp),
352 21 eightycc
    .dx(dx),
353
    .d1(d1),
354
    .d2(d2),
355
    .d3(d3),
356
    .d4(d4),
357
    .d5(d5),
358
    .d6(d6),
359
    .d7(d7),
360
    .d8(d8),
361
    .d9(d9),
362
    .w0(w0),
363
    .w1(w1),
364
    .w2(w2),
365
    .w3(w3),
366
    .w4(w4),
367
    .w5(w5),
368
    .w6(w6),
369
    .w7(w7),
370
    .w8(w8),
371
    .w9(w9),
372
    .s0(s0),
373
    .s1(s1),
374
    .s2(s2),
375
    .s3(s3),
376
    .s4(s4),
377
    .error_reset(oc_err_reset),
378 27 eightycc
    .restart_a(cc_restart_a),
379 21 eightycc
    .set_8000(oc_set_8000),
380
    .reset_8000(oc_reset_8000),
381 27 eightycc
    .tlu_band_change(tl_tlu_band_change),
382 21 eightycc
    .double_write(gs_double_write),
383
    .no_write(gs_no_write),
384 28 eightycc
    .bs_to_gs(1'b0),                         // 87b ***
385 27 eightycc
    .rigs(cc_rigs),
386 21 eightycc
    .ps_reg_in(ps_ontime_out),
387
    .console_in(oc_addr_out),
388
    .ri_addr_reg(op_ri_addr_reg),
389
    .console_to_addr_reg(oc_console_to_addr),
390
    .addr_th(ar_addr_th),
391
    .addr_h(ar_addr_h),
392
    .addr_t(ar_addr_t),
393
    .addr_u(ar_addr_u),
394
    .dynamic_addr_hit(ar_dynamic_addr_hit),
395
    .addr_no_800x(ar_addr_no_800x),
396
    .addr_8000(ar_addr_8000),
397
    .addr_8001(ar_addr_8001),
398
    .addr_8002(ar_addr_8002),
399
    .addr_8003(ar_addr_8003),
400
    .addr_8002_8003(ar_addr_8002_8003),
401
    .invalid_addr(ar_invalid_addr)
402
    );
403
 
404 29 eightycc
   arith_ctl at (
405
    .rst(rst),
406
    .ap(ap),
407
    .bp(bp),
408
    .cp(cp),
409
    .dx(dx),
410
    .d0(d0),
411
    .d5(d5),
412
    .d9(d9),
413
    .dxl(dxl),
414
    .d0l(d0l),
415
    .d1l(d1l),
416
    .wu(wu),
417
    .adder_out(ad_adder_out),
418
    .man_acc_reset(ac_man_acc_reset),
419
    .overflow_stop(ad_overflow_stop),
420
    .prog_add_d0(tl_prog_add_d0),
421
    .half_correct_sig(dc_half_correct_sig),
422
    .end_of_operation(at_end_of_operation),
423
    .arith_restart_d5(at_arith_restart_d5),
424
    .zero_insert(at_zero_insert),
425
    .carry_blank(at_carry_blank),
426
    .no_carry_blank(at_no_carry_blank),
427
    .carry_insert(at_carry_insert),
428
    .no_carry_insert(at_no_carry_insert),
429
    .compl_adj(at_compl_adj),
430
    .divide(at_divide),
431
    .multiply(at_multiply),
432
    .acc_true_add(at_acc_true_add),
433
    .half_correct(at_half_correct),
434
    .hc_add_5(at_hc_add_5)
435
    );
436
 
437 23 eightycc
   check_acc_tlu ca (
438
    .rst(oc_hard_reset),
439
    .ap(ap),
440
    .bp(bp),
441
    .d0(d0),
442
    .d2(d2),
443
    .d1_dx(d1_dx),
444
    .acc_ped_out(ac_ped_out),
445 27 eightycc
    .sel_store_add_gate(tl_sel_stor_add_gate),
446 23 eightycc
    .err_reset(oc_err_reset),
447
    .carry_test_latch(ad_carry_test),
448
    .no_carry_test_latch(ad_no_carry_test),
449
    .acc_zero(ca_acc_zero),
450
    .acc_no_zero(ca_acc_no_zero),
451
    .check_latch(ca_check_latch)
452
    );
453
 
454 27 eightycc
   ctl_commutator cc (
455
    .rst(oc_hard_reset),
456
    .ap(ap),
457
    .bp(bp),
458
    .cp(cp),
459
    .dp(dp),
460
    .dx(dx),
461
    .d1(d1),
462
    .d3(d3),
463
    .d7(d7),
464
    .d9(d9),
465
    .d10(d10),
466
    .dxu(dxu),
467
    .dxl(dxl),
468
    .wu(wu),
469
    .wl(wl),
470
    .invalid_addr(ar_invalid_addr),
471
    .man_prog_reset(oc_man_pgm_reset),
472
    .run_control_sw(oc_run_control),
473
    .program_start_sw(oc_pgm_start),
474
    .manual_ri_storage_sw(oc_ri_storage),
475
    .manual_ro_storage_sw(oc_ro_storage),
476
    .manual_error_reset_sw(oc_err_reset),
477
    .half_or_pgm_stop(oc_half_or_pgm_stop),
478
    .prog_restart(ps_restart_sig),
479
    .error_stop(es_err_stop),
480
    .error_sense_restart(es_err_sense_restart),
481 29 eightycc
    .arith_restart(at_arith_restart_d5),        // ****
482 27 eightycc
    .stop_code(dc_stop_code),
483
    .code_69(dc_code_69),
484
    .start_10s_60s(dc_turn_on_single_intlk),
485 28 eightycc
    .end_shift_cntrl(dc_end_shift_control),
486 27 eightycc
    .tlu_on(tl_tlu_on),
487 29 eightycc
    .end_of_operation(at_end_of_operation),
488 27 eightycc
    .turn_on_op_intlk(dc_turn_on_op_intlk),
489
    .decode_restarts(dc_all_restarts),
490
    .use_d_for_i(dc_use_d_for_i),
491
    .dist_back_signal(ds_back_sig),
492
    .error_stop_ed0u(es_err_stop_ed0u),
493 28 eightycc
    .divide_overflow_stop(1'b0),             // 68a ***
494
    .exceed_address_or_stor_select_light(1'b0), // 71a ***
495 27 eightycc
    .opreg_t(op_opreg_t),
496
    .opreg_u(op_opreg_u),
497
    .addr_no_800x(ar_addr_no_800x),
498
    .addr_8001(ar_addr_8001),
499
    .dynamic_addr_hit(ar_dynamic_addr_hit),
500
    .restart_a(cc_restart_a),
501
    .restart_b(cc_restart_b),
502
    .i_alt(cc_i_alt),
503
    .d_alt(cc_d_alt),
504
    .manual_stop_start(cc_man_stop_start),
505
    .run_latch(cc_run_latch),
506
    .enable_ri(cc_enable_ri),
507
    .manual_ri_storage(cc_man_ri_storage),
508
    .manual_ro_storage(cc_man_ro_storage),
509
    .manual_start_ri_dist_latch(cc_man_start_ri_dist_latch),
510
    .i_control_pulse(cc_i_control_pulse),
511
    .i_control(cc_i_control),
512
    .d_control(cc_d_control),
513
    .d_control_no_8001(cc_d_control_no_8001),
514
    .start_ri(cc_start_ri),
515
    .rips_ri_dist_intlk_a(cc_rips_ri_dist_intlk_a),
516
    .rips_ri_dist_intlk_b(cc_rips_ri_dist_intlk_b),
517
    .op_intlk(cc_op_intlk),
518
    .single_intlk(cc_single_intlk),
519
    .rips(cc_rips),
520
    .ri_dist(cc_ri_dist),
521
    .acc_to_dist_ri_latch(cc_acc_to_dist_ri_latch),
522
    .start_acc_to_dist_ri(cc_start_acc_to_dist_ri),
523
    .end_acc_to_dist_ri(cc_end_acc_to_dist_ri),
524
    .rigs(cc_rigs),
525
    .end_rigs(cc_end_rigs)
526
    );
527
 
528 21 eightycc
   checking ck (
529
    .rst(oc_hard_reset),
530
    .bp(bp),
531 18 eightycc
    .d1_dx(d1_dx),
532
    .acc_ontime(ac_ontime_out),
533 20 eightycc
    .prog_ontime(ps_ontime_out),
534
    .dist_ontime(ds_ontime_out),
535 18 eightycc
    .error_reset(oc_err_reset),
536 23 eightycc
    .tlu_or_zero_check(ca_check_latch),
537 18 eightycc
    .error_stop(ck_error_stop),
538
    .acc_check_light(ck_acc_check_light),
539
    .prog_check_light(ck_prog_check_light),
540
    .dist_check_light(ck_dist_check_light)
541
    );
542 27 eightycc
 
543
   decode_ctl dc (
544 23 eightycc
    .rst(oc_hard_reset),
545
    .ap(ap),
546
    .bp(bp),
547
    .cp(cp),
548
    .dx(dx),
549
    .d0(d0),
550
    .d1(d1),
551
    .d2(d2),
552
    .d3(d3),
553
    .d4(d4),
554
    .d5(d5),
555
    .d6(d6),
556
    .d7(d7),
557
    .d8(d8),
558
    .d9(d9),
559
    .d10(d10),
560
    .d5_d10(d5_d10),
561
    .d10_d1_d5(d10_d1_d5),
562
    .dxl(dxl),
563
    .dxu(dxu),
564
    .d10u(d10u),
565
    .opreg_t(op_opreg_t),
566
    .opreg_u(op_opreg_u),
567
    .addr_u(ar_addr_u),
568
    .ontime_dist(ds_ontime_out),
569 27 eightycc
    .man_ro_storage(cc_man_ro_storage),
570 23 eightycc
    .dist_back_sig(ds_back_sig),
571 27 eightycc
    .d_control(cc_d_control),
572 28 eightycc
    .ena_arith_codes(1'b0),                  // 81i ***
573 27 eightycc
    .pgm_stop_sw(oc_pgm_stop_sw),
574 23 eightycc
    .acc_zero_test(zc_acc_zero_test),
575
    .acc_no_zero_test(zc_acc_no_zero_test),
576 28 eightycc
    .acc_plus_test(1'b0),                    // 85t
577
    .acc_minus_test(1'b0),                   // 85t
578 27 eightycc
    .single_intlk(cc_single_intlk),
579 29 eightycc
    .arith_restart(at_arith_restart_d5),                    // ****
580 23 eightycc
    .overflow_sense_sig(ad_overflow_sense_sig),
581
    .man_acc_reset(oc_man_acc_reset),
582
    .all_restarts(dc_all_restarts),
583
    .use_d_for_i(dc_use_d_for_i),
584
    .turn_on_single_intlk(dc_turn_on_single_intlk),
585
    .turn_on_op_intlk(dc_turn_on_op_intlk),
586
    .stop_code(dc_stop_code),
587
    .code_69(dc_code_69),
588
    .tlu_sig(dc_tlu_sig),
589
    .mult_sig(dc_mult_sig),
590
    .divide_sig(dc_divide_sig),
591
    .reset_sig(dc_reset_sig),
592
    .no_reset_sig(dc_no_reset_sig),
593
    .abs_sig(dc_abs_sig),
594
    .no_abs_sig(dc_no_abs_sig),
595
    .lower_sig(dc_lower_sig),
596
    .upper_sig(dc_upper_sig),
597
    .add_sig(dc_add_sig),
598
    .subt_sig(dc_subt_sig),
599
    .right_shift_sig(dc_right_shift_sig),
600
    .left_shift_sig(dc_left_shift_sig),
601
    .half_correct_sig(dc_half_correct_sig),
602 28 eightycc
    .shift_count_sig(dc_shift_count_sig),
603
    .end_shift_control(dc_end_shift_control),
604 23 eightycc
    .overflow_sense_latch(dc_overflow_sense_latch)
605
    );
606 18 eightycc
 
607 20 eightycc
   distributor ds (
608 21 eightycc
    .rst(oc_hard_reset),
609 20 eightycc
    .ap(ap),
610
    .cp(cp),
611
    .dp(dp),
612
    .dx(dx),
613
    .d0(d0),
614
    .d10(d10),
615 21 eightycc
    .selected_storage(ss_selected_out),
616 27 eightycc
    .ri_dist(cc_ri_dist),
617 20 eightycc
    .acc_ontime(ac_ontime_out),
618 27 eightycc
    .start_acc_dist_ri(cc_start_acc_to_dist_ri),
619
    .end_acc_dist_ri(cc_end_acc_to_dist_ri),
620
    .acc_dist_ri(cc_acc_to_dist_ri_latch),
621 20 eightycc
    .man_acc_reset(oc_man_acc_reset),
622
    .early_idx(early_idx),
623
    .ontime_idx(ontime_idx),
624
    .ontime_out(ds_ontime_out),
625
    .early_out(ds_early_out),
626
    .dist_back_sig(ds_back_sig)
627
    );
628
 
629 23 eightycc
   error_stop es (
630
    .rst(oc_hard_reset),
631
    .ap(ap),
632
    .dp(dp),
633
    .dxu(dxu),
634
    .d10(d10),
635
    .wl(wl),
636
    .err_restart_sw(oc_err_restart_sw),
637
    .err_reset(oc_err_reset),
638
    .err_sense_reset(oc_err_sense_reset),
639 28 eightycc
    .clock_err_sig(1'b0),                    // not possible
640 23 eightycc
    .err_stop_sig(ck_error_stop),
641
    .restart_reset_busy(oc_restart_reset_busy),
642 27 eightycc
    .err_stop(es_err_stop),
643 23 eightycc
    .err_sense_light(es_err_sense_light),
644
    .err_stop_ed0u(es_err_stop_ed0u),
645
    .err_sense_restart(es_err_sense_restart),
646
    .restart_reset(es_restart_reset)
647
    );
648
 
649 13 eightycc
   gen_store gs (
650 12 eightycc
    .rst(oc_hard_reset),
651
    .ap(ap),
652
    .dp(dp),
653
    .write_gate(tr_gs_write),
654 21 eightycc
    .addr_th(ar_addr_th),
655
    .addr_h(ar_addr_h),
656
    .addr_t(ar_addr_t),
657 12 eightycc
    .dynamic_addr(digit_idx),
658
    .gs_in(tr_gs_in),
659
    .console_ram_addr(oc_gs_ram_addr),
660
    .console_read_gs(oc_read_gs),
661 13 eightycc
    .console_write_gs(oc_write_gs),
662 12 eightycc
    .gs_out(gs_out),
663
    .double_write(gs_double_write),
664
    .no_write(gs_no_write)
665
    );
666
 
667 13 eightycc
   operator_ctl oc (
668 12 eightycc
    .rst(rst),
669
    .clk(clk),
670
    .ap(ap),
671
    .dp(dp),
672
    .dx(dx),
673
    .d0(d0),
674
    .d1(d1),
675
    .d2(d2),
676
    .d3(d3),
677
    .d4(d4),
678
    .d5(d5),
679 16 eightycc
    .d6(d6),
680
    .d9(d9),
681 12 eightycc
    .d10(d10),
682 16 eightycc
    .wu(wu),
683
    .wl(wl),
684 12 eightycc
    .hp(hp),
685
    .early_idx(early_idx),
686
    .ontime_idx(ontime_idx),
687
    .cmd_digit_in(cmd_digit_in),
688
    .io_buffer_in(io_buffer_in),
689 21 eightycc
    .gs_in(tr_gs_out),
690 15 eightycc
    .acc_ontime(ac_ontime_out),
691 20 eightycc
    .dist_ontime(ds_ontime_out),
692
    .prog_ontime(ps_ontime_out),
693 12 eightycc
    .command(command),
694 23 eightycc
    .restart_reset(es_restart_reset),
695 12 eightycc
    .data_out(oc_data_out),
696
    .addr_out(oc_addr_out),
697
    .console_out(oc_console_out),
698 15 eightycc
    .display_digit(oc_display_digit),
699 21 eightycc
    .console_to_addr(oc_console_to_addr),
700
    .acc_ri_console(oc_acc_ri_console),
701 12 eightycc
    .gs_ram_addr(oc_gs_ram_addr),
702 13 eightycc
    .read_gs(oc_read_gs),
703
    .write_gs(oc_write_gs),
704 12 eightycc
    .pgm_start(oc_pgm_start),
705
    .pgm_stop(oc_pgm_stop),
706
    .err_reset(oc_err_reset),
707
    .err_sense_reset(oc_err_sense_reset),
708
    .run_control(oc_run_control),
709
    .half_or_pgm_stop(oc_half_or_pgm_stop),
710
    .ri_storage(oc_ri_storage),
711
    .ro_storage(oc_ro_storage),
712
    .storage_control(oc_storage_control),
713 23 eightycc
    .err_restart_sw(oc_err_restart_sw),
714
    .ovflw_stop_sw(oc_ovflw_stop_sw),
715
    .ovflw_sense_sw(oc_ovflw_sense_sw),
716 27 eightycc
    .pgm_stop_sw(oc_pgm_stop_sw),
717 12 eightycc
    .man_pgm_reset(oc_man_pgm_reset),
718
    .man_acc_reset(oc_man_acc_reset),
719
    .set_8000(oc_set_8000),
720
    .reset_8000(oc_reset_8000),
721
    .hard_reset(oc_hard_reset),
722
    .cmd_digit_out(cmd_digit_out),
723
    .busy(busy),
724 22 eightycc
    .digit_ready(digit_ready),
725
    .restart_reset_busy(oc_restart_reset_busy),
726 12 eightycc
    .punch_card(punch_card),
727
    .read_card(read_card),
728
    .card_digit_ready(card_digit_ready)
729
    );
730
 
731 21 eightycc
   op_reg op (
732
    .rst(oc_hard_reset),
733
    .cp(cp),
734
    .d0(d0),
735
    .d9(d9),
736
    .d10(d10),
737
    .d1_d5(d1_d5),
738
    .d5_dx(d5_dx),
739 27 eightycc
    .restart_a(cc_restart_a),
740
    .restart_b(cc_restart_b),
741
    .d_alt(cc_d_alt),
742
    .i_alt(cc_i_alt),
743
    .tlu_band_change(tl_tlu_band_change),
744 21 eightycc
    .man_prog_reset(oc_man_pgm_reset),
745
    .prog_step_ped(ps_ped_out),
746
    .opreg_t(op_opreg_t),
747
    .opreg_u(op_opreg_u),
748
    .ri_addr_reg(op_ri_addr_reg)
749
    );
750
 
751 20 eightycc
   prog_step ps (
752 21 eightycc
    .rst(oc_hard_reset),
753 20 eightycc
    .ap(ap),
754
    .dp(dp),
755
    .dx(dx),
756
    .d0(d0),
757
    .d10(d10),
758
    .early_idx(early_idx),
759
    .ontime_idx(ontime_idx),
760
    .man_prog_reset(oc_man_pgm_reset),
761 27 eightycc
    .rips(cc_rips),
762 23 eightycc
    .adder_out(ad_adder_out),
763
    .sel_store_out(ss_selected_out),
764 27 eightycc
    .prog_ped_regen(tl_prog_ped_regen),
765
    .prog_add(tl_prog_add),
766 20 eightycc
    .early_out(ps_early_out),
767
    .ontime_out(ps_ontime_out),
768
    .ped_out(ps_ped_out),
769
    .prog_restart_sig(ps_restart_sig)
770
    );
771
 
772 21 eightycc
   store_select ss (
773
    .d0(d0),
774
    .d1_dx(d1_dx),
775
    .addr_no_800x(ar_addr_no_800x),
776
    .addr_8000(ar_addr_8000),
777
    .addr_8001(ar_addr_8001),
778
    .addr_8002_8003(ar_addr_8002_8003),
779 27 eightycc
    .addr_hot_8000(1'b0),                    // *** see cc 
780 21 eightycc
    .acc_ontime(ac_ontime_out),
781
    .dist_ontime(ds_ontime_out),
782
    .gs_out(tr_gs_out),
783
    .console_switches(oc_data_out),
784 28 eightycc
    .acc_plus(1'b0),                         // 85o
785
    .acc_minus(1'b0),                        // 85o
786 21 eightycc
    .selected_out(ss_selected_out)
787
    );
788
 
789 27 eightycc
   tlu tl (
790
    .rst(oc_hard_reset),
791
    .ap(ap),
792
    .bp(bp),
793
    .dx(dx),
794
    .d0(d0),
795
    .d4(d4),
796
    .d5(d5),
797
    .d10(d10),
798
    .dxl(dxl),
799
    .d0l(d0l),
800
    .d10u(d10u),
801
    .w0(w0),
802
    .w1(w1),
803
    .w2(w2),
804
    .w3(w3),
805
    .w4(w4),
806
    .w5(w5),
807
    .w6(w6),
808
    .w7(w7),
809
    .w8(w8),
810
    .w9(w9),
811
    .wl(wl),
812
    .wu(wu),
813
    .s0(s0),
814
    .s1(s1),
815
    .s2(s2),
816
    .s3(s3),
817
    .s4(s4),
818
    .tlu_sig(dc_tlu_sig),
819
    .upper_sig(dc_upper_sig),
820
    .lower_sig(dc_lower_sig),
821 29 eightycc
    .divide_on(at_divide),
822 28 eightycc
    .mult_nozero_edxl(1'b0),                 // 85j
823 27 eightycc
    .carry_test_latch(ad_carry_test),
824
    .tlu_or_acc_zero_check(ca_check_latch),
825
    .man_acc_reset(oc_man_acc_reset),
826
    .reset_sig(dc_reset_sig),
827
    .no_reset_sig(dc_no_reset_sig),
828 28 eightycc
    .acc_minus_sign(1'b0),                   // 85t
829 29 eightycc
    .compl_adj(at_compl_adj),
830 28 eightycc
    .quot_digit_on(1'b0),                    // 85p
831
    .dist_compl_add(1'b0),                   // 85p
832
    .any_left_shift_on(1'b0),                // 85j
833
    .right_shift_on(1'b0),                   // 85a
834
    .left_shift_on(1'b0),                    // 85b
835
    .mult_div_left_shift(1'b0),              // 85k
836
    .sig_digit_on(1'b0),                     // 85j
837 29 eightycc
    .hc_add_5(at_hc_add_5),
838
    .mult_on(at_multiply),
839
    .acc_true_add_gate(at_acc_true_add),
840 27 eightycc
    .tlu_on(tl_tlu_on),
841
    .early_dist_zero_entry(tl_early_dist_zero_entry),
842
    .early_dist_zero_control(tl_early_dist_zero_control),
843
    .prog_to_acc_add(tl_prog_to_acc_add),
844
    .prog_add(tl_prog_add),
845
    .prog_add_d0(tl_prog_add_d0),
846
    .prog_ped_regen(tl_prog_ped_regen),
847
    .special_digit(tl_special_digit),
848
    .tlu_band_change(tl_tlu_band_change),
849
    .dist_blank_gate(tl_dist_blank_gate),
850
    .sel_stor_add_gate(tl_sel_stor_add_gate),
851
    .ontime_dist_add_gate(tl_ontime_dist_add_gate),
852
    .upper_lower_check(tl_upper_lower_check)
853
    );
854
 
855 13 eightycc
    translators tr (
856 12 eightycc
    .dist_early_out(`biq_blank),
857
    .bs_out(`biq_blank),
858
    .console_out(oc_console_out),
859 27 eightycc
    .ri_gs(cc_rigs),
860 28 eightycc
    .ri_bs(1'b0),                            // 87b ***
861 12 eightycc
    .ri_console(oc_write_gs),
862 21 eightycc
    .n800x(ar_addr_no_800x),
863
    .console_read_gs(oc_read_gs),
864 12 eightycc
    .gs_out(gs_out),
865
    .gs_write(tr_gs_write),
866
    .gs_in(tr_gs_in),
867 21 eightycc
    .gs_biq_out(tr_gs_out)
868 12 eightycc
    );
869 23 eightycc
 
870
   zero_check zc (
871
    .rst(oc_hard_reset),
872
    .bp(bp),
873
    .d0(d0),
874
    .d1_dx(d1_dx),
875
    .wu(wu),
876
    .acc_no_zero(ca_acc_no_zero),
877
    .acc_no_zero_test(zc_acc_no_zero_test),
878
    .acc_zero_test(zc_acc_zero_test)
879
    );
880 12 eightycc
 
881
endmodule

powered by: WebSVN 2.1.0

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