Browse Source

WIP: build both v1 and v2

... not quite working yet ...
H. Peter Anvin 3 years ago
parent
commit
6db45e74e6
22 changed files with 1548 additions and 791 deletions
  1. 10 3
      Makefile
  2. 3 3
      fpga/Makefile
  3. 3 5
      fpga/abcbus.sv
  4. 2 2
      fpga/max80.qpf
  5. 16 15
      fpga/max80.qsf
  6. 27 28
      fpga/max80.sdc
  7. 112 152
      fpga/max80.sv
  8. BIN
      fpga/output/v1.jic
  9. 158 158
      fpga/output/v1.pin
  10. BIN
      fpga/output/v1.sof
  11. 0 1
      fpga/sdram.sv
  12. 6 7
      fpga/usb/usb.sv
  13. 192 0
      fpga/v1.pins
  14. 3 3
      fpga/v1.qsf
  15. 210 0
      fpga/v1.sv
  16. 192 0
      fpga/v2.pins
  17. 12 3
      fpga/v2.qsf
  18. 206 0
      fpga/v2.sv
  19. 0 5
      rv32/abcmem.c
  20. 390 393
      rv32/boot.mif
  21. 6 6
      rv32/max80.ld
  22. 0 7
      rv32/system.c

+ 10 - 3
Makefile

@@ -1,15 +1,22 @@
 SUBDIRS = tools rv32 fpga
 
+
 all clean spotless :
 	$(MAKE) local.$@ $(SUBDIRS) goal=$@
 
+prefpga:
+	$(MAKE) local.all $(filter-out fpga,$(SUBDIRS)) goal=all
+
+v1 v2 : prefpga
+	$(MAKE) -C fpga $@
+
 .PHONY: $(SUBDIRS)
 $(SUBDIRS):
 	$(MAKE) -C $@ $(goal)
 
-fw: tools
+rv32: tools
 
-fpga: fw
+fpga: rv32
 
 local.all:
 
@@ -19,5 +26,5 @@ local.clean:
 local.spotless: local.clean
 
 # FPGA-specific targets
-program-% flash-% signalclean:
+program-% flash-%: prefpga
 	$(MAKE) -C fpga $@

+ 3 - 3
fpga/Makefile

@@ -1,7 +1,7 @@
 MAKEFLAGS      += -R -r
 
 PROJECT		= max80
-REVISIONS	= v1 # v2
+REVISIONS	= v1 v2
 QU        	= quartus
 
 # Common options for all Quartus tools
@@ -86,11 +86,11 @@ rpar := )
 JTAG_CABLE ?= $(shell jtagconfig --enum | sed -ne 's/^1$(rpar) //p')
 
 # Transient programming
-program-%:
+program-%: $(outdir)/%.sof
 	$(QPGM) -c '$(JTAG_CABLE)' -m JTAG -o 'p;$(outdir)/$*.sof'
 
 # Permanent programming in flash
-flash-%:
+flash-%: $(outdir)/%.jic
 	$(QPGM) -c '$(JTAG_CABLE)' -m JTAG -i -o 'pvbi;$(outdir)/$*.jic'
 
 %.deps: %.qsf scripts/qsfdeps.pl

+ 3 - 5
fpga/abcbus.sv

@@ -40,8 +40,6 @@ module abcbus (
 	       // Host/device control
 	       output		 abc_host, // 1 = host, 0 = device
 	       output reg	 abc_a_oe,
-	       // Bus isolation
-	       output		 abc_d_ce_n,
 
 	       // ABC-bus extension header
 	       // (Note: cannot use an array here because HC and HH are
@@ -95,9 +93,9 @@ module abcbus (
 	     abc_xmemw80_s, abc_xinpstb_s, abc_xoutpstb_s } )
       );
 
-   assign abc_host = 1'b0;	// Only device mode supported
-   assign abc_d_ce_n = 1'b0;	// Do not isolate busses
-   assign abc_a_oe   = 1'b0;	// Only device mode, again...
+   // Only support device mode for now (v2 cards could support host mode)
+   assign abc_host = 1'b0;
+   assign abc_a_oe = 1'b0;
 
    reg	     abc_clk_active;
 

+ 2 - 2
fpga/max80.qpf

@@ -19,12 +19,12 @@
 #
 # Quartus Prime
 # Version 21.1.0 Build 842 10/21/2021 SJ Lite Edition
-# Date created = 18:25:05  December 22, 2021
+# Date created = 01:12:16  December 23, 2021
 #
 # -------------------------------------------------------------------------- #
 
 QUARTUS_VERSION = "21.1"
-DATE = "18:25:05  December 22, 2021"
+DATE = "01:12:16  December 23, 2021"
 
 # Revisions
 

+ 16 - 15
fpga/max80.qsf

@@ -39,7 +39,6 @@
 
 set_global_assignment -name FAMILY "Cyclone IV E"
 set_global_assignment -name DEVICE EP4CE15F17C8
-set_global_assignment -name TOP_LEVEL_ENTITY max80
 set_global_assignment -name ORIGINAL_QUARTUS_VERSION 21.1.0
 set_global_assignment -name PROJECT_CREATION_TIME_DATE "16:21:14  DECEMBER 22, 2021"
 set_global_assignment -name LAST_QUARTUS_VERSION "21.1.0 Lite Edition"
@@ -220,9 +219,9 @@ set_global_assignment -name POWER_USE_TA_VALUE 35
 
 
 
-set_location_assignment PLL_3 -to "pll3:pll3|altpll:altpll_component|pll3_altpll:auto_generated|pll1"
-set_location_assignment PLL_4 -to "pll4:pll4|altpll:altpll_component|pll4_altpll:auto_generated|pll1"
-set_location_assignment PLL_2 -to "pll2:pll2|altpll:altpll_component|pll2_altpll:auto_generated|pll1"
+set_location_assignment PLL_3 -to "max80:max80|pll3:pll3|altpll:altpll_component|pll3_altpll:auto_generated|pll1"
+set_location_assignment PLL_4 -to "max80:max80|pll4:pll4|altpll:altpll_component|pll4_altpll:auto_generated|pll1"
+set_location_assignment PLL_2 -to "max80:max80|pll2:pll2|altpll:altpll_component|pll2_altpll:auto_generated|pll1"
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[15]
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[14]
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[13]
@@ -231,17 +230,17 @@ set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[11]
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[10]
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[9]
 set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[8]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[7]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[6]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[5]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[4]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[3]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[2]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[1]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sr_dq[0]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to rngio[0]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to rngio[1]
-set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to rngio[2]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[7]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[6]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[5]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[4]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[3]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[2]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[1]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to sr_dq[0]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to rngio[0]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to rngio[1]
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to rngio[2]
 
 
 set_global_assignment -name VERILOG_FILE usb/usb_desc.v
@@ -284,6 +283,8 @@ set_global_assignment -name SYSTEMVERILOG_FILE synchro.sv
 set_global_assignment -name SYSTEMVERILOG_FILE tmdsenc.sv
 set_global_assignment -name SDC_FILE max80.sdc
 set_global_assignment -name SYSTEMVERILOG_FILE max80.sv
+set_global_assignment -name SYSTEMVERILOG_FILE v1.sv
+set_global_assignment -name SYSTEMVERILOG_FILE v2.sv
 set_global_assignment -name SOURCE_TCL_SCRIPT_FILE scripts/pins.tcl
 set_global_assignment -name VERILOG_FILE ip/fifo.v
 set_global_assignment -name VERILOG_FILE ip/ddufifo.v

+ 27 - 28
fpga/max80.sdc

@@ -18,23 +18,23 @@ set_false_path -to [get_registers sld_signaltap:*]
 
 # -------- PLL clock mappings --------
 
-set sdram_clk     [get_clocks {pll3|*|clk[0]}]
-set sdram_out_clk [get_clocks {pll3|*|clk[1]}]
-set sys_clk       [get_clocks {pll3|*|clk[2]}]
-set flash_clk     [get_clocks {pll3|*|clk[3]}]
-set hdmi_clk      [get_clocks {pll4|*|clk[0]}]
-set vid_clk       [get_clocks {pll4|*|clk[1]}]
-set usb_clk       [get_clocks {pll2|*|clk[0]}]
+set sdram_clk     [get_clocks {*|pll3|*|clk[0]}]
+set sdram_out_clk [get_clocks {*|pll3|*|clk[1]}]
+set sys_clk       [get_clocks {*|pll3|*|clk[2]}]
+set flash_clk     [get_clocks {*|pll3|*|clk[3]}]
+set hdmi_clk      [get_clocks {*|pll4|*|clk[0]}]
+set vid_clk       [get_clocks {*|pll4|*|clk[1]}]
+set usb_clk       [get_clocks {*|pll2|*|clk[0]}]
 
-set main_clocks   [get_clocks {pll*|*|clk[*]}]
+set main_clocks   [get_clocks {*|pll*|*|clk[*]}]
 
 # Reset isn't actually a clock, but Quartus thinks it is
 create_generated_clock -name rst_n \
-    -source [get_nets {pll3|*|*clk[2]}] \
-    [get_registers rst_n]
+    -source [get_nets {*|pll3|*|*clk[2]}] \
+    [get_registers *|rst_n]
 create_generated_clock -name hard_rst_n \
-    -source [get_nets {pll3|*|*clk[2]}] \
-    [get_registers hard_rst_n]
+    -source [get_nets {*|pll3|*|*clk[2]}] \
+    [get_registers *|hard_rst_n]
 
 # Reset is asynchronous  with everything as far as we are concerned.
 set_clock_groups -asynchronous \
@@ -55,7 +55,7 @@ set_multicycle_path -from [all_clocks] -to $synchro_inputs \
 # -------- SDRAM I/O constraints --------
 
 set sr_data_out [remove_from_collection [get_ports sr_*] sr_clk]
-set sr_data_in  [get_ports sr_dq\[*\]]
+set sr_data_in  [get_ports {sr_dq[*]}]
 set_max_skew -to $sr_data_out 0.100ns
 set_input_delay  -clock $sdram_clk 0.500ns  $sr_data_in
 
@@ -67,38 +67,37 @@ set_input_delay  -clock $sdram_clk 0.500ns  $sr_data_in
 # -------- SDRAM multicycle paths --------
 
 # sdram_mem_ready is deferred by one sys_clk
-set_multicycle_path -from [get_registers {dram_port:cpu_dram_port|rd[*]}] \
-    -to $sys_clk -start -setup 3
-set_multicycle_path -from [get_registers {dram_port:cpu_dram_port|rd[*]}] \
-    -to $sys_clk -start -hold 2
+set cpu_dram_rd [get_registers {*|dram_port:cpu_dram_port|rd[*]}]
+set_multicycle_path -from $cpu_dram_rd -to $sys_clk -start -setup 2
+set_multicycle_path -from $cpu_dram_rd -to $sys_clk -start -hold 1
 
 # -------- SPI ROM multicycle paths --------
 
 # go_spi is delayed by the synchronizer, so other bits in the ROMCOPY_DATALEN
 # register have some more time to settle.
 set romcopy_datalen [get_registers \
- {spirom:*|datalen[*] spirom:*|cmdlen[*] spirom:*|spi_dual spirom:*|spi_more}]
+ {*|spirom:*|datalen[*] *|spirom:*|cmdlen[*] *|spirom:*|spi_dual *|spirom:*|spi_more}]
 set_multicycle_path -from $romcopy_datalen -to $flash_clk -end -setup 2
 set_multicycle_path -from $romcopy_datalen -to $flash_clk -end -hold 1
 
 # A load of romcmd does not affect the SPI unit for a minimum of 3 target
 # clock cycles (in reality much more, since the CPU needs to
 # write datalen in order to start the transfer).
-set romcopy_romcmd [get_registers {spirom:*|romcmd[*]}]
+set romcopy_romcmd [get_registers {*|spirom:*|romcmd[*]}]
 set_multicycle_path -from $romcopy_romcmd -to $flash_clk -end -setup 3
 set_multicycle_path -from $romcopy_romcmd -to $flash_clk -end -hold 2
 
 # spi_active to spi_clk_en is a minimum of one clock cycle, which allows
 # an extra clock cycle before spi_out_shr needs to stop resetting
-set_multicycle_path -from [get_registers {spirom:*|spi_active}] \
-    -to [get_registers {spirom:*|spi_out_shr[*]}] -end -setup 2
-set_multicycle_path -from [get_registers {spirom:*|spi_active}] \
-    -to [get_registers {spirom:*|spi_out_shr[*]}] -end -hold 1
+set spi_active  [get_registers {*|spirom:*|spi_active}]
+set spi_out_shr [get_registers {*|spirom:*|spi_out_shr[*]}]
+set_multicycle_path -from $spi_active -to $spi_out_shr -end -setup 2
+set_multicycle_path -from $spi_active -to $spi_out_shr -end -hold 1
 
 # Reading ROMCOPY_INPUT while a transaction is pending is not supported.
 # The CPU is supposed to wait for IRQ to get asserted; this is extremely
 # conservative.
-set romcopy_input [get_registers {spirom:*|spi_in_shr[*]}]
+set romcopy_input [get_registers {*|spirom:*|spi_in_shr[*]}]
 set_multicycle_path -from $romcopy_input -to $sys_clk -end -setup 2
 set_multicycle_path -from $romcopy_input -to $sys_clk -end -hold 1
 
@@ -106,7 +105,7 @@ set_multicycle_path -from $romcopy_input -to $sys_clk -end -hold 1
 
 # We never read and write in the same clock cycle, thus there is a multicycle
 # path from the write enable register to anything in the CPU itself
-set_multicycle_path -from [get_keepers {fast_mem:fast_mem|*porta_we_reg*}] \
-    -to [get_keepers {picorv32:cpu|*}] -start -setup 2
-set_multicycle_path -from [get_keepers {fast_mem:fast_mem|*porta_we_reg*}] \
-    -to [get_keepers {picorv32:cpu|*}] -start -hold 1
+set fast_mem_we [get_keepers {*|fast_mem:fast_mem|*porta_we_reg*}]
+set cpu_regs    [get_keepers {*|picorv32:cpu|*}]
+set_multicycle_path -from $fast_mem_we -to $cpu_regs -start -setup 2
+set_multicycle_path -from $fast_mem_we -to $cpu_regs  -start -hold 1

+ 112 - 152
fpga/max80.sv

