################################################################################################
# Copyright 2022 GlobalFoundries PDK Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################################

#===========================================================================================================================
#------------------------------------------- GF 0.18um ULL DRC RULE DECK --------------------------------------------------
#===========================================================================================================================
require 'time'
require "logger"

exec_start_time = Time.now

logger = Logger.new(STDOUT)

logger.formatter = proc do |severity, datetime, progname, msg|
  "#{datetime}: Memory Usage (" + `pmap #{Process.pid} | tail -1`[10,40].strip + ") : #{msg}
"
end

#================================================
#----------------- FILE SETUP -------------------
#================================================

# optional for a batch launch :   klayout -b -r gf_018ULL.drc -rd input=design.gds -rd report=gp180_drc.lyrdb

logger.info("Starting running GF180ULL Klayout DRC runset on %s" % [$input])
logger.info("Ruby Version for klayout: %s" % [RUBY_VERSION])

if $input
    if $topcell
        source($input, $topcell)
    else
        source($input)
    end
end

logger.info("Loading database to memory is complete.")

if $report
    logger.info("GF180ULL Klayout DRC runset output at: %s" % [$report])
    report("DRC Run Report at", $report)
else
    logger.info("GF180ULL Klayout DRC runset output at default location." % [File.join(File.dirname(RBA::CellView::active.filename), "gf180_drc.lyrdb")])
    report("DRC Run Report at", File.join(File.dirname(RBA::CellView::active.filename), "gf180_drc.lyrdb"))
end

#================================================
#------------------ SWITCHES --------------------
#================================================
logger.info("Evaluate switches.")

# connectivity rules
if $conn_drc == "true"
  CONNECTIVITY_RULES = $conn_drc
  logger.info("connectivity rules are enabled.")
else
  CONNECTIVITY_RULES = false
  logger.info("connectivity rules are disabled.")
end # connectivity rules

# WEDGE
if $wedge == "false"
  WEDGE = $wedge
else
  WEDGE = "true"
end # WEDGE

logger.info("Wedge enabled  %s" % [WEDGE])

# BALL
if $ball == "false"
  BALL = $ball
else
  BALL = "true"
end # BALL

logger.info("Ball enabled  %s" % [BALL])

# GOLD
if $gold == "false"
  GOLD = $gold
else
  GOLD = "true"
end # GOLD

logger.info("Gold enabled  %s" % [GOLD])

if $mim_option
  MIM_OPTION = $mim_option
else
  MIM_OPTION = "B"
end

logger.info("MIM Option selected %s" % [MIM_OPTION])

# OFFGRID
if $offgrid == "false"
  OFFGRID = false
else
  OFFGRID = true
end # OFFGRID

logger.info("Offgrid enabled  %s" % [OFFGRID])

if $thr
    threads($thr)
    logger.info("Number of threads to use %s" % [$thr])
else
    threads(%x("nproc"))
    logger.info("Number of threads to use #{%x("nproc")}")
end

#=== PRINT DETAILS ===
if $verbose == "true"
  logger.info("Verbose mode: #{$verbose}")
  verbose(true)
else
  verbose(false)
  logger.info("Verbose mode: false")
end

# === TILING MODE ===
if $run_mode == "tiling"
  tiles(500.um)
  tile_borders(10.um)
  logger.info("Tiling  mode is enabled.")

elsif $run_mode == "deep"
  #=== HIER MODE ===
  deep
  logger.info("deep  mode is enabled.")
else
  #=== FLAT MODE ===
  flat
  logger.info("flat  mode is enabled.")
end # run_mode

# METAL_TOP
if $metal_top
  METAL_TOP = $metal_top
else
  METAL_TOP = "9K"
end # METAL_TOP

logger.info("METAL_TOP Selected is %s" % [METAL_TOP])

# METAL_LEVEL
if $metal_level
  METAL_LEVEL = $metal_level
else
  METAL_LEVEL = "5LM"
end # METAL_LEVEL

logger.info("METAL_STACK Selected is %s" % [METAL_LEVEL])

# FEOL
if $feol == "false"
  FEOL = $feol
  logger.info("FEOL is disabled.")
else
  FEOL = "true"
  logger.info("FEOL is enabled.")
