2020-12-02 02:43:05 -06:00
|
|
|
/*
|
|
|
|
*-------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* A wrapper for the FPGA IP to fit the I/O interface of Caravel SoC
|
|
|
|
*
|
|
|
|
* The wrapper is a technology mapped netlist where the mode-switch
|
|
|
|
* multiplexers are mapped to the Skywater 130nm
|
|
|
|
* High-Density (HD) standard cells
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
module fpga_top (
|
|
|
|
// Fixed I/O interface from Caravel SoC definition
|
|
|
|
// DO NOT CHANGE!!!
|
|
|
|
inout vdda1, // User area 1 3.3V supply
|
|
|
|
inout vdda2, // User area 2 3.3V supply
|
|
|
|
inout vssa1, // User area 1 analog ground
|
|
|
|
inout vssa2, // User area 2 analog ground
|
|
|
|
inout vccd1, // User area 1 1.8V supply
|
|
|
|
inout vccd2, // User area 2 1.8v supply
|
|
|
|
inout vssd1, // User area 1 digital ground
|
|
|
|
inout vssd2, // User area 2 digital ground
|
|
|
|
|
|
|
|
// Wishbone Slave ports (WB MI A)
|
|
|
|
input wb_clk_i,
|
|
|
|
input wb_rst_i,
|
|
|
|
input wbs_stb_i,
|
|
|
|
input wbs_cyc_i,
|
|
|
|
input wbs_we_i,
|
|
|
|
input [3:0] wbs_sel_i,
|
|
|
|
input [31:0] wbs_dat_i,
|
|
|
|
input [31:0] wbs_adr_i,
|
|
|
|
output wbs_ack_o,
|
|
|
|
output [31:0] wbs_dat_o,
|
|
|
|
|
|
|
|
// Logic Analyzer Signals
|
|
|
|
input [127:0] la_data_in,
|
|
|
|
output [127:0] la_data_out,
|
|
|
|
input [127:0] la_oen,
|
|
|
|
|
|
|
|
// IOs
|
|
|
|
input [37:0] io_in,
|
|
|
|
output [37:0] io_out,
|
|
|
|
output [37:0] io_oeb
|
|
|
|
);
|
|
|
|
|
|
|
|
// Modelsim does NOT like redefining wires that already in the
|
|
|
|
// input/output ports. The follow lines may be needed when
|
|
|
|
// `default_nettype none
|
|
|
|
// is enabled
|
|
|
|
//wire [`MPRJ_IO_PADS-1:0] io_in;
|
|
|
|
//wire [`MPRJ_IO_PADS-1:0] io_out;
|
|
|
|
//wire [`MPRJ_IO_PADS-1:0] io_oeb;
|
|
|
|
|
|
|
|
// FPGA wires
|
|
|
|
wire prog_clk;
|
|
|
|
wire Test_en;
|
|
|
|
wire IO_ISOL_N;
|
|
|
|
wire clk;
|
|
|
|
wire [0:143] gfpga_pad_EMBEDDED_IO_HD_SOC_IN;
|
|
|
|
wire [0:143] gfpga_pad_EMBEDDED_IO_HD_SOC_OUT;
|
|
|
|
wire [0:143] gfpga_pad_EMBEDDED_IO_HD_SOC_DIR;
|
|
|
|
wire ccff_head;
|
|
|
|
wire ccff_tail;
|
|
|
|
wire sc_head;
|
|
|
|
wire sc_tail;
|
|
|
|
|
|
|
|
// Switch between wishbone and logic analyzer
|
|
|
|
wire wb_la_switch;
|
|
|
|
wire wb_la_switch_b;
|
|
|
|
|
|
|
|
// Inverted switch signal to drive tri-state buffers
|
|
|
|
// Use drive strength 8 as we will have 33 output pins which is driven by
|
|
|
|
// the buffers
|
|
|
|
sky130_fd_sc_hd__inv_8 WB_LA_SWITCH_INV (.A(wb_la_switch), .Y(wb_la_switch_b));
|
|
|
|
|
|
|
|
// Autogenerate code start
|
|
|
|
// Autogenerate code end
|
|
|
|
|
|
|
|
// I/O[25] is reserved for a switch between wishbone interface
|
|
|
|
// and logic analyzer
|
|
|
|
assign wb_la_switch = io_in[25];
|
|
|
|
assign io_out[25] = 1'b0;
|
|
|
|
assign io_oeb[25] = 1'b1;
|
|
|
|
|
|
|
|
// TODO: Connect spypad from FPGA to logic analyzer ports
|
|
|
|
|
|
|
|
fpga_core fpga_core_uut(.prog_clk(prog_clk),
|
|
|
|
.Test_en(Test_en),
|
|
|
|
.clk(clk),
|
|
|
|
.IO_ISOL_N(IO_ISOL_N),
|
|
|
|
.gfpga_pad_EMBEDDED_IO_HD_SOC_IN(gfpga_pad_EMBEDDED_IO_HD_SOC_IN),
|
|
|
|
.gfpga_pad_EMBEDDED_IO_HD_SOC_OUT(gfpga_pad_EMBEDDED_IO_HD_SOC_OUT),
|
|
|
|
.gfpga_pad_EMBEDDED_IO_HD_SOC_DIR(gfpga_pad_EMBEDDED_IO_HD_SOC_DIR),
|
|
|
|
.ccff_head(ccff_head),
|
|
|
|
.ccff_tail(ccff_tail),
|
|
|
|
.sc_head(sc_head),
|
|
|
|
.sc_tail(sc_tail)
|
|
|
|
);
|
|
|
|
|
|
|
|
endmodule
|