# Copyright 2023 The Pigweed 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.

import("//build_overrides/pigweed.gni")

import("$dir_pw_build/exec.gni")

# Builds an FPGA image using the icestorm toolchain.
#
# Requires the following tools:
#   yosys, nextpnr-ice40, icepack, icetime
#
# Example:
#
#   fpga_image("toplevel") {
#     sources = [
#       "gonk/csa_ctl_top.v",
#       "gonk/pll.v",
#       "gonk/rst_sync.v",
#       "gonk/sig_sync.v",
#       "gonk/spi_m_core.v",
#       "gonk/spi_m_core_ctl.v",
#       "gonk/spi_s_core.v",
#       "gonk/top.v",
#     ]
#
#     pcf = "gonk/top.pcf"
#   }
#
template("fpga_image") {
  assert(defined(invoker.sources), "fpga_image requires 'sources'")
  assert(defined(invoker.pcf), "fpga_image requires a 'pcf'")

  # Image basename set to target_name by default but can be overriden.
  _image_name = "$target_name"
  if (defined(invoker.image_name)) {
    _image_name = invoker.image_name
  }

  _verilog_files = invoker.sources
  _pcf_file = invoker.pcf

  _json_file = "$target_out_dir/$target_name/${_image_name}.json"
  _asc_file = "$target_out_dir/$target_name/${_image_name}.asc"
  _bin_file = "$target_out_dir/$target_name/${_image_name}.bin"

  _yosys_log = "$target_out_dir/$target_name/yosys-log.txt"
  _nextpnr_log = "$target_out_dir/$target_name/nextpnr-log.txt"
  _timing_report_text =
      "$target_out_dir/$target_name/${_image_name}_timing_report.txt"
  _timing_report_json =
      "$target_out_dir/$target_name/${_image_name}_timing_report.json"

  # By default, build the bin file and timing report.
  group("$target_name") {
    public_deps = [
      ":${target_name}._bin",
      ":${target_name}._time",
    ]
  }

  pw_exec("${target_name}._json") {
    inputs = _verilog_files
    outputs = [
      _json_file,
      _yosys_log,
    ]

    program = "yosys"
    args = [
      "-l",
      rebase_path(_yosys_log, root_build_dir),
      "-q",
      "-p",
      "synth_ice40 -json " + rebase_path(_json_file, root_build_dir),
    ]
    args += rebase_path(_verilog_files, root_build_dir)
  }

  pw_exec("${target_name}._asc") {
    inputs = [ _json_file ]
    outputs = [
      _asc_file,
      _nextpnr_log,
    ]

    deps = [ ":${invoker.target_name}._json" ]

    program = "nextpnr-ice40"
    args = [
      "-l",
      rebase_path(_nextpnr_log, root_build_dir),
      "--freq",
      "75",
      "--hx8k",
      "--package",
      "tq144:4k",
      "--json",
      rebase_path(_json_file, root_build_dir),
      "--pcf",
      rebase_path(_pcf_file, root_build_dir),
      "--asc",
      rebase_path(_asc_file, root_build_dir),
      "--opt-timing",
      "--placer",
      "heap",
    ]
  }

  pw_exec("${target_name}._bin") {
    inputs = [ _asc_file ]
    outputs = [ _bin_file ]

    deps = [ ":${invoker.target_name}._asc" ]

    program = "icepack"
    args = [
      rebase_path(_asc_file, root_build_dir),
      rebase_path(_bin_file, root_build_dir),
    ]
  }

  pw_exec("${target_name}._time") {
    inputs = [ _asc_file ]
    outputs = [
      _timing_report_text,
      _timing_report_json,
    ]

    deps = [ ":${invoker.target_name}._asc" ]

    program = "icetime"
    args = [
      "-r",
      rebase_path(_timing_report_text, root_build_dir),
      "-j",
      rebase_path(_timing_report_json, root_build_dir),
      "-tmd",
      "hx8k",
      rebase_path(_asc_file, root_build_dir),
    ]
  }
}