end # FEOL

# BEOL
if $beol == "false"
  BEOL = $beol
  logger.info("BEOL is disabled.")
else
  BEOL = "true"
  logger.info("BEOL is enabled.")
end # BEOL

#================================================
#------------- LAYERS DEFINITIONS ---------------
#================================================
polygons_count = 0
logger.info("Read in polygons from layers.")

comp           = polygons(22 , 0 ).merged
count = comp.count()
logger.info("comp has %d polygons" % [count])
polygons_count += count

dnwell         = polygons(12 , 0 ).merged
count   = dnwell.count()
logger.info("dnwell has %d polygons" % [count])
polygons_count  += count

nwell          = polygons(21 , 0 ).merged
count   = nwell.count()
logger.info("nwell has %d polygons" % [count])
polygons_count  += count

lvpwell        = polygons(204, 0 ).merged
count   = lvpwell.count()
logger.info("lvpwell has %d polygons" % [count])
polygons_count  += count

dualgate       = polygons(55 , 0 ).merged
count   = dualgate.count()
logger.info("dualgate has %d polygons" % [count])
polygons_count  += count

dualgate_2       = polygons(144 , 0 ).merged
count   = dualgate_2.count()
logger.info("dualgate_2 has %d polygons" % [count])
polygons_count  += count

poly2          = polygons(30 , 0 ).merged
count   = poly2.count()
logger.info("poly2 has %d polygons" % [count])
polygons_count  += count

nplus          = polygons(32 , 0 ).merged
count   = nplus.count()
logger.info("nplus has %d polygons" % [count])
polygons_count  += count

pplus          = polygons(31 , 0 ).merged
count   = pplus.count()
logger.info("pplus has %d polygons" % [count])
polygons_count  += count

sab            = polygons(49 , 0 ).merged
count   = sab.count()
logger.info("sab has %d polygons" % [count])
polygons_count  += count

esd            = polygons(24 , 0 ).merged
count   = esd.count()
logger.info("esd has %d polygons" % [count])
polygons_count  += count

resistor       = polygons(62 , 0 ).merged
count   = resistor.count()
logger.info("resistor has %d polygons" % [count])
polygons_count  += count

piscap          = polygons(120, 0 ).merged
count   = piscap.count()
logger.info("piscap has %d polygons" % [count])
polygons_count  += count

fhres          = polygons(227, 0 ).merged
count   = fhres.count()
logger.info("fhres has %d polygons" % [count])
polygons_count  += count

fusetop        = polygons(75 , 0 ).merged
count   = fusetop.count()
logger.info("fusetop has %d polygons" % [count])
polygons_count  += count

fusewindow_d   = polygons(96 , 1 ).merged
count   = fusewindow_d.count()
logger.info("fusewindow_d has %d polygons" % [count])
polygons_count  += count

polyfuse       = polygons(220, 0 ).merged
count   = polyfuse.count()
logger.info("polyfuse has %d polygons" % [count])
polygons_count  += count

nat            = polygons(5  , 0 ).merged
count   = nat.count()
logger.info("nat has %d polygons" % [count])
polygons_count  += count

comp_dummy     = polygons(22 , 4 ).merged
count   = comp_dummy.count()
logger.info("comp_dummy has %d polygons" % [count])
polygons_count  += count

poly2_dummy    = polygons(30 , 4 ).merged
count   = poly2_dummy.count()
logger.info("poly2_dummy has %d polygons" % [count])
polygons_count  += count

res_mk         = polygons(110, 5 ).merged
count   = res_mk.count()
logger.info("res_mk has %d polygons" % [count])
polygons_count  += count

opc_drc        = polygons(124, 5 ).merged
count   = opc_drc.count()
logger.info("opc_drc has %d polygons" % [count])
polygons_count  += count

ndmy           = polygons(111, 5 ).merged
count   = ndmy.count()
logger.info("ndmy has %d polygons" % [count])
polygons_count  += count

pmndmy         = polygons(152, 5 ).merged
count   = pmndmy.count()
logger.info("pmndmy has %d polygons" % [count])
polygons_count  += count

