|  | @@ -13,124 +13,123 @@ module max80
 | 
	
		
			
				|  |  |      parameter logic [7:0] fpga_ver)
 | 
	
		
			
				|  |  |     (
 | 
	
		
			
				|  |  |      // Clock oscillator
 | 
	
		
			
				|  |  | -    input	  master_clk,	// 336 MHz from PLL2
 | 
	
		
			
				|  |  | -    input	  slow_clk,	// ~12 MHz clock from PLL2
 | 
	
		
			
				|  |  | -    input	  master_pll_locked, // PLL2 is locked, master_clk is good
 | 
	
		
			
				|  |  | -    output	  reset_plls,	// Reset all PLLs including PLL2
 | 
	
		
			
				|  |  | +    input 	  master_clk, // 336 MHz from PLL2
 | 
	
		
			
				|  |  | +    input 	  slow_clk, // ~12 MHz clock from PLL2
 | 
	
		
			
				|  |  | +    input 	  master_pll_locked, // PLL2 is locked, master_clk is good
 | 
	
		
			
				|  |  | +    output 	  reset_plls, // Reset all PLLs including PLL2
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    input	  board_id, // This better match the firmware
 | 
	
		
			
				|  |  | +    input 	  board_id, // This better match the firmware
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // ABC-bus
 | 
	
		
			
				|  |  | -    inout	  abc_clk, // ABC-bus 3 MHz clock
 | 
	
		
			
				|  |  | +    inout 	  abc_clk, // ABC-bus 3 MHz clock
 | 
	
		
			
				|  |  |      inout [15:0]  abc_a, // ABC address bus
 | 
	
		
			
				|  |  |      inout [7:0]   abc_d, // ABC data bus
 | 
	
		
			
				|  |  | -    output	  abc_d_oe, // Data bus output enable
 | 
	
		
			
				|  |  | -    inout	  abc_rst_n, // ABC bus reset strobe
 | 
	
		
			
				|  |  | -    inout	  abc_cs_n, // ABC card select strobe
 | 
	
		
			
				|  |  | +    output 	  abc_d_oe, // Data bus output enable
 | 
	
		
			
				|  |  | +    inout 	  abc_rst_n, // ABC bus reset strobe
 | 
	
		
			
				|  |  | +    inout 	  abc_cs_n, // ABC card select strobe
 | 
	
		
			
				|  |  |      inout [4:0]   abc_out_n, // OUT, C1-C4 strobe
 | 
	
		
			
				|  |  |      inout [1:0]   abc_inp_n, // INP, STATUS strobe
 | 
	
		
			
				|  |  | -    inout	  abc_xmemfl_n, // Memory read strobe
 | 
	
		
			
				|  |  | -    inout	  abc_xmemw800_n, // Memory write strobe (ABC800)
 | 
	
		
			
				|  |  | -    inout	  abc_xmemw80_n, // Memory write strobe (ABC80)
 | 
	
		
			
				|  |  | -    inout	  abc_xinpstb_n, // I/O read strobe (ABC800)
 | 
	
		
			
				|  |  | -    inout	  abc_xoutpstb_n, // I/O write strobe (ABC80)
 | 
	
		
			
				|  |  | +    inout 	  abc_xmemfl_n, // Memory read strobe
 | 
	
		
			
				|  |  | +    inout 	  abc_xmemw800_n, // Memory write strobe (ABC800)
 | 
	
		
			
				|  |  | +    inout 	  abc_xmemw80_n, // Memory write strobe (ABC80)
 | 
	
		
			
				|  |  | +    inout 	  abc_xinpstb_n, // I/O read strobe (ABC800)
 | 
	
		
			
				|  |  | +    inout 	  abc_xoutpstb_n, // I/O write strobe (ABC80)
 | 
	
		
			
				|  |  |      // The following are inverted versus the bus IF
 | 
	
		
			
				|  |  |      // the corresponding MOSFETs are installed
 | 
	
		
			
				|  |  | -    inout	  abc_rdy_x, // RDY = WAIT#
 | 
	
		
			
				|  |  | -    inout	  abc_resin_x, // System reset request
 | 
	
		
			
				|  |  | -    inout	  abc_int80_x, // System INT request (ABC80)
 | 
	
		
			
				|  |  | -    inout	  abc_int800_x, // System INT request (ABC800)
 | 
	
		
			
				|  |  | -    inout	  abc_nmi_x, // System NMI request (ABC800)
 | 
	
		
			
				|  |  | -    inout	  abc_xm_x, // System memory override (ABC800)
 | 
	
		
			
				|  |  | +    inout 	  abc_rdy_x, // RDY = WAIT#
 | 
	
		
			
				|  |  | +    inout 	  abc_resin_x, // System reset request
 | 
	
		
			
				|  |  | +    inout 	  abc_int80_x, // System INT request (ABC80)
 | 
	
		
			
				|  |  | +    inout 	  abc_int800_x, // System INT request (ABC800)
 | 
	
		
			
				|  |  | +    inout 	  abc_nmi_x, // System NMI request (ABC800)
 | 
	
		
			
				|  |  | +    inout 	  abc_xm_x, // System memory override (ABC800)
 | 
	
		
			
				|  |  |      // Host/device control
 | 
	
		
			
				|  |  | -    output	  abc_host, // 1 = host, 0 = target
 | 
	
		
			
				|  |  | +    output 	  abc_host, // 1 = host, 0 = target
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // ABC-bus extension header
 | 
	
		
			
				|  |  |      // (Note: cannot use an array here because HC and HH are
 | 
	
		
			
				|  |  |      // input only.)
 | 
	
		
			
				|  |  | -    inout	  exth_ha,
 | 
	
		
			
				|  |  | -    inout	  exth_hb,
 | 
	
		
			
				|  |  | -    input	  exth_hc,
 | 
	
		
			
				|  |  | -    inout	  exth_hd,
 | 
	
		
			
				|  |  | -    inout	  exth_he,
 | 
	
		
			
				|  |  | -    inout	  exth_hf,
 | 
	
		
			
				|  |  | -    inout	  exth_hg,
 | 
	
		
			
				|  |  | -    input	  exth_hh,
 | 
	
		
			
				|  |  | +    inout 	  exth_ha,
 | 
	
		
			
				|  |  | +    inout 	  exth_hb,
 | 
	
		
			
				|  |  | +    input 	  exth_hc,
 | 
	
		
			
				|  |  | +    inout 	  exth_hd,
 | 
	
		
			
				|  |  | +    inout 	  exth_he,
 | 
	
		
			
				|  |  | +    inout 	  exth_hf,
 | 
	
		
			
				|  |  | +    inout 	  exth_hg,
 | 
	
		
			
				|  |  | +    input 	  exth_hh,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // SDRAM bus
 | 
	
		
			
				|  |  | -    output	  sr_clk,
 | 
	
		
			
				|  |  | +    output 	  sr_clk,
 | 
	
		
			
				|  |  |      output [1:0]  sr_ba, // Bank address
 | 
	
		
			
				|  |  |      output [12:0] sr_a, // Address within bank
 | 
	
		
			
				|  |  |      inout [15:0]  sr_dq, // Also known as D or IO
 | 
	
		
			
				|  |  |      output [1:0]  sr_dqm, // DQML and DQMH
 | 
	
		
			
				|  |  | -    output	  sr_cs_n,
 | 
	
		
			
				|  |  | -    output	  sr_we_n,
 | 
	
		
			
				|  |  | -    output	  sr_cas_n,
 | 
	
		
			
				|  |  | -    output	  sr_ras_n,
 | 
	
		
			
				|  |  | +    output 	  sr_cs_n,
 | 
	
		
			
				|  |  | +    output 	  sr_we_n,
 | 
	
		
			
				|  |  | +    output 	  sr_cas_n,
 | 
	
		
			
				|  |  | +    output 	  sr_ras_n,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // SD card
 | 
	
		
			
				|  |  | -    input	  sd_cd_n,
 | 
	
		
			
				|  |  | -    output	  sd_cs_n,
 | 
	
		
			
				|  |  | -    output	  sd_clk,
 | 
	
		
			
				|  |  | -    output	  sd_di,
 | 
	
		
			
				|  |  | -    input	  sd_do,
 | 
	
		
			
				|  |  | +    input 	  sd_cd_n,
 | 
	
		
			
				|  |  | +    output 	  sd_cs_n,
 | 
	
		
			
				|  |  | +    output 	  sd_clk,
 | 
	
		
			
				|  |  | +    output 	  sd_di,
 | 
	
		
			
				|  |  | +    input 	  sd_do,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Serial console (naming is FPGA as DCE)
 | 
	
		
			
				|  |  | -    input	  tty_txd,
 | 
	
		
			
				|  |  | -    output	  tty_rxd,
 | 
	
		
			
				|  |  | -    input	  tty_rts,
 | 
	
		
			
				|  |  | -    output	  tty_cts,
 | 
	
		
			
				|  |  | -    input	  tty_dtr,
 | 
	
		
			
				|  |  | +    input 	  tty_txd,
 | 
	
		
			
				|  |  | +    output 	  tty_rxd,
 | 
	
		
			
				|  |  | +    input 	  tty_rts,
 | 
	
		
			
				|  |  | +    output 	  tty_cts,
 | 
	
		
			
				|  |  | +    input 	  tty_dtr,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // SPI flash memory (also configuration)
 | 
	
		
			
				|  |  | -    output	  flash_cs_n,
 | 
	
		
			
				|  |  | -    output	  flash_sck,
 | 
	
		
			
				|  |  | +    output 	  flash_cs_n,
 | 
	
		
			
				|  |  | +    output 	  flash_sck,
 | 
	
		
			
				|  |  |      inout [1:0]   flash_io,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // SPI bus (connected to ESP32 so can be bidirectional)
 | 
	
		
			
				|  |  | -    inout	  spi_clk,
 | 
	
		
			
				|  |  | -    inout	  spi_miso,
 | 
	
		
			
				|  |  | -    inout	  spi_mosi,
 | 
	
		
			
				|  |  | -    inout	  spi_cs_esp_n, // ESP32 IO10
 | 
	
		
			
				|  |  | -    inout	  spi_cs_flash_n, // ESP32 IO01
 | 
	
		
			
				|  |  | +    inout 	  spi_clk,	  // ESP32 IO12
 | 
	
		
			
				|  |  | +    inout [1:0]   spi_io,	  // ESP32 IO13,IO11
 | 
	
		
			
				|  |  | +    inout 	  spi_cs_esp_n,   // ESP32 IO10
 | 
	
		
			
				|  |  | +    inout 	  spi_cs_flash_n, // ESP32 IO01
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Other ESP32 connections
 | 
	
		
			
				|  |  | -    inout	  esp_io0, // ESP32 IO00
 | 
	
		
			
				|  |  | -    inout	  esp_int, // ESP32 IO09
 | 
	
		
			
				|  |  | +    inout 	  esp_io0,        // ESP32 IO00
 | 
	
		
			
				|  |  | +    inout 	  esp_int,        // ESP32 IO09
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // I2C bus (RTC and external)
 | 
	
		
			
				|  |  | -    inout	  i2c_scl,
 | 
	
		
			
				|  |  | -    inout	  i2c_sda,
 | 
	
		
			
				|  |  | -    input	  rtc_32khz,
 | 
	
		
			
				|  |  | -    input	  rtc_int_n,
 | 
	
		
			
				|  |  | +    inout 	  i2c_scl,
 | 
	
		
			
				|  |  | +    inout 	  i2c_sda,
 | 
	
		
			
				|  |  | +    input 	  rtc_32khz,
 | 
	
		
			
				|  |  | +    input 	  rtc_int_n,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // LEDs
 | 
	
		
			
				|  |  |      output [2:0]  led,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // USB
 | 
	
		
			
				|  |  | -    inout	  usb_dp,
 | 
	
		
			
				|  |  | -    inout	  usb_dn,
 | 
	
		
			
				|  |  | -    output	  usb_pu,
 | 
	
		
			
				|  |  | -    input	  usb_rx,
 | 
	
		
			
				|  |  | -    input	  usb_rx_ok,
 | 
	
		
			
				|  |  | +    inout 	  usb_dp,
 | 
	
		
			
				|  |  | +    inout 	  usb_dn,
 | 
	
		
			
				|  |  | +    output 	  usb_pu,
 | 
	
		
			
				|  |  | +    input 	  usb_rx,
 | 
	
		
			
				|  |  | +    input 	  usb_rx_ok,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // HDMI
 | 
	
		
			
				|  |  |      output [2:0]  hdmi_d,
 | 
	
		
			
				|  |  | -    output	  hdmi_clk,
 | 
	
		
			
				|  |  | -    inout	  hdmi_scl,
 | 
	
		
			
				|  |  | -    inout	  hdmi_sda,
 | 
	
		
			
				|  |  | -    inout	  hdmi_hpd,
 | 
	
		
			
				|  |  | +    output 	  hdmi_clk,
 | 
	
		
			
				|  |  | +    inout 	  hdmi_scl,
 | 
	
		
			
				|  |  | +    inout 	  hdmi_sda,
 | 
	
		
			
				|  |  | +    inout 	  hdmi_hpd,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Unconnected pins with pullups, used for randomness
 | 
	
		
			
				|  |  |      inout [2:0]   rngio,
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Various clocks available to the top level as well as internally
 | 
	
		
			
				|  |  | -    output	  sdram_clk, // 168 MHz SDRAM clock
 | 
	
		
			
				|  |  | -    output	  sys_clk, //  84 MHz System clock
 | 
	
		
			
				|  |  | -    output	  flash_clk, // 134 MHz Serial flash ROM clock
 | 
	
		
			
				|  |  | -    output	  usb_clk, //  48 MHz USB clock
 | 
	
		
			
				|  |  | -    output	  vid_clk, //  56 MHz Video pixel clock
 | 
	
		
			
				|  |  | -    output	  vid_hdmiclk	// 280 MHz HDMI serializer clock = vid_clk x 5
 | 
	
		
			
				|  |  | +    output 	  sdram_clk, // 168 MHz SDRAM clock
 | 
	
		
			
				|  |  | +    output 	  sys_clk, //  84 MHz System clock
 | 
	
		
			
				|  |  | +    output 	  flash_clk, // 134 MHz Serial flash ROM clock
 | 
	
		
			
				|  |  | +    output 	  usb_clk, //  48 MHz USB clock
 | 
	
		
			
				|  |  | +    output 	  vid_clk, //  56 MHz Video pixel clock
 | 
	
		
			
				|  |  | +    output 	  vid_hdmiclk	// 280 MHz HDMI serializer clock = vid_clk x 5
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |     // -----------------------------------------------------------------------
 | 
	
	
		
			
				|  | @@ -321,7 +320,7 @@ module max80
 | 
	
		
			
				|  |  |     //
 | 
	
		
			
				|  |  |     // SDRAM
 | 
	
		
			
				|  |  |     //
 | 
	
		
			
				|  |  | -   localparam dram_port_count = 3;
 | 
	
		
			
				|  |  | +   localparam dram_port_count = 4;
 | 
	
		
			
				|  |  |     dram_bus sr_bus[1:dram_port_count] ( );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |     // ABC interface
 | 
	
	
		
			
				|  | @@ -367,7 +366,7 @@ module max80
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |     dram_port #(32)
 | 
	
		
			
				|  |  |     cpu_dram_port (
 | 
	
		
			
				|  |  | -		  .bus   ( sr_bus[3] ),
 | 
	
		
			
				|  |  | +		  .bus   ( sr_bus[4] ),
 | 
	
		
			
				|  |  |  		  .prio  ( 2'd1 ),
 | 
	
		
			
				|  |  |  		  .addr  ( cpu_mem_addr[24:0] ),
 | 
	
		
			
				|  |  |  		  .rd    ( sdram_mem_rdata ),
 | 
	
	
		
			
				|  | @@ -862,28 +861,23 @@ module max80
 | 
	
		
			
				|  |  |     assign spi_cs_flash_n = 1'bz;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |     esp esp (
 | 
	
		
			
				|  |  | -	    .rst_n    ( rst_n ),
 | 
	
		
			
				|  |  | -	    .clk      ( sys_clk ),
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	    .cpu_valid ( iodev_valid_esp ),
 | 
	
		
			
				|  |  | -	    .cpu_addr  ( cpu_mem_addr[6:2] ),
 | 
	
		
			
				|  |  | -	    .cpu_wstrb ( cpu_mem_wstrb ),
 | 
	
		
			
				|  |  | -	    .cpu_wdata ( cpu_mem_wdata ),
 | 
	
		
			
				|  |  | -	    .cpu_rdata ( iodev_rdata_esp ),
 | 
	
		
			
				|  |  | -	    .irq       ( iodev_irq_esp ),
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	    .tty_rx   ( ),
 | 
	
		
			
				|  |  | -	    .tty_tx   ( ),
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	    .esp_en   ( ),
 | 
	
		
			
				|  |  | -	    .esp_int  ( esp_int ),
 | 
	
		
			
				|  |  | -	    .esp_io0  ( esp_io0 ),
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	    .spi_clk  ( spi_clk ),
 | 
	
		
			
				|  |  | -	    .spi_miso ( spi_miso ),
 | 
	
		
			
				|  |  | -	    .spi_mosi ( spi_mosi ),
 | 
	
		
			
				|  |  | -	    .spi_cs_esp_n ( spi_cs_esp_n ),
 | 
	
		
			
				|  |  | -	    .spi_cs_flash_n ( spi_cs_flash_n )
 | 
	
		
			
				|  |  | +	    .rst_n      ( rst_n ),
 | 
	
		
			
				|  |  | +	    .sys_clk    ( sys_clk ),
 | 
	
		
			
				|  |  | +	    .sdram_clk  ( sdram_clk ),
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	    .cpu_valid  ( iodev_valid_esp ),
 | 
	
		
			
				|  |  | +	    .cpu_addr   ( cpu_mem_addr[6:2] ),
 | 
	
		
			
				|  |  | +	    .cpu_wstrb  ( cpu_mem_wstrb ),
 | 
	
		
			
				|  |  | +	    .cpu_wdata  ( cpu_mem_wdata ),
 | 
	
		
			
				|  |  | +	    .cpu_rdata  ( iodev_rdata_esp ),
 | 
	
		
			
				|  |  | +	    .irq        ( iodev_irq_esp ),
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	    .esp_int    ( esp_int ),
 | 
	
		
			
				|  |  | +	    .spi_clk    ( spi_clk ),
 | 
	
		
			
				|  |  | +	    .spi_io     ( spi_io ),
 | 
	
		
			
				|  |  | +	    .spi_cs_n   ( spi_cs_esp_n ),
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	    .dram       ( sr_bus[2].dstr )
 | 
	
		
			
				|  |  |  	    );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |     //
 | 
	
	
		
			
				|  | @@ -915,7 +909,7 @@ module max80
 | 
	
		
			
				|  |  |  	  .sys_clk      ( sys_clk ),
 | 
	
		
			
				|  |  |  	  .reset_cmd    ( vjtag_reset_cmd ),
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	  .sdram	( sr_bus[2].dstr ),
 | 
	
		
			
				|  |  | +	  .sdram	( sr_bus[3].dstr ),
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	  .cpu_valid    ( iodev_valid_vjtag ),
 | 
	
		
			
				|  |  |  	  .cpu_addr     ( cpu_mem_addr[6:2] ),
 |