@@ -8,39 +8,39 @@
 // Sharing JTAG pins (via JTAGEN)
 `undef SHARED_JTAG
 
-module max80
+module max80 
+  #(parameter logic [6:1] x_mosfet,
+    parameter logic [7:0] fpga_ver)
    (
     // Clock oscillator
     input 	  clock_48, // 48 MHz
     input 	  board_id, // This better match the firmware
 
     // ABC-bus
-    input 	  abc_clk, // ABC-bus 3 MHz clock
-    input [15:0]  abc_a, // ABC address bus
+    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_a_oe, // Address bus output enable
     output 	  abc_d_oe, // Data bus output enable
-    input 	  abc_rst_n, // ABC bus reset strobe
-    input 	  abc_cs_n, // ABC card select strobe
-    input [4:0]   abc_out_n, // OUT, C1-C4 strobe
-    input [1:0]   abc_inp_n, // INP, STATUS strobe
-    input 	  abc_xmemfl_n, // Memory read strobe
-    input 	  abc_xmemw800_n, // Memory write strobe (ABC800)
-    input 	  abc_xmemw80_n, // Memory write strobe (ABC80)
-    input 	  abc_xinpstb_n, // I/O read strobe (ABC800)
-    input 	  abc_xoutpstb_n, // I/O write strobe (ABC80)
+    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)
     // The following are inverted versus the bus IF
     // the corresponding MOSFETs are installed
-    output 	  abc_rdy_x, // RDY = WAIT#
-    output 	  abc_resin_x, // System reset request
-    output 	  abc_int80_x, // System INT request (ABC80)
-    output 	  abc_int800_x, // System INT request (ABC800)
-    output 	  abc_nmi_x, // System NMI request (ABC800)
-    output 	  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_a_oe,
-    // Bus isolation
-    output 	  abc_d_ce_n,
 
     // ABC-bus extension header
     // (Note: cannot use an array here because HC and HH are
@@ -56,7 +56,6 @@ module max80
 
     // SDRAM bus
     output 	  sr_clk,
-    output 	  sr_cke,
     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
@@ -67,23 +66,18 @@ module max80
     output 	  sr_ras_n,
 
     // SD card
+    input 	  sd_cd_n,
+    output 	  sd_cs_n,
     output 	  sd_clk,
     output 	  sd_di,
-    output 	  sd_cs_n,
     input 	  sd_do,
 
-`ifdef MAX80_V1
-    inout [2:1]   sd_dat,
-`endif
-
     // Serial console (naming is FPGA as DCE)
-`ifdef MAX80_V1
     input 	  tty_txd,
-    inout 	  tty_rxd,
+    output 	  tty_rxd,
     input 	  tty_rts,
     output 	  tty_cts,
     input 	  tty_dtr,
-`endif
 
     // SPI flash memory (also configuration)
     output 	  flash_cs_n,
@@ -110,16 +104,12 @@ module max80
     // LED (2 = D23/G, 1 = D22/R, 0 = D17/B)
     output [2:0]  led,
 
-    // GPIO
-    inout 	  gpio,
-
     // USB
-`ifndef MAX80_V1
     inout 	  usb_dp,
     inout 	  usb_dn,
     output 	  usb_pu,
     input 	  usb_rx,
-`endif
+    input         usb_rx_ok,
 
     // HDMI
     output [2:0]  hdmi_d,
@@ -132,13 +122,6 @@ module max80
     inout [2:0]   rngio
     );
 
-`ifdef MAX80_V1
-   localparam max80_ver = 1;
-`endif
-`ifdef MAX80_V2
-   localparam max80_ver = 2;
-`endif
-   
    // -----------------------------------------------------------------------
    //   PLLs and reset
    // -----------------------------------------------------------------------
@@ -375,7 +358,6 @@ module max80
 	  .init_tmr ( sys_clk_stb[14] ), // > 100 μs (tP) after reset
 	  .rfsh_tmr ( sys_clk_stb[8] ),  // < 3.9 μs (tREFI/2)
 
-	  .sr_cke   ( sr_cke ),
 	  .sr_cs_n  ( sr_cs_n ),
 	  .sr_ras_n ( sr_ras_n ),
 	  .sr_cas_n ( sr_cas_n ),
@@ -398,61 +380,61 @@ module max80
    //
    wire        abc_clk_s;	// abc_clk synchronous to sys_clk
 
-   abcbus abcbus (
-		  .rst_n ( rst_n ),
-		  .sys_clk ( sys_clk ),
-		  .sdram_clk ( sdram_clk ),
-		  .stb_1mhz ( sys_clk_stb[6] ),
-
-		  .abc_valid ( iodev_valid_abc ),
-		  .map_valid ( iodev_valid_abcmemmap ),
-		  .cpu_addr  ( cpu_mem_addr ),
-		  .cpu_wdata ( cpu_mem_wdata ),
-		  .cpu_wstrb ( cpu_mem_wstrb ),
-		  .cpu_rdata ( iodev_rdata_abc ),
-		  .cpu_rdata_map ( iodev_rdata_abcmemmap ),
-		  .irq       ( iodev_irq_abc ),
-
-		  .abc_clk   ( abc_clk ),
-		  .abc_clk_s ( abc_clk_s ),
-		  .abc_a     ( abc_a ),
-		  .abc_d     ( abc_d ),
-		  .abc_d_oe  ( abc_d_oe ),
-		  .abc_rst_n ( abc_rst_n ),
-		  .abc_cs_n  ( abc_cs_n ),
-		  .abc_out_n ( abc_out_n ),
-		  .abc_inp_n ( abc_inp_n ),
-		  .abc_xmemfl_n ( abc_xmemfl_n ),
-		  .abc_xmemw800_n ( abc_xmemw800_n ),
-		  .abc_xmemw80_n ( abc_xmemw80_n ),
-		  .abc_xinpstb_n ( abc_xinpstb_n ),
-		  .abc_xoutpstb_n ( abc_xoutpstb_n ),
-		  .abc_rdy_x ( abc_rdy_x ),
-		  .abc_resin_x ( abc_resin_x ),
-		  .abc_int80_x ( abc_int80_x ),
-		  .abc_int800_x ( abc_int800_x ),
-		  .abc_nmi_x ( abc_nmi_x ),
-		  .abc_xm_x ( abc_xm_x ),
-		  .abc_host ( abc_host ),
-		  .abc_a_oe ( abc_a_oe ),
-		  .abc_d_ce_n ( abc_d_ce_n ),
-
-		  .exth_ha ( exth_ha ),
-		  .exth_hb ( exth_hb ),
-		  .exth_hc ( exth_hc ),
-		  .exth_hd ( exth_hd ),
-		  .exth_he ( exth_he ),
-		  .exth_hf ( exth_hf ),
-		  .exth_hg ( exth_hg ),
-		  .exth_hh ( exth_hh ),
-
-		  .sdram_addr  ( abc_sr_addr ),
-		  .sdram_rd    ( abc_sr_rd ),
-		  .sdram_valid ( abc_sr_valid ),
-		  .sdram_ready ( abc_sr_ready ),
-		  .sdram_wd    ( abc_sr_wd ),
-		  .sdram_wstrb ( abc_sr_wstrb )
-		  );
+   abcbus #(.mosfet_installed(x_mosfet))
+   abcbus (
+	   .rst_n ( rst_n ),
+	   .sys_clk ( sys_clk ),
+	   .sdram_clk ( sdram_clk ),
+	   .stb_1mhz ( sys_clk_stb[6] ),
+
+	   .abc_valid ( iodev_valid_abc ),
+	   .map_valid ( iodev_valid_abcmemmap ),
+	   .cpu_addr  ( cpu_mem_addr ),
+	   .cpu_wdata ( cpu_mem_wdata ),
+	   .cpu_wstrb ( cpu_mem_wstrb ),
+	   .cpu_rdata ( iodev_rdata_abc ),
+	   .cpu_rdata_map ( iodev_rdata_abcmemmap ),
+	   .irq       ( iodev_irq_abc ),
+
+	   .abc_clk   ( abc_clk ),
+	   .abc_clk_s ( abc_clk_s ),
+	   .abc_a     ( abc_a ),
+	   .abc_d     ( abc_d ),
+	   .abc_d_oe  ( abc_d_oe ),
+	   .abc_rst_n ( abc_rst_n ),
+	   .abc_cs_n  ( abc_cs_n ),
+	   .abc_out_n ( abc_out_n ),
+	   .abc_inp_n ( abc_inp_n ),
+	   .abc_xmemfl_n ( abc_xmemfl_n ),
+	   .abc_xmemw800_n ( abc_xmemw800_n ),
+	   .abc_xmemw80_n ( abc_xmemw80_n ),
+	   .abc_xinpstb_n ( abc_xinpstb_n ),
+	   .abc_xoutpstb_n ( abc_xoutpstb_n ),
+	   .abc_rdy_x ( abc_rdy_x ),
+	   .abc_resin_x ( abc_resin_x ),
+	   .abc_int80_x ( abc_int80_x ),
+	   .abc_int800_x ( abc_int800_x ),
+	   .abc_nmi_x ( abc_nmi_x ),
+	   .abc_xm_x ( abc_xm_x ),
+	   .abc_host ( abc_host ),
+	   .abc_a_oe ( abc_a_oe ),
+
+	   .exth_ha ( exth_ha ),
+	   .exth_hb ( exth_hb ),
+	   .exth_hc ( exth_hc ),
+	   .exth_hd ( exth_hd ),
+	   .exth_he ( exth_he ),
+	   .exth_hf ( exth_hf ),
+	   .exth_hg ( exth_hg ),
+	   .exth_hh ( exth_hh ),
+
+	   .sdram_addr  ( abc_sr_addr ),
+	   .sdram_rd    ( abc_sr_rd ),
+	   .sdram_valid ( abc_sr_valid ),
+	   .sdram_ready ( abc_sr_ready ),
+	   .sdram_wd    ( abc_sr_wd ),
+	   .sdram_wstrb ( abc_sr_wstrb )
+	   );
 
    // Embedded RISC-V CPU
    parameter cpu_fast_mem_bits = SRAM_BITS-2; /* 2^[this] * 4 bytes */
@@ -602,7 +584,7 @@ module max80
    always @(posedge sys_clk)
      board_id_q <= board_id;
 
-   wire [ 7:0] max80_fpga  = max80_ver;
+   wire [ 7:0] max80_fpga  = fpga_ver;
    wire [ 7:0] max80_major = ~board_id_q ? 8'd2 : 8'd1;
    wire [ 7:0] max80_minor = 8'd0;
    wire [ 7:0] max80_fixes = 8'b0;
@@ -714,31 +696,19 @@ module max80
    // boards or to GPIO for v2 boards.
    //
    // The GPIO numbering matches the order of pins for FT[2]232H.
-   // gpio[0] - TxD
-   // gpio[1] - RxD
-   // gpio[2] - RTS#
-   // gpio[3] - CTS#
-   // gpio[4] - DTR#
    //
    wire        tty_data_out;	// Output data
    wire        tty_data_in;	// Input data
    wire        tty_cts_out;	// Assert CTS# externally
    wire        tty_rts_in;	// RTS# received from outside
 
-`ifdef MAX80_V1
    assign tty_data_in      = tty_txd;
-   assign tty_rxd          = tty_dtr ? 1'bz : tty_data_out;
-   assign tty_rts_in       = tty_rts;
-   assign tty_cts          = tty_cts_out;
-`else
-   wire   tty_dtr          = gpio[4];
-   assign tty_data_in      = gpio[0];
-   assign gpio[1]          = tty_dtr ? 1'bz : tty_data_out;
-   assign tty_rts_in       = gpio[2];
-   assign gpio[3]          = tty_cts_out;
-`endif
+   assign tty_rxd          = ~tty_dtr ? tty_data_out : 1'bz;
+   assign tty_rts_in       = ~tty_rts;
+   assign tty_cts          = ~tty_cts_out;
+
+   assign tty_cts_out = 1'b1;	// Always assert CTS# for now
 
-   assign tty_cts_out  = 1'b0;	// Assert CTS#
    tty console (
 	    .rst_n ( hard_rst_n ),
 	    .clk   ( sys_clk ),
@@ -753,51 +723,41 @@ module max80
 	    .tty_txd ( tty_data_out ) // DTE -> DCE
 	    );
 
-`ifdef MAX80_V1
-   wire   usb_rx = 1'bx;
-`endif
-   
-   max80_usb #(.have_usb_rx(max80_ver > 1))
-   usb (
-	.rst_n         ( hard_rst_n ),
-	.clock48       ( usb_clk ),
-	.tty_rxd       ( ),
-	.tty_rxd_break ( usb_rxd_break ),
-	.tty_txd       ( tty_data_out ),
-	.usb_dp        ( usb_dp ),
-	.usb_dn        ( usb_pn ),
-	.usb_pu        ( usb_pu ),
-	.usb_rx        ( usb_rx )
-	);
+   max80_usb usb (
+		  .rst_n         ( hard_rst_n ),
+		  .clock48       ( usb_clk ),
+		  .tty_rxd       ( ),
+		  .tty_rxd_break ( usb_rxd_break ),
+		  .tty_txd       ( tty_data_out ),
+		  .usb_dp        ( usb_dp ),
+		  .usb_dn        ( usb_pn ),
+		  .usb_pu        ( usb_pu ),
+		  .usb_rx        ( usb_rx ),
+		  .usb_rx_ok     ( usb_rx_ok )
+		  );
 