v5_xtor        = polygons(112, 1 ).merged
count   = v5_xtor.count()
logger.info("v5_xtor has %d polygons" % [count])
polygons_count  += count

cap_mk         = polygons(117, 5 ).merged
count   = cap_mk.count()
logger.info("cap_mk has %d polygons" % [count])
polygons_count  += count

mos_cap_mk     = polygons(166, 5 ).merged
count   = mos_cap_mk.count()
logger.info("mos_cap_mk has %d polygons" % [count])
polygons_count  += count

ind_mk         = polygons(151, 5 ).merged
count   = ind_mk.count()
logger.info("ind_mk has %d polygons" % [count])
polygons_count  += count

diode_mk       = polygons(115, 5 ).merged
count   = diode_mk.count()
logger.info("diode_mk has %d polygons" % [count])
polygons_count  += count

drc_bjt        = polygons(127, 5 ).merged
count   = drc_bjt.count()
logger.info("drc_bjt has %d polygons" % [count])
polygons_count  += count

lvs_bjt        = polygons(118, 5 ).merged
count   = lvs_bjt.count()
logger.info("lvs_bjt has %d polygons" % [count])
polygons_count  += count

mim_l_mk       = polygons(117, 10).merged
count   = mim_l_mk.count()
logger.info("mim_l_mk has %d polygons" % [count])
polygons_count  += count

latchup_mk     = polygons(137, 5 ).merged
count   = latchup_mk.count()
logger.info("latchup_mk has %d polygons" % [count])
polygons_count  += count

guard_ring_mk  = polygons(167, 5 ).merged
count   = guard_ring_mk.count()
logger.info("guard_ring_mk has %d polygons" % [count])
polygons_count  += count

otp_mk         = polygons(173, 5 ).merged
count   = otp_mk.count()
logger.info("otp_mk has %d polygons" % [count])
polygons_count  += count

mtpmark        = polygons(122, 5 ).merged
count   = mtpmark.count()
logger.info("mtpmark has %d polygons" % [count])
polygons_count  += count

sramcore       = polygons(108, 5 ).merged
count   = sramcore.count()
logger.info("sramcore has %d polygons" % [count])
polygons_count  += count

lvs_rf         = polygons(100, 5 ).merged
count   = lvs_rf.count()
logger.info("lvs_rf has %d polygons" % [count])
polygons_count  += count

lvs_drain      = polygons(100, 7 ).merged
count   = lvs_drain.count()
logger.info("lvs_drain has %d polygons" % [count])
polygons_count  += count

hvpolyrs       = polygons(123, 5 ).merged
count   = hvpolyrs.count()
logger.info("hvpolyrs has %d polygons" % [count])
polygons_count  += count

lvs_io         = polygons(119, 5 ).merged
count   = lvs_io.count()
logger.info("lvs_io has %d polygons" % [count])
polygons_count  += count

mdiode         = polygons(116, 5 ).merged
count   = mdiode.count()
logger.info("mdiode has %d polygons" % [count])
polygons_count  += count

contact        = polygons(33 , 0 ).merged
count   = contact.count()
logger.info("contact has %d polygons" % [count])
polygons_count  += count

metal1_drawn = polygons(34, 0).merged
count = metal1_drawn.count
logger.info("metal1_drawn has #{count} polygons")
polygons_count += count

metal1_dummy = polygons(34, 4).merged
count = metal1_dummy.count
logger.info("metal1_dummy has #{count} polygons")
polygons_count += count

metal1         = metal1_drawn + metal1_dummy

metal1_label = polygons(34, 10).merged
count = metal1_label.count
logger.info("metal1_label has #{count} polygons")
polygons_count += count

metal1_slot = polygons(34, 3).merged
count = metal1_slot.count
logger.info("metal1_slot has #{count} polygons")
polygons_count += count

metal1_blk = polygons(34, 5).merged
count = metal1_blk.count
logger.info("metal1_blk has #{count} polygons")
polygons_count += count

via1 = polygons(35, 0).merged
count = via1.count
logger.info("via1 has #{count} polygons")
polygons_count += count

metal2_drawn = polygons(36, 0).merged
count = metal2_drawn.count
logger.info("metal2_drawn has #{count} polygons")
polygons_count += count

