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

Subversion Repositories tv80

[/] [tv80/] [trunk/] [rtl/] [app_localcfg/] [lcfg.v] - Blame information for rev 103

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

Line No. Rev Author Line
1 101 ghutchis
/* Copyright (c) 2011, Guy Hutchison
2
   All rights reserved.
3
 
4
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5
 
6
    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
    * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9
 
10
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11
*/
12
 
13
//----------------------------------------------------------------------
14
//  Author: Guy Hutchison
15
//
16
//  Local Configuration Processor Application
17
//----------------------------------------------------------------------
18
 
19
module lcfg
20
  (input         clk,
21
   input         reset_n,
22 103 ghutchis
   input         lcfg_init,  // initialize memory to all 0
23 101 ghutchis
   input         lcfg_proc_reset,
24
 
25
   // incoming config interface to 
26
   // read/write processor memory
27
   input         cfgi_irdy,
28
   output        cfgi_trdy,
29
   input [14:0]  cfgi_addr,
30
   input         cfgi_write,
31
   input [31:0]  cfgi_wr_data,
32
   output [31:0] cfgi_rd_data,
33
 
34
   // outgoing config interface to system
35
   // configuration bus
36
   output        cfgo_irdy,
37
   input         cfgo_trdy,
38
   output [15:0] cfgo_addr,
39
   output        cfgo_write,
40
   output [31:0] cfgo_wr_data,
41
   input [31:0]  cfgo_rd_data
42
 
43
   );
44
 
45
  wire [15:0]     addr;
46
  wire [7:0]      dout;
47
  reg [7:0]       di;
48
  wire           mreq_n;
49
  wire           rd_n, wr_n;
50
  wire           iorq_n;
51
 
52
  reg            fw_mode;
53
  wire           ram_wait_n;
54
 
55
  wire           fw_en = (addr[15:13] == {1'b0, !fw_mode, 1'b0}) && !mreq_n;
56
  wire           fw_we = !wr_n;
57
 
58
  wire [7:0]      ram_rd_data;
59
  reg            last_wait;
60
  reg            wait_n;
61
 
62
  wire [7:0]     reg_addr1, reg_addr0;
63
  wire [7:0]     reg_wr_data3;
64
  wire [7:0]     reg_wr_data2;
65
  wire [7:0]     reg_wr_data1;
66
  wire [7:0]     reg_wr_data0;
67
  wire [7:0]     cb_rd_data;
68
  wire [1:0]     cb_control;
69
  reg [1:0]      cb_control_clr;
70
  wire [7:0]     tim_rd_data;
71
  wire [1:0]     fw_up_ctrl;
72
  wire           dma_iorq_n;
73
  wire [7:0]     dma_rd_data;
74
  reg [31:0]     read_hold;
75
  reg            read_latch;
76
  wire           dma_int_n;              // From dma of mx_lcfg_dma.v
77
  wire           proc_reset_n;
78
  /*AUTOWIRE*/
79
  // Beginning of automatic wires (for undeclared instantiated-module outputs)
80
  wire [7:0]            cd_rdata;               // From cfgo_driver of lcfg_cfgo_driver.v
81
  wire                  cfgo_wait_n;            // From cfgo_driver of lcfg_cfgo_driver.v
82
  // End of automatics
83
  wire           ram_mreq_n;
84
 
85
  assign ram_mreq_n = ~ (~mreq_n & ~addr[15]);
86 103 ghutchis
  assign         proc_reset_n = ~lcfg_proc_reset;
87 101 ghutchis
 
