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

Subversion Repositories tv80

[/] [tv80/] [branches/] [hpa1/] [rtl/] [core/] [tv80_core.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 ghutchis
//
2
// TV80 8-Bit Microprocessor Core
3
// Based on the VHDL T80 core by Daniel Wallner (jesus@opencores.org)
4
//
5
// Copyright (c) 2004 Guy Hutchison (ghutchis@opencores.org)
6
//
7
// Permission is hereby granted, free of charge, to any person obtaining a 
8
// copy of this software and associated documentation files (the "Software"), 
9
// to deal in the Software without restriction, including without limitation 
10
// the rights to use, copy, modify, merge, publish, distribute, sublicense, 
11
// and/or sell copies of the Software, and to permit persons to whom the 
12
// Software is furnished to do so, subject to the following conditions:
13
//
14
// The above copyright notice and this permission notice shall be included 
15
// in all copies or substantial portions of the Software.
16
//
17
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
18
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
19
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
20
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 
21
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
22
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
23
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
 
25
module tv80_core (/*AUTOARG*/
26
  // Outputs
27
  m1_n, iorq, no_read, write, rfsh_n, halt_n, busak_n, A, do, mc, ts,
28
  intcycle_n, IntE, stop,
29
  // Inputs
30
  reset_n, clk, cen, wait_n, int_n, nmi_n, busrq_n, dinst, di
31
  );
32
  // Beginning of automatic inputs (from unused autoinst inputs)
33
  // End of automatics
34
 
35
  parameter Mode = 1;   // 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB
36
  parameter IOWait = 1; // 1 => Single cycle I/O, 1 => Std I/O cycle
37
  parameter Flag_C = 0;
38
  parameter Flag_N = 1;
39
  parameter Flag_P = 2;
40
  parameter Flag_X = 3;
41
  parameter Flag_H = 4;
42
  parameter Flag_Y = 5;
43
  parameter Flag_Z = 6;
44
  parameter Flag_S = 7;
45
 
46
  input     reset_n;
47
  input     clk;
48
  input     cen;
49
  input     wait_n;
50
  input     int_n;
51
  input     nmi_n;
52
  input     busrq_n;
53
  output    m1_n;
54
  output    iorq;
55
  output    no_read;
56
  output    write;
57
  output    rfsh_n;
58
  output    halt_n;
59
  output    busak_n;
60
  output [15:0] A;
61
  input [7:0]   dinst;
62
  input [7:0]   di;
63
  output [7:0]  do;
64
  output [2:0]  mc;
65
  output [2:0]  ts;
66
  output        intcycle_n;
67
  output        IntE;
68
  output        stop;
69
 
70
  reg    m1_n;
71
  reg    iorq;
72
  reg    rfsh_n;
73
  reg    halt_n;
74
  reg    busak_n;
75
  reg [15:0] A;
76
  reg [7:0]  do;
77
  reg [2:0]  mc;
78
  reg [2:0]  ts;
79
  reg   intcycle_n;
80
  reg   IntE;
81
  reg   stop;
82
 
83
  parameter     aNone    = 3'b111;
84
  parameter     aBC      = 3'b000;
85
  parameter     aDE      = 3'b001;
86
  parameter     aXY      = 3'b010;
87
  parameter     aIOA     = 3'b100;
88
  parameter     aSP      = 3'b101;
89
  parameter     aZI      = 3'b110;
90
 
91
  // Registers
92
  reg [7:0]     ACC, F;
93
  reg [7:0]     Ap, Fp;
94
  reg [7:0]     I;
95
  reg [7:0]     R;
96
  reg [15:0]    SP, PC;
97
  reg [7:0]     RegDIH;
98
  reg [7:0]     RegDIL;
99
  wire [15:0]   RegBusA;
100
  wire [15:0]   RegBusB;
101
  wire [15:0]   RegBusC;
102
  reg [2:0]     RegAddrA_r;
103
  reg [2:0]     RegAddrA;
104
  reg [2:0]     RegAddrB_r;
105
  reg [2:0]     RegAddrB;
106
  reg [2:0]     RegAddrC;
107
  reg           RegWEH;
108
  reg           RegWEL;
109
  reg           Alternate;
110
 
111
  // Help Registers
112
  reg [15:0]    TmpAddr; // Temporary address register
113
  reg [7:0]     IR;              // Instruction register
114
  reg [1:0]     ISet;            // Instruction set selector
115
  reg [15:0]    RegBusA_r;
116
 
117
  reg [15:0]    ID16;
118
  reg [7:0]     Save_Mux;
119
 
120
  reg [2:0]     tstate;
121
  reg [2:0]     mcycle;
122
  reg           IntE_FF1;
123
  reg           IntE_FF2;
124
  reg           Halt_FF;
125
  reg           BusReq_s;
126
  reg           BusAck;
127
  reg           ClkEn;
128
  reg           NMI_s;
129
  reg           INT_s;
130
  reg [1:0]     IStatus;
131
 
132
  reg [7:0]     DI_Reg;
133
  reg           T_Res;
134
  reg [1:0]     XY_State;
135
  reg [2:0]     Pre_XY_F_M;
136
  reg           NextIs_XY_Fetch;
137
  reg           XY_Ind;
138
  reg           No_BTR;
139
  reg           BTR_r;
140
  reg           Auto_Wait;
141
  reg           Auto_Wait_t1;
142
  reg           Auto_Wait_t2;
143
  reg           IncDecZ;
144
 
145
  // ALU signals
146
  reg [7:0]     BusB;
147
  reg [7:0]     BusA;
148
  wire [7:0]    ALU_Q;
149
  wire [7:0]    F_Out;
150
 
151
  // Registered micro code outputs
152
  reg [4:0]     Read_To_Reg_r;
153
  reg           Arith16_r;
154
  reg           Z16_r;
155
  reg [3:0]     ALU_Op_r;
156
  reg           Save_ALU_r;
157
  reg           PreserveC_r;
158
  reg [2:0]     mcycles;
159
 
160
  // Micro code outputs
161
  wire [2:0]    mcycles_d;
162
  wire [2:0]    tstates;
163
  reg           IntCycle;
164
  reg           NMICycle;
165
  wire          Inc_PC;
166
  wire          Inc_WZ;
167
  wire [3:0]    IncDec_16;
168
  wire [1:0]    Prefix;
169
  wire          Read_To_Acc;
170
  wire          Read_To_Reg;
171
  wire [3:0]     Set_BusB_To;
172
  wire [3:0]     Set_BusA_To;
173
  wire [3:0]     ALU_Op;
174
  wire           Save_ALU;
175
  wire           PreserveC;
176
  wire           Arith16;
177
  wire [2:0]     Set_Addr_To;
178
  wire           Jump;
179
  wire           JumpE;
180
  wire           JumpXY;
181
  wire           Call;
182
  wire           RstP;
183
  wire           LDZ;
184
  wire           LDW;
185
  wire           LDSPHL;
186
  wire           iorq_i;
187
  wire [2:0]     Special_LD;
188
  wire           ExchangeDH;
189
  wire           ExchangeRp;
190
  wire           ExchangeAF;
191
  wire           ExchangeRS;
192
  wire           I_DJNZ;
193
  wire           I_CPL;
194
  wire           I_CCF;
195
  wire           I_SCF;
196
  wire           I_RETN;
197
  wire           I_BT;
198
  wire           I_BC;
199
  wire           I_BTR;
200
  wire           I_RLD;
201
  wire           I_RRD;
202
  wire           I_INRC;
203
  wire           SetDI;
204
  wire           SetEI;
205
  wire [1:0]     IMode;
206
  wire           Halt;
207
 
208
  reg [15:0]     PC16;
209
  reg [15:0]     PC16_B;
210
  reg [15:0]     SP16, SP16_A, SP16_B;
211
  reg [15:0]     ID16_B;
212
  reg            Oldnmi_n;
213
 
214
  tv80_mcode #(Mode, Flag_C, Flag_N, Flag_P, Flag_X, Flag_H, Flag_Y, Flag_Z, Flag_S) i_mcode
215
    (
216
     .IR                   (IR),
217
     .ISet                 (ISet),
218
     .MCycle               (mcycle),
219
     .F                    (F),
220
     .NMICycle             (NMICycle),
221
     .IntCycle             (IntCycle),
222
     .MCycles              (mcycles_d),
223
     .TStates              (tstates),
224
     .Prefix               (Prefix),
225
     .Inc_PC               (Inc_PC),
226
     .Inc_WZ               (Inc_WZ),
227
     .IncDec_16            (IncDec_16),
228
     .Read_To_Acc          (Read_To_Acc),
229
     .Read_To_Reg          (Read_To_Reg),
230
     .Set_BusB_To          (Set_BusB_To),
231
     .Set_BusA_To          (Set_BusA_To),
232
     .ALU_Op               (ALU_Op),
233
     .Save_ALU             (Save_ALU),
234
     .PreserveC            (PreserveC),
235
     .Arith16              (Arith16),
236
     .Set_Addr_To          (Set_Addr_To),
237
     .IORQ                 (iorq_i),
238
     .Jump                 (Jump),
239
     .JumpE                (JumpE),
240
     .JumpXY               (JumpXY),
241
     .Call                 (Call),
242
     .RstP                 (RstP),
243
     .LDZ                  (LDZ),
244
     .LDW                  (LDW),
245
     .LDSPHL               (LDSPHL),
246
     .Special_LD           (Special_LD),
247
     .ExchangeDH           (ExchangeDH),
248
     .ExchangeRp           (ExchangeRp),
249
     .ExchangeAF           (ExchangeAF),
250
     .ExchangeRS           (ExchangeRS),
251
     .I_DJNZ               (I_DJNZ),
252
     .I_CPL                (I_CPL),
253
     .I_CCF                (I_CCF),
254
     .I_SCF                (I_SCF),
255
     .I_RETN               (I_RETN),
256
     .I_BT                 (I_BT),
257
     .I_BC                 (I_BC),
258
     .I_BTR                (I_BTR),
259
     .I_RLD                (I_RLD),
260
     .I_RRD                (I_RRD),
261
     .I_INRC               (I_INRC),
262
     .SetDI                (SetDI),
263
     .SetEI                (SetEI),
264
     .IMode                (IMode),
265
     .Halt                 (Halt),
266
     .NoRead               (no_read),
267
     .Write                (write)
268
     );
269
 
270
  tv80_alu #(Mode, Flag_C, Flag_N, Flag_P, Flag_X, Flag_H, Flag_Y, Flag_Z, Flag_S) i_alu
271
    (
272
     .Arith16              (Arith16_r),
273
     .Z16                  (Z16_r),
274
     .ALU_Op               (ALU_Op_r),
275
     .IR                   (IR[5:0]),
276
     .ISet                 (ISet),
277
     .BusA                 (BusA),
278
     .BusB                 (BusB),
279
     .F_In                 (F),
280
     .Q                    (ALU_Q),
281
     .F_Out                (F_Out)
282
     );
283
 
284
  always @(/*AUTOSENSE*/ALU_Q or BusAck or BusB or DI_Reg
285
           or ExchangeRp or IR or Save_ALU_r or Set_Addr_To or XY_Ind
286
           or XY_State or cen or mcycle or tstate or tstates)
287
    begin
288
      ClkEn = cen && ~ BusAck;
289
 
290
      if (tstate == tstates)
291
        T_Res = 1'b1;
292
      else T_Res = 1'b0;
293
 
294
      if (XY_State != 2'b00 && XY_Ind == 1'b0 &&
295
          ((Set_Addr_To == aXY) ||
296
           (mcycle == 3'b001 && IR == 8'b11001011) ||
297
           (mcycle == 3'b001 && IR == 8'b00110110)))
298
        NextIs_XY_Fetch = 1'b1;
299
      else
300
        NextIs_XY_Fetch = 1'b0;
301
 
302
      if (ExchangeRp)
303
        Save_Mux = BusB;
304
      else if (!Save_ALU_r)
305
        Save_Mux = DI_Reg;
306
      else
307
        Save_Mux = ALU_Q;
308
    end // always @ *
309
 
310
  always @ (posedge clk)
311
    begin
312
      if (reset_n == 1'b0 )
313
        begin
314
          PC <= #1 0;  // Program Counter
315
          A <= #1 0;
316
          TmpAddr <= #1 0;
317
          IR <= #1 8'b00000000;
318
          ISet <= #1 2'b00;
319
          XY_State <= #1 2'b00;
320
          IStatus <= #1 2'b00;
321
          mcycles <= #1 3'b000;
322
          do <= #1 8'b00000000;
323
 
324
          ACC <= #1 8'hFF;
325
          F <= #1 8'hFF;
326
          Ap <= #1 8'hFF;
327
          Fp <= #1 8'hFF;
328
          I <= #1 0;
329
          R <= #1 0;
330
          SP <= #1 16'hFFFF;
331
          Alternate <= #1 1'b0;
332
 
333
          Read_To_Reg_r <= #1 5'b00000;
334
          Arith16_r <= #1 1'b0;
335
          BTR_r <= #1 1'b0;
336
          Z16_r <= #1 1'b0;
337
          ALU_Op_r <= #1 4'b0000;
338
          Save_ALU_r <= #1 1'b0;
339
          PreserveC_r <= #1 1'b0;
340
          XY_Ind <= #1 1'b0;
341
        end
342
      else
343
        begin
344
 
345
          if (ClkEn == 1'b1 )
346
            begin
347
 
348
              ALU_Op_r <= #1 4'b0000;
349
              Save_ALU_r <= #1 1'b0;
350
              Read_To_Reg_r <= #1 5'b00000;
351
 
352
              mcycles <= #1 mcycles_d;
353
 
354
              if (IMode != 2'b11 )
355
                begin
356
                  IStatus <= #1 IMode;
357
                end
358
 
359
              Arith16_r <= #1 Arith16;
360
              PreserveC_r <= #1 PreserveC;
361
              if (ISet == 2'b10 && ALU_Op[2] == 1'b0 && ALU_Op[0] == 1'b1 && mcycle == 3'b011 )
362
                begin
363
                  Z16_r <= #1 1'b1;
364
                end
365
              else
366
                begin
367
                  Z16_r <= #1 1'b0;
368
                end
369
 
370
              if (mcycle  == 3'b001 && tstate[2] == 1'b0 )
371
                begin
372
                  // mcycle == 1 && tstate == 1, 2, || 3
373
 
374
                  if (tstate == 2 && wait_n == 1'b1 )
375
                    begin
376
                      if (Mode < 2 )
377
                        begin
378
                          A[7:0] <= #1 R;
379
                          A[15:8] <= #1 I;
380
                          R[6:0] <= #1 R[6:0] + 1;
381
                        end
382
 
383
                      if (Jump == 1'b0 && Call == 1'b0 && NMICycle == 1'b0 && IntCycle == 1'b0 && ~ (Halt_FF == 1'b1 || Halt == 1'b1) )
384
                        begin
385
                          PC <= #1 PC16;
386
                        end
387
 
388
                      if (IntCycle == 1'b1 && IStatus == 2'b01 )
389
                        begin
390
                          IR <= #1 8'b11111111;
391
                        end
392
                      else if (Halt_FF == 1'b1 || (IntCycle == 1'b1 && IStatus == 2'b10) || NMICycle == 1'b1 )
393
                        begin
394
                          IR <= #1 8'b00000000;
395
                        end
396
                      else
397
                        begin
398
                          IR <= #1 dinst;
399
                        end
400
 
401
                      ISet <= #1 2'b00;
402
                      if (Prefix != 2'b00 )
403
                        begin
404
                          if (Prefix == 2'b11 )
405
                            begin
406
                              if (IR[5] == 1'b1 )
407
                                begin
408
                                  XY_State <= #1 2'b10;
409
                                end
410
                              else
411
                                begin
412
                                  XY_State <= #1 2'b01;
413
                                end
414
                            end
415
                          else
416
                            begin
417
                              if (Prefix == 2'b10 )
418
                                begin
419
                                  XY_State <= #1 2'b00;
420
                                  XY_Ind <= #1 1'b0;
421
                                end
422
                              ISet <= #1 Prefix;
423
                            end
424
                        end
425
                      else
426
                        begin
427
                          XY_State <= #1 2'b00;
428
                          XY_Ind <= #1 1'b0;
429
                        end
430
                    end // if (tstate == 2 && wait_n == 1'b1 )
431
 
432
 
433
                end
434
              else
435
                begin
436
                  // either (mcycle > 1) OR (mcycle == 1 AND tstate > 3)
437
 
438
                  if (mcycle == 3'b110 )
439
                    begin
440
                      XY_Ind <= #1 1'b1;
441
                      if (Prefix == 2'b01 )
442
                        begin
443
                          ISet <= #1 2'b01;
444
                        end
445
                    end
446
 
447
                  if (T_Res == 1'b1 )
448
                    begin
449
                      BTR_r <= #1 (I_BT || I_BC || I_BTR) && ~ No_BTR;
450
                      if (Jump == 1'b1 )
451
                        begin
452
                          A[15:8] <= #1 DI_Reg;
453
                          A[7:0] <= #1 TmpAddr[7:0];
454
                          PC[15:8] <= #1 DI_Reg;
455
                          PC[7:0] <= #1 TmpAddr[7:0];
456
                        end
457
                      else if (JumpXY == 1'b1 )
458
                        begin
459
                          A <= #1 RegBusC;
460
                          PC <= #1 RegBusC;
461
                        end else if (Call == 1'b1 || RstP == 1'b1 )
462
                          begin
463
                            A <= #1 TmpAddr;
464
                            PC <= #1 TmpAddr;
465
                          end
466
                        else if (mcycle == mcycles && NMICycle == 1'b1 )
467
                          begin
468
                            A <= #1 16'b0000000001100110;
469
                            PC <= #1 16'b0000000001100110;
470
                          end
471
                        else if (mcycle == 3'b011 && IntCycle == 1'b1 && IStatus == 2'b10 )
472
                          begin
473
                            A[15:8] <= #1 I;
474
                            A[7:0] <= #1 TmpAddr[7:0];
475
                            PC[15:8] <= #1 I;
476
                            PC[7:0] <= #1 TmpAddr[7:0];
477
                          end
478
                        else
479
                          begin
480
                            case (Set_Addr_To)
481
                              aXY :
482
                                begin
483
                                  if (XY_State == 2'b00 )
484
                                    begin
485
                                      A <= #1 RegBusC;
486
                                    end
487
                                  else
488
                                    begin
489
                                      if (NextIs_XY_Fetch == 1'b1 )
490
                                        begin
491
                                          A <= #1 PC;
492
                                        end
493
                                      else
494
                                        begin
495
                                          A <= #1 TmpAddr;
496
                                        end
497
                                    end // else: !if(XY_State == 2'b00 )
498
                                end // case: aXY
499
 
500
                              aIOA :
501
                                begin
502
                                  if (Mode == 3 )
503
                                    begin
504
                                      // Memory map I/O on GBZ80
505
                                      A[15:8] <= #1 8'hFF;
506
                                    end
507
                                  else if (Mode == 2 )
508
                                    begin
509
                                      // Duplicate I/O address on 8080
510
                                      A[15:8] <= #1 DI_Reg;
511
                                    end
512
                                  else
513
                                    begin
514
                                      A[15:8] <= #1 ACC;
515
                                    end
516
                                  A[7:0] <= #1 DI_Reg;
517
                                end // case: aIOA
518
 
519
 
520
                              aSP :
521
                                begin
522
                                  A <= #1 SP;
523
                                end
524
 
525
                              aBC :
526
                                begin
527
                                  if (Mode == 3 && iorq_i == 1'b1 )
528
                                    begin
529
                                      // Memory map I/O on GBZ80
530
                                      A[15:8] <= #1 8'hFF;
531
                                      A[7:0] <= #1 RegBusC[7:0];
532
                                    end
533
                                  else
534
                                    begin
535
                                      A <= #1 RegBusC;
536
                                    end
537
                                end // case: aBC
538
 
539
                              aDE :
540
                                begin
541
                                  A <= #1 RegBusC;
542
                                end
543
 
544
                              aZI :
545
                                begin
546
                                  if (Inc_WZ == 1'b1 )
547
                                    begin
548
                                      A <= #1 TmpAddr + 1;
549
                                    end
550
                                  else
551
                                    begin
552
                                      A[15:8] <= #1 DI_Reg;
553
                                      A[7:0] <= #1 TmpAddr[7:0];
554
                                    end
555
                                end // case: aZI
556
 
557
                              default   :
558
                                begin
559
                                  A <= #1 PC;
560
                                end
561
                            endcase // case(Set_Addr_To)
562
 
563
                          end // else: !if(mcycle == 3'b011 && IntCycle == 1'b1 && IStatus == 2'b10 )
564
 
565
 
566
                      Save_ALU_r <= #1 Save_ALU;
567
                      ALU_Op_r <= #1 ALU_Op;
568
 
569
                      if (I_CPL == 1'b1 )
570
                        begin
571
                          // CPL
572
                          ACC <= #1 ~ ACC;
573
                          F[Flag_Y] <= #1 ~ ACC[5];
574
                          F[Flag_H] <= #1 1'b1;
575
                          F[Flag_X] <= #1 ~ ACC[3];
576
                          F[Flag_N] <= #1 1'b1;
577
                        end
578
                      if (I_CCF == 1'b1 )
579
                        begin
580
                          // CCF
581
                          F[Flag_C] <= #1 ~ F[Flag_C];
582
                          F[Flag_Y] <= #1 ACC[5];
583
                          F[Flag_H] <= #1 F[Flag_C];
584
                          F[Flag_X] <= #1 ACC[3];
585
                          F[Flag_N] <= #1 1'b0;
586
                        end
587
                      if (I_SCF == 1'b1 )
588
                        begin
589
                          // SCF
590
                          F[Flag_C] <= #1 1'b1;
591
                          F[Flag_Y] <= #1 ACC[5];
592
                          F[Flag_H] <= #1 1'b0;
593
                          F[Flag_X] <= #1 ACC[3];
594
                          F[Flag_N] <= #1 1'b0;
595
                        end
596
                    end // if (T_Res == 1'b1 )
597
 
598
 
599
                  if (tstate == 2 && wait_n == 1'b1 )
600
                    begin
601
                      if (ISet == 2'b01 && mcycle == 3'b111 )
602
                        begin
603
                          IR <= #1 dinst;
604
                        end
605
                      if (JumpE == 1'b1 )
606
                        begin
607
                          PC <= #1 PC16;
608
                        end
609
                      else if (Inc_PC == 1'b1 )
610
                        begin
611
                          //PC <= #1 PC + 1;
612
                          PC <= #1 PC16;
613
                        end
614
                      if (BTR_r == 1'b1 )
615
                        begin
616
                          //PC <= #1 PC - 2;
617
                          PC <= #1 PC16;
618
                        end
619
                      if (RstP == 1'b1 )
620
                        begin
621
                          TmpAddr <= #1 { 10'h0, IR[5:3], 3'h0 };
622
                          //TmpAddr <= #1 (others =>1'b0);
623
                          //TmpAddr[5:3] <= #1 IR[5:3];
624
                        end
625
                    end
626
                  if (tstate == 3 && mcycle == 3'b110 )
627
                    begin
628
                      TmpAddr <= #1 SP16;
629
                    end
630
 
631
                  if ((tstate == 2 && wait_n == 1'b1) || (tstate == 4 && mcycle == 3'b001) )
632
                    begin
633
                      if (IncDec_16[2:0] == 3'b111 )
634
                        begin
635
                          SP <= #1 SP16;
636
                        end
637
                    end
638
 
639
                  if (LDSPHL == 1'b1 )
640
                    begin
641
                      SP <= #1 RegBusC;
642
                    end
643
                  if (ExchangeAF == 1'b1 )
644
                    begin
645
                      Ap <= #1 ACC;
646
                      ACC <= #1 Ap;
647
                      Fp <= #1 F;
648
                      F <= #1 Fp;
649
                    end
650
                  if (ExchangeRS == 1'b1 )
651
                    begin
652
                      Alternate <= #1 ~ Alternate;
653
                    end
654
                end // else: !if(mcycle  == 3'b001 && tstate(2) == 1'b0 )
655
 
656
 
657
              if (tstate == 3 )
658
                begin
659
                  if (LDZ == 1'b1 )
660
                    begin
661
                      TmpAddr[7:0] <= #1 DI_Reg;
662
                    end
663
                  if (LDW == 1'b1 )
664
                    begin
665
                      TmpAddr[15:8] <= #1 DI_Reg;
666
                    end
667
 
668
                  if (Special_LD[2] == 1'b1 )
669
                    begin
670
                      case (Special_LD[1:0])
671
                        2'b00 :
672
                          begin
673
                            ACC <= #1 I;
674
                            F[Flag_P] <= #1 IntE_FF2;
675
                          end
676
 
677
                        2'b01 :
678
                          begin
679
                            ACC <= #1 R;
680
                            F[Flag_P] <= #1 IntE_FF2;
681
                          end
682
 
683
                        2'b10 :
684
                          I <= #1 ACC;
685
 
686
                        default :
687
                          R <= #1 ACC;
688
                      endcase
689
                    end
690
                end // if (tstate == 3 )
691
 
692
 
693
              if ((I_DJNZ == 1'b0 && Save_ALU_r == 1'b1) || ALU_Op_r == 4'b1001 )
694
                begin
695
                  if (Mode == 3 )
696
                    begin
697
                      F[6] <= #1 F_Out[6];
698
                      F[5] <= #1 F_Out[5];
699
                      F[7] <= #1 F_Out[7];
700
                      if (PreserveC_r == 1'b0 )
701
                        begin
702
                          F[4] <= #1 F_Out[4];
703
                        end
704
                    end
705
                  else
706
                    begin
707
                      F[7:1] <= #1 F_Out[7:1];
708
                      if (PreserveC_r == 1'b0 )
709
                        begin
710
                          F[Flag_C] <= #1 F_Out[0];
711
                        end
712
                    end
713
                end // if ((I_DJNZ == 1'b0 && Save_ALU_r == 1'b1) || ALU_Op_r == 4'b1001 )
714
 
715
              if (T_Res == 1'b1 && I_INRC == 1'b1 )
716
                begin
717
                  F[Flag_H] <= #1 1'b0;
718
                  F[Flag_N] <= #1 1'b0;
719
                  if (DI_Reg[7:0] == 8'b00000000 )
720
                    begin
721
                      F[Flag_Z] <= #1 1'b1;
722
                    end
723
                  else
724
                    begin
725
                      F[Flag_Z] <= #1 1'b0;
726
                    end
727
                  F[Flag_S] <= #1 DI_Reg[7];
728
                  F[Flag_P] <= #1 ~ (^DI_Reg[7:0]);
729
                end // if (T_Res == 1'b1 && I_INRC == 1'b1 )
730
 
731
 
732
              if (tstate == 1 && Auto_Wait_t1 == 1'b0 )
733
                begin
734
                  do <= #1 BusB;
735
                  if (I_RLD == 1'b1 )
736
                    begin
737
                      do[3:0] <= #1 BusA[3:0];
738
                      do[7:4] <= #1 BusB[3:0];
739
                    end
740
                  if (I_RRD == 1'b1 )
741
                    begin
742
                      do[3:0] <= #1 BusB[7:4];
743
                      do[7:4] <= #1 BusA[3:0];
744
                    end
745
                end
746
 
747
              if (T_Res == 1'b1 )
748
                begin
749
                  Read_To_Reg_r[3:0] <= #1 Set_BusA_To;
750
                  Read_To_Reg_r[4] <= #1 Read_To_Reg;
751
                  if (Read_To_Acc == 1'b1 )
752
                    begin
753
                      Read_To_Reg_r[3:0] <= #1 4'b0111;
754
                      Read_To_Reg_r[4] <= #1 1'b1;
755
                    end
756
                end
757
 
758
              if (tstate == 1 && I_BT == 1'b1 )
759
                begin
760
                  F[Flag_X] <= #1 ALU_Q[3];
761
                  F[Flag_Y] <= #1 ALU_Q[1];
762
                  F[Flag_H] <= #1 1'b0;
763
                  F[Flag_N] <= #1 1'b0;
764
                end
765
              if (I_BC == 1'b1 || I_BT == 1'b1 )
766
                begin
767
                  F[Flag_P] <= #1 IncDecZ;
768
                end
769
 
770
              if ((tstate == 1 && Save_ALU_r == 1'b0 && Auto_Wait_t1 == 1'b0) ||
771
                  (Save_ALU_r == 1'b1 && ALU_Op_r != 4'b0111) )
772
                begin
773
                  case (Read_To_Reg_r)
774
                    5'b10111 :
775
                      ACC <= #1 Save_Mux;
776
                    5'b10110 :
777
                      do <= #1 Save_Mux;
778
                    5'b11000 :
779
                      SP[7:0] <= #1 Save_Mux;
780
                    5'b11001 :
781
                      SP[15:8] <= #1 Save_Mux;
782
                    5'b11011 :
783
                      F <= #1 Save_Mux;
784
                  endcase
785
                end // if ((tstate == 1 && Save_ALU_r == 1'b0 && Auto_Wait_t1 == 1'b0) ||...              
786
            end // if (ClkEn == 1'b1 )         
787
        end // else: !if(reset_n == 1'b0 )
788
    end
789
 
790
 
791
  //-------------------------------------------------------------------------
792
  //
793
  // BC('), DE('), HL('), IX && IY
794
  //
795
  //-------------------------------------------------------------------------
796
  always @ (posedge clk)
797
    begin
798
      if (ClkEn == 1'b1 )
799
        begin
800
          // Bus A / Write
801
          RegAddrA_r <= #1  { Alternate, Set_BusA_To[2:1] };
802
          if (XY_Ind == 1'b0 && XY_State != 2'b00 && Set_BusA_To[2:1] == 2'b10 )
803
            begin
804
              RegAddrA_r <= #1 { XY_State[1],  2'b11 };
805
            end
806
 
807
          // Bus B
808
          RegAddrB_r <= #1 { Alternate, Set_BusB_To[2:1] };
809
          if (XY_Ind == 1'b0 && XY_State != 2'b00 && Set_BusB_To[2:1] == 2'b10 )
810
            begin
811
              RegAddrB_r <= #1 { XY_State[1],  2'b11 };
812
            end
813
 
814
          // Address from register
815
          RegAddrC <= #1 { Alternate,  Set_Addr_To[1:0] };
816
          // Jump (HL), LD SP,HL
817
          if ((JumpXY == 1'b1 || LDSPHL == 1'b1) )
818
            begin
819
              RegAddrC <= #1 { Alternate, 2'b10 };
820
            end
821
          if (((JumpXY == 1'b1 || LDSPHL == 1'b1) && XY_State != 2'b00) || (mcycle == 3'b110) )
822
            begin
823
              RegAddrC <= #1 { XY_State[1],  2'b11 };
824
            end
825
 
826
          if (I_DJNZ == 1'b1 && Save_ALU_r == 1'b1 && Mode < 2 )
827
            begin
828
              IncDecZ <= #1 F_Out[Flag_Z];
829
            end
830
          if ((tstate == 2 || (tstate == 3 && mcycle == 3'b001)) && IncDec_16[2:0] == 3'b100 )
831
            begin
832
              if (ID16 == 0 )
833
                begin
834
                  IncDecZ <= #1 1'b0;
835
                end
836
              else
837
                begin
838
                  IncDecZ <= #1 1'b1;
839
                end
840
            end
841
 
842
          RegBusA_r <= #1 RegBusA;
843
        end
844
 
845
    end // always @ (posedge clk)
846
 
847
 
848
  always @(/*AUTOSENSE*/Alternate or ExchangeDH or IncDec_16
849
           or RegAddrA_r or RegAddrB_r or XY_State or mcycle or tstate)
850
    begin
851
      if ((tstate == 2 || (tstate == 3 && mcycle == 3'b001 && IncDec_16[2] == 1'b1)) && XY_State == 2'b00)
852
        RegAddrA = { Alternate, IncDec_16[1:0] };
853
      else if ((tstate == 2 || (tstate == 3 && mcycle == 3'b001 && IncDec_16[2] == 1'b1)) && IncDec_16[1:0] == 2'b10)
854
        RegAddrA = { XY_State[1], 2'b11 };
855
      else if (ExchangeDH == 1'b1 && tstate == 3)
856
        RegAddrA = { Alternate, 2'b10 };
857
      else if (ExchangeDH == 1'b1 && tstate == 4)
858
        RegAddrA = { Alternate, 2'b01 };
859
      else
860
        RegAddrA = RegAddrA_r;
861
 
862
      if (ExchangeDH == 1'b1 && tstate == 3)
863
        RegAddrB = { Alternate, 2'b01 };
864
      else
865
        RegAddrB = RegAddrB_r;
866
    end // always @ *
867
 
868
 
869
  always @(/*AUTOSENSE*/ALU_Op_r or Auto_Wait_t1 or ExchangeDH
870
           or IncDec_16 or Read_To_Reg_r or Save_ALU_r or mcycle
871
           or tstate or wait_n)
872
    begin
873
      RegWEH = 1'b0;
874
      RegWEL = 1'b0;
875
      if ((tstate == 1 && Save_ALU_r == 1'b0 && Auto_Wait_t1 == 1'b0) ||
876
          (Save_ALU_r == 1'b1 && ALU_Op_r != 4'b0111) )
877
        begin
878
          case (Read_To_Reg_r)
879
            5'b10000 , 5'b10001 , 5'b10010 , 5'b10011 , 5'b10100 , 5'b10101 :
880
              begin
881
                RegWEH = ~ Read_To_Reg_r[0];
882
                RegWEL = Read_To_Reg_r[0];
883
              end
884
          endcase // case(Read_To_Reg_r)
885
 
886
        end // if ((tstate == 1 && Save_ALU_r == 1'b0 && Auto_Wait_t1 == 1'b0) ||...
887
 
888
 
889
      if (ExchangeDH == 1'b1 && (tstate == 3 || tstate == 4) )
890
        begin
891
          RegWEH = 1'b1;
892
          RegWEL = 1'b1;
893
        end
894
 
895
      if (IncDec_16[2] == 1'b1 && ((tstate == 2 && wait_n == 1'b1 && mcycle != 3'b001) || (tstate == 3 && mcycle == 3'b001)) )
896
        begin
897
          case (IncDec_16[1:0])
898
            2'b00 , 2'b01 , 2'b10 :
899
              begin
900
                RegWEH = 1'b1;
901
                RegWEL = 1'b1;
902
              end
903
          endcase
904
        end
905
    end // always @ *
906
 
907
 
908
  always @(/*AUTOSENSE*/ExchangeDH or ID16 or IncDec_16 or RegBusA_r
909
           or RegBusB or Save_Mux or mcycle or tstate)
910
    begin
911
      RegDIH = Save_Mux;
912
      RegDIL = Save_Mux;
913
 
914
      if (ExchangeDH == 1'b1 && tstate == 3 )
915
        begin
916
          RegDIH = RegBusB[15:8];
917
          RegDIL = RegBusB[7:0];
918
        end
919
      else if (ExchangeDH == 1'b1 && tstate == 4 )
920
        begin
921
          RegDIH = RegBusA_r[15:8];
922
          RegDIL = RegBusA_r[7:0];
923
        end
924
      else if (IncDec_16[2] == 1'b1 && ((tstate == 2 && mcycle != 3'b001) || (tstate == 3 && mcycle == 3'b001)) )
925
        begin
926
          RegDIH = ID16[15:8];
927
          RegDIL = ID16[7:0];
928
        end
929
    end
930
 
931
  tv80_reg i_reg
932
    (
933
     .clk                  (clk),
934
     .CEN                  (ClkEn),
935
     .WEH                  (RegWEH),
936
     .WEL                  (RegWEL),
937
     .AddrA                (RegAddrA),
938
     .AddrB                (RegAddrB),
939
     .AddrC                (RegAddrC),
940
     .DIH                  (RegDIH),
941
     .DIL                  (RegDIL),
942
     .DOAH                 (RegBusA[15:8]),
943
     .DOAL                 (RegBusA[7:0]),
944
     .DOBH                 (RegBusB[15:8]),
945
     .DOBL                 (RegBusB[7:0]),
946
     .DOCH                 (RegBusC[15:8]),
947
     .DOCL                 (RegBusC[7:0])
948
     );
949
 
950
  //-------------------------------------------------------------------------
951
  //
952
  // Buses
953
  //
954
  //-------------------------------------------------------------------------
955
 
956
  always @ (posedge clk)
957
    begin
958
      if (ClkEn == 1'b1 )
959
        begin
960
          case (Set_BusB_To)
961
            4'b0111 :
962
              BusB <= #1 ACC;
963
            4'b0000 , 4'b0001 , 4'b0010 , 4'b0011 , 4'b0100 , 4'b0101 :
964
              begin
965
                if (Set_BusB_To[0] == 1'b1 )
966
                  begin
967
                    BusB <= #1 RegBusB[7:0];
968
                  end
969
                else
970
                  begin
971
                    BusB <= #1 RegBusB[15:8];
972
                  end
973
              end
974
            4'b0110 :
975
              BusB <= #1 DI_Reg;
976
            4'b1000 :
977
              BusB <= #1 SP[7:0];
978
            4'b1001 :
979
              BusB <= #1 SP[15:8];
980
            4'b1010 :
981
              BusB <= #1 8'b00000001;
982
            4'b1011 :
983
              BusB <= #1 F;
984
            4'b1100 :
985
              BusB <= #1 PC[7:0];
986
            4'b1101 :
987
              BusB <= #1 PC[15:8];
988
            4'b1110 :
989
              BusB <= #1 8'b00000000;
990
            default :
991
              BusB <= #1 8'hxx;
992
          endcase
993
 
994
          case (Set_BusA_To)
995
            4'b0111 :
996
              BusA <= #1 ACC;
997
            4'b0000 , 4'b0001 , 4'b0010 , 4'b0011 , 4'b0100 , 4'b0101 :
998
              begin
999
                if (Set_BusA_To[0] == 1'b1 )
1000
                  begin
1001
                    BusA <= #1 RegBusA[7:0];
1002
                  end
1003
                else
1004
                  begin
1005
                    BusA <= #1 RegBusA[15:8];
1006
                  end
1007
              end
1008
            4'b0110 :
1009
              BusA <= #1 DI_Reg;
1010
            4'b1000 :
1011
              BusA <= #1 SP[7:0];
1012
            4'b1001 :
1013
              BusA <= #1 SP[15:8];
1014
            4'b1010 :
1015
              BusA <= #1 8'b00000000;
1016
            default :
1017
              BusB <= #1  8'hxx;
1018
          endcase
1019
        end
1020
    end
1021
 
1022
  //-------------------------------------------------------------------------
1023
  //
1024
  // Generate external control signals
1025
  //
1026
  //-------------------------------------------------------------------------
1027
  always @ (posedge clk)
1028
    begin
1029
      if (reset_n == 1'b0 )
1030
        begin
1031
          rfsh_n <= #1 1'b1;
1032
        end
1033
      else
1034
        begin
1035
          if (cen == 1'b1 )
1036
            begin
1037
              if (mcycle == 3'b001 && ((tstate == 2  && wait_n == 1'b1) || tstate == 3) )
1038
                begin
1039
                  rfsh_n <= #1 1'b0;
1040
                end
1041
              else
1042
                begin
1043
                  rfsh_n <= #1 1'b1;
1044
                end
1045
            end
1046
        end
1047
    end
1048
 
1049
 
1050
  always @(/*AUTOSENSE*/BusAck or Halt_FF or I_DJNZ or IntCycle
1051
           or IntE_FF1 or di or iorq_i or mcycle or tstate)
1052
    begin
1053
      mc = mcycle;
1054
      ts = tstate;
1055
      DI_Reg = di;
1056
      halt_n = ~ Halt_FF;
1057
      busak_n = ~ BusAck;
1058
      intcycle_n = ~ IntCycle;
1059
      IntE = IntE_FF1;
1060
      iorq = iorq_i;
1061
      stop = I_DJNZ;
1062
    end
1063
 
1064
  //-----------------------------------------------------------------------
1065
  //
1066
  // Syncronise inputs
1067
  //
1068
  //-----------------------------------------------------------------------
1069
 
1070
  always @ (posedge clk)
1071
    begin : sync_inputs
1072
 
1073
      if (reset_n == 1'b0 )
1074
        begin
1075
          BusReq_s <= #1 1'b0;
1076
          INT_s <= #1 1'b0;
1077
          NMI_s <= #1 1'b0;
1078
          Oldnmi_n <= #1 1'b0;
1079
        end
1080
      else
1081
        begin
1082
          if (cen == 1'b1 )
1083
            begin
1084
              BusReq_s <= #1 ~ busrq_n;
1085
              INT_s <= #1 ~ int_n;
1086
              if (NMICycle == 1'b1 )
1087
                begin
1088
                  NMI_s <= #1 1'b0;
1089
                end
1090
              else if (nmi_n == 1'b0 && Oldnmi_n == 1'b1 )
1091
                begin
1092
                  NMI_s <= #1 1'b1;
1093
                end
1094
              Oldnmi_n <= #1 nmi_n;
1095
            end
1096
        end
1097
    end
1098
 
1099
  //-----------------------------------------------------------------------
1100
  //
1101
  // Main state machine
1102
  //
1103
  //-----------------------------------------------------------------------
1104
 
1105
  always @ (posedge clk)
1106
    begin
1107
      if (reset_n == 1'b0 )
1108
        begin
1109
          mcycle <= #1 3'b001;
1110
          tstate <= #1 3'b000;
1111
          Pre_XY_F_M <= #1 3'b000;
1112
          Halt_FF <= #1 1'b0;
1113
          BusAck <= #1 1'b0;
1114
          NMICycle <= #1 1'b0;
1115
          IntCycle <= #1 1'b0;
1116
          IntE_FF1 <= #1 1'b0;
1117
          IntE_FF2 <= #1 1'b0;
1118
          No_BTR <= #1 1'b0;
1119
          Auto_Wait_t1 <= #1 1'b0;
1120
          Auto_Wait_t2 <= #1 1'b0;
1121
          m1_n <= #1 1'b1;
1122
        end
1123
      else
1124
        begin
1125
          if (cen == 1'b1 )
1126
            begin
1127
              if (T_Res == 1'b1 )
1128
                begin
1129
                  Auto_Wait_t1 <= #1 1'b0;
1130
                end
1131
              else
1132
                begin
1133
                  Auto_Wait_t1 <= #1 Auto_Wait || iorq_i;
1134
                end
1135
              Auto_Wait_t2 <= #1 Auto_Wait_t1;
1136
              No_BTR <= #1 (I_BT && (~ IR[4] || ~ F[Flag_P])) ||
1137
                        (I_BC && (~ IR[4] || F[Flag_Z] || ~ F[Flag_P])) ||
1138
                        (I_BTR && (~ IR[4] || F[Flag_Z]));
1139
              if (tstate == 2 )
1140
                begin
1141
                  if (SetEI == 1'b1 )
1142
                    begin
1143
                      IntE_FF1 <= #1 1'b1;
1144
                      IntE_FF2 <= #1 1'b1;
1145
                    end
1146
                  if (I_RETN == 1'b1 )
1147
                    begin
1148
                      IntE_FF1 <= #1 IntE_FF2;
1149
                    end
1150
                end
1151
              if (tstate == 3 )
1152
                begin
1153
                  if (SetDI == 1'b1 )
1154
                    begin
1155
                      IntE_FF1 <= #1 1'b0;
1156
                      IntE_FF2 <= #1 1'b0;
1157
                    end
1158
                end
1159
              if (IntCycle == 1'b1 || NMICycle == 1'b1 )
1160
                begin
1161
                  Halt_FF <= #1 1'b0;
1162
                end
1163
              if (mcycle == 3'b001 && tstate == 2 && wait_n == 1'b1 )
1164
                begin
1165
                  m1_n <= #1 1'b1;
1166
                end
1167
              if (BusReq_s == 1'b1 && BusAck == 1'b1 )
1168
                begin
1169
                end
1170
              else
1171
                begin
1172
                  BusAck <= #1 1'b0;
1173
                  if (tstate == 2 && wait_n == 1'b0 )
1174
                    begin
1175
                    end
1176
                  else if (T_Res == 1'b1 )
1177
                    begin
1178
                      if (Halt == 1'b1 )
1179
                        begin
1180
                          Halt_FF <= #1 1'b1;
1181
                        end
1182
                      if (BusReq_s == 1'b1 )
1183
                        begin
1184
                          BusAck <= #1 1'b1;
1185
                        end
1186
                      else
1187
                        begin
1188
                          tstate <= #1 3'b001;
1189
                          if (NextIs_XY_Fetch == 1'b1 )
1190
                            begin
1191
                              mcycle <= #1 3'b110;
1192
                              Pre_XY_F_M <= #1 mcycle;
1193
                              if (IR == 8'b00110110 && Mode == 0 )
1194
                                begin
1195
                                  Pre_XY_F_M <= #1 3'b010;
1196
                                end
1197
                            end
1198
                          else if ((mcycle == 3'b111) || (mcycle == 3'b110 && Mode == 1 && ISet != 2'b01) )
1199
                            begin
1200
                              mcycle <= #1 Pre_XY_F_M + 1;
1201
                            end
1202
                          else if ((mcycle == mcycles) ||
1203
                                   No_BTR == 1'b1 ||
1204
                                   (mcycle == 3'b010 && I_DJNZ == 1'b1 && IncDecZ == 1'b1) )
1205
                            begin
1206
                              m1_n <= #1 1'b0;
1207
                              mcycle <= #1 3'b001;
1208
                              IntCycle <= #1 1'b0;
1209
                              NMICycle <= #1 1'b0;
1210
                              if (NMI_s == 1'b1 && Prefix == 2'b00 )
1211
                                begin
1212
                                  NMICycle <= #1 1'b1;
1213
                                  IntE_FF1 <= #1 1'b0;
1214
                                end
1215
                              else if ((IntE_FF1 == 1'b1 && INT_s == 1'b1) && Prefix == 2'b00 && SetEI == 1'b0 )
1216
                                begin
1217
                                  IntCycle <= #1 1'b1;
1218
                                  IntE_FF1 <= #1 1'b0;
1219
                                  IntE_FF2 <= #1 1'b0;
1220
                                end
1221
                            end
1222
                          else
1223
                            begin
1224
                              mcycle <= #1 mcycle + 1;
1225
                            end
1226
                        end
1227
                    end
1228
                  else
1229
                    begin   // verilog has no "nor" operator
1230
                      if ( ~(Auto_Wait == 1'b1 && Auto_Wait_t2 == 1'b0) &&
1231
                           ~(IOWait == 1 && iorq_i == 1'b1 && Auto_Wait_t1 == 1'b0) )
1232
                        begin
1233
                          tstate <= #1 tstate + 1;
1234
                        end
1235
                    end
1236
                end
1237
              if (tstate == 0 )
1238
                begin
1239
                  m1_n <= #1 1'b0;
1240
                end
1241
            end
1242
        end
1243
    end
1244
 
1245
  always @(/*AUTOSENSE*/BTR_r or DI_Reg or IncDec_16 or JumpE or PC
1246
           or RegBusA or RegBusC or SP or tstate)
1247
    begin
1248
      if (JumpE == 1'b1 )
1249
        begin
1250
          PC16_B = { {8{DI_Reg[7]}}, DI_Reg };
1251
        end
1252
      else if (BTR_r == 1'b1 )
1253
        begin
1254
          PC16_B = -2;
1255
        end
1256
      else
1257
        begin
1258
          PC16_B = 1;
1259
        end
1260
 
1261
      if (tstate == 3)
1262
        begin
1263
          SP16_A = RegBusC;
1264
          SP16_B = { {8{DI_Reg[7]}}, DI_Reg };
1265
        end
1266
      else
1267
        begin
1268
          // suspect that ID16 and SP16 could be shared
1269
          SP16_A = SP;
1270
 
1271
          if (IncDec_16[3] == 1'b1)
1272
            SP16_B = -1;
1273
          else
1274
            SP16_B = 1;
1275
        end
1276
 
1277
      if (IncDec_16[3])
1278
        ID16_B = -1;
1279
      else
1280
        ID16_B = 1;
1281
 
1282
      ID16 = RegBusA + ID16_B;
1283
      PC16 = PC + PC16_B;
1284
      SP16 = SP16_A + SP16_B;
1285
    end // always @ *
1286
 
1287
 
1288
  always @(/*AUTOSENSE*/IntCycle or NMICycle or mcycle)
1289
    begin
1290
      Auto_Wait = 1'b0;
1291
      if (IntCycle == 1'b1 || NMICycle == 1'b1 )
1292
        begin
1293
          if (mcycle == 3'b001 )
1294
            begin
1295
              Auto_Wait = 1'b1;
1296
            end
1297
        end
1298
    end // always @ *
1299
 
1300
// synopsys dc_script_begin
1301
// set_attribute current_design "revision" "$Id: tv80_core.v,v 1.1 2004-05-16 17:39:57 ghutchis Exp $" -type string -quiet
1302
// synopsys dc_script_end
1303
endmodule // T80
1304
 

powered by: WebSVN 2.1.0

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