blob: 40eaf5cd53e046fb1ca23860125f9596817a9e02 [file] [log] [blame]
Sylvain Munautda651572020-09-14 10:10:49 +02001/*
2 * top.v
3 *
4 * vim: ts=4 sw=4
5 *
6 * Top-level for the icE1usb icebreaker/bitsy based prototypes
7 *
8 * Copyright (C) 2019-2020 Sylvain Munaut <tnt@246tNt.com>
9 * SPDX-License-Identifier: CERN-OHL-S-2.0
10 */
11
12`default_nettype none
13
14module top (
15 // E1 PHY
16 input wire e1_rx_hi_p,
17// input wire e1_rx_hi_n,
18 input wire e1_rx_lo_p,
19// input wire e1_rx_lo_n,
20
21 output wire e1_tx_hi,
22 output wire e1_tx_lo,
23
24 output wire e1_vref_ct_pdm,
25 output wire e1_vref_p_pdm,
26 output wire e1_vref_n_pdm,
27
28 // USB
29 inout wire usb_dp,
30 inout wire usb_dn,
31 output wire usb_pu,
32
33 // Flash
34 inout wire flash_mosi,
35 inout wire flash_miso,
36 inout wire flash_clk,
37 inout wire flash_cs_n,
38
39 // Button
40 input wire btn,
41
42 // Clock (30.72 MHz)
43 input wire clk_in,
44 output wire clk_tune_hi,
45 output wire clk_tune_lo,
46
47 // Debug UART
48 input wire dbg_rx,
49 output wire dbg_tx,
50
51 // RGB LEDs
52 output wire [2:0] rgb
53);
54
55 localparam integer WB_N = 1;
56
57 genvar i;
58
59
60 // Signals
61 // -------
62
63 // Flash SPI internal signals
64 wire flash_mosi_i, flash_miso_i, flash_clk_i;
65 wire flash_mosi_o, flash_miso_o, flash_clk_o;
66 wire flash_mosi_oe, flash_miso_oe, flash_clk_oe;
67 wire flash_csn_o;
68
69 // Peripheral wishbone
70 wire [15:0] wb_addr;
71 wire [31:0] wb_rdata [0:WB_N-1];
72 wire [31:0] wb_wdata;
73 wire [ 3:0] wb_wmsk;
74 wire wb_we;
75 wire [WB_N-1:0] wb_cyc;
76 wire [WB_N-1:0] wb_ack;
77
78 wire [(WB_N*32)-1:0] wb_rdata_flat;
79
80 // Ticks
Sylvain Munaut60f664f2024-04-29 16:14:54 +020081 wire [3:0] tick_e1;
Sylvain Munautda651572020-09-14 10:10:49 +020082 wire tick_usb_sof;
83
84 // Clocks / Reset
85 wire rst_req;
86
87 wire clk_sys;
88 wire rst_sys;
89 wire clk_48m;
90 wire rst_48m;
91
92
93 // SoC base
94 // --------
95
96 // Instance
97 soc_base #(
98 .WB_N(WB_N),
99 .E1_N(1),
100 .E1_UNIT_HAS_RX(1'b1),
101 .E1_UNIT_HAS_TX(1'b1),
102 .E1_LIU(0)
103 ) soc_I (
104 .e1_rx_hi_p (e1_rx_hi_p),
105// .e1_rx_hi_n (e1_rx_hi_n),
106 .e1_rx_lo_p (e1_rx_lo_p),
107// .e1_rx_lo_n (e1_rx_lo_n),
108 .e1_tx_hi (e1_tx_hi),
109 .e1_tx_lo (e1_tx_lo),
110 .e1_rx_data (),
111 .e1_rx_clk (),
112 .e1_tx_data (),
113 .e1_tx_clk (),
114 .usb_dp (usb_dp),
115 .usb_dn (usb_dn),
116 .usb_pu (usb_pu),
117 .flash_mosi_i (flash_mosi_i),
118 .flash_mosi_o (flash_mosi_o),
119 .flash_mosi_oe(flash_mosi_oe),
120 .flash_miso_i (flash_miso_i),
121 .flash_miso_o (flash_miso_o),
122 .flash_miso_oe(flash_miso_oe),
123 .flash_clk_i (flash_clk_i),
124 .flash_clk_o (flash_clk_o),
125 .flash_clk_oe (flash_clk_oe),
126 .flash_csn_o (flash_csn_o),
127 .dbg_rx (dbg_rx),
128 .dbg_tx (dbg_tx),
129 .rgb (rgb),
130 .wb_m_addr (wb_addr),
131 .wb_m_rdata (wb_rdata_flat),
132 .wb_m_wdata (wb_wdata),
133 .wb_m_wmsk (wb_wmsk),
134 .wb_m_we (wb_we),
135 .wb_m_cyc (wb_cyc),
136 .wb_m_ack (wb_ack),
Sylvain Munaut60f664f2024-04-29 16:14:54 +0200137 .tick_e1 (tick_e1),
Sylvain Munautda651572020-09-14 10:10:49 +0200138 .tick_usb_sof (tick_usb_sof),
139 .clk_sys (clk_sys),
140 .rst_sys (rst_sys),
141 .clk_48m (clk_48m),
142 .rst_48m (rst_48m)
143 );
144
145 // WB read data flattening
146 for (i=0; i<WB_N; i=i+1)
147 assign wb_rdata_flat[i*32+:32] = wb_rdata[i];
148
149 // SPI IO
150 SB_IO #(
151 .PIN_TYPE(6'b101001),
152 .PULLUP(1'b1)
153 ) spi_io_I[2:0] (
154 .PACKAGE_PIN ({flash_mosi, flash_miso, flash_clk }),
155 .OUTPUT_ENABLE({flash_mosi_oe, flash_miso_oe, flash_clk_oe}),
156 .D_OUT_0 ({flash_mosi_o, flash_miso_o, flash_clk_o }),
157 .D_IN_0 ({flash_mosi_i, flash_miso_i, flash_clk_i })
158 );
159
160 assign flash_cs_n = flash_csn_o;
161
162
163 // Misc [0]
164 // ----
165
166 misc misc_I (
167 .e1_vref_ct_pdm(e1_vref_ct_pdm),
168 .e1_vref_p_pdm (e1_vref_p_pdm),
169 .e1_vref_n_pdm (e1_vref_n_pdm),
170 .clk_tune_hi (clk_tune_hi),
171 .clk_tune_lo (clk_tune_lo),
172 .btn (btn),
Sylvain Munaut60f664f2024-04-29 16:14:54 +0200173 .tick_e1 (tick_e1),
Sylvain Munautda651572020-09-14 10:10:49 +0200174 .tick_usb_sof (tick_usb_sof),
175 .rst_req (rst_req),
176 .wb_addr (wb_addr[7:0]),
177 .wb_rdata (wb_rdata[0]),
178 .wb_wdata (wb_wdata),
179 .wb_we (wb_we),
180 .wb_cyc (wb_cyc[0]),
181 .wb_ack (wb_ack[0]),
182 .clk (clk_sys),
183 .rst (rst_sys)
184 );
185
186
187 // Clock / Reset
188 // -------------
189
190 sysmgr sys_mgr_I (
191 .clk_in (clk_in),
192 .rst_in (rst_req),
193 .clk_sys(clk_sys),
194 .rst_sys(rst_sys),
195 .clk_48m(clk_48m),
196 .rst_48m(rst_48m)
197 );
198
199endmodule // top