metal2_dummy = polygons(36, 4).merged
count = metal2_dummy.count
logger.info("metal2_dummy has #{count} polygons")
polygons_count += count

metal2 = metal2_drawn + metal2_dummy

metal2_label = polygons(36, 10).merged
count = metal2_label.count
logger.info("metal2_label has #{count} polygons")
polygons_count += count

metal2_slot = polygons(36, 3).merged
count = metal2_slot.count
logger.info("metal2_slot has #{count} polygons")
polygons_count += count

metal2_blk = polygons(36, 5).merged
count = metal2_blk.count
logger.info("metal2_blk has #{count} polygons")
polygons_count += count

if METAL_LEVEL == '2LM'

  top_via       = via1
  topmin1_via   = contact
  top_metal     = metal2
  topmin1_metal = metal1

else

  via2 = polygons(38, 0)
  count = via2.count
  logger.info("via2 has #{count} polygons")
  polygons_count += count

  metal3_drawn = polygons(42, 0)
  count = metal3_drawn.count
  logger.info("metal3_drawn has #{count} polygons")
  polygons_count += count

  metal3_dummy = polygons(42, 4)
  count = metal3_dummy.count
  logger.info("metal3_dummy has #{count} polygons")
  polygons_count += count

  metal3 = metal3_drawn + metal3_dummy

  metal3_label = polygons(42, 10)
  count = metal3_label.count
  logger.info("metal3_label has #{count} polygons")
  polygons_count += count

  metal3_slot = polygons(42, 3)
  count = metal3_slot.count
  logger.info("metal3_slot has #{count} polygons")
  polygons_count += count

  metal3_blk = polygons(42, 5)
  count = metal3_blk.count
  logger.info("metal3_blk has #{count} polygons")
  polygons_count += count

  if METAL_LEVEL == '3LM'

    top_via       = via2
    topmin1_via   = via1
    top_metal     = metal3
    topmin1_metal = metal2
  else

    via3 = polygons(40, 0)
    count = via3.count
    logger.info("via3 has #{count} polygons")
    polygons_count += count

    metal4_drawn = polygons(46, 0)
    count = metal4_drawn.count
    logger.info("metal4_drawn has #{count} polygons")
    polygons_count += count

    metal4_dummy = polygons(46, 4)
    count = metal4_dummy.count
    logger.info("metal4_dummy has #{count} polygons")
    polygons_count += count

    metal4 = metal4_drawn + metal4_dummy

    metal4_label = polygons(46, 10)
    count = metal4_label.count
    logger.info("metal4_label has #{count} polygons")
    polygons_count += count

    metal4_slot = polygons(46, 3)
    count = metal4_slot.count
    logger.info("metal4_slot has #{count} polygons")
    polygons_count += count

    metal4_blk = polygons(46, 5)
    count = metal4_blk.count
    logger.info("metal4_blk has #{count} polygons")
    polygons_count += count

    if METAL_LEVEL == '4LM'

      top_via       = via3
      topmin1_via   = via2
      top_metal     = metal4
      topmin1_metal = metal3
    else

      via4 = polygons(41, 0)
      count = via4.count
      logger.info("via4 has #{count} polygons")
      polygons_count += count

      case METAL_LEVEL
      when '5LM'
        metal5_drawn = polygons(81, 0)
        count = metal5_drawn.count
        logger.info("metal5_drawn has #{count} polygons")
        polygons_count += count

        metal5_dummy = polygons(81, 4)
        count = metal5_dummy.count
        logger.info("metal5_dummy has #{count} polygons")
        polygons_count += count

        metal5 = metal5_drawn + metal5_dummy

        metal5_label = polygons(81, 10)
        count = metal5_label.count
        logger.info("metal5_label has #{count} polygons")
        polygons_count += count

        metal5_slot = polygons(81, 3)
        count = metal5_slot.count
        logger.info("metal5_slot has #{count} polygons")
        polygons_count += count

        metal5_blk = polygons(81, 5)
        count = metal5_blk.count
        logger.info("metal5_blk has #{count} polygons")
        polygons_count += count

        top_via       = via4
        topmin1_via   = via3
        top_metal     = metal5
        topmin1_metal = metal4
      when '6LM'
        metal5_drawn = polygons(81, 0)
        count = metal5_drawn.count
        logger.info("metal5_drawn has #{count} polygons")
        polygons_count += count

        metal5_dummy = polygons(81, 4)
        count = metal5_dummy.count
        logger.info("metal5_dummy has #{count} polygons")
        polygons_count += count

        metal5         = metal5_drawn + metal5_dummy

        metal5_label = polygons(81, 10)
        count = metal5_label.count
        logger.info("metal5_label has #{count} polygons")
        polygons_count += count

        metal5_slot = polygons(81, 3)
        count = metal5_slot.count
        logger.info("metal5_slot has #{count} polygons")
        polygons_count += count

        metal5_blk = polygons(81, 5)
        count = metal5_blk.count
        logger.info("metal5_blk has #{count} polygons")
        polygons_count += count

        via5 = polygons(82, 0)
        count = via5.count
        logger.info("via5 has #{count} polygons")
        polygons_count += count

        metaltop_drawn = polygons(53, 0)
        count = metaltop_drawn.count
        logger.info("metaltop_drawn has #{count} polygons")
        polygons_count += count

        metaltop_dummy = polygons(53, 4)
        count = metaltop_dummy.count
        logger.info("metaltop_dummy has #{count} polygons")
        polygons_count += count

        metaltop       = metaltop_drawn + metaltop_dummy

        metaltop_label = polygons(53, 10)
        count = metaltop_label.count
        logger.info("metaltop_label has #{count} polygons")
        polygons_count += count

        metaltop_slot = polygons(53, 3)
        count = metaltop_slot.count
        logger.info("metaltop_slot has #{count} polygons")
        polygons_count += count

        metaltop_blk = polygons(53, 5)
        count = metaltop_blk.count
        logger.info("metaltop_blk has #{count} polygons")
        polygons_count += count

        top_via       = via5
        topmin1_via   = via4
        top_metal     = metaltop
        topmin1_metal = metal5
      else
        logger.error("Unknown metal stack #{METAL_LEVEL}")
        raise
      end
    end
  end
