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

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64/] [rtl/] [bench/] [soc/] [FT64SoC.v] - Blame information for rev 47

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 47 robfinch
// ============================================================================
2
//        __
3
//   \\__/ o\    (C) 2017-2018  Robert Finch, Waterloo
4
//    \  __ /    All rights reserved.
5
//     \/_//     robfinch<remove>@finitron.ca
6
//       ||
7
//
8
//      FT64SoC.v
9
//
10
// This source file is free software: you can redistribute it and/or modify 
11
// it under the terms of the GNU Lesser General Public License as published 
12
// by the Free Software Foundation, either version 3 of the License, or     
13
// (at your option) any later version.                                      
14
//                                                                          
15
// This source file is distributed in the hope that it will be useful,      
16
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
18
// GNU General Public License for more details.                             
19
//                                                                          
20
// You should have received a copy of the GNU General Public License        
21
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
22
//
23
// ============================================================================
24
//
25
module FT64SoC(cpu_resetn, xclk, led, sw, irq,
26
    TMDS_OUT_clk_p, TMDS_OUT_clk_n, TMDS_OUT_data_p, TMDS_OUT_data_n
27
//    gtp_clk_p, gtp_clk_n,
28
//    dp_tx_hp_detect, dp_tx_aux_p, dp_tx_aux_n, dp_rx_aux_p, dp_rx_aux_n,
29
//    dp_tx_lane0_p, dp_tx_lane0_n, dp_tx_lane1_p, dp_tx_lane1_n
30
);
31
input cpu_resetn;
32
input xclk;
33
output reg [7:0] led;
34
input [7:0] sw;
35
input irq;
36
output TMDS_OUT_clk_p;
37
output TMDS_OUT_clk_n;
38
output [2:0] TMDS_OUT_data_p;
39
output [2:0] TMDS_OUT_data_n;
40
//input gtp_clk_p;
41
//input gtp_clk_n;
42
//input dp_tx_hp_detect;
43
//output dp_tx_aux_p;
44
//output dp_tx_aux_n;
45
//input dp_rx_aux_p;
46
//input dp_rx_aux_n;
47
//output dp_tx_lane0_p;
48
//output dp_tx_lane0_n;
49
//output dp_tx_lane1_p;
50
//output dp_tx_lane1_n;
51
 
52
wire rst;
53
wire xrst = ~cpu_resetn;
54
wire clk25, clk50, clk80, clk100, clk200, clk400;
55
wire hSync, vSync, blank, border;
56
wire [7:0] red, blue, green;
57
 
58
wire [2:0] cti;
59
wire cyc, stb, ack;
60
wire we;
61
wire [7:0] sel;
62
wire [31:0] adr;
63
reg [63:0] dati;
64
wire [63:0] dato;
65
 
66
wire [23:0] tc1_rgb;
67
wire tc1_ack;
68
wire [31:0] tc1_dato;
69
wire ack_scr, ack_br;
70
wire [63:0] scr_dato, br_dato;
71
wire rnd_ack;
72
wire [31:0] rnd_dato;
73
 
74
NexysVideoClkgen ucg1
75
 (
76
  // Clock out ports
77
  .clk100(clk100),
78
  .clk400(clk400),
79
  .clk80(clk80),
80
  .clk50(clk25),
81
  .clk200(clk200),
82
  // Status and control signals
83
  .reset(xrst),
84
  .locked(locked),       // output locked
85
 // Clock in ports
86
  .clk_in1(xclk)
87
);
88
assign rst = !locked;
89
 
90
WXGASyncGen1280x768_60Hz u4
91
(
92
        .rst(rst),
93
        .clk(clk80),
94
        .hSync(hSync),
95
        .vSync(vSync),
96
        .blank(blank),
97
        .border(border)
98
);
99
 
