https://blackmesalabs.wordpress.com/2016/10/24/sump2-96-msps-logic-analyzer-for-22/
[BML_sump2] / sump2 / source / top.v
diff --git a/sump2/source/top.v b/sump2/source/top.v
new file mode 100755 (executable)
index 0000000..b08b064
--- /dev/null
@@ -0,0 +1,344 @@
+/* ****************************************************************************\r
+-- Source file: top.v                \r
+-- Date:        October 08, 2016\r
+-- Author:      khubbard\r
+-- Description: Top Level Verilog RTL for Lattice ICE5LP FPGA Design\r
+-- Language:    Verilog-2001 and VHDL-1993\r
+-- Simulation:  Mentor-Modelsim \r
+-- Synthesis:   Lattice     \r
+-- License:     This project is licensed with the CERN Open Hardware Licence\r
+--              v1.2.  You may redistribute and modify this project under the\r
+--              terms of the CERN OHL v.1.2. (http://ohwr.org/cernohl).\r
+--              This project is distributed WITHOUT ANY EXPRESS OR IMPLIED\r
+--              WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY\r
+--              AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN OHL\r
+--              v.1.2 for applicable Conditions.\r
+-- \r
+--  Lattice ICE-Stick\r
+--               -----------------------------------------------------------\r
+--             /                   119 118 117 116 115 114 113 112 GND  3V  |\r
+--            /                      o   o   o   o   o   o   o   o   o   o  |\r
+--           /                                               -----          |\r
+--   -------             ---------          R            3V |o   o|3V       |\r
+--  |          -------  |         |         |           GND |o P o|GND      |\r
+--  |USB      | FTDI  | |Lattice  |      R--G--R    event[7]|o M o|event[6] |\r
+--  |         |FT2232H| |iCE40HX1K|         |       event[5]|o O o|event[4] |\r
+--  |          -------  |         |         R       event[3]|o D o|event[2] |\r
+--   -------             ---------                  event[1]|o   o|event[0] |\r
+--           \                                               -----          |\r
+--            \                      o   o   o   o   o   o   o   o   o   o  |\r
+--             \                    44  45  47  48  56  60  61  62  GND 3V  |\r
+--               ----------------------------------------------------------- \r
+--                           event [15][14][13][12][11][10] [9] [8]\r
+--\r
+-- Revision History:\r
+-- Ver#  When      Who      What\r
+-- ----  --------  -------- ---------------------------------------------------\r
+-- 0.1   10.08.16  khubbard Creation\r
+-- ***************************************************************************/\r
+`default_nettype none // Strictly enforce all nets to be declared\r
+\r
+module top\r
+(\r
+  input  wire         clk_12m,\r
+  input  wire         ftdi_wi,\r
+  output wire         ftdi_ro,\r
+  input  wire [7:0]   events_din,\r
+\r
+  input  wire         p44,\r
+  input  wire         p45,\r
+  input  wire         p47,\r
+  input  wire         p48,\r
+  input  wire         p56,\r
+  input  wire         p60,\r
+  input  wire         p61,\r
+  input  wire         p62,\r
+\r
+  output wire         p119,    \r
+  output wire         p118,    \r
+  output wire         p117,    \r
+  output wire         p116,    \r
+  output wire         p115,    \r
+  output wire         p114,    \r
+  output wire         p113,    \r
+  output wire         p112,    \r
+\r
+  input  wire         p128,    \r
+\r
+  output wire         spi_sck,\r
+  output wire         spi_cs_l,\r
+  output wire         spi_mosi,\r
+  input  wire         spi_miso,\r
+\r
+  output wire         ir_sd,\r
+  output wire         ir_txd,\r
+  input  wire         ir_rxd,\r
+\r
+  output wire         LED1,\r
+  output wire         LED2,\r
+  output wire         LED3,\r
+  output wire         LED4,\r
+  output wire         LED5\r
+);// module top\r
+\r
+  wire          lb_wr;\r
+  wire          lb_rd;\r
+  wire [31:0]   lb_addr;\r
+  wire [31:0]   lb_wr_d;\r
+  wire [31:0]   lb_rd_d;\r
+  wire          lb_rd_rdy;\r
+  wire [23:0]   events_loc;\r
+\r
+  wire          clk_96m_loc;\r
+  wire          clk_cap_tree;\r
+  wire          clk_lb_tree;\r
+//wire          reset_core;\r
+  wire          reset_loc;\r
+  wire          pll_lock;\r
+\r
+  wire          mesa_wi_loc;\r
+  wire          mesa_wo_loc;\r
+  wire          mesa_ri_loc;\r
+  wire          mesa_ro_loc;\r
+\r
+  wire          mesa_wi_nib_en;\r
+  wire [3:0]    mesa_wi_nib_d;\r
+  wire          mesa_wo_byte_en;\r
+  wire [7:0]    mesa_wo_byte_d;\r
+  wire          mesa_wo_busy;\r
+  wire          mesa_ro_byte_en;\r
+  wire [7:0]    mesa_ro_byte_d;\r
+  wire          mesa_ro_busy;\r
+  wire          mesa_ro_done;\r
+  wire [7:0]    mesa_core_ro_byte_d;\r
+  wire          mesa_core_ro_byte_en;\r
+  wire          mesa_core_ro_done;\r
+  wire          mesa_core_ro_busy;\r
+\r
+\r
+  wire          mesa_wi_baudlock;\r
+  wire [3:0]    led_bus;\r
+  reg  [7:0]    test_cnt;\r
+  reg           ck_togl;\r
+\r
+  assign LED1 = led_bus[0];\r
+  assign LED2 = led_bus[1];\r
+  assign LED3 = led_bus[2];\r
+  assign LED4 = led_bus[3];\r
+  assign LED5 = 1'b1;// Green LED always ON. Not enough resources to flash\r
+\r
+  assign ir_sd  = 1'b1;// 1==Shutdown 0==ON\r
+  assign ir_txd = 1'b0;\r
+\r
+  assign reset_loc = 0;\r
+//assign reset_core = ~ pll_lock;// didn't fit\r
+\r
+  // Hookup FTDI RX and TX pins to MesaBus Phy\r
+  assign mesa_wi_loc = ftdi_wi;\r
+  assign ftdi_ro     = mesa_ro_loc;\r
+\r
+\r
+  assign events_loc[7:0]   = events_din[7:0];\r
+  assign events_loc[15:8]  = { p44,p45,p47,p48,p56,p60,p61,p62 };\r
+//assign events_loc[23:16] = { p119,p118,p117,p116,p115,p114,p113,p112 };\r
+  assign events_loc[23:16] = 8'd0;// Didn't fit\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+// PLL generated by Lattice GUI to multiply 12 MHz to 96 MHz\r
+// PLL's RESET port is active low. How messed up of a signal name is that?\r
+//-----------------------------------------------------------------------------\r
+top_pll u_top_pll\r
+(\r
+  .REFERENCECLK ( clk_12m     ),\r
+  .PLLOUTCORE   (             ),\r
+  .PLLOUTGLOBAL ( clk_96m_loc ),\r
+  .LOCK         ( pll_lock    ),\r
+  .RESET        ( 1'b1        )\r
+);\r
+\r
+\r
+SB_GB u0_sb_gb \r
+(\r
+//.USER_SIGNAL_TO_GLOBAL_BUFFER ( clk_12m      ),\r
+  .USER_SIGNAL_TO_GLOBAL_BUFFER ( ck_togl      ),\r
+//.USER_SIGNAL_TO_GLOBAL_BUFFER ( clk_96m_loc  ),\r
+  .GLOBAL_BUFFER_OUTPUT         ( clk_lb_tree  )\r
+);\r
+// Note: sump2.v modified to conserve resources requires single clock domain\r
+//assign clk_cap_tree = clk_lb_tree;\r
+\r
+SB_GB u1_sb_gb \r
+(\r
+//.USER_SIGNAL_TO_GLOBAL_BUFFER ( ck_cap_togl  ),\r
+  .USER_SIGNAL_TO_GLOBAL_BUFFER ( clk_96m_loc  ),\r
+  .GLOBAL_BUFFER_OUTPUT         ( clk_cap_tree )\r
+);\r
+// assign clk_lb_tree = clk_12m;\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+// Note: 40kHz modulated ir_rxd signal looks like this\r
+//  \_____/                       \___/                      \___/\r
+//  |<2us>|<-------24us----------->\r
+//-----------------------------------------------------------------------------\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+// Toggle Flop To generate slower capture clocks.\r
+// 12MHz div-6  = 1 MHz toggle   1uS Sample\r
+// 12MHz div-48 = 125 kHz toggle 8uS Sample\r
+//-----------------------------------------------------------------------------\r
+//always @ ( posedge clk_12m ) begin : proc_div\r
+always @ ( posedge clk_cap_tree ) begin : proc_div\r
+ begin\r
+   test_cnt <= test_cnt[7:0] + 1;\r
+// ck_togl  <= ~ ck_togl;// 48 MHz\r
+   ck_togl  <= test_cnt[1];// 24 MHz\r
+ end\r
+end // proc_div\r
+//assign p119 = test_cnt[7];\r
+//assign p118 = test_cnt[6];\r
+//assign p117 = test_cnt[5];\r
+//assign p116 = test_cnt[4];\r
+//assign p115 = test_cnt[3];\r
+//assign p114 = test_cnt[2];\r
+//assign p113 = test_cnt[1];\r
+//assign p112 = test_cnt[0];\r
+  \r
+  assign p119 = test_cnt[5];\r
+  assign p118 = test_cnt[4];\r
+  assign p117 = test_cnt[3];\r
+  assign p116 = test_cnt[2];\r
+  assign p115 = test_cnt[1];\r
+  assign p114 = test_cnt[0];\r
+//assign p116 = lb_rd_rdy;\r
+//assign p115 = lb_rd;\r
+//assign p114 = lb_wr;\r
+\r
+//assign p119 = 1'b0;\r
+//assign p118 = 1'b0;\r
+//assign p117 = 1'b0;\r
+//assign p116 = 1'b0;\r
+//assign p115 = 1'b0;\r
+//assign p114 = 1'b0;\r
+  assign p113 = mesa_ro_loc;\r
+  assign p112 = ftdi_wi;\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+// FSM for reporting ID : This also muxes in Ro Byte path from Core\r
+// This didn't fit in ICE-Stick, so removed.\r
+//-----------------------------------------------------------------------------\r
+//mesa_id u_mesa_id\r
+//(\r
+//  .reset                 ( reset_loc                ),\r
+//  .clk                   ( clk_lb_tree              ),\r
+//  .report_id             ( report_id                ),\r
+//  .id_mfr                ( 32'h00000001             ),\r
+//  .id_dev                ( 32'h00000002             ),\r
+//  .id_snum               ( 32'h00000001             ),\r
+//\r
+//  .mesa_core_ro_byte_en  ( mesa_core_ro_byte_en     ),\r
+//  .mesa_core_ro_byte_d   ( mesa_core_ro_byte_d[7:0] ),\r
+//  .mesa_core_ro_done     ( mesa_core_ro_done        ),\r
+//  .mesa_ro_byte_en       ( mesa_ro_byte_en          ),\r
+//  .mesa_ro_byte_d        ( mesa_ro_byte_d[7:0]      ),\r
+//  .mesa_ro_done          ( mesa_ro_done             ),\r
+//  .mesa_ro_busy          ( mesa_ro_busy             )\r
+//);// module mesa_id\r
+ assign mesa_ro_byte_d[7:0] = mesa_core_ro_byte_d[7:0];\r
+ assign mesa_ro_byte_en     = mesa_core_ro_byte_en;\r
+ assign mesa_ro_done        = mesa_core_ro_done;\r
+ assign mesa_core_ro_busy   = mesa_ro_busy;\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+// MesaBus Phy : Convert UART serial to/from binary for Mesa Bus Interface\r
+//  This translates between bits and bytes\r
+//-----------------------------------------------------------------------------\r
+mesa_phy u_mesa_phy\r
+(\r
+//.reset            ( reset_core          ),\r
+  .reset            ( reset_loc           ),\r
+  .clk              ( clk_lb_tree         ),\r
+  .clr_baudlock     ( 1'b0                ),\r
+  .disable_chain    ( 1'b1                ),\r
+  .mesa_wi_baudlock ( mesa_wi_baudlock    ),\r
+  .mesa_wi          ( mesa_wi_loc         ),\r
+  .mesa_ro          ( mesa_ro_loc         ),\r
+  .mesa_wo          ( mesa_wo_loc         ),\r
+  .mesa_ri          ( mesa_ri_loc         ),\r
+  .mesa_wi_nib_en   ( mesa_wi_nib_en      ),\r
+  .mesa_wi_nib_d    ( mesa_wi_nib_d[3:0]  ),\r
+  .mesa_wo_byte_en  ( mesa_wo_byte_en     ),\r
+  .mesa_wo_byte_d   ( mesa_wo_byte_d[7:0] ),\r
+  .mesa_wo_busy     ( mesa_wo_busy        ),\r
+  .mesa_ro_byte_en  ( mesa_ro_byte_en     ),\r
+  .mesa_ro_byte_d   ( mesa_ro_byte_d[7:0] ),\r
+  .mesa_ro_busy     ( mesa_ro_busy        ),\r
+  .mesa_ro_done     ( mesa_ro_done        )\r
+);// module mesa_phy\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+// MesaBus Core : Decode Slot,Subslot,Command Info and translate to LocalBus\r
+//-----------------------------------------------------------------------------\r
+mesa_core \r
+#\r
+(\r
+  .spi_prom_en       ( 1'b0                       )\r
+)\r
+u_mesa_core\r
+(\r
+//.reset               ( reset_core               ),\r
+  .reset               ( ~mesa_wi_baudlock        ),\r
+  .clk                 ( clk_lb_tree              ),\r
+  .spi_sck             ( spi_sck                  ),\r
+  .spi_cs_l            ( spi_cs_l                 ),\r
+  .spi_mosi            ( spi_mosi                 ),\r
+  .spi_miso            ( spi_miso                 ),\r
+  .rx_in_d             ( mesa_wi_nib_d[3:0]       ),\r
+  .rx_in_rdy           ( mesa_wi_nib_en           ),\r
+  .tx_byte_d           ( mesa_core_ro_byte_d[7:0] ),\r
+  .tx_byte_rdy         ( mesa_core_ro_byte_en     ),\r
+  .tx_done             ( mesa_core_ro_done        ),\r
+  .tx_busy             ( mesa_core_ro_busy        ),\r
+  .tx_wo_byte          ( mesa_wo_byte_d[7:0]      ),\r
+  .tx_wo_rdy           ( mesa_wo_byte_en          ),\r
+  .subslot_ctrl        (                          ),\r
+  .bist_req            (                          ),\r
+  .reconfig_req        (                          ),\r
+  .reconfig_addr       (                          ),\r
+  .oob_en              ( 1'b0                     ),\r
+  .oob_done            ( 1'b0                     ),\r
+  .lb_wr               ( lb_wr                    ),\r
+  .lb_rd               ( lb_rd                    ),\r
+  .lb_wr_d             ( lb_wr_d[31:0]            ),\r
+  .lb_addr             ( lb_addr[31:0]            ),\r
+  .lb_rd_d             ( lb_rd_d[31:0]            ),\r
+  .lb_rd_rdy           ( lb_rd_rdy                )\r
+);// module mesa_core\r
+\r
+\r
+//-----------------------------------------------------------------------------\r
+// Design Specific Logic\r
+//-----------------------------------------------------------------------------\r
+core u_core \r
+(\r
+//.reset               ( reset_core               ),\r
+  .reset               ( ~mesa_wi_baudlock        ),\r
+  .clk_lb              ( clk_lb_tree              ),\r
+  .clk_cap             ( clk_cap_tree             ),\r
+  .lb_wr               ( lb_wr                    ),\r
+  .lb_rd               ( lb_rd                    ),\r
+  .lb_wr_d             ( lb_wr_d[31:0]            ),\r
+  .lb_addr             ( lb_addr[31:0]            ),\r
+  .lb_rd_d             ( lb_rd_d[31:0]            ),\r
+  .lb_rd_rdy           ( lb_rd_rdy                ),\r
+  .led_bus             ( led_bus[3:0]             ),\r
+  .events_din          ( events_loc[23:0]         )\r
+);  \r
+\r
+\r
+endmodule // top.v\r