| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # |
| # Copyright 2020 The SkyWater PDK Authors. |
| # |
| # Use of this source code is governed by the Apache 2.0 |
| # license that can be found in the LICENSE file or at |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| |
| VERILOG_BASE = [ |
| "full.v", |
| ] |
| |
| VERILOG_GENERATED = [ |
| "blackbox.v", |
| "simple.v", |
| ] |
| |
| LIBERTY_BASE = [ |
| "wrap.lib", |
| ] |
| LIBERTY_GENERATED = [ |
| "cell.lib", |
| ] |
| |
| |
| |
| |
| def src_filename(filename): |
| """Returns the source file for a generated file. |
| |
| >>> src_filename("") |
| |
| """ |
| if '.' in filename: |
| basename, extension = filename.split('.', 1) |
| else: |
| basename = filename |
| extension = '' |
| |
| if extension.endswith(".v"): |
| if extension in VERILOG_BASE: |
| raise TypeError( |
| "File type {} (from file {}) is not generated!".format( |
| extension, filename)) |
| elif extension not in VERILOG_GENERATED: |
| raise NameError( |
| "Unknown file type {} for file {}".format( |
| extension, filename)) |
| return "{}.{}".format(basename, "full.v") |
| |
| elif extension.endswith(".lib"): |
| if extension not in LIBERTY_BASE: |
| raise TypeError( |
| "File type {} (from file {}) is not generated!".format( |
| extension, filename)) |
| elif extension not in LIBERTY_GENERATED: |
| raise NameError( |
| "Unknown file type {} for file {}".format( |
| extension, filename)) |
| return "{}.{}".format(basename, ".json") |
| |
| |
| def is_generated(filename): |
| """Determines if a file is generated from another source. |
| |
| >>> is_generated("") |
| |
| """ |
| |
| if '.' in filename: |
| basename, extension = filename.split('.', 1) |
| else: |
| basename = filename |
| extension = '' |
| |
| if extension.endswith(".v"): |
| if extension in VERILOG_BASE: |
| return False |
| elif extension in VERILOG_GENERATED: |
| return True |
| else: |
| raise NameError( |
| "Unknown file type {} for file {}".format( |
| extension, filename)) |
| |
| if extension.endswith(".lib"): |
| if extension in LIBERTY_BASE: |
| return False |
| elif extension in LIBERTY_GENERATED: |
| return True |
| |
| if extension.endswith(".json"): |
| return True |
| if f.endswith(".png"): |
| return True |
| if f in ('README.rst',): |
| return True |
| return False |
| |
| |
| if __name__ == "__main__": |
| import doctest |
| doctest.testmod() |