/* * top.v * * vim: ts=4 sw=4 * * Copyright (C) 2019-2020 Sylvain Munaut * SPDX-License-Identifier: CERN-OHL-P-2.0 */ `default_nettype none `include "boards.vh" module top ( // SPI inout wire spi_mosi, inout wire spi_miso, inout wire spi_clk, inout wire spi_flash_cs_n, `ifdef HAS_PSRAM inout wire spi_ram_cs_n, `endif // USB inout wire usb_dp, inout wire usb_dn, output wire usb_pu, // Debug UART input wire uart_rx, output wire uart_tx, // Button input wire btn, // LED output wire [2:0] rgb, // Clock input wire clk_in ); localparam integer SPRAM_AW = 14; /* 14 => 64k, 15 => 128k */ localparam integer WB_N = 6; localparam integer WB_DW = 32; localparam integer WB_AW = 16; localparam integer WB_RW = WB_DW * WB_N; localparam integer WB_MW = WB_DW / 8; genvar i; // Signals // ------- // Wishbone wire [WB_AW-1:0] wb_addr; wire [WB_DW-1:0] wb_rdata [0:WB_N-1]; wire [WB_RW-1:0] wb_rdata_flat; wire [WB_DW-1:0] wb_wdata; wire [WB_MW-1:0] wb_wmsk; wire [WB_N -1:0] wb_cyc; wire wb_we; wire [WB_N -1:0] wb_ack; // USB Core // EP Buffer wire [ 8:0] ep_tx_addr_0; wire [31:0] ep_tx_data_0; wire ep_tx_we_0; wire [ 8:0] ep_rx_addr_0; wire [31:0] ep_rx_data_1; wire ep_rx_re_0; // Bus interface wire [11:0] ub_addr; wire [15:0] ub_wdata; wire [15:0] ub_rdata; wire ub_cyc; wire ub_we; wire ub_ack; // SPI wire [7:0] sb_addr; wire [7:0] sb_di; wire [7:0] sb_do; wire sb_rw; wire sb_stb; wire sb_ack; wire sb_irq; wire sb_wkup; wire sio_miso_o, sio_miso_oe, sio_miso_i; wire sio_mosi_o, sio_mosi_oe, sio_mosi_i; wire sio_clk_o, sio_clk_oe, sio_clk_i; wire [3:0] sio_csn_o, sio_csn_oe; // LEDs reg [4:0] led_ctrl; wire [2:0] rgb_pwm; // WarmBoot reg boot_now; reg [1:0] boot_sel; // Clock / Reset logic wire clk_24m; wire clk_48m; wire rst; // SoC // --- soc_picorv32_base #( .WB_N (WB_N), .WB_DW (WB_DW), .WB_AW (WB_AW), .SPRAM_AW(SPRAM_AW) ) base_I ( .wb_addr (wb_addr), .wb_rdata(wb_rdata_flat), .wb_wdata(wb_wdata), .wb_wmsk (wb_wmsk), .wb_we (wb_we), .wb_cyc (wb_cyc), .wb_ack (wb_ack), .clk (clk_24m), .rst (rst) ); for (i=0; i