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

Subversion Repositories tv80

[/] [tv80/] [trunk/] [rtl/] [wb_tv80/] [wb_tv80.v] - Blame information for rev 84

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 81 hharte
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
//// TV80 to Wishbone Master Interface Wrapper                   ////
4
////                                                             ////
5 82 hharte
//// $Id: wb_tv80.v,v 1.2 2008-12-17 07:46:29 hharte Exp $       ////
6 81 hharte
////                                                             ////
7
//// Copyright (C) 2008 Howard M. Harte                          ////
8
////                    hharte@opencores.org                     ////
9
////                                                             ////
10
//// This source file may be used and distributed without        ////
11
//// restriction provided that this copyright statement is not   ////
12
//// removed from the file and that any derivative work contains ////
13
//// the original copyright notice and the associated disclaimer.////
14
////                                                             ////
15
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
16
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
17
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
18
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
19
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
20
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
21
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
22
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
23
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
24
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
25
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
26
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
27
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
28
////                                                             ////
29
/////////////////////////////////////////////////////////////////////
30
 
31
`define TAG_MEM  2'b00
32
`define TAG_IO   2'b01
33
 
34
module wb_tv80 (nrst_i, clk_i,
35
                wbm_adr_o, wbm_tga_o, wbm_dat_i, wbm_dat_o, wbm_cyc_o,
36
                wbm_stb_o, wbm_we_o, wbm_ack_i,
37
                nmi_req_i,
38
                int_req_i,
39
                busrq_i,
40
                busak_o);
41
 
42
    input          nrst_i;
43
    input          clk_i;
44
 
45
    // WISHBONE master interface
46
    output [15:0]  wbm_adr_o;
47
    output [1:0]   wbm_tga_o;
48
    input  [7:0]   wbm_dat_i;
49
    output [7:0]   wbm_dat_o;
50
    output         wbm_cyc_o;
51
    output         wbm_stb_o;
52
    output         wbm_we_o;
53
    input          wbm_ack_i;
54
 
55
    // Z80-specific interface
56
    input          nmi_req_i;
57
    input          int_req_i;
58
    input          busrq_i;
59
    output         busak_o;
60
 
61
    // TV80 Interface
62
    wire           m1_n;
63
    wire           mreq_n;
64
    wire           iorq_n;
65
    wire           rd_n;
66
    wire           wr_n;
67
    wire           rfsh_n;
68
    wire           halt_n;
69
    wire           busak_n;
70
    wire [15:0]    tv80_adr;
71
    wire  [7:0]    tv80_dat_o;
72
    wire           wait_n;
73
    wire           int_n;
74
    wire           nmi_n;
75
    wire           busrq_n;
76
    wire  [7:0]    tv80_dat_i;
77
 
78
    assign wbm_adr_o = tv80_adr;
79
    assign wbm_dat_o = tv80_dat_o;
80 82 hharte
    assign wbm_we_o  = ~wr_n & (~mreq_n | ~iorq_n);
81 81 hharte
    assign wbm_stb_o = (~wr_n | ~rd_n) & (~mreq_n | ~iorq_n | ~m1_n);
82
    assign wbm_cyc_o = wbm_stb_o;
83
    assign wbm_tga_o = (~iorq_n ? `TAG_IO : `TAG_MEM);
84
 
85 82 hharte
    assign wait_n    = wbm_stb_o == 1'b0 ? 1'b1 : wbm_ack_i;
86 81 hharte
 
87
    assign tv80_dat_i = wbm_dat_i;
88
 
89 82 hharte
    assign int_n   = ~int_req_i;
90
    assign nmi_n   = ~nmi_req_i;
91 81 hharte
    assign busrq_n = ~busrq_i;
92
    assign busak_o = ~busak_n;
93
 
94
// Instantiate TV80 CPU Core
95
tv80s z80_core (
96
    .m1_n(m1_n),
97
    .mreq_n(mreq_n),
98
    .iorq_n(iorq_n),
99
    .rd_n(rd_n),
100
    .wr_n(wr_n),
101
    .rfsh_n(rfsh_n),
102
    .halt_n(halt_n),
103
    .busak_n(busak_n),
104
    .A(tv80_adr),
105
    .do(tv80_dat_o),
106
    .reset_n(nrst_i),
107
    .clk(clk_i),
108
    .wait_n(wait_n),
109
    .int_n(int_n),
110
    .nmi_n(nmi_n),
111
    .busrq_n(busrq_n),
112
    .di(tv80_dat_i)
113
    );
114
 
115
endmodule

powered by: WebSVN 2.1.0

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