1 |
2 |
fukuchi |
|
2 |
|
|
`timescale 1ps/1ps
|
3 |
|
|
|
4 |
|
|
module tessera_top (
|
5 |
|
|
//
|
6 |
|
|
sys_reset_n,
|
7 |
|
|
sys_init_n,
|
8 |
|
|
sys_clk0,
|
9 |
|
|
sys_clk1,
|
10 |
|
|
sys_clk2,
|
11 |
|
|
sys_clk3,
|
12 |
|
|
//
|
13 |
|
|
// jtag_tms,
|
14 |
|
|
// jtag_tck,
|
15 |
|
|
// jtag_trst,
|
16 |
|
|
// jtag_tdi,
|
17 |
|
|
// jtag_tdo,
|
18 |
|
|
//
|
19 |
|
|
uart_txd,
|
20 |
|
|
uart_rxd,
|
21 |
|
|
uart_rts_n,
|
22 |
|
|
uart_cts_n,
|
23 |
|
|
uart_dtr_n,
|
24 |
|
|
uart_dsr_n,
|
25 |
|
|
uart_dcd_n,
|
26 |
|
|
uart_ri_n,
|
27 |
|
|
//
|
28 |
|
|
mem_cs2_rstdrv,
|
29 |
|
|
mem_cs2_int,
|
30 |
|
|
mem_cs2_dir,
|
31 |
|
|
mem_cs2_g_n,
|
32 |
|
|
mem_cs2_n,
|
33 |
|
|
mem_cs2_iochrdy,
|
34 |
|
|
mem_cs1_rst_n,
|
35 |
|
|
mem_cs1_n,
|
36 |
|
|
mem_cs1_rdy,
|
37 |
|
|
mem_cs0_n,
|
38 |
|
|
mem_we_n,
|
39 |
|
|
mem_oe_n,
|
40 |
|
|
mem_a,
|
41 |
|
|
mem_d,
|
42 |
|
|
//
|
43 |
|
|
sdram0_clk,
|
44 |
|
|
sdram0_cke,
|
45 |
|
|
sdram0_cs_n,
|
46 |
|
|
sdram0_ras_n,
|
47 |
|
|
sdram0_cas_n,
|
48 |
|
|
sdram0_we_n,
|
49 |
|
|
sdram0_dqm,
|
50 |
|
|
sdram0_ba,
|
51 |
|
|
sdram0_a,
|
52 |
|
|
sdram0_d,
|
53 |
|
|
//
|
54 |
|
|
sdram1_clk,
|
55 |
|
|
sdram1_cke,
|
56 |
|
|
sdram1_cs_n,
|
57 |
|
|
sdram1_ras_n,
|
58 |
|
|
sdram1_cas_n,
|
59 |
|
|
sdram1_we_n,
|
60 |
|
|
sdram1_dqm,
|
61 |
|
|
sdram1_ba,
|
62 |
|
|
sdram1_a,
|
63 |
|
|
sdram1_d,
|
64 |
|
|
//
|
65 |
|
|
vga_clkp,
|
66 |
|
|
vga_clkn,
|
67 |
|
|
vga_hsync,
|
68 |
|
|
vga_vsync,
|
69 |
|
|
vga_blank,
|
70 |
|
|
vga_d,
|
71 |
|
|
// misc
|
72 |
|
|
misc_gpio,
|
73 |
|
|
misc_tp
|
74 |
|
|
);
|
75 |
|
|
//
|
76 |
|
|
input sys_reset_n;
|
77 |
|
|
output sys_init_n;
|
78 |
|
|
input sys_clk0; // XT 20MHz(pos)
|
79 |
|
|
input sys_clk1; // XT 20MHz(neg)
|
80 |
|
|
input sys_clk2; // XT 6MHz(pos)
|
81 |
|
|
input sys_clk3; // XT 6MHz(neg)
|
82 |
|
|
//
|
83 |
|
|
// input jtag_tms;
|
84 |
|
|
// input jtag_tck;
|
85 |
|
|
// input jtag_trst;
|
86 |
|
|
// input jtag_tdi;
|
87 |
|
|
// output jtag_tdo;
|
88 |
|
|
//
|
89 |
|
|
output uart_txd;
|
90 |
|
|
input uart_rxd;
|
91 |
|
|
output uart_rts_n;
|
92 |
|
|
input uart_cts_n;
|
93 |
|
|
output uart_dtr_n;
|
94 |
|
|
input uart_dsr_n;
|
95 |
|
|
input uart_dcd_n;
|
96 |
|
|
input uart_ri_n;
|
97 |
|
|
//
|
98 |
|
|
output mem_cs2_rstdrv;
|
99 |
|
|
input mem_cs2_int;
|
100 |
|
|
output mem_cs2_dir;
|
101 |
|
|
output mem_cs2_g_n;
|
102 |
|
|
output mem_cs2_n;
|
103 |
|
|
input mem_cs2_iochrdy;
|
104 |
|
|
output mem_cs1_rst_n;
|
105 |
|
|
output mem_cs1_n;
|
106 |
|
|
input mem_cs1_rdy;
|
107 |
|
|
output mem_cs0_n;
|
108 |
|
|
output mem_we_n;
|
109 |
|
|
output mem_oe_n;
|
110 |
|
|
output [22:0] mem_a;
|
111 |
|
|
inout [7:0] mem_d;
|
112 |
|
|
//
|
113 |
|
|
output sdram0_clk;
|
114 |
|
|
output sdram0_cke;
|
115 |
|
|
output [1:0] sdram0_cs_n;
|
116 |
|
|
output sdram0_ras_n;
|
117 |
|
|
output sdram0_cas_n;
|
118 |
|
|
output sdram0_we_n;
|
119 |
|
|
output [1:0] sdram0_dqm;
|
120 |
|
|
output [1:0] sdram0_ba;
|
121 |
|
|
output [12:0] sdram0_a;
|
122 |
|
|
inout [15:0] sdram0_d;
|
123 |
|
|
//
|
124 |
|
|
output sdram1_clk;
|
125 |
|
|
output sdram1_cke;
|
126 |
|
|
output [1:0] sdram1_cs_n;
|
127 |
|
|
output sdram1_ras_n;
|
128 |
|
|
output sdram1_cas_n;
|
129 |
|
|
output sdram1_we_n;
|
130 |
|
|
output [1:0] sdram1_dqm;
|
131 |
|
|
output [1:0] sdram1_ba;
|
132 |
|
|
output [12:0] sdram1_a;
|
133 |
|
|
inout [15:0] sdram1_d;
|
134 |
|
|
//
|
135 |
|
|
output vga_clkp;
|
136 |
|
|
output vga_clkn;
|
137 |
|
|
output vga_hsync;
|
138 |
|
|
output vga_vsync;
|
139 |
|
|
output vga_blank;
|
140 |
|
|
output [23:0] vga_d;
|
141 |
|
|
// misc
|
142 |
|
|
input [3:0] misc_gpio;
|
143 |
|
|
output misc_tp;
|
144 |
|
|
|
145 |
|
|
// JTAG OE control
|
146 |
|
|
// wire jtag_tdo_oe;
|
147 |
|
|
// wire jtag_tdo_o;
|
148 |
|
|
// assign jtag_tdo = (jtag_tdo_oe) ? jtag_tdo_o: 1'bz;
|
149 |
|
|
|
150 |
|
|
// OE control PAD for SDRAM
|
151 |
|
|
wire [15:0] sdram0_d_oe;
|
152 |
|
|
wire [15:0] sdram0_d_o;
|
153 |
|
|
wire [15:0] sdram1_d_oe;
|
154 |
|
|
wire [15:0] sdram1_d_o;
|
155 |
|
|
assign sdram0_d[15] = (sdram0_d_oe[15]) ? sdram0_d_o[15]: 1'bz;
|
156 |
|
|
assign sdram0_d[14] = (sdram0_d_oe[14]) ? sdram0_d_o[14]: 1'bz;
|
157 |
|
|
assign sdram0_d[13] = (sdram0_d_oe[13]) ? sdram0_d_o[13]: 1'bz;
|
158 |
|
|
assign sdram0_d[12] = (sdram0_d_oe[12]) ? sdram0_d_o[12]: 1'bz;
|
159 |
|
|
assign sdram0_d[11] = (sdram0_d_oe[11]) ? sdram0_d_o[11]: 1'bz;
|
160 |
|
|
assign sdram0_d[10] = (sdram0_d_oe[10]) ? sdram0_d_o[10]: 1'bz;
|
161 |
|
|
assign sdram0_d[9] = (sdram0_d_oe[9] ) ? sdram0_d_o[9] : 1'bz;
|
162 |
|
|
assign sdram0_d[8] = (sdram0_d_oe[8] ) ? sdram0_d_o[8] : 1'bz;
|
163 |
|
|
assign sdram0_d[7] = (sdram0_d_oe[7] ) ? sdram0_d_o[7] : 1'bz;
|
164 |
|
|
assign sdram0_d[6] = (sdram0_d_oe[6] ) ? sdram0_d_o[6] : 1'bz;
|
165 |
|
|
assign sdram0_d[5] = (sdram0_d_oe[5] ) ? sdram0_d_o[5] : 1'bz;
|
166 |
|
|
assign sdram0_d[4] = (sdram0_d_oe[4] ) ? sdram0_d_o[4] : 1'bz;
|
167 |
|
|
assign sdram0_d[3] = (sdram0_d_oe[3] ) ? sdram0_d_o[3] : 1'bz;
|
168 |
|
|
assign sdram0_d[2] = (sdram0_d_oe[2] ) ? sdram0_d_o[2] : 1'bz;
|
169 |
|
|
assign sdram0_d[1] = (sdram0_d_oe[1] ) ? sdram0_d_o[1] : 1'bz;
|
170 |
|
|
assign sdram0_d[0] = (sdram0_d_oe[0] ) ? sdram0_d_o[0] : 1'bz;
|
171 |
|
|
assign sdram1_d[15] = (sdram1_d_oe[15]) ? sdram1_d_o[15]: 1'bz;
|
172 |
|
|
assign sdram1_d[14] = (sdram1_d_oe[14]) ? sdram1_d_o[14]: 1'bz;
|
173 |
|
|
assign sdram1_d[13] = (sdram1_d_oe[13]) ? sdram1_d_o[13]: 1'bz;
|
174 |
|
|
assign sdram1_d[12] = (sdram1_d_oe[12]) ? sdram1_d_o[12]: 1'bz;
|
175 |
|
|
assign sdram1_d[11] = (sdram1_d_oe[11]) ? sdram1_d_o[11]: 1'bz;
|
176 |
|
|
assign sdram1_d[10] = (sdram1_d_oe[10]) ? sdram1_d_o[10]: 1'bz;
|
177 |
|
|
assign sdram1_d[9] = (sdram1_d_oe[9] ) ? sdram1_d_o[9] : 1'bz;
|
178 |
|
|
assign sdram1_d[8] = (sdram1_d_oe[8] ) ? sdram1_d_o[8] : 1'bz;
|
179 |
|
|
assign sdram1_d[7] = (sdram1_d_oe[7] ) ? sdram1_d_o[7] : 1'bz;
|
180 |
|
|
assign sdram1_d[6] = (sdram1_d_oe[6] ) ? sdram1_d_o[6] : 1'bz;
|
181 |
|
|
assign sdram1_d[5] = (sdram1_d_oe[5] ) ? sdram1_d_o[5] : 1'bz;
|
182 |
|
|
assign sdram1_d[4] = (sdram1_d_oe[4] ) ? sdram1_d_o[4] : 1'bz;
|
183 |
|
|
assign sdram1_d[3] = (sdram1_d_oe[3] ) ? sdram1_d_o[3] : 1'bz;
|
184 |
|
|
assign sdram1_d[2] = (sdram1_d_oe[2] ) ? sdram1_d_o[2] : 1'bz;
|
185 |
|
|
assign sdram1_d[1] = (sdram1_d_oe[1] ) ? sdram1_d_o[1] : 1'bz;
|
186 |
|
|
assign sdram1_d[0] = (sdram1_d_oe[0] ) ? sdram1_d_o[0] : 1'bz;
|
187 |
|
|
|
188 |
|
|
// OE control PAD for MEM-BUS
|
189 |
|
|
wire [7:0] mem_d_oe;
|
190 |
|
|
wire [7:0] mem_d_o;
|
191 |
|
|
assign mem_d[7] = (mem_d_oe[7]) ? mem_d_o[7]: 1'bz;
|
192 |
|
|
assign mem_d[6] = (mem_d_oe[6]) ? mem_d_o[6]: 1'bz;
|
193 |
|
|
assign mem_d[5] = (mem_d_oe[5]) ? mem_d_o[5]: 1'bz;
|
194 |
|
|
assign mem_d[4] = (mem_d_oe[4]) ? mem_d_o[4]: 1'bz;
|
195 |
|
|
assign mem_d[3] = (mem_d_oe[3]) ? mem_d_o[3]: 1'bz;
|
196 |
|
|
assign mem_d[2] = (mem_d_oe[2]) ? mem_d_o[2]: 1'bz;
|
197 |
|
|
assign mem_d[1] = (mem_d_oe[1]) ? mem_d_o[1]: 1'bz;
|
198 |
|
|
assign mem_d[0] = (mem_d_oe[0]) ? mem_d_o[0]: 1'bz;
|
199 |
|
|
|
200 |
|
|
|
201 |
|
|
// PLL_A
|
202 |
|
|
//wire sys_pll_a_clk;
|
203 |
|
|
//wire sys_pll_a_locked;
|
204 |
|
|
//pllx7per8_20to17_50 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
205 |
|
|
//pllx1_20to20 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
206 |
|
|
//pllx5per4_20to25 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
207 |
|
|
//pllx3per2_20to30 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
208 |
|
|
//pllx7per4_20to35 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk),.locked(sys_pll_a_locked));
|
209 |
|
|
//pllx2_20to40 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
210 |
|
|
//pllx5per2_20to50 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
211 |
|
|
//pllx3_20to60 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
212 |
|
|
//pllx7per2_20to70 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
213 |
|
|
//pllx4_20to80 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
214 |
|
|
//pllx6_20to120 i_pll_a (.inclk0(sys_clk0),.c0(sys_pll_a_clk));
|
215 |
|
|
// PLL_B
|
216 |
|
|
//wire sys_pll_b_clk;
|
217 |
|
|
//wire sys_pll_b_locked;
|
218 |
|
|
//pllx7per8_20to17_50 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk),.locked(sys_pll_b_locked));
|
219 |
|
|
//pllx1_20to20 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
220 |
|
|
//pllx5per4_20to25 i_pll_c (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
221 |
|
|
//pllx3per2_20to30 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
222 |
|
|
//pllx7per4_20to35 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
223 |
|
|
//pllx2_20to40 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
224 |
|
|
//pllx5per2_20to50 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
225 |
|
|
//pllx3_20to60 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
226 |
|
|
//pllx7per2_20to70 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
227 |
|
|
//pllx4_20to80 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
228 |
|
|
//pllx6_20to120 i_pll_b (.inclk0(sys_clk0),.c0(sys_pll_b_clk));
|
229 |
|
|
|
230 |
|
|
wire [1:0] sys_clmode;
|
231 |
|
|
wire sys_or1200_clk;
|
232 |
|
|
wire sys_wb_clk;
|
233 |
|
|
wire sys_mem_clk;
|
234 |
|
|
wire sys_sdram_clk;
|
235 |
|
|
wire sys_vga_clk;
|
236 |
|
|
wire sys_pll_locked;
|
237 |
|
|
|
238 |
|
|
//////////////////////////////////////////////
|
239 |
|
|
// Single PLL
|
240 |
|
|
// ExternalPin
|
241 |
|
|
// sys_clk0: OpenRiscCPU,WinsBoneBus,VGA,Flash,SDRAM
|
242 |
|
|
// sys_clk1: not use
|
243 |
|
|
// sys_clk2: not use
|
244 |
|
|
// sys_clk3: not use
|
245 |
|
|
//////////////////////////////////////////////
|
246 |
|
|
// CLOCK SPEC:[CPU][WB][FLASH][SDRAM][VGA]
|
247 |
|
|
`define CLOCK_25_25_50_50_25
|
248 |
|
|
//`define CLOCK_30_30_50_50_25
|
249 |
|
|
//`define CLOCK_25_25_60_60_25
|
250 |
|
|
//`define CLOCK_35_35_70_70_35
|
251 |
|
|
|
252 |
|
|
//`define CLOCK_40_20_40_40_40
|
253 |
|
|
//`define CLOCK_35_17P5_35_35_35
|
254 |
|
|
|
255 |
|
|
// x1
|
256 |
|
|
`ifdef CLOCK_25_25_50_50_25
|
257 |
|
|
wire sys_pll_a_clk;
|
258 |
|
|
wire sys_pll_b_clk;
|
259 |
|
|
//wire sys_pll_b_clk_div;
|
260 |
|
|
pll_20to25AND50 i_pll (.inclk0(sys_clk0),.c0(sys_pll_a_clk),.c1(sys_pll_b_clk),.locked(sys_pll_locked));
|
261 |
|
|
//div i_div (.clock(sys_pll_b_clk),.q(sys_pll_b_clk_div));
|
262 |
|
|
assign sys_clmode = 2'b00;
|
263 |
|
|
assign sys_or1200_clk = sys_pll_a_clk;
|
264 |
|
|
assign sys_wb_clk = sys_pll_a_clk;
|
265 |
|
|
assign sys_mem_clk = sys_pll_b_clk;
|
266 |
|
|
assign sys_sdram_clk = sys_pll_b_clk;
|
267 |
|
|
assign sys_vga_clk = sys_pll_a_clk; // VESA 800x525(-4) just 60Hz at 25MHz
|
268 |
|
|
`endif
|
269 |
|
|
`ifdef CLOCK_30_30_50_50_25
|
270 |
|
|
wire sys_pll_a_clk;
|
271 |
|
|
wire sys_pll_b_clk;
|
272 |
|
|
wire sys_pll_b_clk_div;
|
273 |
|
|
pll_20to30AND50 i_pll (.inclk0(sys_clk0),.c0(sys_pll_a_clk),.c1(sys_pll_b_clk),.locked(sys_pll_locked));
|
274 |
|
|
div i_div (.clock(sys_pll_b_clk),.q(sys_pll_b_clk_div));
|
275 |
|
|
assign sys_clmode = 2'b00;
|
276 |
|
|
assign sys_or1200_clk = sys_pll_a_clk;
|
277 |
|
|
assign sys_wb_clk = sys_pll_a_clk;
|
278 |
|
|
assign sys_mem_clk = sys_pll_b_clk;
|
279 |
|
|
assign sys_sdram_clk = sys_pll_b_clk;
|
280 |
|
|
assign sys_vga_clk = sys_pll_b_clk_div; // VESA 800x525(-4) just 60Hz at 25MHz,not related clock,but skew is ok.
|
281 |
|
|
`endif
|
282 |
|
|
`ifdef CLOCK_25_25_60_60_25
|
283 |
|
|
wire sys_pll_a_clk;
|
284 |
|
|
wire sys_pll_b_clk;
|
285 |
|
|
//wire sys_pll_b_clk_div;
|
286 |
|
|
pll_20to25AND60 i_pll (.inclk0(sys_clk0),.c0(sys_pll_a_clk),.c1(sys_pll_b_clk),.locked(sys_pll_locked));
|
287 |
|
|
//div i_div (.clock(sys_pll_b_clk),.q(sys_pll_b_clk_div));
|
288 |
|
|
assign sys_clmode = 2'b00;
|
289 |
|
|
assign sys_or1200_clk = sys_pll_a_clk;
|
290 |
|
|
assign sys_wb_clk = sys_pll_a_clk;
|
291 |
|
|
assign sys_mem_clk = sys_pll_b_clk;
|
292 |
|
|
assign sys_sdram_clk = sys_pll_b_clk;
|
293 |
|
|
assign sys_vga_clk = sys_pll_a_clk; // VESA 800x525(-4) just 60Hz at 25MHz
|
294 |
|
|
`endif
|
295 |
|
|
`ifdef CLOCK_35_35_70_70_35
|
296 |
|
|
wire sys_pll_a_clk;
|
297 |
|
|
wire sys_pll_b_clk;
|
298 |
|
|
//wire sys_pll_b_clk_div;
|
299 |
|
|
pll_20to35AND70 i_pll (.inclk0(sys_clk0),.c0(sys_pll_a_clk),.c1(sys_pll_b_clk),.locked(sys_pll_locked));
|
300 |
|
|
//div i_div (.clock(sys_pll_b_clk),.q(sys_pll_b_clk_div));
|
301 |
|
|
assign sys_clmode = 2'b00;
|
302 |
|
|
assign sys_or1200_clk = sys_pll_a_clk;
|
303 |
|
|
assign sys_wb_clk = sys_pll_a_clk;
|
304 |
|
|
assign sys_mem_clk = sys_pll_b_clk;
|
305 |
|
|
assign sys_sdram_clk = sys_pll_b_clk;
|
306 |
|
|
assign sys_vga_clk = sys_pll_a_clk; // VESA 800x525(-4) just 60Hz at 25MHz
|
307 |
|
|
`endif
|
308 |
|
|
|
309 |
|
|
// x2
|
310 |
|
|
`ifdef CLOCK_40_20_40_40_40
|
311 |
|
|
wire sys_pll_a_clk;
|
312 |
|
|
wire sys_pll_b_clk;
|
313 |
|
|
//wire sys_pll_b_clk_div;
|
314 |
|
|
//wire sys_pll_0_locked;
|
315 |
|
|
//wire sys_pll_1_locked;
|
316 |
|
|
pll_20to20AND40 i_pll (.inclk0(sys_clk0),.c0(sys_pll_a_clk),.c1(sys_pll_b_clk),.locked(sys_pll_locked));
|
317 |
|
|
//assign sys_pll_locked = sys_pll_0_locked || sys_pll_1_locked;
|
318 |
|
|
//div i_div (.clock(sys_pll_b_clk),.q(sys_pll_b_clk_div));
|
319 |
|
|
assign sys_clmode = 2'b01;
|
320 |
|
|
assign sys_or1200_clk = sys_pll_b_clk; // related clock
|
321 |
|
|
assign sys_wb_clk = sys_pll_a_clk; // related clock
|
322 |
|
|
assign sys_mem_clk = sys_pll_b_clk;
|
323 |
|
|
assign sys_sdram_clk = sys_pll_b_clk;
|
324 |
|
|
assign sys_vga_clk = sys_pll_b_clk; // VGA illegal size((800+480-32 )x521) near 60Hz at 40MHz
|
325 |
|
|
`endif
|
326 |
|
|
`ifdef CLOCK_35_17P5_35_35_35
|
327 |
|
|
wire sys_pll_a_clk;
|
328 |
|
|
wire sys_pll_b_clk;
|
329 |
|
|
//wire sys_pll_b_clk_div;
|
330 |
|
|
wire sys_pll_0_locked;
|
331 |
|
|
wire sys_pll_1_locked;
|
332 |
|
|
pll_20to17P5AND35 i_pll (.inclk0(sys_clk0),.c0(sys_pll_a_clk),.c1(sys_pll_b_clk),.locked(sys_pll_locked));
|
333 |
|
|
assign sys_clmode = 2'b01;
|
334 |
|
|
assign sys_or1200_clk = sys_pll_b_clk; // related clock
|
335 |
|
|
assign sys_wb_clk = sys_pll_a_clk; // related clock
|
336 |
|
|
assign sys_mem_clk = sys_pll_b_clk;
|
337 |
|
|
assign sys_sdram_clk = sys_pll_b_clk;
|
338 |
|
|
assign sys_vga_clk = sys_pll_b_clk; // VGA illegal size((800+480-192 )x521) near 60Hz at 35MHz
|
339 |
|
|
`endif
|
340 |
|
|
|
341 |
|
|
//////////////////////////////////////////////
|
342 |
|
|
// ExternalPin
|
343 |
|
|
// sys_clk0: OpenRiscCPU,WinsBoneBus
|
344 |
|
|
// sys_clk1: not use
|
345 |
|
|
// sys_clk2: VGA,Flash,SDRAM(need external OSC)
|
346 |
|
|
// sys_clk3: not use
|
347 |
|
|
//////////////////////////////////////////////
|
348 |
|
|
`ifdef CLOCK_DOUBLE_40_20_75_75_25
|
349 |
|
|
wire sys_pll_0_locked;
|
350 |
|
|
wire sys_pll_1_locked;
|
351 |
|
|
pll_Xto40AND20 i_pll_0 (
|
352 |
|
|
.inclk0( sys_clk0), // Reference
|
353 |
|
|
.c0( sys_pll_a_clk), // OpenRisc CPU :40MHz
|
354 |
|
|
.c1( sys_pll_b_clk), // WishBone BUS :20MHz
|
355 |
|
|
.locked( sys_pll_0_locked)
|
356 |
|
|
);
|
357 |
|
|
pll_Xto80AND25 i_pll_1 (
|
358 |
|
|
.inclk0( sys_clk2), // Reference
|
359 |
|
|
.c0( sys_pll_c_clk), // Flash,SDRAM :75MHz
|
360 |
|
|
.c1( sys_pll_d_clk), // VGA :25MHz
|
361 |
|
|
.locked( sys_pll_1_locked)
|
362 |
|
|
);
|
363 |
|
|
assign sys_clmode = 2'b01;
|
364 |
|
|
assign sys_or1200_clk = sys_pll_a_clk;
|
365 |
|
|
assign sys_wb_clk = sys_pll_b_clk;
|
366 |
|
|
assign sys_mem_clk = sys_pll_c_clk;
|
367 |
|
|
assign sys_sdram_clk = sys_pll_c_clk;
|
368 |
|
|
assign sys_vga_clk = sys_pll_d_clk;
|
369 |
|
|
assign sys_pll_locked = sys_pll_0_locked || sys_pll_1_locked;
|
370 |
|
|
`endif
|
371 |
|
|
|
372 |
|
|
// Reset
|
373 |
|
|
//wire sys_reset;
|
374 |
|
|
//assign sys_reset = (!sys_reset_n) || (!sys_pll_locked);
|
375 |
|
|
reg sys_reset;
|
376 |
|
|
always @(negedge sys_or1200_clk) sys_reset = (!sys_reset_n) || (!sys_pll_locked);
|
377 |
|
|
|
378 |
|
|
// OR1200 Clock and ResetRelease
|
379 |
|
|
// WishBone Clock and ResetRelease
|
380 |
|
|
reg [1:0] sys_or1200_res_mt;
|
381 |
|
|
reg sys_or1200_res;
|
382 |
|
|
reg [1:0] sys_wb_res_mt;
|
383 |
|
|
reg sys_wb_res;
|
384 |
|
|
//always @(posedge sys_or1200_clk) sys_or1200_res_mt <= {sys_or1200_res_mt[0],sys_reset};
|
385 |
|
|
//always @(negedge sys_or1200_clk) sys_or1200_res <= #1 sys_or1200_res_mt[1];
|
386 |
|
|
always @(negedge sys_or1200_clk) sys_or1200_res <= sys_wb_res; // neg release
|
387 |
|
|
|
388 |
|
|
always @(posedge sys_wb_clk) sys_wb_res_mt <= {sys_wb_res_mt[0],sys_reset};
|
389 |
|
|
always @(negedge sys_wb_clk) sys_wb_res <= sys_wb_res_mt[1]; // neg release
|
390 |
|
|
|
391 |
|
|
// External-Memory-Bus Clock and ResetRelease
|
392 |
|
|
reg [1:0] sys_mem_res_mt;
|
393 |
|
|
reg sys_mem_res;
|
394 |
|
|
always @(posedge sys_mem_clk) sys_mem_res_mt <= {sys_mem_res_mt[0],sys_reset};
|
395 |
|
|
always @(negedge sys_mem_clk) sys_mem_res <= sys_mem_res_mt[1]; // neg release
|
396 |
|
|
|
397 |
|
|
// SDRAM Clock and ResetRelease
|
398 |
|
|
reg [1:0] sys_sdram_res_mt;
|
399 |
|
|
reg sys_sdram_res;
|
400 |
|
|
always @(posedge sys_sdram_clk) sys_sdram_res_mt <= {sys_sdram_res_mt[0],sys_reset};
|
401 |
|
|
always @(negedge sys_sdram_clk) sys_sdram_res <= sys_sdram_res_mt[1]; // neg release
|
402 |
|
|
|
403 |
|
|
// VGA Clock and ResetRelease
|
404 |
|
|
reg [1:0] sys_vga_res_mt;
|
405 |
|
|
reg sys_vga_res;
|
406 |
|
|
always @(posedge sys_vga_clk) sys_vga_res_mt <= {sys_vga_res_mt[0],sys_reset};
|
407 |
|
|
always @(negedge sys_vga_clk) sys_vga_res <= sys_vga_res_mt[1]; // neg release
|
408 |
|
|
|
409 |
|
|
// sdram re-sync
|
410 |
|
|
|
411 |
|
|
//50MHz(retiming 100MHz))
|
412 |
|
|
//reg [1:0] dummy_a;
|
413 |
|
|
//reg [1:0] dummy_b;
|
414 |
|
|
//wire local_sdram1_clk;
|
415 |
|
|
//wire local_sdram0_clk;
|
416 |
|
|
//reg sync1_sdram1_clk;
|
417 |
|
|
//reg sync1_sdram0_clk;
|
418 |
|
|
//reg sync2_sdram1_clk;
|
419 |
|
|
//reg sync2_sdram0_clk;
|
420 |
|
|
//reg [15:0] snap1_sdram1_d;
|
421 |
|
|
//reg [15:0] snap1_sdram0_d;
|
422 |
|
|
//reg [15:0] snap2_sdram1_d;
|
423 |
|
|
//reg [15:0] snap2_sdram0_d;
|
424 |
|
|
//assign sdram1_clk = sync2_sdram1_clk;
|
425 |
|
|
//assign sdram0_clk = sync2_sdram0_clk;
|
426 |
|
|
//always @(negedge sys_pll_b_clk) dummy_a <= {dummy_a[0],misc_gpio[0]};
|
427 |
|
|
//always @(negedge sys_pll_b_clk) dummy_b <= {dummy_b[0],misc_gpio[1]};
|
428 |
|
|
//always @(negedge sys_pll_b_clk) sync1_sdram1_clk <= local_sdram1_clk && dummy_a[1]; // negedge its dummy to insert other ff
|
429 |
|
|
//always @(negedge sys_pll_b_clk) sync1_sdram0_clk <= local_sdram0_clk && dummy_b[1]; // negedge its dummy to insert other ff
|
430 |
|
|
//always @(posedge sys_pll_b_clk) sync2_sdram1_clk <= sync1_sdram1_clk; // posedge
|
431 |
|
|
//always @(posedge sys_pll_b_clk) sync2_sdram0_clk <= sync1_sdram0_clk; // posedge
|
432 |
|
|
//always @(posedge sys_pll_b_clk) snap1_sdram1_d <= sdram1_d; // posedge
|
433 |
|
|
//always @(posedge sys_pll_b_clk) snap1_sdram0_d <= sdram0_d; // posedge
|
434 |
|
|
//always @(negedge sys_pll_b_clk) snap2_sdram1_d <= snap1_sdram1_d; // negedge
|
435 |
|
|
//always @(negedge sys_pll_b_clk) snap2_sdram0_d <= snap1_sdram0_d; // negedge
|
436 |
|
|
|
437 |
|
|
// simple snap
|
438 |
|
|
wire local_sdram1_clk;
|
439 |
|
|
wire local_sdram0_clk;
|
440 |
|
|
reg [15:0] snap2_sdram1_d;
|
441 |
|
|
reg [15:0] snap2_sdram0_d;
|
442 |
|
|
assign sdram1_clk = !local_sdram1_clk; // global signal,may be fast
|
443 |
|
|
assign sdram0_clk = !local_sdram0_clk; // global signal,may be fast
|
444 |
|
|
always @(posedge sdram1_clk) snap2_sdram1_d <= sdram1_d; // to snap,same sdram_clk(sdram1_clk->sys_sdram_clk)
|
445 |
|
|
always @(posedge sdram0_clk) snap2_sdram0_d <= sdram0_d; // to snap,same sdram_clk(sdram0_clk->sys_sdram_clk)
|
446 |
|
|
|
447 |
|
|
// 25MHz(retiming 50MHz)
|
448 |
|
|
//reg [1:0] dummy;
|
449 |
|
|
//wire local_vga_clk;
|
450 |
|
|
//reg sync1_vga_clkp;
|
451 |
|
|
//reg sync1_vga_clkn;
|
452 |
|
|
//reg sync2_vga_clkp;
|
453 |
|
|
//reg sync2_vga_clkn;
|
454 |
|
|
//always @(negedge sys_pll_a_clk) dummy <= {dummy[0],misc_gpio[2]};
|
455 |
|
|
//always @(negedge sys_pll_a_clk) sync1_vga_clkp <= local_vga_clk && dummy[1]; // negedge its dummy to insert other ff
|
456 |
|
|
//always @(negedge sys_pll_a_clk) sync1_vga_clkn <= (!local_vga_clk) && dummy[1]; // negedge its dummy to insert other ff
|
457 |
|
|
//always @(posedge sys_pll_a_clk) sync2_vga_clkp <= sync1_vga_clkp; // posedge
|
458 |
|
|
//always @(posedge sys_pll_a_clk) sync2_vga_clkn <= sync1_vga_clkn; // posedge
|
459 |
|
|
//assign vga_clkp = sync2_vga_clkp;
|
460 |
|
|
//assign vga_clkn = sync2_vga_clkn;
|
461 |
|
|
|
462 |
|
|
// simple snap
|
463 |
|
|
wire local_vga_clk;
|
464 |
|
|
assign vga_clkp = !local_vga_clk;
|
465 |
|
|
assign vga_clkn = 1'b0;
|
466 |
|
|
//assign vga_clkn = local_vga_clk;
|
467 |
|
|
|
468 |
|
|
// bus mode
|
469 |
|
|
//assign sys_clmode = 2'b00;
|
470 |
|
|
//assign sys_clmode = 2'b01;
|
471 |
|
|
// clmode=2'b00=>DIV=1,so impliment is SAME-CLK! WBCLK=CPUCLK.
|
472 |
|
|
// same-posedge-phase is ok....
|
473 |
|
|
// clmode=2'b01=>DIV=2,WBCLK=(1/2)CPUCLK
|
474 |
|
|
// clmode=2'b10=>NA
|
475 |
|
|
// clmode=2'b11=>DIV=4,WBCLK=(1/4)CPUCLK
|
476 |
|
|
|
477 |
|
|
//wire [1:0] local_sdram0_cs_n;
|
478 |
|
|
//wire [1:0] local_sdram1_cs_n;
|
479 |
|
|
|
480 |
|
|
tessera_core i_tessera_core (
|
481 |
|
|
// system
|
482 |
|
|
.sys_or1200_res( sys_or1200_res||sys_reset),
|
483 |
|
|
.sys_or1200_clk( sys_or1200_clk),
|
484 |
|
|
.sys_wb_res( sys_wb_res||sys_reset),
|
485 |
|
|
.sys_wb_clk( sys_wb_clk),
|
486 |
|
|
.sys_mem_res( sys_mem_res||sys_reset),
|
487 |
|
|
.sys_mem_clk( sys_mem_clk),
|
488 |
|
|
.sys_sdram_res( sys_sdram_res||sys_reset),
|
489 |
|
|
.sys_sdram_clk( sys_sdram_clk),
|
490 |
|
|
.sys_vga_res( sys_vga_res||sys_reset),
|
491 |
|
|
.sys_vga_clk( sys_vga_clk),
|
492 |
|
|
//
|
493 |
|
|
.sys_clmode( sys_clmode),
|
494 |
|
|
// jtag(not-used)
|
495 |
|
|
.jtag_tms( 1'b0/*jtag_tms*/),
|
496 |
|
|
.jtag_tck( 1'b0/*jtag_tck*/),
|
497 |
|
|
.jtag_trst( 1'b0/*jtag_trst*/),
|
498 |
|
|
.jtag_tdi( 1'b0/*jtag_tdi*/),
|
499 |
|
|
.jtag_tdo_o( /* not used *//*jtag_tdo_o*/),
|
500 |
|
|
.jtag_tdo_oe( /* not used *//*jtag_tdo_oe*/),
|
501 |
|
|
// uart
|
502 |
|
|
.uart_stx( uart_txd),
|
503 |
|
|
.uart_srx( uart_rxd),
|
504 |
|
|
.uart_rts( uart_rts_n),
|
505 |
|
|
.uart_cts( uart_cts_n),
|
506 |
|
|
.uart_dtr( uart_dtr_n),
|
507 |
|
|
.uart_dsr( uart_dsr_n),
|
508 |
|
|
.uart_ri( uart_ri_n),
|
509 |
|
|
.uart_dcd( uart_dcd_n),
|
510 |
|
|
// mem-bus
|
511 |
|
|
.mem_cs2_n( mem_cs2_n),
|
512 |
|
|
.mem_cs2_g_n( mem_cs2_g_n),
|
513 |
|
|
.mem_cs2_dir( mem_cs2_dir),
|
514 |
|
|
.mem_cs2_rstdrv(mem_cs2_rstdrv),
|
515 |
|
|
.mem_cs2_int( mem_cs2_int),
|
516 |
|
|
.mem_cs2_iochrdy(mem_cs2_iochrdy),
|
517 |
|
|
.mem_cs1_n( mem_cs1_n),
|
518 |
|
|
.mem_cs1_rst_n( mem_cs1_rst_n),
|
519 |
|
|
.mem_cs1_rdy( mem_cs1_rdy),
|
520 |
|
|
.mem_cs0_n( mem_cs0_n),
|
521 |
|
|
.mem_we_n( mem_we_n),
|
522 |
|
|
.mem_oe_n( mem_oe_n),
|
523 |
|
|
.mem_a( mem_a),
|
524 |
|
|
.mem_d_o( mem_d_o),
|
525 |
|
|
.mem_d_oe( mem_d_oe),
|
526 |
|
|
.mem_d_i( mem_d),
|
527 |
|
|
// sdram0
|
528 |
|
|
//.sdram0_clk( sdram0_clk),
|
529 |
|
|
.sdram0_clk( local_sdram0_clk), // phase-shift
|
530 |
|
|
.sdram0_cke( sdram0_cke),
|
531 |
|
|
.sdram0_cs_n( sdram0_cs_n),
|
532 |
|
|
.sdram0_ras_n( sdram0_ras_n),
|
533 |
|
|
.sdram0_cas_n( sdram0_cas_n),
|
534 |
|
|
.sdram0_we_n( sdram0_we_n),
|
535 |
|
|
.sdram0_dqm( sdram0_dqm),
|
536 |
|
|
.sdram0_ba( sdram0_ba),
|
537 |
|
|
.sdram0_a( sdram0_a),
|
538 |
|
|
//.sdram0_d_i( sdram0_d),
|
539 |
|
|
.sdram0_d_i( snap2_sdram0_d), // pre-register
|
540 |
|
|
.sdram0_d_oe( sdram0_d_oe),
|
541 |
|
|
.sdram0_d_o( sdram0_d_o),
|
542 |
|
|
// sdram1
|
543 |
|
|
//.sdram1_clk( sdram1_clk),
|
544 |
|
|
.sdram1_clk( local_sdram1_clk), // phase-shift
|
545 |
|
|
.sdram1_cke( sdram1_cke),
|
546 |
|
|
.sdram1_cs_n( sdram1_cs_n),
|
547 |
|
|
.sdram1_ras_n( sdram1_ras_n),
|
548 |
|
|
.sdram1_cas_n( sdram1_cas_n),
|
549 |
|
|
.sdram1_we_n( sdram1_we_n),
|
550 |
|
|
.sdram1_dqm( sdram1_dqm),
|
551 |
|
|
.sdram1_ba( sdram1_ba),
|
552 |
|
|
.sdram1_a( sdram1_a),
|
553 |
|
|
//.sdram1_d_i( sdram1_d),
|
554 |
|
|
.sdram1_d_i( snap2_sdram1_d), // pre-register
|
555 |
|
|
.sdram1_d_oe( sdram1_d_oe),
|
556 |
|
|
.sdram1_d_o( sdram1_d_o),
|
557 |
|
|
// vga
|
558 |
|
|
.vga_clk( local_vga_clk),
|
559 |
|
|
.vga_hsync( vga_hsync),
|
560 |
|
|
.vga_vsync( vga_vsync),
|
561 |
|
|
.vga_blank( vga_blank),
|
562 |
|
|
.vga_d( vga_d),
|
563 |
|
|
// tet
|
564 |
|
|
.option( misc_gpio[0])
|
565 |
|
|
);
|
566 |
|
|
|
567 |
|
|
// not-fix(output-pin-clamp)
|
568 |
|
|
//
|
569 |
|
|
assign sys_init_n = 1'b1; // to re-config
|
570 |
|
|
//
|
571 |
|
|
assign misc_tp = 1'b0; // LED on:0 off:1
|
572 |
|
|
//
|
573 |
|
|
//assign sdram0_cs_n[0] = local_sdram0_cs_n[0];
|
574 |
|
|
//assign sdram0_cs_n[1] = 1'b1;
|
575 |
|
|
//
|
576 |
|
|
//assign sdram1_cs_n[0] = local_sdram1_cs_n[0];
|
577 |
|
|
//assign sdram1_cs_n[1] = 1'b1;
|
578 |
|
|
|
579 |
|
|
endmodule
|