end

probe_mk      = polygons(13 , 17 ).merged
count   = probe_mk.count()
logger.info("probe_mk has %d polygons" % [count])
polygons_count  += count

pad            = polygons(37 , 0 ).merged
count   = pad.count()
logger.info("pad has %d polygons" % [count])
polygons_count  += count

ubmpperi       = polygons(183, 0 ).merged
count   = ubmpperi.count()
logger.info("ubmpperi has %d polygons" % [count])
polygons_count  += count

ubmparray      = polygons(184, 0 ).merged
count   = ubmparray.count()
logger.info("ubmparray has %d polygons" % [count])
polygons_count  += count


ubmparray_label = polygons(33, 39 ).merged
count   = ubmparray_label.count()
logger.info("ubmparray_label has %d polygons" % [count])
polygons_count  += count

ubmeplate      = polygons(185, 0 ).merged
count   = ubmeplate.count()
logger.info("ubmeplate has %d polygons" % [count])
polygons_count  += count

pr_bndry       = polygons(0  , 0 ).merged
count   = pr_bndry.count()
logger.info("pr_bndry has %d polygons" % [count])
polygons_count  += count

border         = polygons(63 , 0 ).merged
count   = border.count()
logger.info("border has %d polygons" % [count])
polygons_count  += count

logger.info("Total no. of polygons in the design is #{polygons_count}")

logger.info("Starting deriving base layers.")
#=====================================================
#------------- BASE LAYERS DERIVATIONS ---------------
#=====================================================

ncomp      =  comp      & nplus
pcomp      =  comp      & pplus
tgate      =  poly2     & comp
ngate      =  nplus     & tgate
pgate      =  pplus     & tgate
natcompsd	 = (nat       & comp.interacting(poly2)) - tgate

gate1p8_3p3 = tgate.not(dualgate_2)
gate1p8 = gate1p8_3p3.not(dualgate)
gate3p3 = gate1p8_3p3.and(dualgate)

gate5p0_6p0 = tgate.not(dualgate).and(dualgate_2)
gate5p0 = gate5p0_6p0.and(v5_xtor)
gate6p0 = gate5p0_6p0.not(v5_xtor)