88
  tv80s tv80 (
89
     // Outputs
90
     .dout                              (dout),
91
     .m1_n                              (),
92
     .mreq_n                            (mreq_n),
93
     .iorq_n                            (iorq_n),
94
     .rd_n                              (rd_n),
95
     .wr_n                              (wr_n),
96
     .rfsh_n                            (),
97
     .halt_n                            (),
98
     .busak_n                           (),
99
     .A                                 (addr),
100
     // Inputs
101
     .reset_n                           (proc_reset_n),
102
     .clk                               (clk),
103
     .wait_n                            (wait_n),
104
     .int_n                             (dma_int_n),
105
     .nmi_n                             (1'b1),
106
     .busrq_n                           (1'b1),
107
     .di                                (di));
108
 
109
  always @(posedge clk)
110
    begin
111
      last_wait <= #1 wait_n;
112
    end
113
 
114
  always @*
115
    begin
116
      wait_n = 1;
117
 
118
      if (!mreq_n)
119
        begin
120
          if (~ram_mreq_n)
121
            begin
122
              di = ram_rd_data[7:0];
123
              wait_n = ram_wait_n;
124
            end
125
          else
126
            begin
127
              di = 8'h0;
128
            end
129
        end
130
      else if (!iorq_n)
131
        begin
132
          if (addr[7:3] == 0)
133
            begin
134
              di = cd_rdata;
135
              wait_n = cfgo_wait_n;
136
            end
137
          else
138
            di = 8'h0;
139
        end
140
      else
141
        di = 8'h0;
142
    end // always @ *
143
 
144
/*  lcfg_memctl AUTO_TEMPLATE
145
    (
146
     // Outputs
147
     .a_mreq_n                          (ram_mreq_n),
148
     .a_rd_n                            (rd_n),
149
     .a_wr_n                            (wr_n),
150
     .a_addr                            (addr[14:0]),
151
     .a_wdata                           (dout),
152
     .a_wait_n                          (ram_wait_n),
153
     .a_rdata                           (ram_rd_data),
154
 
155
     .b_wait_n                          (),
156
     .b_rdata                           (),
157
     .b_mreq_n                          (1'b1),
158
     .b_wr_n                            (1'b1),
159
     .b_addr                            (13'h0),
160
     .b_wdata                           (32'h0),
161
 
162
    );
163
*/
164
  lcfg_memctl memctl
165
    (/*AUTOINST*/
166
     // Outputs
167
     .a_wait_n                          (ram_wait_n),            // Templated
168
     .a_rdata                           (ram_rd_data),           // Templated
169
     .b_wait_n                          (),                      // Templated
170
     .b_rdata                           (),                      // Templated
171
     .cfgi_trdy                         (cfgi_trdy),
172
     .cfgi_rd_data                      (cfgi_rd_data[31:0]),
173
     // Inputs
174
     .clk                               (clk),
175
     .reset_n                           (reset_n),
176
     .a_mreq_n                          (ram_mreq_n),            // Templated
177
     .a_rd_n                            (rd_n),                  // Templated
178
     .a_wr_n                            (wr_n),                  // Templated
179
     .a_addr                            (addr[14:0]),            // Templated
180
     .a_wdata                           (dout),                  // Templated
181
     .b_mreq_n                          (1'b1),                  // Templated
182
     .b_wr_n                            (1'b1),                  // Templated
183
     .b_addr                            (13'h0),                 // Templated
184
     .b_wdata                           (32'h0),                 // Templated
185
     .lcfg_init                         (lcfg_init),
186
     .cfgi_irdy                         (cfgi_irdy),
187
     .cfgi_addr                         (cfgi_addr[14:0]),
188
     .cfgi_write                        (cfgi_write),
189
     .cfgi_wr_data                      (cfgi_wr_data[31:0]),
190
     .test_resume_h                     (test_resume_h));
191
 
192
  // DMA not needed
193
  // Need GP interrupt register for timer
194
 
195
  assign cfg_addr = { reg_addr1, reg_addr0 };
196
  assign cfg_wr_data = { reg_wr_data3, reg_wr_data2, reg_wr_data1, reg_wr_data0 };
197
 
198
/* lcfg_cfgo_driver AUTO_TEMPLATE
199
 (
200
     .cd_wdata                          (dout[7:0]),
201
 );
202
 */
203
  lcfg_cfgo_driver #(.io_base_addr(8'h0)) cfgo_driver
204
    (/*AUTOINST*/
205
     // Outputs
206
     .cd_rdata                          (cd_rdata[7:0]),
207
     .cfgo_wait_n                       (cfgo_wait_n),
208
     .cfgo_irdy                         (cfgo_irdy),
209
     .cfgo_addr                         (cfgo_addr[15:0]),
210
     .cfgo_write                        (cfgo_write),
211
     .cfgo_wr_data                      (cfgo_wr_data[31:0]),
212
     // Inputs
213
     .clk                               (clk),
214
     .reset_n                           (reset_n),
215
     .addr                              (addr[15:0]),
216
     .cd_wdata                          (dout[7:0]),             // Templated
217
     .mreq_n                            (mreq_n),
218
     .rd_n                              (rd_n),
219
     .wr_n                              (wr_n),
220
     .iorq_n                            (iorq_n),
221
     .cfgo_trdy                         (cfgo_trdy),
222
     .cfgo_rd_data                      (cfgo_rd_data[31:0]));
223
 
224
endmodule

powered by: WebSVN 2.1.0

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