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

Subversion Repositories tv80

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

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
   input         lcfg_proc_reset,
23
   input         scan_mode,
24
   input         scan_enable,
25
 
26
   // incoming config interface to 
27
   // read/write processor memory
28
   input         cfgi_irdy,
29
   output        cfgi_trdy,
30
   input [14:0]  cfgi_addr,
31
   input         cfgi_write,
32
   input [31:0]  cfgi_wr_data,
33
   output [31:0] cfgi_rd_data,
34
 
35
   // outgoing config interface to system
36
   // configuration bus
37
   output        cfgo_irdy,
38
   input         cfgo_trdy,
39
   output [15:0] cfgo_addr,
40
   output        cfgo_write,
41
   output [31:0] cfgo_wr_data,
42
   input [31:0]  cfgo_rd_data
43
 
44
   );
45
 
46
  wire [15:0]     addr;
47
  wire [7:0]      dout;
48
  reg [7:0]       di;
49
  wire           mreq_n;
50
  wire           rd_n, wr_n;
51
  wire           iorq_n;
52
 
53
  reg            fw_mode;
54
  wire           ram_wait_n;
55
 
56
  wire           fw_en = (addr[15:13] == {1'b0, !fw_mode, 1'b0}) && !mreq_n;
57
  wire           fw_we = !wr_n;
58
 
59
  wire [7:0]      ram_rd_data;
60
  reg            last_wait;
61
  reg            wait_n;
62
 
63
  wire [7:0]     reg_addr1, reg_addr0;
64
  wire [7:0]     reg_wr_data3;
65
  wire [7:0]     reg_wr_data2;
66
  wire [7:0]     reg_wr_data1;
67
  wire [7:0]     reg_wr_data0;
68
  wire [7:0]     cb_rd_data;
69
  wire [1:0]     cb_control;
70
  reg [1:0]      cb_control_clr;
71
  wire [7:0]     tim_rd_data;
72
  wire [1:0]     fw_up_ctrl;
73
  wire           dma_iorq_n;
74
  wire [7:0]     dma_rd_data;
75
  reg [31:0]     read_hold;
76
  reg            read_latch;
77
  wire           dma_int_n;              // From dma of mx_lcfg_dma.v
78
  wire           proc_reset_n;
79
  /*AUTOWIRE*/
80
  // Beginning of automatic wires (for undeclared instantiated-module outputs)
81
  wire [7:0]            cd_rdata;               // From cfgo_driver of lcfg_cfgo_driver.v
82
  wire                  cfgo_wait_n;            // From cfgo_driver of lcfg_cfgo_driver.v
83
  // End of automatics
84
  wire           ram_mreq_n;
85
 
86
  assign ram_mreq_n = ~ (~mreq_n & ~addr[15]);
87
  assign         proc_reset_n = (scan_mode) ? 1'b1 : ~lcfg_proc_reset;
88
 