100
rgb2dvi #(
101
    .kGenerateSerialClk(1'b0),
102
    .kClkPrimitive("MMCM"),
103
    .kClkRange(2),
104
    .kRstActiveHigh(1'b1)
105
)
106
ur2d1
107
(
108
    .TMDS_Clk_p(TMDS_OUT_clk_p),
109
    .TMDS_Clk_n(TMDS_OUT_clk_n),
110
    .TMDS_Data_p(TMDS_OUT_data_p),
111
    .TMDS_Data_n(TMDS_OUT_data_n),
112
    .aRst(rst),
113
    .aRst_n(~rst),
114
    .vid_pData({red,blue,green}),
115
    .vid_pVDE(~blank),
116
    .vid_pHSync(~hSync),    // hSync is neg going for 1366x768
117
    .vid_pVSync(vSync),
118
    .PixelClk(clk80),
119
    .SerialClk(clk400)
120
);
121
 
122
//top_level udp1
123
//(
124
//    .clk100(clk100),
125
//    .debug(),
126
//    .gtptxp({dp_tx_lane1_p,dp_tx_lane0_p}),
127
//    .gtptxn({dp_tx_lane1_n,dp_tx_lane0_n}),
128
//    .refclk0_p(gtp_clk_p),
129
//    .refclk0_n(gtp_clk_n), 
130
//    .refclk1_p(gtp_clk_p),
131
//    .refclk1_n(gtp_clk_n),
132
//    .dp_tx_hp_detect(dp_tx_hp_detect),
133
//    .dp_tx_aux_p(dp_tx_aux_p),
134
//    .dp_tx_aux_n(dp_tx_aux_n),
135
//    .dp_rx_aux_p(dp_rx_aux_p),
136
//    .dp_rx_aux_n(dp_rx_aux_n)
137
//);
138
 
139
wire cs_br = adr[31:18]==14'h3FFF;
140
wire cs_tc1 = adr[31:16]==16'hFFD0;
141
wire cs_scr = adr[31:20]==12'hFF4;
142
wire cs_rnd = adr[31:4]==28'hFFDC0C0;
143
wire cs_led = cyc && stb && (adr[31:4]==28'hFFDC060);
144
 
145
FT64_TextController #(.num(1)) tc1
146
(
147
        .rst_i(rst),
148
        .clk_i(clk25),
149
        .cs_i(cs_tc1),
150
        .cyc_i(cyc),
151
        .stb_i(stb),
152
        .ack_o(tc1_ack),
153
        .wr_i(we),
154
        .adr_i(adr[15:0]),
155
        .dat_i(dato[31:0]),
156
        .dat_o(tc1_dato),
157
        .lp(),
158
        .curpos(),
159
        .vclk(clk80),
160
        .hsync(hSync),
161
        .vsync(vSync),
162
        .blank(blank),
163
        .border(border),
164
        .rgbIn(24'd0),
165
        .rgbOut(tc1_rgb)
166
);
167
assign red = tc1_rgb[23:16];
168
assign green = tc1_rgb[15:8];
169
assign blue = tc1_rgb[7:0];
170
 
171
wire ack_led = cs_led;
172
always @(posedge clk25)
173
begin
174
led[0] <= cs_br;
175
led[1] <= cs_scr;
176
if (cs_led)
177
    led <= dato[7:0];
178
end
179
wire [7:0] led_dato = sw;
180
 
181
assign ack = ack_scr|ack_led|tc1_ack|ack_br|rnd_ack;
182
always @*
183
casez({cs_br,cs_tc1,cs_scr,cs_led,cs_rnd})
184
5'b1????:    dati <= br_dato;
185
5'b01???:    dati <= {2{tc1_dato}};
186
5'b001??:    dati <= scr_dato;
187
5'b0001?:    dati <= {8{led_dato}};
188
5'b00001:   dati <= {2{rnd_dato}};
189
default:    dati <= {2{32'h1C}}; // NOP
190
endcase
191
 
192
scratchmem uscr1
193
(
194
    .rst_i(rst),
195
    .clk_i(clk25),
196
    .cti_i(cti),
197
    .cs_i(cs_scr),
198
    .cyc_i(cyc),
199
    .stb_i(stb),
200
    .ack_o(ack_scr),
201
    .we_i(we),
202
    .sel_i(sel),
203
    .adr_i(adr[14:0]),
204
    .dat_i(dato),
205
    .dat_o(scr_dato)
206
);
207
 
208
bootrom #(64) ubr1
209
(
210
    .rst_i(rst),
211
    .clk_i(clk25),
212
    .cti_i(cti),
213
    .cs_i(cs_br),
214
    .cyc_i(cyc),
215
    .stb_i(stb),
216
    .ack_o(ack_br),
217
    .adr_i(adr[17:0]),
218
    .dat_o(br_dato)
219
);
220
 
221
FT64_mpu ucpu1
222
(
223
    .hartid_i(64'h1),
224
    .rst_i(rst),
225
    .clk_i(clk25),
226
    .clk4x_i(clk200),
227
    .irq_i({irq,2'b00}),
228
    .vec_i(9'd436),
229
    .cti_o(cti),
230
    .cyc_o(cyc),
231
    .stb_o(stb),
232
    .ack_i(ack),
233
    .err_i(1'b0),
234
    .we_o(we),
235
    .sel_o(sel),
236
    .adr_o(adr),
237
    .dat_o(dato),
238
    .dat_i(dati)
239
);
240
 
241
random  uprg1
242
(
243
        .rst_i(rst),
244
        .clk_i(clk25),
245
        .cs_i(cs_rnd),
246
        .cyc_i(cyc),
247
        .stb_i(stb),
248
        .ack_o(rnd_ack),
249
        .we_i(we),
250
        .adr_i(adr[3:0]),
251
        .dat_i(dato[31:0]),
252
        .dat_o(rnd_dato)
253
);
254
 
255
endmodule

powered by: WebSVN 2.1.0

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