-`ifdef MAX80_V1
-   assign sd_dat[2:1] = 2'bzz;
-   wire   sd_cd_n = 1'b0;
-`endif
-   
    // SD card
    sdcard #(
 	    .with_irq_mask ( 8'b0000_0001 )
 	    )
    sdcard (
-	   .rst_n   ( rst_n ),
-	   .clk     ( sys_clk ),
-	   .sd_cs_n ( sd_cs_n ),
-	   .sd_di   ( sd_di ),
-	   .sd_sclk ( sd_clk ),
-	   .sd_do   ( sd_do ),
-	   .sd_cd_n ( sd_cd_n ),
+	   .rst_n    ( rst_n ),
+	   .clk      ( sys_clk ),
+	   .sd_cs_n  ( sd_cs_n ),
+	   .sd_di    ( sd_di ),
+	   .sd_sclk  ( sd_clk ),
+	   .sd_do    ( sd_do ),
+	   .sd_cd_n  ( sd_cd_n ),
 	   .sd_irq_n ( 1'b1 ),
 
-	   .wdata   ( cpu_mem_wdata ),
-	   .rdata   ( iodev_rdata_sdcard ),
-	   .valid   ( iodev_valid_sdcard ),
-	   .wstrb   ( cpu_mem_wstrb ),
-	   .addr    ( cpu_mem_addr[6:2] ),
-	   .wait_n  ( iodev_wait_n_sdcard ),
-	   .irq     ( iodev_irq_sdcard )
+	   .wdata    ( cpu_mem_wdata ),
+	   .rdata    ( iodev_rdata_sdcard ),
+	   .valid    ( iodev_valid_sdcard ),
+	   .wstrb    ( cpu_mem_wstrb ),
+	   .addr     ( cpu_mem_addr[6:2] ),
+	   .wait_n   ( iodev_wait_n_sdcard ),
+	   .irq      ( iodev_irq_sdcard )
 	   );
-   assign sd_dat[2:1] = 2'bzz;
 
    //
    // System local clock (not an RTC per se, but settable from one);

BIN
fpga/output/v1.jic


+ 158 - 158
fpga/output/v1.pin

@@ -70,119 +70,119 @@ CHIP  "v1"  ASSIGNED TO AN: EP4CE15F17C8
 Pin Name/Usage               : Location  : Dir.   : I/O Standard      : Voltage : I/O Bank  : User Assignment
 -------------------------------------------------------------------------------------------------------------
 VCCIO8                       : A1        : power  :                   : 3.3V    : 8         :                
-abc_out_n[1]                 : A2        : input  : 3.3-V LVTTL       :         : 8         : N              
-abc_out_n[2]                 : A3        : input  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[6]                     : A4        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[10]                    : A5        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[12]                    : A6        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[5]                     : A7        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-GND+                         : A8        :        :                   :         : 8         :                
-GND+                         : A9        :        :                   :         : 7         :                
-abc_a[6]                     : A10       : input  : 3.3-V LVTTL       :         : 7         : N              
-abc_xinpstb_n                : A11       : input  : 3.3-V LVTTL       :         : 7         : N              
-abc_a_oe                     : A12       : output : 3.3-V LVTTL       :         : 7         : N              
-abc_int800_x                 : A13       : output : 3.3-V LVTTL       :         : 7         : N              
-spi_mosi                     : A14       : bidir  : 3.3-V LVTTL       :         : 7         : N              
-abc_int80_x                  : A15       : output : 3.3-V LVTTL       :         : 7         : N              
+abc_int800_x                 : A2        : output : 3.3-V LVTTL       :         : 8         : Y              
+abc_nmi_x                    : A3        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_dq[11]                    : A4        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
+sr_dq[8]                     : A5        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
+sr_a[9]                      : A6        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_a[7]                      : A7        : output : 3.3-V LVTTL       :         : 8         : Y              
+abc_a[0]                     : A8        : input  : 3.3-V LVTTL       :         : 8         : Y              
+abc_a[2]                     : A9        : input  : 3.3-V LVTTL       :         : 7         : Y              
+sr_dq[7]                     : A10       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
+sr_dq[5]                     : A11       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
+sr_dq[0]                     : A12       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
+sr_ba[0]                     : A13       : output : 3.3-V LVTTL       :         : 7         : Y              
+sr_a[0]                      : A14       : output : 3.3-V LVTTL       :         : 7         : Y              
+sr_a[3]                      : A15       : output : 3.3-V LVTTL       :         : 7         : Y              
 VCCIO7                       : A16       : power  :                   : 3.3V    : 7         :                
-abc_out_n[4]                 : B1        : input  : 3.3-V LVTTL       :         : 1         : N              
+abc_xm_x                     : B1        : output : 3.3-V LVTTL       :         : 1         : Y              
 GND                          : B2        : gnd    :                   :         :           :                
-abc_d_oe                     : B3        : output : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[15]                    : B4        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[14]                    : B5        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[7]                     : B6        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[8]                     : B7        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-GND+                         : B8        :        :                   :         : 8         :                
+abc_int80_x                  : B3        : output : 3.3-V LVTTL       :         : 8         : Y              
+abc_rdy_x                    : B4        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_dq[10]                    : B5        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
+sr_a[12]                     : B6        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_a[8]                      : B7        : output : 3.3-V LVTTL       :         : 8         : Y              
+abc_a[1]                     : B8        : input  : 3.3-V LVTTL       :         : 8         : Y              
 GND+                         : B9        :        :                   :         : 7         :                
-abc_a[9]                     : B10       : input  : 3.3-V LVTTL       :         : 7         : N              
-abc_xoutpstb_n               : B11       : input  : 3.3-V LVTTL       :         : 7         : N              
-esp_io0                      : B12       : bidir  : 3.3-V LVTTL       :         : 7         : N              
-spi_clk                      : B13       : bidir  : 3.3-V LVTTL       :         : 7         : N              
-spi_cs_esp_n                 : B14       : bidir  : 3.3-V LVTTL       :         : 7         : N              
+sr_dq[6]                     : B10       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
+sr_dq[4]                     : B11       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
+sr_ras_n                     : B12       : output : 3.3-V LVTTL       :         : 7         : Y              
+sr_ba[1]                     : B13       : output : 3.3-V LVTTL       :         : 7         : Y              
+sr_a[1]                      : B14       : output : 3.3-V LVTTL       :         : 7         : Y              
 GND                          : B15       : gnd    :                   :         :           :                
-abc_a[15]                    : B16       : input  : 3.3-V LVTTL       :         : 6         : N              
-sr_dqm[1]                    : C1        : output : 3.3-V LVTTL       :         : 1         : N              
-sr_dq[13]                    : C2        : bidir  : 3.3-V LVTTL       :         : 1         : N              
-sr_dqm[0]                    : C3        : output : 3.3-V LVTTL       :         : 8         : N              
+rtc_int_n                    : B16       : input  : 3.3-V LVTTL       :         : 6         : Y              
+flash_io[0]                  : C1        : bidir  : 3.3-V LVTTL       :         : 1         : Y              
+abc_a_oe                     : C2        : output : 3.3-V LVTTL       :         : 1         : Y              
+GND*                         : C3        :        :                   :         : 8         :                
 VCCIO8                       : C4        : power  :                   : 3.3V    : 8         :                
 GND                          : C5        : gnd    :                   :         :           :                
-abc_a[3]                     : C6        : input  : 3.3-V LVTTL       :         : 8         : N              
+sr_dq[14]                    : C6        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
 VCCIO8                       : C7        : power  :                   : 3.3V    : 8         :                
-sr_a[3]                      : C8        : output : 3.3-V LVTTL       :         : 8         : N              
-abc_xmemw800_n               : C9        : input  : 3.3-V LVTTL       :         : 7         : N              
+sr_a[11]                     : C8        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_a[4]                      : C9        : output : 3.3-V LVTTL       :         : 7         : Y              
 VCCIO7                       : C10       : power  :                   : 3.3V    : 7         :                
-spi_cs_flash_n               : C11       : bidir  : 3.3-V LVTTL       :         : 7         : N              
+sr_dq[3]                     : C11       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
 GND                          : C12       : gnd    :                   :         :           :                
 VCCIO7                       : C13       : power  :                   : 3.3V    : 7         :                
-abc_host                     : C14       : output : 3.3-V LVTTL       :         : 7         : N              
-GND*                         : C15       :        :                   :         : 6         :                
-hdmi_hpd                     : C16       : bidir  : 3.3-V LVTTL       :         : 6         : N              
-sr_dq[11]                    : D1        : bidir  : 3.3-V LVTTL       :         : 1         : N              
-sr_cs_n                      : D2        : output : 3.3-V LVTTL       :         : 1         : N              
-sr_clk                       : D3        : output : 3.3-V LVTTL       :         : 8         : N              
+sr_a[10]                     : C14       : output : 3.3-V LVTTL       :         : 7         : Y              
+i2c_sda                      : C15       : bidir  : 3.3-V LVTTL       :         : 6         : Y              
+i2c_scl                      : C16       : bidir  : 3.3-V LVTTL       :         : 6         : Y              
+abc_a[3]                     : D1        : input  : 3.3-V LVTTL       :         : 1         : Y              
+flash_cs_n                   : D2        : output : 3.3-V LVTTL       :         : 1         : Y              
+sr_clk                       : D3        : output : 3.3-V LVTTL       :         : 8         : Y              
 VCCD_PLL3                    : D4        : power  :                   : 1.2V    :           :                
-sr_dq[0]                     : D5        : bidir  : 3.3-V LVTTL       :         : 8         : N              
-sr_dq[9]                     : D6        : bidir  : 3.3-V LVTTL       :         : 8         : N              
+sr_dq[15]                    : D5        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
+sr_dq[13]                    : D6        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
 GND                          : D7        : gnd    :                   :         :           :                
-sr_ras_n                     : D8        : output : 3.3-V LVTTL       :         : 8         : N              
-abc_a[7]                     : D9        : input  : 3.3-V LVTTL       :         : 7         : N              
+sr_dqm[1]                    : D8        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_a[5]                      : D9        : output : 3.3-V LVTTL       :         : 7         : Y              
 GND                          : D10       : gnd    :                   :         :           :                
-tty_rts                      : D11       : input  : 3.3-V LVTTL       :         : 7         : N              
-GND*                         : D12       :        :                   :         : 7         :                
+sr_dq[2]                     : D11       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
+sr_cs_n                      : D12       : output : 3.3-V LVTTL       :         : 7         : Y              
 VCCD_PLL2                    : D13       : power  :                   : 1.2V    :           :                
-sr_cke                       : D14       : output : 3.3-V LVTTL       :         : 7         : N              
-sd_dat[2]                    : D15       : bidir  : 3.3-V LVTTL       :         : 6         : N              
-exth_ha                      : D16       : bidir  : 3.3-V LVTTL       :         : 6         : N              
-abc_a[0]                     : E1        : input  : 3.3-V LVTTL       :         : 1         : N              
+sr_a[2]                      : D14       : output : 3.3-V LVTTL       :         : 7         : Y              
+tty_cts                      : D15       : output : 3.3-V LVTTL       :         : 6         : Y              
+tty_rts                      : D16       : input  : 3.3-V LVTTL       :         : 6         : Y              
+abc_a[6]                     : E1        : input  : 3.3-V LVTTL       :         : 1         : Y              
 GND                          : E2        : gnd    :                   :         :           :                
 VCCIO1                       : E3        : power  :                   : 3.3V    : 1         :                
 GND                          : E4        : gnd    :                   :         :           :                
 GNDA3                        : E5        : gnd    :                   :         :           :                
-sr_a[10]                     : E6        : output : 3.3-V LVTTL       :         : 8         : N              
-sr_we_n                      : E7        : output : 3.3-V LVTTL       :         : 8         : N              
-sr_a[0]                      : E8        : output : 3.3-V LVTTL       :         : 8         : N              
-abc_a[2]                     : E9        : input  : 3.3-V LVTTL       :         : 7         : N              
-esp_int                      : E10       : bidir  : 3.3-V LVTTL       :         : 7         : N              
-rtc_int_n                    : E11       : input  : 3.3-V LVTTL       :         : 7         : N              
+sr_dq[12]                    : E6        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
+sr_dq[9]                     : E7        : bidir  : 3.3-V LVTTL       :         : 8         : Y              
+sr_a[6]                      : E8        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_cas_n                     : E9        : output : 3.3-V LVTTL       :         : 7         : Y              
+sr_dqm[0]                    : E10       : output : 3.3-V LVTTL       :         : 7         : Y              
+sr_dq[1]                     : E11       : bidir  : 3.3-V LVTTL       :         : 7         : Y              
 GNDA2                        : E12       : gnd    :                   :         :           :                
 GND                          : E13       : gnd    :                   :         :           :                
 VCCIO6                       : E14       : power  :                   : 3.3V    : 6         :                
-clock_48                     : E15       : input  : 2.5 V             :         : 6         : N              
-rtc_32khz                    : E16       : input  : 3.3-V LVTTL       :         : 6         : N              
-sr_dq[3]                     : F1        : bidir  : 3.3-V LVTTL       :         : 1         : N              
-sr_dq[1]                     : F2        : bidir  : 3.3-V LVTTL       :         : 1         : N              
-abc_d[3]                     : F3        : bidir  : 3.3-V LVTTL       :         : 1         : N              
+rtc_32khz                    : E15       : input  : 3.3-V LVTTL       :         : 6         : Y              
+tty_txd                      : E16       : input  : 3.3-V LVTTL       :         : 6         : Y              
+abc_a[7]                     : F1        : input  : 3.3-V LVTTL       :         : 1         : Y              
+abc_cs_n                     : F2        : input  : 3.3-V LVTTL       :         : 1         : Y              
+abc_a[5]                     : F3        : input  : 3.3-V LVTTL       :         : 1         : Y              
 nSTATUS                      : F4        :        :                   :         : 1         :                
 VCCA3                        : F5        : power  :                   : 2.5V    :           :                
 GND                          : F6        : gnd    :                   :         :           :                
 VCCINT                       : F7        : power  :                   : 1.2V    :           :                
-sr_a[1]                      : F8        : output : 3.3-V LVTTL       :         : 8         : N              
-abc_a[10]                    : F9        : input  : 3.3-V LVTTL       :         : 7         : N              
+sr_cke                       : F8        : output : 3.3-V LVTTL       :         : 8         : Y              
+sr_we_n                      : F9        : output : 3.3-V LVTTL       :         : 7         : Y              
 GND                          : F10       : gnd    :                   :         :           :                
 VCCINT                       : F11       : power  :                   : 1.2V    :           :                
 VCCA2                        : F12       : power  :                   : 2.5V    :           :                
-GND*                         : F13       :        :                   :         : 6         :                
-hdmi_scl                     : F14       : bidir  : 3.3-V LVTTL       :         : 6         : N              
-GND*                         : F15       :        :                   :         : 6         :                
-GND*                         : F16       :        :                   :         : 6         :                
-abc_d[1]                     : G1        : bidir  : 3.3-V LVTTL       :         : 1         : N              
-sr_dq[4]                     : G2        : bidir  : 3.3-V LVTTL       :         : 1         : N              
+tty_rxd                      : F13       : output : 3.3-V LVTTL       :         : 6         : Y              
+sd_dat[2]                    : F14       : bidir  : 3.3-V LVTTL       :         : 6         : Y              
+sd_dat[0]                    : F15       : bidir  : 3.3-V LVTTL       :         : 6         : Y              
+sd_dat[3]                    : F16       : bidir  : 3.3-V LVTTL       :         : 6         : Y              
+abc_a[8]                     : G1        : input  : 3.3-V LVTTL       :         : 1         : Y              
+abc_out_n[0]                 : G2        : input  : 3.3-V LVTTL       :         : 1         : Y              
 VCCIO1                       : G3        : power  :                   : 3.3V    : 1         :                
 GND                          : G4        : gnd    :                   :         :           :                
-sr_dq[2]                     : G5        : bidir  : 3.3-V LVTTL       :         : 1         : N              
+abc_a[4]                     : G5        : input  : 3.3-V LVTTL       :         : 1         : Y              
 VCCINT                       : G6        : power  :                   : 1.2V    :           :                
 VCCINT                       : G7        : power  :                   : 1.2V    :           :                
 VCCINT                       : G8        : power  :                   : 1.2V    :           :                
 VCCINT                       : G9        : power  :                   : 1.2V    :           :                
 VCCINT                       : G10       : power  :                   : 1.2V    :           :                
-spi_miso                     : G11       : bidir  : 3.3-V LVTTL       :         : 6         : N              
+rngio[2]                     : G11       : bidir  : 3.3-V LVTTL       :         : 6         : Y              
 MSEL2                        : G12       :        :                   :         : 6         :                
 GND                          : G13       : gnd    :                   :         :           :                
 VCCIO6                       : G14       : power  :                   : 3.3V    : 6         :                
-abc_a[4]                     : G15       : input  : 3.3-V LVTTL       :         : 6         : N              
-exth_he                      : G16       : bidir  : 3.3-V LVTTL       :         : 6         : N              
-GND*                         : H1        :        :                   :         : 1         :                
-sr_cas_n                     : H2        : output : 3.3-V LVTTL       :         : 1         : N              
+sd_clk                       : G15       : output : 3.3-V LVTTL       :         : 6         : Y              
+sd_cmd                       : G16       : output : 3.3-V LVTTL       :         : 6         : Y              
+flash_sck                    : H1        : output : 3.3-V LVTTL       :         : 1         : Y              
+flash_io[1]                  : H2        : bidir  : 3.3-V LVTTL       :         : 1         : Y              
 TCK                          : H3        : input  :                   :         : 1         :                
 TDI                          : H4        : input  :                   :         : 1         :                
 nCONFIG                      : H5        :        :                   :         : 1         :                
@@ -197,8 +197,8 @@ MSEL0                        : H13       :        :                   :
 CONF_DONE                    : H14       :        :                   :         : 6         :                
 GND                          : H15       : gnd    :                   :         :           :                
 GND                          : H16       : gnd    :                   :         :           :                
-sr_a[8]                      : J1        : output : 3.3-V LVTTL       :         : 2         : N              
-sr_a[7]                      : J2        : output : 3.3-V LVTTL       :         : 2         : N              
+abc_a[9]                     : J1        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_out_n[1]                 : J2        : input  : 3.3-V LVTTL       :         : 2         : Y              
 nCE                          : J3        :        :                   :         : 1         :                
 TDO                          : J4        : output :                   :         : 1         :                
 TMS                          : J5        : input  :                   :         : 1         :                
@@ -208,120 +208,120 @@ GND                          : J8        : gnd    :                   :
 GND                          : J9        : gnd    :                   :         :           :                
 GND                          : J10       : gnd    :                   :         :           :                
 GND                          : J11       : gnd    :                   :         :           :                
-abc_xmemw80_n                : J12       : input  : 3.3-V LVTTL       :         : 5         : N              
-abc_cs_n                     : J13       : input  : 3.3-V LVTTL       :         : 5         : N              
-abc_xmemfl_n                 : J14       : input  : 3.3-V LVTTL       :         : 5         : N              
-GND*                         : J15       :        :                   :         : 5         :                
-GND*                         : J16       :        :                   :         : 5         :                
-abc_d[4]                     : K1        : bidir  : 3.3-V LVTTL       :         : 2         : N              
-sd_do                        : K2        : input  : 3.3-V LVTTL       :         : 2         : N              
+GND*                         : J12       :        :                   :         : 5         :                
+GND*                         : J13       :        :                   :         : 5         :                
+GND*                         : J14       :        :                   :         : 5         :                
+hdmi_clk                     : J15       : output : LVDS              :         : 5         : Y              
+hdmi_clk(n)                  : J16       : output : LVDS              :         : 5         : Y              
+abc_a[11]                    : K1        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_out_n[4]                 : K2        : input  : 3.3-V LVTTL       :         : 2         : Y              
 VCCIO2                       : K3        : power  :                   : 3.3V    : 2         :                
 GND                          : K4        : gnd    :                   :         :           :                
-abc_rdy_x                    : K5        : output : 3.3-V LVTTL       :         : 2         : N              
-abc_d[5]                     : K6        : bidir  : 3.3-V LVTTL       :         : 2         : N              
+abc_out_n[2]                 : K5        : input  : 3.3-V LVTTL       :         : 2         : Y              
+GND*                         : K6        :        :                   :         : 2         :                
 VCCINT                       : K7        : power  :                   : 1.2V    :           :                
 GND                          : K8        : gnd    :                   :         :           :                
-sr_a[11]                     : K9        : output : 3.3-V LVTTL       :         : 4         : N              
-abc_a[13]                    : K10       : input  : 3.3-V LVTTL       :         : 4         : N              
+GND*                         : K9        :        :                   :         : 4         :                
+board_id                     : K10       : input  : 3.3-V LVTTL       :         : 4         : Y              
 VCCINT                       : K11       : power  :                   : 1.2V    :           :                
 GND*                         : K12       :        :                   :         : 5         :                
 GND                          : K13       : gnd    :                   :         :           :                
 VCCIO5                       : K14       : power  :                   : 2.5V    : 5         :                
-hdmi_clk                     : K15       : output : LVDS              :         : 5         : N              
-hdmi_clk(n)                  : K16       : output : LVDS              :         : 5         : N              
-abc_d[2]                     : L1        : bidir  : 3.3-V LVTTL       :         : 2         : N              
-abc_d[6]                     : L2        : bidir  : 3.3-V LVTTL       :         : 2         : N              
-abc_d[0]                     : L3        : bidir  : 3.3-V LVTTL       :         : 2         : N              
-i2c_scl                      : L4        : bidir  : 3.3-V LVTTL       :         : 2         : N              
+hdmi_d[0]                    : K15       : output : LVDS              :         : 5         : Y              
+hdmi_d[0](n)                 : K16       : output : LVDS              :         : 5         : Y              
+abc_a[12]                    : L1        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_inp_n[0]                 : L2        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_out_n[3]                 : L3        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_a[10]                    : L4        : input  : 3.3-V LVTTL       :         : 2         : Y              
 VCCA1                        : L5        : power  :                   : 2.5V    :           :                
-abc_d[7]                     : L6        : bidir  : 3.3-V LVTTL       :         : 2         : N              
-flash_io[1]                  : L7        : bidir  : 3.3-V LVTTL       :         : 3         : N              
-sr_ba[1]                     : L8        : output : 3.3-V LVTTL       :         : 3         : N              
-tty_rxd                      : L9        : bidir  : 3.3-V LVTTL       :         : 4         : N              
-tty_txd                      : L10       : input  : 3.3-V LVTTL       :         : 4         : N              
-exth_hd                      : L11       : bidir  : 3.3-V LVTTL       :         : 4         : N              
+rngio[0]                     : L6        : bidir  : 3.3-V LVTTL       :         : 2         : Y              
+gpio[0]                      : L7        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+esp_io0                      : L8        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+GND*                         : L9        :        :                   :         : 4         :                
+abc_xoutpstb_n               : L10       : input  : 3.3-V LVTTL       :         : 4         : Y              
+GND*                         : L11       :        :                   :         : 4         :                
 VCCA4                        : L12       : power  :                   : 2.5V    :           :                
-hdmi_d[2](n)                 : L13       : output : LVDS              :         : 5         : N              
+GND*                         : L13       :        :                   :         : 5         :                
 GND*                         : L14       :        :                   :         : 5         :                
 GND*                         : L15       :        :                   :         : 5         :                
-hdmi_d[2]                    : L16       : output : LVDS              :         : 5         : N              
-exth_hh                      : M1        : input  : 3.3-V LVTTL       :         : 2         : N              
-exth_hc                      : M2        : input  : 3.3-V LVTTL       :         : 2         : N              
+GND*                         : L16       :        :                   :         : 5         :                
+abc_a[13]                    : M1        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_inp_n[1]                 : M2        : input  : 3.3-V LVTTL       :         : 2         : Y              
 VCCIO2                       : M3        : power  :                   : 3.3V    : 2         :                
 GND                          : M4        : gnd    :                   :         :           :                
 GNDA1                        : M5        : gnd    :                   :         :           :                
-sr_a[6]                      : M6        : output : 3.3-V LVTTL       :         : 3         : N              
-led[2]                       : M7        : output : 3.3-V LVTTL       :         : 3         : N              
-sr_a[12]                     : M8        : output : 3.3-V LVTTL       :         : 3         : N              
-abc_a[12]                    : M9        : input  : 3.3-V LVTTL       :         : 4         : N              
-GND*                         : M10       :        :                   :         : 4         :                
-exth_hb                      : M11       : bidir  : 3.3-V LVTTL       :         : 4         : N              
+abc_d[1]                     : M6        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+spi_miso                     : M7        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+spi_mosi                     : M8        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+GND*                         : M9        :        :                   :         : 4         :                
+sd_dat[1]                    : M10       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
+hdmi_scl                     : M11       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
 GNDA4                        : M12       : gnd    :                   :         :           :                
 GND                          : M13       : gnd    :                   :         :           :                
 VCCIO5                       : M14       : power  :                   : 2.5V    : 5         :                
-GND+                         : M15       :        :                   :         : 5         :                
+clock_48                     : M15       : input  : 2.5 V             :         : 5         : Y              
 GND+                         : M16       :        :                   :         : 5         :                
-rngio[1]                     : N1        : bidir  : 3.3-V LVTTL       :         : 2         : N              
-sd_cs_n                      : N2        : output : 3.3-V LVTTL       :         : 2         : N              
-rngio[0]                     : N3        : bidir  : 3.3-V LVTTL       :         : 3         : N              
+abc_a[15]                    : N1        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_a[14]                    : N2        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_xmemfl_n                 : N3        : input  : 3.3-V LVTTL       :         : 3         : Y              
 VCCD_PLL1                    : N4        : power  :                   : 1.2V    :           :                
-abc_out_n[3]                 : N5        : input  : 3.3-V LVTTL       :         : 3         : N              
-sr_a[2]                      : N6        : output : 3.3-V LVTTL       :         : 3         : N              
+abc_d[2]                     : N5        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+spi_cs_flash_n               : N6        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
 GND                          : N7        : gnd    :                   :         :           :                
-flash_sck                    : N8        : output : 3.3-V LVTTL       :         : 3         : N              
-abc_a[5]                     : N9        : input  : 3.3-V LVTTL       :         : 4         : N              
+spi_cs_esp_n                 : N8        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+exth_hb                      : N9        : bidir  : 3.3-V LVTTL       :         : 4         : Y              
 GND                          : N10       : gnd    :                   :         :           :                
-exth_hf                      : N11       : bidir  : 3.3-V LVTTL       :         : 4         : N              
-gpio                         : N12       : bidir  : 3.3-V LVTTL       :         : 4         : N              
+exth_hg                      : N11       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
+exth_ha                      : N12       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
 VCCD_PLL4                    : N13       : power  :                   : 1.2V    :           :                
 GND*                         : N14       :        :                   :         : 5         :                
-hdmi_d[1]                    : N15       : output : LVDS              :         : 5         : N              
-hdmi_d[1](n)                 : N16       : output : LVDS              :         : 5         : N              
-abc_nmi_x                    : P1        : output : 3.3-V LVTTL       :         : 2         : N              
-abc_out_n[0]                 : P2        : input  : 3.3-V LVTTL       :         : 2         : N              
-abc_inp_n[1]                 : P3        : input  : 3.3-V LVTTL       :         : 3         : N              
+hdmi_d[1]                    : N15       : output : LVDS              :         : 5         : Y              
+hdmi_d[1](n)                 : N16       : output : LVDS              :         : 5         : Y              
+abc_xmemw800_n               : P1        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_rst_n                    : P2        : input  : 3.3-V LVTTL       :         : 2         : Y              
+abc_d[0]                     : P3        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
 VCCIO3                       : P4        : power  :                   : 3.3V    : 3         :                
 GND                          : P5        : gnd    :                   :         :           :                
-led[0]                       : P6        : output : 3.3-V LVTTL       :         : 3         : N              
+spi_clk                      : P6        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
 VCCIO3                       : P7        : power  :                   : 3.3V    : 3         :                
-sr_ba[0]                     : P8        : output : 3.3-V LVTTL       :         : 3         : N              
-abc_xm_x                     : P9        : output : 3.3-V LVTTL       :         : 4         : N              
+esp_int                      : P8        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+gpio[1]                      : P9        : bidir  : 3.3-V LVTTL       :         : 4         : Y              
 VCCIO4                       : P10       : power  :                   : 3.3V    : 4         :                
-tty_cts                      : P11       : output : 3.3-V LVTTL       :         : 4         : N              
+rngio[1]                     : P11       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
 GND                          : P12       : gnd    :                   :         :           :                
 VCCIO4                       : P13       : power  :                   : 3.3V    : 4         :                
-hdmi_sda                     : P14       : bidir  : 3.3-V LVTTL       :         : 4         : N              
+tty_dtr                      : P14       : input  : 3.3-V LVTTL       :         : 4         : Y              
 GND*                         : P15       :        :                   :         : 5         :                
-hdmi_d[0](n)                 : P16       : output : LVDS              :         : 5         : N              
-i2c_sda                      : R1        : bidir  : 3.3-V LVTTL       :         : 2         : N              
+hdmi_d[2](n)                 : P16       : output : LVDS              :         : 5         : Y              
+abc_xmemw80_n                : R1        : input  : 3.3-V LVTTL       :         : 2         : Y              
 GND                          : R2        : gnd    :                   :         :           :                
-sd_di                        : R3        : output : 3.3-V LVTTL       :         : 3         : N              
-abc_resin_x                  : R4        : output : 3.3-V LVTTL       :         : 3         : N              
-sr_a[4]                      : R5        : output : 3.3-V LVTTL       :         : 3         : N              
-sr_a[5]                      : R6        : output : 3.3-V LVTTL       :         : 3         : N              
-flash_cs_n                   : R7        : output : 3.3-V LVTTL       :         : 3         : N              
-abc_clk                      : R8        : input  : 3.3-V LVTTL       :         : 3         : N              
+abc_d[4]                     : R3        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+abc_d[6]                     : R4        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+abc_d_oe                     : R5        : output : 3.3-V LVTTL       :         : 3         : Y              
+abc_resin_x                  : R6        : output : 3.3-V LVTTL       :         : 3         : Y              
+gpio[5]                      : R7        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+exth_hh                      : R8        : input  : 3.3-V LVTTL       :         : 3         : Y              
 GND+                         : R9        :        :                   :         : 4         :                
-abc_a[14]                    : R10       : input  : 3.3-V LVTTL       :         : 4         : N              
-abc_a[1]                     : R11       : input  : 3.3-V LVTTL       :         : 4         : N              
-abc_a[11]                    : R12       : input  : 3.3-V LVTTL       :         : 4         : N              
-abc_d_ce_n                   : R13       : output : 3.3-V LVTTL       :         : 4         : N              
-exth_hg                      : R14       : bidir  : 3.3-V LVTTL       :         : 4         : N              
+gpio[3]                      : R10       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
+exth_hd                      : R11       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
+exth_he                      : R12       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
+hdmi_sda                     : R13       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
+led[2]                       : R14       : output : 3.3-V LVTTL       :         : 4         : Y              
 GND                          : R15       : gnd    :                   :         :           :                
-hdmi_d[0]                    : R16       : output : LVDS              :         : 5         : N              
+hdmi_d[2]                    : R16       : output : LVDS              :         : 5         : Y              
 VCCIO3                       : T1        : power  :                   : 3.3V    : 3         :                
-rngio[2]                     : T2        : bidir  : 3.3-V LVTTL       :         : 3         : N              
-abc_rst_n                    : T3        : input  : 3.3-V LVTTL       :         : 3         : N              
-abc_inp_n[0]                 : T4        : input  : 3.3-V LVTTL       :         : 3         : N              
-led[1]                       : T5        : output : 3.3-V LVTTL       :         : 3         : N              
-sr_a[9]                      : T6        : output : 3.3-V LVTTL       :         : 3         : N              
-flash_io[0]                  : T7        : bidir  : 3.3-V LVTTL       :         : 3         : N              
-GND+                         : T8        :        :                   :         : 3         :                
-GND+                         : T9        :        :                   :         : 4         :                
-sd_clk                       : T10       : output : 3.3-V LVTTL       :         : 4         : N              
-abc_a[8]                     : T11       : input  : 3.3-V LVTTL       :         : 4         : N              
-board_id                     : T12       : input  : 3.3-V LVTTL       :         : 4         : N              
-tty_dtr                      : T13       : input  : 3.3-V LVTTL       :         : 4         : N              
-sd_dat[1]                    : T14       : bidir  : 3.3-V LVTTL       :         : 4         : N              
-GND*                         : T15       :        :                   :         : 4         :                
+abc_d[3]                     : T2        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+abc_d[5]                     : T3        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+abc_d[7]                     : T4        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+abc_d_ce_n                   : T5        : output : 3.3-V LVTTL       :         : 3         : Y              
+gpio[2]                      : T6        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+gpio[4]                      : T7        : bidir  : 3.3-V LVTTL       :         : 3         : Y              
+abc_clk                      : T8        : input  : 3.3-V LVTTL       :         : 3         : Y              
+exth_hc                      : T9        : input  : 3.3-V LVTTL       :         : 4         : Y              
+abc_host                     : T10       : output : 3.3-V LVTTL       :         : 4         : Y              
+exth_hf                      : T11       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
+abc_xinpstb_n                : T12       : input  : 3.3-V LVTTL       :         : 4         : Y              
+led[0]                       : T13       : output : 3.3-V LVTTL       :         : 4         : Y              
+led[1]                       : T14       : output : 3.3-V LVTTL       :         : 4         : Y              
+hdmi_hpd                     : T15       : bidir  : 3.3-V LVTTL       :         : 4         : Y              
 VCCIO4                       : T16       : power  :                   : 3.3V    : 4         :                

BIN
fpga/output/v1.sof


+ 0 - 1
fpga/sdram.sv

@@ -247,7 +247,6 @@ module sdram
 	      input	    rfsh_tmr, // tREFI/2 timer
 
 	      // SDRAM hardware interface
-	      output	    sr_cke, // SDRAM clock enable
 	      output	    sr_cs_n, // SDRAM CS#
 	      output	    sr_ras_n, // SDRAM RAS#
 	      output	    sr_cas_n, // SDRAM CAS#

+ 6 - 7
fpga/usb/usb.sv

@@ -5,8 +5,7 @@
 // to the output of the tty
 //
 
-module max80_usb #(parameter logic have_usb_rx = 1'b1)
-   (
+module max80_usb (
 		  input  rst_n,
 		  input  clock48,
 
@@ -16,9 +15,10 @@ module max80_usb #(parameter logic have_usb_rx = 1'b1)
 
 		  inout  usb_dp,	// Single ended D+
 		  inout  usb_dn,	// Single ended D-
-		  input  usb_rx,	// Differential input if available
-		  output usb_pu		// driver for 1.5 kohm pullup
-    );
+		  input  usb_rx,	// Differential input
+		  input  usb_rx_ok,	// Differential input available
+		  output usb_pu		// Driver for 1.5 kohm pullup
+		  );
 
    //
    // UTMI interface to PHY
@@ -40,8 +40,7 @@ module max80_usb #(parameter logic have_usb_rx = 1'b1)
    //
    // USB hardware interface to PHY
    //
-   wire 		 usb_rx_rcv =
-			 have_usb_rx ? usb_rx : usb_dp & ~usb_dn;
+   wire 		 usb_rx_rcv = usb_rx_ok ? usb_rx : usb_dp & ~usb_dn;
    wire			 usb_rx_dp  = usb_dp;
    wire			 usb_rx_dn  = usb_dn;
    wire			 usb_tx_dp;

+ 192 - 0
fpga/v1.pins

@@ -0,0 +1,192 @@
+# Bank 1
+# j5	TMS
+# j3	nCE
+# j4	TDO
+# h4	TDI
+e1	abc_a[6]
+b1	abc_xm_x
+c2	abc_a_oe
+c1	flash_io[0]
+f3	abc_a[5]
+d2	flash_cs_n
+d1	abc_a[3]
+# f4	nSTATUS
+g5	abc_a[4]
+f2	abc_cs_n
+f1	abc_a[7]
+g2	abc_out_n[0]
+g1	abc_a[8]
+h1	flash_sck
+h2	flash_io[1]
+# h5	nCONFIG
+# h3	TCK
+
+# Bank 2
+r1	abc_xmemw80_n
+p2	abc_rst_n
+p1	abc_xmemw800_n
+m2	abc_inp_n[1]
+m1	abc_a[13]
+j2	abc_out_n[1]
+j1	abc_a[9]
+# k6	GPIO N/C
+l6	rngio[0]
+l3	abc_out_n[3]
+k1	abc_a[11]
+l2	abc_inp_n[0]
+l1	abc_a[12]
+k2	abc_out_n[4]
+n2	abc_a[14]
+n1	abc_a[15]
+k5	abc_out_n[2]
+l4	abc_a[10]
+
+# Bank 3
+m6	abc_d[1]
+p6	spi_clk
+m7	spi_miso
+t5	abc_d_ce_n
+r5	abc_d_oe
+r6	abc_resin_x
+t6	gpio[2]
+l7	gpio[0]
+r7	gpio[5]
+t7	gpio[4]
+l8	esp_io0
+m8	spi_mosi
+n8	spi_cs_esp_n
+p8	esp_int
+r8	exth_hh
+t8	abc_clk
+n3	abc_xmemfl_n
+p3	abc_d[0]
+r3	abc_d[4]
+t3	abc_d[5]
+t2	abc_d[3]
+r4	abc_d[6]
+t4	abc_d[7]
+n5	abc_d[2]
+n6	spi_cs_flash_n
+
+# Bank 4
+# l11	GPIO N/C
+# k9	GPIO N/C
+m11	hdmi_scl
+# l9	GPIO N/C
+t13	led[0]
+# m9	GPIO N/C
+# r9	GPI  VCC
+n9	exth_hb
+t9	exth_hc
+r10	gpio[3]
+t10	abc_host
+r11	exth_hd
+t11	exth_hf
+r12	exth_he
+t12	abc_xinpstb_n
+k10	board_id
+l10	abc_xoutpstb_n
+p9	gpio[1]
+n12	exth_ha
+n11	exth_hg
+r13	hdmi_sda
+t14	led[1]
+t15	hdmi_hpd
+m10	sd_dat[1]
+p11	rngio[1]
+p14	tty_dtr
+r14	led[2]
+
+# Bank 5 (2.5 V)
+# n14	GPIO N/C
+# p15	GPIO N/C
+p16	hdmi_d[2](n)
+r16	hdmi_d[2]
+# k12	GPIO N/C
+n16	hdmi_d[1](n)
+n15	hdmi_d[1]
+# l14	GPIO N/C
+# l13	GPIO N/C
+# l16	GPIO N/C
+# l15	GPIO N/C
+k16	hdmi_d[0](n)
+k15	hdmi_d[0]
+j16	hdmi_clk(n)
+j15	hdmi_clk
+# m16	GPI  GND
+# j14	GPIO N/C
+m15	clock_48
+# j12	GPIO N/C
+# j13	GPIO N/C
+
+# Bank 6
+e16	tty_txd		# BOARD REWORK!!!
+e15	rtc_32khz
+# h14	CONF_DONE
+# h13	MSEL[0]
+# h12	MSEL[1]
+# g12	MSEL[2]
+g16	sd_cmd
+g15	sd_clk
+f13	tty_rxd		# BOARD REWORK!!!
+f16	sd_dat[3]
+f15	sd_dat[0]
+b16	rtc_int_n
+f14	sd_dat[2]
+d16	tty_rts
+d15	tty_cts
+g11	rngio[2]
+c16	i2c_scl
+c15	i2c_sda
+
+# Bank 7
+d12	sr_cs_n
+c11	sr_dq[3]
+c14	sr_a[10]
+b13	sr_ba[1]
+d14	sr_a[2]
+a14	sr_a[0]
+d11	sr_dq[2]
+b14	sr_a[1]
+e11	sr_dq[1]
+e10	sr_dqm[0]
+a12	sr_dq[0]
+b12	sr_ras_n
+a11	sr_dq[5]
+b11	sr_dq[4]
+a13	sr_ba[0]
+a15	sr_a[3]
+f9	sr_we_n
+a10	sr_dq[7]
+b10	sr_dq[6]
+c9	sr_a[4]
+d9	sr_a[5]
+e9	sr_cas_n
+a9	abc_a[2]
+# b9	GPI  abc_a[2]
+
+# Bank 8
+d8	sr_dqm[1]
+e8	sr_a[6]
+a8	abc_a[0]
+f8	sr_cke
+b8	abc_a[1]
+a7	sr_a[7]
+c8	sr_a[11]
+b7	sr_a[8]
+c6	sr_dq[14]
+a6	sr_a[9]
+b6	sr_a[12]
+e7	sr_dq[9]
+e6	sr_dq[12]
+a5	sr_dq[8]
+b5	sr_dq[10]
+d6	sr_dq[13]
+a4	sr_dq[11]
+b4	abc_rdy_x
+a2	abc_int800_x
+d5	sr_dq[15]
+a3	abc_nmi_x
+b3	abc_int80_x
+# c3	GPIO N/C
+d3	sr_clk

+ 3 - 3
fpga/v1.qsf

@@ -1,5 +1,5 @@
-set_global_assignment -name SOURCE_TCL_SCRIPT_FILE max80.qsf
-set_global_assignment -name TOP_LEVEL_ENTITY max80
+set_global_assignment -name TOP_LEVEL_ENTITY v1
 set_global_assignment -name SOURCE_FILE v1.pins
-set_global_assignment -name VERILOG_MACRO MAX80_V1
 set_global_assignment -name SOURCE_FILE "max80-v1.cof"
+
+set_global_assignment -name SOURCE_TCL_SCRIPT_FILE max80.qsf

+ 210 - 0
fpga/v1.sv

@@ -0,0 +1,210 @@
+//
+// Top level module for the FPGA on the MAX80 board by
+// Per Mårtensson and H. Peter Anvin
+//
+// MAX80 v1
+//
+
+module v1
+   (
+    // Clock oscillator
+    input 	  clock_48, // 48 MHz
+    input 	  board_id, // This better match the firmware
+
+    // ABC-bus
+    input 	  abc_clk, // ABC-bus 3 MHz clock
+    input [15:0]  abc_a, // ABC address bus
+    inout [7:0]   abc_d, // ABC data bus
+    output 	  abc_d_oe, // Data bus output enable
+    input 	  abc_rst_n, // ABC bus reset strobe
+    input 	  abc_cs_n, // ABC card select strobe
+    input [4:0]   abc_out_n, // OUT, C1-C4 strobe
+    input [1:0]   abc_inp_n, // INP, STATUS strobe
+    input 	  abc_xmemfl_n, // Memory read strobe
+    input 	  abc_xmemw800_n, // Memory write strobe (ABC800)
+    input 	  abc_xmemw80_n, // Memory write strobe (ABC80)
+    input 	  abc_xinpstb_n, // I/O read strobe (ABC800)
+    input 	  abc_xoutpstb_n, // I/O write strobe (ABC80)
+    // The following are inverted versus the bus IF
+    // the corresponding MOSFETs are installed
+    output 	  abc_rdy_x, // RDY = WAIT#
+    output 	  abc_resin_x, // System reset request
+    output 	  abc_int80_x, // System INT request (ABC80)
+    output 	  abc_int800_x, // System INT request (ABC800)
+    output 	  abc_nmi_x, // System NMI request (ABC800)
+    output 	  abc_xm_x, // System memory override (ABC800)
+    // Host/device control
+    output 	  abc_host, // 1 = host, 0 = target
+    output 	  abc_a_oe,
+    // Bus isolation
+    output 	  abc_d_ce_n,
+
+    // 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,
+
+    // SDRAM bus
+    output 	  sr_clk,
+    output 	  sr_cke,
+    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,
+
+    // SD card
+    output 	  sd_clk,
+    output 	  sd_cmd,
+    inout [3:0]   sd_dat,
+
+    // Serial console (naming is FPGA as DCE)
+    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,
+    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
+
+    // Other ESP32 connections
+    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,
+
+    // LED (2 = D23/G, 1 = D22/R, 0 = D17/B)
+    output [2:0]  led,
+
+    // GPIO
+    inout [5:0]   gpio,
+
+    // HDMI
+    output [2:0]  hdmi_d,
+    output 	  hdmi_clk,
+    inout 	  hdmi_scl,
+    inout 	  hdmi_sda,
+    inout 	  hdmi_hpd,
+
+    // Unconnected pins with pullups, used for randomness
+    inout [2:0]   rngio
+    );
+
+   // ABC data bus isolation not supported or needed
+   assign abc_d_ce_n  = 1'b0;
+
+   // Permanently unused
+   assign sd_dat[2:1] = 2'bzz;
+   assign gpio[0] = 1'bz;
+   assign gpio[2] = 1'bz;
+   assign gpio[4] = 1'bz;
+
+   // Always active
+   assign sr_cke      = 1'b1;
+
+   max80 #(.x_mosfet(6'b111111),
+	   .fpga_ver(8'd1))
+   max80 (
+	  .clock_48               ( clock_48 ),
+	  .board_id               ( board_id ),
+	  .abc_clk                ( abc_clk ),
+	  .abc_a                  ( abc_a ),
+	  .abc_d                  ( abc_d ),
+	  .abc_d_oe               ( abc_d_oe ),
+	  .abc_rst_n              ( abc_rst_n ),
+	  .abc_cs_n               ( abc_cs_n ),
+	  .abc_out_n              ( abc_out_n ),
+	  .abc_inp_n              ( abc_inp_n ),
+	  .abc_xmemfl_n           ( abc_xmemfl_n ),
+	  .abc_xmemw800_n         ( abc_xmemw800_n ),
+	  .abc_xmemw80_n          ( abc_xmemw80_n ),
+	  .abc_xinpstb_n          ( abc_xinpstb_n ),
+	  .abc_xoutpstb_n         ( abc_xoutpstb_n ),
+	  .abc_rdy_x              ( abc_rdy_x ),
+	  .abc_resin_x            ( abc_resin_x ),
+	  .abc_int80_x            ( abc_int80_x ),
+	  .abc_int800_x           ( abc_int800_x ),
+	  .abc_nmi_x              ( abc_nmi_x ),
+	  .abc_xm_x               ( abc_xm_x ),
+	  .abc_host               ( abc_host ),
+	  .abc_a_oe               ( abc_a_oe ),
+	  .exth_ha                ( exth_ha ),
+	  .exth_hb                ( exth_hb ),
+	  .exth_hc                ( exth_hc ),
+	  .exth_hd                ( exth_hd ),
+	  .exth_he                ( exth_he ),
+	  .exth_hf                ( exth_hf ),
+	  .exth_hg                ( exth_hg ),
+	  .exth_hh                ( exth_hh ),
+	  .sr_clk                 ( sr_clk ),
+	  .sr_ba                  ( sr_ba ),
+	  .sr_a                   ( sr_a ),
+	  .sr_dq                  ( sr_dq ),
+	  .sr_dqm                 ( sr_dqm ),
+	  .sr_cs_n                ( sr_cs_n ),
+	  .sr_we_n                ( sr_we_n ),
+	  .sr_cas_n               ( sr_cas_n ),
+	  .sr_ras_n               ( sr_ras_n ),
+	  .sd_cd_n		  ( 1'b0 ), // Card detect
+	  .sd_cs_n                ( sd_dat[3] ),
+	  .sd_clk                 ( sd_clk ),
+	  .sd_di                  ( sd_cmd ),
+	  .sd_do		  ( sd_dat[0] ),
+	  .tty_txd                ( tty_txd ),
+	  .tty_rxd                ( tty_rxd ),
+	  .tty_rts                ( tty_rts ),
+	  .tty_cts                ( tty_cts ),
+	  .tty_dtr                ( tty_dtr ),
+	  .flash_cs_n             ( flash_cs_n ),
+	  .flash_sck              ( flash_sck ),
+	  .flash_io               ( flash_io ),
+	  .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 ),
+	  .esp_io0                ( esp_io0 ),
+	  .esp_int                ( esp_int ),
+	  .i2c_scl                ( i2c_scl ),
+	  .i2c_sda                ( i2c_sda ),
+	  .rtc_32khz              ( rtc_32khz ),
+	  .rtc_int_n              ( rtc_int_n ),
+	  .led                    ( led ),
+	  .usb_dp                 ( gpio[3] ),
+	  .usb_dn                 ( gpio[5] ),
+	  .usb_rx                 ( 1'bx ),
+	  .usb_rx_ok		  ( 1'b0 ),
+	  .usb_pu		  ( gpio[1] ),
+	  .hdmi_d                 ( hdmi_d ),
+	  .hdmi_clk               ( hdmi_clk ),
+	  .hdmi_scl               ( hdmi_scl ),
+	  .hdmi_sda               ( hdmi_sda ),
+	  .hdmi_hpd               ( hdmi_hpd ),
+	  .rngio                  ( rngio )
+	  );
+
+endmodule // v1

+ 192 - 0
fpga/v2.pins

@@ -0,0 +1,192 @@
+# Bank 1
+# j5	TMS
+# j3	nCE
+# j4	TDO
+# h4	TDI
+# e1	GND
+b1	abc_xm_x
+c2	abc_a_oe
+c1	flash_io[0]
+f3	abc_a[5]
+d2	flash_cs_n
+d1	abc_a[3]
+# f4	nSTATUS
+g5	abc_a[4]
+f2	abc_cs_n
+f1	abc_a[7]
+g2	abc_out_n[0]
+g1	abc_a[8]
+h1	flash_sck
+h2	flash_io[1]
+# h5	nCONFIG
+# h3	TCK
+
+# Bank 2
+r1	abc_xmemw80_n
+p2	abc_rst_n
+p1	abc_xmemw800_n
+# m2	GND
+# m1	GND
+j2	abc_out_n[1]
+j1	abc_a[9]
+# k6	GPIO N/C
+l6	rngio[0]
+l3	abc_out_n[3]
+k1	abc_a[11]
+l2	abc_inp_n[0]
+l1	abc_a[12]
+k2	abc_out_n[4]
+n2	abc_a[14]
+n1	abc_a[15]
+k5	abc_out_n[2]
+l4	abc_a[10]
+
+# Bank 3
+m6	abc_d[1]
+p6	spi_clk
+m7	spi_miso
+r5	abc_d_oe
+t5	abc_clk
+r6	abc_resin_x
+t6	gpio[2]
+l7	gpio[0]
+r7	gpio[5]
+t7	gpio[4]
+l8	esp_io0
+m8	spi_mosi
+n8	spi_cs_esp_n
+p8	esp_int
+r8	exth_hh
+# t8	GND
+n3	abc_xmemfl_n
+p3	abc_d[0]
+r3	abc_d[4]
+t3	abc_d[5]
+t2	abc_d[3]
+r4	abc_d[6]
+t4	abc_d[7]
+n5	abc_d[2]
+n6	spi_cs_flash_n
+
+# Bank 4
+# l11	GPIO N/C
+# k9	GPIO N/C
+m11	hdmi_scl
+# l9	GPIO N/C
+t13	led[0]
+m9	abc_inp_n[1]
+# r9	GPI  VCC
+n9	exth_hb
+t9	exth_hc
+r10	gpio[3]
+t10	abc_a[1]
+r11	exth_hd
+t11	exth_hf
+r12	exth_he
+t12	abc_xinpstb_n
+k10	board_id
+l10	abc_xoutpstb_n
+p9	gpio[1]
+n12	exth_ha
+n11	exth_hg
+r13	hdmi_sda
+t14	abc_a[13]
+t15	hdmi_hpd
+m10	abc_a[6]
+p11	rngio[1]
+p14	led[1]
+r14	led[2]
+
+# Bank 5 (2.5 V)
+# n14	GPIO N/C
+# p15	GPIO N/C
+p16	hdmi_d[2](n)
+r16	hdmi_d[2]
+# k12	GPIO N/C
+n16	hdmi_d[1](n)
+n15	hdmi_d[1]
+# l14	GPIO N/C
+l13	usb_rx(n)
+l16	usb_rx
+l15	sd_cd_n
+k16	hdmi_d[0](n)
+k15	hdmi_d[0]
+j16	hdmi_clk(n)
+j15	hdmi_clk
+# m16	GPI  GND
+# j14	GPIO N/C
+m15	clock_48
+# j12	GPIO N/C
+# j13	GPIO N/C
+
+# Bank 6
+# e16	GPI GND
+e15	rtc_32khz
+# h14	CONF_DONE
+# h13	MSEL[0]
+# h12	MSEL[1]
+# g12	MSEL[2]
+g16	sd_di
+g15	sd_clk
+f13	rngio[2]
+f16	sd_cs_n
+f15	sd_do
+b16	rtc_int_n
+f14	abc_a[2]
+d16	usb_dn
+d15	usb_dp
+g11	i2c_scl
+c16	usb_pu
+c15	i2c_sda
+
+# Bank 7
+d12	sr_cs_n
+c11	sr_dq[3]
+c14	sr_a[10]
+b13	sr_ba[1]
+d14	sr_a[2]
+a14	sr_a[0]
+d11	sr_dq[2]
+b14	sr_a[1]
+e11	sr_dq[1]
+e10	sr_dqm[0]
+a12	sr_dq[0]
+b12	sr_ras_n
+a11	sr_dq[5]
+b11	sr_dq[4]
+a13	sr_ba[0]
+a15	sr_a[3]
+f9	sr_we_n
+a10	sr_dq[7]
+b10	sr_dq[6]
+c9	sr_a[4]
+d9	sr_a[5]
+e9	sr_cas_n
+# a9	GPI GND
+# b9	GPI GND
+
+# Bank 8
+d8	sr_dqm[1]
+e8	sr_a[6]
+# a8	GPI GND
+f8	abc_a[0]
+# b8	GPI GND
+a7	sr_a[7]
+c8	sr_a[11]
+b7	sr_a[8]
+c6	sr_dq[14]
+a6	sr_a[9]
+b6	sr_a[12]
+e7	sr_dq[9]
+e6	sr_dq[12]
+a5	sr_dq[8]
+b5	sr_dq[10]
+d6	sr_dq[13]
+a4	sr_dq[11]
+b4	abc_rdy_x
+a2	abc_int800_x
+d5	sr_dq[15]
+a3	abc_nmi_x
+b3	abc_int80_x
+# c3	GPIO N/C
+d3	sr_clk

+ 12 - 3
fpga/v2.qsf

@@ -1,5 +1,14 @@
-set_global_assignment -name SOURCE_TCL_SCRIPT_FILE max80.qsf
-set_global_assignment -name TOP_LEVEL_ENTITY max80
+set_global_assignment -name TOP_LEVEL_ENTITY v2
 set_global_assignment -name SOURCE_FILE v2.pins
-set_global_assignment -name VERILOG_MACRO MAX80_V2
 set_global_assignment -name SOURCE_FILE "max80-v2.cof"
+
+set_instance_assignment -name IO_STANDARD "LVDS" -to usb_rx
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to usb_rx
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR OFF -to usb_rx(n)
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to usb_dp
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to usb_dn
+
+set_instance_assignment -name IO_STANDARD "2.5 V" -to sd_cd_n
+set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sd_cd_n
+
+set_global_assignment -name SOURCE_TCL_SCRIPT_FILE max80.qsf

+ 206 - 0
fpga/v2.sv

@@ -0,0 +1,206 @@
+//
+// Top level module for the FPGA on the MAX80 board by
+// Per Mårtensson and H. Peter Anvin
+//
+// MAX80 v2
+//
+
+module v2
+   (
+    // Clock oscillator
+    input 	  clock_48, // 48 MHz
+    input 	  board_id, // This better match the firmware
+
+    // ABC-bus
+    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 inout 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)
+    // 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)
+    // Host/device control
+    output 	  abc_host, // 1 = host, 0 = target
+    output 	  abc_a_oe,
+
+    // 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,
+
+    // SDRAM bus
+    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,
+
+    // SD card
+    input 	  sd_cd_n,
+    output 	  sd_cs_n,
+    output 	  sd_clk,
+    output 	  sd_di,
+    input 	  sd_do,
+
+    // SPI flash memory (also configuration)
+    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
+
+    // Other ESP32 connections
+    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,
+
+    // LED (2 = D23/G, 1 = D22/R, 0 = D17/B)
+    output [2:0]  led,
+
+    // USB
+    inout 	  usb_dp,
+    inout 	  usb_dn,
+    output 	  usb_pu,
+    input 	  usb_rx,
+
+    // GPIO
+    inout [5:0]   gpio,
+
+    // HDMI
+    output [2:0]  hdmi_d,
+    output 	  hdmi_clk,
+    inout 	  hdmi_scl,
+    inout 	  hdmi_sda,
+    inout 	  hdmi_hpd,
+
+    // Unconnected pins with pullups, used for randomness
+    inout [2:0]   rngio
+    );
+
+   // GPIO assignments for debug serial port:
+   // gpio[0] - TxD
+   // gpio[2] - RxD
+   // gpio[4] - DTR#
+   
+   // Permanently unused
+   assign gpio[1] = 1'bz;
+   assign gpio[3] = 1'bz;
+   assign gpio[5] = 1'bz;
+
+   max80 #(.x_mosfet(6'b000000),
+	   .fpga_ver(8'd2))
+   max80 (
+	  .clock_48               ( clock_48 ),
+	  .board_id               ( board_id ),
+	  .abc_clk                ( abc_clk ),
+	  .abc_a                  ( abc_a ),
+	  .abc_d                  ( abc_d ),
+	  .abc_d_oe               ( abc_d_oe ),
+	  .abc_rst_n              ( abc_rst_n ),
+	  .abc_cs_n               ( abc_cs_n ),
+	  .abc_out_n              ( abc_out_n ),
+	  .abc_inp_n              ( abc_inp_n ),
+	  .abc_xmemfl_n           ( abc_xmemfl_n ),
+	  .abc_xmemw800_n         ( abc_xmemw800_n ),
+	  .abc_xmemw80_n          ( abc_xmemw80_n ),
+	  .abc_xinpstb_n          ( abc_xinpstb_n ),
+	  .abc_xoutpstb_n         ( abc_xoutpstb_n ),
+	  .abc_rdy_x              ( abc_rdy_x ),
+	  .abc_resin_x            ( abc_resin_x ),
+	  .abc_int80_x            ( abc_int80_x ),
+	  .abc_int800_x           ( abc_int800_x ),
+	  .abc_nmi_x              ( abc_nmi_x ),
+	  .abc_xm_x               ( abc_xm_x ),
+	  .abc_host               ( abc_host ),
+	  .abc_a_oe               ( abc_a_oe ),
+	  .exth_ha                ( exth_ha ),
+	  .exth_hb                ( exth_hb ),
+	  .exth_hc                ( exth_hc ),
+	  .exth_hd                ( exth_hd ),
+	  .exth_he                ( exth_he ),
+	  .exth_hf                ( exth_hf ),
+	  .exth_hg                ( exth_hg ),
+	  .exth_hh                ( exth_hh ),
+	  .sr_clk                 ( sr_clk ),
+	  .sr_ba                  ( sr_ba ),
+	  .sr_a                   ( sr_a ),
+	  .sr_dq                  ( sr_dq ),
+	  .sr_dqm                 ( sr_dqm ),
+	  .sr_cs_n                ( sr_cs_n ),
+	  .sr_we_n                ( sr_we_n ),
+	  .sr_cas_n               ( sr_cas_n ),
+	  .sr_ras_n               ( sr_ras_n ),
+	  .sd_cd_n		  ( sd_cd_n ),
+	  .sd_cs_n                ( sd_cs_n ),
+	  .sd_clk                 ( sd_clk ),
+	  .sd_di                  ( sd_di ),
+	  .sd_do		  ( sd_do ),
+	  .tty_txd                ( gpio[0] ),
+	  .tty_rxd                ( gpio[2] ),
+	  .tty_rts                ( 1'b0 ),
+	  .tty_cts                (  ),
+	  .tty_dtr                ( gpio[4] ),
+	  .flash_cs_n             ( flash_cs_n ),
+	  .flash_sck              ( flash_sck ),
+	  .flash_io               ( flash_io ),
+	  .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 ),
+	  .esp_io0                ( esp_io0 ),
+	  .esp_int                ( esp_int ),
+	  .i2c_scl                ( i2c_scl ),
+	  .i2c_sda                ( i2c_sda ),
+	  .rtc_32khz              ( rtc_32khz ),
+	  .rtc_int_n              ( rtc_int_n ),
+	  .led                    ( led ),
+	  .usb_dp                 ( usb_dp ),
+	  .usb_dn                 ( usb_dn ),
+	  .usb_rx                 ( usb_rx ),
+	  .usb_rx_ok              ( 1'b1 ),
+	  .usb_pu		  ( usb_pu ),
+	  .hdmi_d                 ( hdmi_d ),
+	  .hdmi_clk               ( hdmi_clk ),
+	  .hdmi_scl               ( hdmi_scl ),
+	  .hdmi_sda               ( hdmi_sda ),
+	  .hdmi_hpd               ( hdmi_hpd ),
+	  .rngio                  ( rngio )
+	  );
+
+endmodule // v2

+ 0 - 5
rv32/abcmem.c

@@ -31,9 +31,6 @@ void __cold abc_init_memmap(void)
     volatile uint32_t *pg = &ABCMEMMAP_PAGE(0);
     const struct abc_mem_init *next = &mem_init[0];
 
-    con_puts("abc_init_memmap\n");
-    con_flush();
-
     for (unsigned int addr = 0; addr < 0x10000; addr += 512) {
 	if (addr >= next->addr + next->len)
 	    next++;
@@ -41,8 +38,6 @@ void __cold abc_init_memmap(void)
 	if (addr < next->addr) {
 	    *pg++ = 0;
 	} else {
-	    con_printf("abc_memmap: 0x%04x -> %p (len 0x%04x, attr %d)\n",
-		       next->addr, next->data, next->len, next->flags);
 	    *pg++ = ((size_t)(next->data + (addr - next->addr))
 		     & SDRAM_MASK) | (next->flags << 24);
 	}

+ 390 - 393
rv32/boot.mif

@@ -15,7 +15,7 @@ CONTENT BEGIN
 0008 : 0001210B;
 0009 : 200DF413;
 000A : 00040863;
-000B : 4E2000EF;
+000B : 4D6000EF;
 000C : 408D8DB3;
 000D : 060D8063;
 000E : 00000493;
@@ -48,22 +48,22 @@ CONTENT BEGIN
 0029 : 0000250B;
 002A : 0005B00B;
 002B : 00000000;
-002C : 3740006F;
-002D : 2D40006F;
-002E : 2C40006F;
+002C : 3680006F;
+002D : 2C80006F;
+002E : 2B80006F;
 002F : 2AE0006F;
-0030 : 3640006F;
-0031 : 3DA0006F;
-0032 : 35C0006F;
-0033 : 3580006F;
-0034 : 3540006F;
-0035 : 43A0006F;
-0036 : 34C0006F;
+0030 : 3580006F;
+0031 : 3CE0006F;
+0032 : 3500006F;
+0033 : 34C0006F;
+0034 : 3480006F;
+0035 : 42E0006F;
+0036 : 3400006F;
 0037 : 00000000;
-0038 : 4101DA00;
+0038 : 4101D960;
 0039 : FFFFFFFF;
 003A : FFFFFFFF;
-003B : 00000958;
+003B : 0000094C;
 003C : 00000040;
 003D : 00000000;
 003E : 00000000;
@@ -112,11 +112,11 @@ CONTENT BEGIN
 0069 : 0040006F;
 006A : C6061141;
 006B : C226C422;
-006C : 428322D5;
+006C : 42832AE1;
 006D : 86631420;
 006E : 70970002;
 006F : 80E74000;
-0070 : 547D6B00;
+0070 : 547D65C0;
 0071 : 0680008B;
 0072 : 0810878B;
 0073 : 14304303;
@@ -124,7 +124,7 @@ CONTENT BEGIN
 0075 : 40001097;
 0076 : 310080E7;
 0077 : 40002097;
-0078 : 6D2080E7;
+0078 : 67E080E7;
 0079 : 0000B7C5;
 007A : 00000697;
 007B : EB468693;
@@ -171,7 +171,7 @@ CONTENT BEGIN
 00A4 : 64630412;
 00A5 : 051300F9;
 00A6 : 953E0300;
-00A7 : 2A5914FD;
+00A7 : 226914FD;
 00A8 : 40B2F4E5;
 00A9 : 44924422;
 00AA : 01414902;
@@ -181,25 +181,25 @@ CONTENT BEGIN
 00AE : C452C64E;
 00AF : 2A73892A;
 00B0 : 65053430;
-00B1 : 85450493;
-00B2 : 85450513;
+00B1 : 84850493;
+00B2 : 84850513;
 00B3 : 00158413;
-00B4 : 854A2249;
-00B5 : 98792ABD;
+00B4 : 854A2A9D;
+00B5 : 98792A8D;
 00B6 : 00848513;
-00B7 : 09932A9D;
+00B7 : 099322AD;
 00B8 : 854EFFC4;
 00B9 : 85133F51;
-00BA : 22A500F4;
+00BA : 2AB100F4;
 00BB : FFE45783;
 00BC : FFC45303;
 00BD : 9293491D;
 00BE : 85330107;
 00BF : 3FAD0062;
 00C0 : 01448513;
-00C1 : 855222B9;
+00C1 : 85522289;
 00C2 : 45293F85;
-00C3 : 44812225;
+00C3 : 44812A31;
 00C4 : 02000A13;
 00C5 : 440149A1;
 00C6 : 00940533;
@@ -207,7 +207,7 @@ CONTENT BEGIN
 00C8 : 04634529;
 00C9 : 05130124;
 00CA : 04050200;
-00CB : 15E32221;
+00CB : 15E328F5;
 00CC : 04A1FF34;
 00CD : FF4491E3;
 00CE : 90802083;
@@ -222,358 +222,358 @@ CONTENT BEGIN
 00D7 : 878B58FD;
 00D8 : 4E050608;
 00D9 : 81C02623;
-00DA : 0293BFF5;
-00DB : A7031040;
-00DC : 03130002;
-00DD : A0230017;
-00DE : 80820062;
+00DA : 2783BFF5;
+00DB : 80821040;
+00DC : 11416505;
+00DD : 86E50513;
+00DE : 3F15C606;
 00DF : 11416505;
-00E0 : 87A50513;
+00E0 : 87950513;
 00E1 : 3725C606;
-00E2 : 11416505;
-00E3 : 88550513;
-00E4 : 3F31C606;
-00E5 : C6061141;
-00E6 : C0102773;
-00E7 : 10E02423;
-00E8 : FD100093;
-00E9 : 0610078B;
-00EA : 2423429D;
-00EB : 537D8050;
-00EC : 0660038B;
-00ED : 0203F513;
-00EE : 4599DD65;
-00EF : 0005A637;
-00F0 : 80B02423;
-00F1 : E0B60693;
-00F2 : 22236805;
-00F3 : 051390D0;
-00F4 : 20418998;
-00F5 : 90802883;
-00F6 : 0018FE13;
-00F7 : FE0E0CE3;
-00F8 : 8F374E95;
-00F9 : 24234000;
-00FA : 051381D0;
-00FB : 2095A59F;
-00FC : C0102FF3;
-00FD : 1908B737;
-00FE : 0FF70793;
-00FF : C01020F3;
-0100 : 41F082B3;
-0101 : FE57FCE3;
-0102 : 202D4529;
-0103 : 90802303;
-0104 : 00137393;
-0105 : FE038CE3;
-0106 : 014140B2;
-0107 : 40001317;
-0108 : C1830067;
-0109 : 95334785;
-010A : 429300A7;
-010B : 050BFFF5;
-010C : 80820655;
-010D : 90802783;
-010E : 0107F293;
-010F : FE029CE3;
-0110 : 15634329;
-0111 : 43B50065;
-0112 : 90700023;
-0113 : 90A00023;
-0114 : 46A98082;
-0115 : 47834635;
-0116 : E3910005;
-0117 : 05058082;
-0118 : 90802703;
-0119 : 01077293;
-011A : FE029CE3;
-011B : 00D79463;
-011C : 90C00023;
-011D : 90F00023;
-011E : 2703BFF9;
-011F : 02B700C0;
-0120 : 20233B00;
-0121 : 833398A0;
-0122 : 03B300E2;
-0123 : 053700B3;
-0124 : 22230D00;
-0125 : 8E499870;
-0126 : 98C02423;
-0127 : 02938082;
-0128 : A70310C0;
-0129 : 06930002;
-012A : A0230017;
-012B : C31D00D2;
-012C : 05934305;
-012D : 08631580;
-012E : 27730267;
-012F : 4194C010;
-0130 : 02000513;
-0131 : FDF00313;
-0132 : 40D70633;
-0133 : 078BC1D0;
-0134 : 80820665;
-0135 : 05376621;
-0136 : 06134000;
-0137 : 45810486;
-0138 : 00050513;
-0139 : 2873BF59;
-013A : 2E03C010;
-013B : 8F371000;
-013C : 0F934000;
-013D : 0EB3048F;
-013E : A02341C8;
-013F : 67B101D5;
-0140 : 99F02023;
-0141 : 9B078293;
-0142 : 98502423;
-0143 : 11018082;
-0144 : CA26CE06;
-0145 : C84ACC22;
-0146 : C452C64E;
-0147 : 5903C256;
-0148 : 0793B880;
-0149 : AA831280;
-014A : 10930007;
-014B : D9130109;
-014C : 02930100;
-014D : 44811280;
-014E : 000A8663;
-014F : 010AD483;
-0150 : 009974B3;
-0151 : 0FF97313;
-0152 : 08030A63;
-0153 : B9104383;
-0154 : B9004583;
-0155 : F6134695;
-0156 : F5930FF3;
-0157 : EC630FF5;
-0158 : 40850676;
-0159 : 04C0E363;
-015A : 10061463;
-015B : 060A8863;
-015C : 004AA703;
-015D : A783CB1D;
-015E : 8293000A;
-015F : A0230017;
-0160 : 8023005A;
-0161 : C30300B7;
-0162 : C38301DA;
-0163 : 76B3014A;
-0164 : 8EA30073;
-0165 : 0AA300DA;
-0166 : A503B8D0;
-0167 : 0813004A;
-0168 : A223FFF5;
-0169 : 1B63010A;
-016A : 48850208;
-016B : 00CA8833;
-016C : 00C899B3;
-016D : 00B80B23;
-016E : 0099FA33;
-016F : 020A0063;
-0170 : 00860E13;
-0171 : 002E1E93;
-0172 : 01DA8F33;
-0173 : 000F2F83;
-0174 : 9F828556;
-0175 : 451DA021;
-0176 : 10A60263;
-0177 : 10097593;
-0178 : A603C1A9;
-0179 : 076300CA;
-017A : 04131406;
-017B : A623FFF6;
-017C : 0163008A;
-017D : C3031404;
-017E : C38301DA;
-017F : 76B3015A;
-0180 : 8EA30073;
-0181 : 0AA300DA;
-0182 : A503B8D0;
-0183 : 0813008A;
-0184 : A4230015;
-0185 : 4883010A;
-0186 : 8E230005;
-0187 : 0A23011A;
-0188 : 7993B910;
-0189 : 8B632009;
-018A : CE031209;
-018B : 4A0301DA;
-018C : F493B950;
-018D : 0AA32004;
-018E : 7593B9C0;
-018F : C4910FFA;
-0190 : 03CAAE83;
-0191 : 85564605;
-0192 : AF039E82;
-0193 : D60300CA;
-0194 : AA83010A;
-0195 : 3FB3004A;
-0196 : 959301E0;
-0197 : E433008F;
-0198 : 30B300C5;
-0199 : E7330150;
-019A : 62930080;
-019B : A8DD0827;
-019C : 03F5F893;
-019D : 4000FE37;
-019E : 00289A13;
-019F : EA8E0E93;
-01A0 : 014E8F33;
-01A1 : 000F2A83;
-01A2 : 0F100823;
-01A3 : 0152A023;
-01A4 : 08200693;
-01A5 : 020A8463;
-01A6 : 00CAAF83;
-01A7 : 010AD703;
-01A8 : 004AA783;
-01A9 : 01F03433;
-01AA : 00841093;
-01AB : 00E0E2B3;
-01AC : 00F03333;
-01AD : 005363B3;
-01AE : 0823E693;
-01AF : B8D01523;
-01B0 : 84634501;
-01B1 : A503000A;
-01B2 : 2A2301CA;
-01B3 : 87E3B8A0;
-01B4 : D483F00A;
-01B5 : 74B3010A;
-01B6 : BDC10099;
-01B7 : 0F000613;
-01B8 : 04000813;
-01B9 : 00064A83;
-01BA : 0002A023;
-01BB : 01060023;
-01BC : 08200893;
-01BD : B9101523;
-01BE : 4000F9B7;
-01BF : B8002A23;
-01C0 : 89934401;
-01C1 : 0A13EA89;
-01C2 : 8E331000;
-01C3 : 25030089;
-01C4 : CD01000E;
-01C5 : 01055E83;
-01C6 : 080EFF13;
-01C7 : 000F0763;
-01C8 : 04052F83;
-01C9 : 85D6461D;
-01CA : 04119F82;
-01CB : FD441FE3;
-01CC : B56D4A81;
-01CD : 01FAC703;
-01CE : B9404083;
-01CF : 1004F293;
-01D0 : 00EA8E23;
-01D1 : B8E00A23;
-01D2 : 0FF0F593;
-01D3 : EC028BE3;
-01D4 : 038AA783;
-01D5 : 85564601;
-01D6 : B5E19782;
-01D7 : 08200293;
-01D8 : EE0A95E3;
-01D9 : 01029793;
-01DA : 0127E933;
-01DB : B9202423;
-01DC : 446240F2;
-01DD : 494244D2;
-01DE : 4A2249B2;
-01DF : 61054A92;
-01E0 : C25D8082;
-01E1 : 0FF5F713;
-01E2 : 01071793;
-01E3 : 00E7E2B3;
-01E4 : 00829313;
-01E5 : 00157693;
-01E6 : 005363B3;
-01E7 : EAC987AA;
-01E8 : 71634805;
-01E9 : F89308C8;
-01EA : 9F630027;
-01EB : 4EFD0808;
-01EC : 08CEF663;
-01ED : FE060F13;
-01EE : FE0F7F93;
-01EF : 02078F13;
-01F0 : 01EF8733;
-01F1 : 0F13A019;
-01F2 : A023020F;
-01F3 : A2230077;
-01F4 : A4230077;
-01F5 : A6230077;
-01F6 : A8230077;
-01F7 : AA230077;
-01F8 : AC230077;
-01F9 : AE230077;
-01FA : 86FA0077;
-01FB : 1CE387FA;
-01FC : 8A7DFDE7;
-01FD : F363428D;
-01FE : 031302C2;
-01FF : 7893FFC6;
-0200 : 8E93FFC3;
-0201 : 8E330047;
-0202 : A01101D8;
-0203 : A0230E91;
-0204 : 87F60076;
-0205 : 9BE386F6;
-0206 : 8A0DFFCE;
-0207 : 00267393;
-0208 : 02039063;
-0209 : E2118A05;
-020A : 80238082;
-020B : 808200B7;
-020C : 00150793;
-020D : 00750023;
-020E : B79D167D;
-020F : BF5D86BE;
-0210 : 00B79023;
-0211 : BFF90789;
-0212 : 00779023;
-0213 : 07891679;
-0214 : 0000BFB9;
-0215 : 4F525245;
-0216 : 00203A52;
-0217 : 20746120;
-0218 : 20007830;
-0219 : 00783028;
-021A : 61420A29;
-021B : 64612064;
-021C : 73657264;
-021D : 30203A73;
-021E : 696D0078;
-021F : 696C6173;
-0220 : 64656E67;
-0221 : 766E6900;
-0222 : 64696C61;
-0223 : 736E6920;
-0224 : 63757274;
-0225 : 6E6F6974;
-0226 : 2A0A0A00;
-0227 : 48202A2A;
-0228 : 6F6C6C65;
-0229 : 6F57202C;
-022A : 21646C72;
-022B : 2A2A2A20;
-022C : 58414D0A;
-022D : 66203038;
-022E : 776D7269;
-022F : 20657261;
-0230 : 706D6F63;
-0231 : 64656C69;
-0232 : 3A6E6F20;
-0233 : 63654420;
-0234 : 20323220;
-0235 : 31323032;
-0236 : 3A373120;
-0237 : 323A3932;
-0238 : 00000A34;
-0239 : 00000101;
+00E2 : C6061141;
+00E3 : C0102773;
+00E4 : 10E02423;
+00E5 : FD100093;
+00E6 : 0610078B;
+00E7 : 2423429D;
+00E8 : 537D8050;
+00E9 : 0660038B;
+00EA : 0203F513;
+00EB : 4599DD65;
+00EC : 0005A637;
+00ED : 80B02423;
+00EE : E0B60693;
+00EF : 22236805;
+00F0 : 051390D0;
+00F1 : 204188D8;
+00F2 : 90802883;
+00F3 : 0018FE13;
+00F4 : FE0E0CE3;
+00F5 : 8F374E95;
+00F6 : 24234000;
+00F7 : 051381D0;
+00F8 : 209592DF;
+00F9 : C0102FF3;
+00FA : 1908B737;
+00FB : 0FF70793;
+00FC : C01020F3;
+00FD : 41F082B3;
+00FE : FE57FCE3;
+00FF : 202D4529;
+0100 : 90802303;
+0101 : 00137393;
+0102 : FE038CE3;
+0103 : 014140B2;
+0104 : 40001317;
+0105 : C2430067;
+0106 : 95334785;
+0107 : 429300A7;
+0108 : 050BFFF5;
+0109 : 80820655;
+010A : 90802783;
+010B : 0107F293;
+010C : FE029CE3;
+010D : 15634329;
+010E : 43B50065;
+010F : 90700023;
+0110 : 90A00023;
+0111 : 46A98082;
+0112 : 47834635;
+0113 : E3910005;
+0114 : 05058082;
+0115 : 90802703;
+0116 : 01077293;
+0117 : FE029CE3;
+0118 : 00D79463;
+0119 : 90C00023;
+011A : 90F00023;
+011B : 2703BFF9;
+011C : 02B700C0;
+011D : 20233B00;
+011E : 833398A0;
+011F : 03B300E2;
+0120 : 053700B3;
+0121 : 22230D00;
+0122 : 8E499870;
+0123 : 98C02423;
+0124 : 02938082;
+0125 : A70310C0;
+0126 : 06930002;
+0127 : A0230017;
+0128 : C31D00D2;
+0129 : 05934305;
+012A : 08631580;
+012B : 27730267;
+012C : 4194C010;
+012D : 02000513;
+012E : FDF00313;
+012F : 40D70633;
+0130 : 078BC1D0;
+0131 : 80820665;
+0132 : 05376621;
+0133 : 06134000;
+0134 : 4581FB06;
+0135 : 00050513;
+0136 : 2873BF59;
+0137 : 2E03C010;
+0138 : 8F371000;
+0139 : 0F934000;
+013A : 0EB3FB0F;
+013B : A02341C8;
+013C : 67B101D5;
+013D : 99F02023;
+013E : 9B078293;
+013F : 98502423;
+0140 : 11018082;
+0141 : CA26CE06;
+0142 : C84ACC22;
+0143 : C452C64E;
+0144 : 5903C256;
+0145 : 0793B880;
+0146 : AA831280;
+0147 : 10930007;
+0148 : D9130109;
+0149 : 02930100;
+014A : 44811280;
+014B : 000A8663;
+014C : 010AD483;
+014D : 009974B3;
+014E : 0FF97313;
+014F : 08030A63;
+0150 : B9104383;
+0151 : B9004583;
+0152 : F6134695;
+0153 : F5930FF3;
+0154 : EC630FF5;
+0155 : 40850676;
+0156 : 04C0E363;
+0157 : 10061463;
+0158 : 060A8863;
+0159 : 004AA703;
+015A : A783CB1D;
+015B : 8293000A;
+015C : A0230017;
+015D : 8023005A;
+015E : C30300B7;
+015F : C38301DA;
+0160 : 76B3014A;
+0161 : 8EA30073;
+0162 : 0AA300DA;
+0163 : A503B8D0;
+0164 : 0813004A;
+0165 : A223FFF5;
+0166 : 1B63010A;
+0167 : 48850208;
+0168 : 00CA8833;
+0169 : 00C899B3;
+016A : 00B80B23;
+016B : 0099FA33;
+016C : 020A0063;
+016D : 00860E13;
+016E : 002E1E93;
+016F : 01DA8F33;
+0170 : 000F2F83;
+0171 : 9F828556;
+0172 : 451DA021;
+0173 : 10A60263;
+0174 : 10097593;
+0175 : A603C1A9;
+0176 : 076300CA;
+0177 : 04131406;
+0178 : A623FFF6;
+0179 : 0163008A;
+017A : C3031404;
+017B : C38301DA;
+017C : 76B3015A;
+017D : 8EA30073;
+017E : 0AA300DA;
+017F : A503B8D0;
+0180 : 0813008A;
+0181 : A4230015;
+0182 : 4883010A;
+0183 : 8E230005;
+0184 : 0A23011A;
+0185 : 7993B910;
+0186 : 8B632009;
+0187 : CE031209;
+0188 : 4A0301DA;
+0189 : F493B950;
+018A : 0AA32004;
+018B : 7593B9C0;
+018C : C4910FFA;
+018D : 03CAAE83;
+018E : 85564605;
+018F : AF039E82;
+0190 : D60300CA;
+0191 : AA83010A;
+0192 : 3FB3004A;
+0193 : 959301E0;
+0194 : E433008F;
+0195 : 30B300C5;
+0196 : E7330150;
+0197 : 62930080;
+0198 : A8DD0827;
+0199 : 03F5F893;
+019A : 4000FE37;
+019B : 00289A13;
+019C : E10E0E93;
+019D : 014E8F33;
+019E : 000F2A83;
+019F : 0F100823;
+01A0 : 0152A023;
+01A1 : 08200693;
+01A2 : 020A8463;
+01A3 : 00CAAF83;
+01A4 : 010AD703;
+01A5 : 004AA783;
+01A6 : 01F03433;
+01A7 : 00841093;
+01A8 : 00E0E2B3;
+01A9 : 00F03333;
+01AA : 005363B3;
+01AB : 0823E693;
+01AC : B8D01523;
+01AD : 84634501;
+01AE : A503000A;
+01AF : 2A2301CA;
+01B0 : 87E3B8A0;
+01B1 : D483F00A;
+01B2 : 74B3010A;
+01B3 : BDC10099;
+01B4 : 0F000613;
+01B5 : 04000813;
+01B6 : 00064A83;
+01B7 : 0002A023;
+01B8 : 01060023;
+01B9 : 08200893;
+01BA : B9101523;
+01BB : 4000F9B7;
+01BC : B8002A23;
+01BD : 89934401;
+01BE : 0A13E109;
+01BF : 8E331000;
+01C0 : 25030089;
+01C1 : CD01000E;
+01C2 : 01055E83;
+01C3 : 080EFF13;
+01C4 : 000F0763;
+01C5 : 04052F83;
+01C6 : 85D6461D;
+01C7 : 04119F82;
+01C8 : FD441FE3;
+01C9 : B56D4A81;
+01CA : 01FAC703;
+01CB : B9404083;
+01CC : 1004F293;
+01CD : 00EA8E23;
+01CE : B8E00A23;
+01CF : 0FF0F593;
+01D0 : EC028BE3;
+01D1 : 038AA783;
+01D2 : 85564601;
+01D3 : B5E19782;
+01D4 : 08200293;
+01D5 : EE0A95E3;
+01D6 : 01029793;
+01D7 : 0127E933;
+01D8 : B9202423;
+01D9 : 446240F2;
+01DA : 494244D2;
+01DB : 4A2249B2;
+01DC : 61054A92;
+01DD : C25D8082;
+01DE : 0FF5F713;
+01DF : 01071793;
+01E0 : 00E7E2B3;
+01E1 : 00829313;
+01E2 : 00157693;
+01E3 : 005363B3;
+01E4 : EAC987AA;
+01E5 : 71634805;
+01E6 : F89308C8;
+01E7 : 9F630027;
+01E8 : 4EFD0808;
+01E9 : 08CEF663;
+01EA : FE060F13;
+01EB : FE0F7F93;
+01EC : 02078F13;
+01ED : 01EF8733;
+01EE : 0F13A019;
+01EF : A023020F;
+01F0 : A2230077;
+01F1 : A4230077;
+01F2 : A6230077;
+01F3 : A8230077;
+01F4 : AA230077;
+01F5 : AC230077;
+01F6 : AE230077;
+01F7 : 86FA0077;
+01F8 : 1CE387FA;
+01F9 : 8A7DFDE7;
+01FA : F363428D;
+01FB : 031302C2;
+01FC : 7893FFC6;
+01FD : 8E93FFC3;
+01FE : 8E330047;
+01FF : A01101D8;
+0200 : A0230E91;
+0201 : 87F60076;
+0202 : 9BE386F6;
+0203 : 8A0DFFCE;
+0204 : 00267393;
+0205 : 02039063;
+0206 : E2118A05;
+0207 : 80238082;
+0208 : 808200B7;
+0209 : 00150793;
+020A : 00750023;
+020B : B79D167D;
+020C : BF5D86BE;
+020D : 00B79023;
+020E : BFF90789;
+020F : 00779023;
+0210 : 07891679;
+0211 : 0000BFB9;
+0212 : 4F525245;
+0213 : 00203A52;
+0214 : 20746120;
+0215 : 20007830;
+0216 : 00783028;
+0217 : 61420A29;
+0218 : 64612064;
+0219 : 73657264;
+021A : 30203A73;
+021B : 696D0078;
+021C : 696C6173;
+021D : 64656E67;
+021E : 766E6900;
+021F : 64696C61;
+0220 : 736E6920;
+0221 : 63757274;
+0222 : 6E6F6974;
+0223 : 2A0A0A00;
+0224 : 48202A2A;
+0225 : 6F6C6C65;
+0226 : 6F57202C;
+0227 : 21646C72;
+0228 : 2A2A2A20;
+0229 : 58414D0A;
+022A : 66203038;
+022B : 776D7269;
+022C : 20657261;
+022D : 706D6F63;
+022E : 64656C69;
+022F : 3A6E6F20;
+0230 : 63654420;
+0231 : 20333220;
+0232 : 31323032;
+0233 : 3A303020;
+0234 : 343A3435;
+0235 : 00000A31;
+0236 : 00000101;
+0237 : 00000000;
+0238 : 00000000;
+0239 : 00000000;
 023A : 00000000;
 023B : 00000000;
 023C : 00000000;
@@ -586,20 +586,20 @@ CONTENT BEGIN
 0243 : 00000000;
 0244 : 00000000;
 0245 : 00000000;
-0246 : 00000000;
-0247 : 00000000;
+0246 : 00000105;
+0247 : 00007FBF;
 0248 : 00000000;
-0249 : 00000105;
-024A : 00007FBF;
+0249 : D3030300;
+024A : 40003002;
 024B : 00000000;
-024C : D3030300;
-024D : 40003056;
+024C : 40003026;
+024D : 00000000;
 024E : 00000000;
-024F : 4000307A;
-0250 : 00000000;
+024F : 00000000;
+0250 : 40003014;
 0251 : 00000000;
 0252 : 00000000;
-0253 : 40003068;
+0253 : 00000000;
 0254 : 00000000;
 0255 : 00000000;
 0256 : 00000000;
@@ -623,12 +623,9 @@ CONTENT BEGIN
 0268 : 00000000;
 0269 : 00000000;
 026A : 00000000;
-026B : 00000000;
-026C : 00000000;
-026D : 00000000;
-026E : 6362612F;
-026F : 6B736964;
-0270 : 3030382E;
-0271 : 002F;
-[0272..1FFF] : 00;
+026B : 6362612F;
+026C : 6B736964;
+026D : 3030382E;
+026E : 002F;
+[026F..1FFF] : 00;
 END;

+ 6 - 6
rv32/max80.ld

@@ -185,10 +185,10 @@ SECTIONS
 
 	. = ALIGN(4);
 	.str.hot : ALIGN(4) {
-		INPUT_SECTION_FLAGS (SHF_MERGE & SHF_STRINGS) *(*.hot*)
+		*(.rodata*.hot.str*)
 	}
 	.rodata.hot         : {
-		*(.rodata.hot* .gnu.linkonce.r.*)
+		*(.rodata*.hot* .gnu.linkonce.r.*)
 	}
 
 	/* Thread Local Storage sections  */
@@ -246,14 +246,14 @@ SECTIONS
 		*(.dram.text*)
 	} >DRAM
 
+	.dram.str : ALIGN(4) {
+		*(.rodata*.str* .dram.rodata*.str*)
+	} >DRAM
+
 	.dram.rodata : ALIGN(4) {
 		*(.rodata* .dram.rodata*)
 	} >DRAM
 
-	.dram.str : ALIGN(4) {
-		INPUT_SECTION_FLAGS (SHF_MERGE & SHF_STRINGS) *(*)
-	}
-
 	.dram.init_array : ALIGN(4) {
 		PROVIDE_HIDDEN (__init_array_start = .);
 		KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*)

+ 0 - 7
rv32/system.c

@@ -14,13 +14,6 @@ IRQHANDLER(sysclock)
     uint32_t count = timer_irq_count;
 
     count++;
-    timer_irq_count = count;
-    if (DEBUG && !(count & ((1U << TIMER_SHIFT)-1))) {
-	register size_t oldpc asm("s10");
-	CON_DATA = '.';		/* Console heartbeat */
-	con_printf("\n<%08x>\r", oldpc);
-	con_flush();
-    }
 }
 
 static void __hot con_print_hex(unsigned int n)