89
  tv80s tv80 (
90
     // Outputs
91
     .dout                              (dout),
92
     .m1_n                              (),
93
     .mreq_n                            (mreq_n),
94
     .iorq_n                            (iorq_n),
95
     .rd_n                              (rd_n),
96
     .wr_n                              (wr_n),
97
     .rfsh_n                            (),
98
     .halt_n                            (),
99
     .busak_n                           (),
100
     .A                                 (addr),
101
     // Inputs
102
     .reset_n                           (proc_reset_n),
103
     .clk                               (clk),
104
     .wait_n                            (wait_n),
105
     .int_n                             (dma_int_n),
106
     .nmi_n                             (1'b1),
107
     .busrq_n                           (1'b1),
108
     .di                                (di));
109
 
110
  always @(posedge clk)
111
    begin
112
      last_wait <= #1 wait_n;
113
    end
114
 
115
  always @*
116
    begin
117
      wait_n = 1;
118
 
119
      if (!mreq_n)
120
        begin
121
          if (~ram_mreq_n)
122
            begin
123
              di = ram_rd_data[7:0];
124
              wait_n = ram_wait_n;
125
            end
126
          else
127
            begin
128
              di = 8'h0;
129
            end
130
        end
131
      else if (!iorq_n)
132
        begin
133
          if (addr[7:3] == 0)
134
            begin
135
              di = cd_rdata;
136
              wait_n = cfgo_wait_n;
137
            end
138
          else
139
            di = 8'h0;
140
        end
141
      else
142
        di = 8'h0;
143
    end // always @ *
144
 
145
/*  lcfg_memctl AUTO_TEMPLATE
146
    (
147
     // Outputs
148
     .a_mreq_n                          (ram_mreq_n),
149
     .a_rd_n                            (rd_n),
150
     .a_wr_n                            (wr_n),
151
     .a_addr                            (addr[14:0]),
152
     .a_wdata                           (dout),
153
     .a_wait_n                          (ram_wait_n),
154
     .a_rdata                           (ram_rd_data),
155
 
156
     .b_wait_n                          (),
157
     .b_rdata                           (),
158
     .b_mreq_n                          (1'b1),
159
     .b_wr_n                            (1'b1),
160
     .b_addr                            (13'h0),
161
     .b_wdata                           (32'h0),
162
 
163
    );
164
*/
165
  lcfg_memctl memctl
166
    (/*AUTOINST*/
167
     // Outputs
168
     .a_wait_n                          (ram_wait_n),            // Templated
169
     .a_rdata                           (ram_rd_data),           // Templated
170
     .b_wait_n                          (),                      // Templated
171
     .b_rdata                           (),                      // Templated
172
     .cfgi_trdy                         (cfgi_trdy),
173
     .cfgi_rd_data                      (cfgi_rd_data[31:0]),
174
     // Inputs
175
     .clk                               (clk),
176
     .reset_n                           (reset_n),
177
     .a_mreq_n                          (ram_mreq_n),            // Templated
178
     .a_rd_n                            (rd_n),                  // Templated
179
     .a_wr_n                            (wr_n),                  // Templated
180
     .a_addr                            (addr[14:0]),            // Templated
181
     .a_wdata                           (dout),                  // Templated
182
     .b_mreq_n                          (1'b1),                  // Templated
183
     .b_wr_n                            (1'b1),                  // Templated
184
     .b_addr                            (13'h0),                 // Templated
185
     .b_wdata                           (32'h0),                 // Templated
186
     .lcfg_init                         (lcfg_init),
187
     .cfgi_irdy                         (cfgi_irdy),
188
     .cfgi_addr                         (cfgi_addr[14:0]),
189
     .cfgi_write                        (cfgi_write),
190
     .cfgi_wr_data                      (cfgi_wr_data[31:0]),
191
     .test_resume_h                     (test_resume_h));
192
 
193
  // DMA not needed
194
  // Need GP interrupt register for timer
195
 
196
  assign cfg_addr = { reg_addr1, reg_addr0 };
197
  assign cfg_wr_data = { reg_wr_data3, reg_wr_data2, reg_wr_data1, reg_wr_data0 };
198
 
199
/* lcfg_cfgo_driver AUTO_TEMPLATE
200
 (
201
     .cd_wdata                          (dout[7:0]),
202
 );
203
 */
204
  lcfg_cfgo_driver #(.io_base_addr(8'h0)) cfgo_driver
205
    (/*AUTOINST*/
206
     // Outputs
207
     .cd_rdata                          (cd_rdata[7:0]),
208
     .cfgo_wait_n                       (cfgo_wait_n),
209
     .cfgo_irdy                         (cfgo_irdy),
210
     .cfgo_addr                         (cfgo_addr[15:0]),
211
     .cfgo_write                        (cfgo_write),
212
     .cfgo_wr_data                      (cfgo_wr_data[31:0]),
213
     // Inputs
214
     .clk                               (clk),
215
     .reset_n                           (reset_n),
216
     .addr                              (addr[15:0]),
217
     .cd_wdata                          (dout[7:0]),             // Templated
218
     .mreq_n                            (mreq_n),
219
     .rd_n                              (rd_n),
220
     .wr_n                              (wr_n),
221
     .iorq_n                            (iorq_n),
222
     .cfgo_trdy                         (cfgo_trdy),
223
     .cfgo_rd_data                      (cfgo_rd_data[31:0]));
224
 
225
endmodule

powered by: WebSVN 2.1.0

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