################################################################################################
# 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 IC 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_018IC.drc -rd input=design.gds -rd report=gp180_drc.lyrdb

logger.info("Starting running GF180IC Klayout DRC runset on %s" % [$input])

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

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

if $report     
    logger.info("GF180IC Klayout DRC runset output at: %s" % [$report])
    report("DRC Run Report at", $report)
else
    logger.info("GF180IC 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" # (8/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

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

otpgate = polygons(225 , 0 ).merged
count   = otpgate.count()
logger.info("otpgate 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

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

fusetop2        = polygons(215 , 0 ).merged
count   = fusetop2.count()
logger.info("fusetop2 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

lvt            = polygons(87  , 0 ).merged
count   = lvt.count()
logger.info("lvt 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

res_mk_type1  = polygons(26, 17 ).merged
count   = res_mk_type1.count()
logger.info("res_mk_type1 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

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

lvs_bjt        = polygons(118, 5 ).merged
count   = lvs_bjt.count()
logger.info("lvs_bjt 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

sramcore_1 = polygons(101, 5 ).merged
sramcore_2 = polygons(102, 5 ).merged
sramcore_3 = polygons(103, 5 ).merged
sramcore_4 = polygons(105, 5 ).merged
sramcore_5 = polygons(108, 5 ).merged
sramcore   = sramcore_1.or(sramcore_2).or(sramcore_3).or(sramcore_4).or(sramcore_5)
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

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

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

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

well_diode_mk  = polygons(153, 51).merged
count   = well_diode_mk.count()
logger.info("well_diode_mk has %d polygons" % [count])
polygons_count  += count

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

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

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

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

poly2_label    = polygons(30 , 10).merged
count   = poly2_label.count()
logger.info("poly2_label 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).merged
  count = via2.count
  logger.info("via2 has #{count} polygons")
  polygons_count += count

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

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

  metal3 = metal3_drawn + metal3_dummy

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

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

  metal3_blk = polygons(42, 5).merged
  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).merged
    count = via3.count
    logger.info("via3 has #{count} polygons")
    polygons_count += count

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

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

    metal4 = metal4_drawn + metal4_dummy

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

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

    metal4_blk = polygons(46, 5).merged
    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).merged
      count = via4.count
      logger.info("via4 has #{count} polygons")
      polygons_count += count

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

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

        metal5 = metal5_drawn + metal5_dummy

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

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

        metal5_blk = polygons(81, 5).merged
        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).merged
        count = metal5_drawn.count
        logger.info("metal5_drawn has #{count} polygons")
        polygons_count += count

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

        metal5         = metal5_drawn + metal5_dummy

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

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

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

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

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

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

        metaltop       = metaltop_drawn + metaltop_dummy

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

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

        metalt_blk = polygons(53, 5).merged
        count = metalt_blk.count
        logger.info("metalt_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

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

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

viardl  = polygons(170 , 0 ).merged
count   = viardl.count()
logger.info("viardl 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

lvs_cap = polygons(117 , 5 ).merged
count   = lvs_cap.count()
logger.info("lvs_cap 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

pad_label = polygons(37 , 10 ).merged
count   = pad_label.count()
logger.info("pad_label 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

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

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

nom_gate   = tgate.not(dualgate)
thick_gate = tgate.and(dualgate)

ngate_1p8 = ngate.not(dualgate)
pgate_1p8 = pgate.not(dualgate)

ngate_3p3 = ngate.and(dualgate)
pgate_3p3 = pgate.and(dualgate)

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

if CONNECTIVITY_RULES

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

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

  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 GF180MCU DRC rules.")
if FEOL
  logger.info("Running all FEOL rules")
end #FEOL

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