lvpwell_dn = lvpwell.interacting(dnwell)
lvpwell_out = lvpwell.not_interacting(dnwell)


#================================================
#------------- LAYERS CONNECTIONS ---------------
#================================================

if CONNECTIVITY_RULES

  logger.info("Construct connectivity for the design.")

  connect(dnwell,  ncomp)
  connect(ncomp,  contact)
  connect(pcomp,  contact)

  connect(lvpwell_out,  pcomp)
  connect(lvpwell_dn, pcomp)

  connect(nwell,  ncomp)
  connect(natcompsd,  contact)
  connect(contact,  metal1)
  connect(metal1,  via1)
  connect(via1,    metal2)
  if METAL_LEVEL != "2LM"
    connect(metal2,  via2)
    connect(via2,    metal3)

    if METAL_LEVEL != "3LM"
      connect(metal3,  via3)
      connect(via3,    metal4)
      
      if METAL_LEVEL != "4LM"
        connect(metal4,  via4)
        connect(via4,    metal5)

        if METAL_LEVEL != "5LM"
          connect(metal5,  via5)
          connect(via5,    metaltop)
        end
      end
    end
  end

end #CONNECTIVITY_RULES

#================================================
#------------ PRE-DEFINED FUNCTIONS -------------
#================================================

def conn_space(layer,conn_val,not_conn_val, mode)
  if conn_val > not_conn_val
    raise "ERROR : Wrong connectivity implementation"
  end
  connected_output = layer.space(conn_val.um, mode).polygons(0.001)
  unconnected_errors_unfiltered = layer.space(not_conn_val.um, mode)
  singularity_errors = layer.space(0.001.um)
  # Filter out the errors arising from the same net
  unconnected_errors = DRC::DRCLayer::new(self, RBA::EdgePairs::new)
  unconnected_errors_unfiltered.data.each do |ep|
    net1 = l2n_data.probe_net(layer.data, ep.first.p1)
    net2 = l2n_data.probe_net(layer.data, ep.second.p1)
    if !net1 || !net2
      puts "Should not happen ..."
    elsif net1.circuit != net2.circuit || net1.cluster_id != net2.cluster_id
      # unconnected
      unconnected_errors.data.insert(ep)
    end
  end
  unconnected_output = unconnected_errors.polygons.or(singularity_errors.polygons(0.001))
  return connected_output, unconnected_output
end

def conn_separation(layer1, layer2, conn_val,not_conn_val, mode)
  if conn_val > not_conn_val
    raise "ERROR : Wrong connectivity implementation"
  end
  connected_output = layer1.separation(layer2, conn_val.um, mode).polygons(0.001)
  unconnected_errors_unfiltered = layer1.separation(layer2, not_conn_val.um, mode)
  # Filter out the errors arising from the same net
  unconnected_errors = DRC::DRCLayer::new(self, RBA::EdgePairs::new)
  unconnected_errors_unfiltered.data.each do |ep|
    net1 = l2n_data.probe_net(layer1.data, ep.first.p1)
    net2 = l2n_data.probe_net(layer2.data, ep.second.p1)
    if !net1 || !net2
      puts "Should not happen ..."
    elsif net1.circuit != net2.circuit || net1.cluster_id != net2.cluster_id
      # unconnected
      unconnected_errors.data.insert(ep)
    end
  end
  unconnected_output = unconnected_errors.polygons(0.001)
  return connected_output, unconnected_output
end

# === IMPLICIT EXTRACTION ===
if CONNECTIVITY_RULES
  logger.info("Connectivity rules enabled, Netlist object will be generated.")
  netlist
end #CONNECTIVITY_RULES

# === LAYOUT EXTENT ===
CHIP = extent.sized(0.0)
logger.info("Total area of the design is #{CHIP.area()} um^2.")

#================================================
#----------------- MAIN RUNSET ------------------
#================================================

logger.info("Starting GF180ULL DRC rules.")
if FEOL
  logger.info("Running all FEOL rules")
end #FEOL

if BEOL
  logger.info("Running all BEOL rules")
end #BEOL


