| #!/usr/bin/env python3 | |
| # -*- coding: utf-8 -*- | |
| # | |
| # Copyright (C) 2020 The SymbiFlow Authors. | |
| # | |
| # Use of this source code is governed by a ISC-style | |
| # license that can be found in the LICENSE file or at | |
| # https://opensource.org/licenses/ISC | |
| # | |
| # SPDX-License-Identifier: ISC | |
| import re | |
| CLOCK_NAME_REGEX = re.compile(r"[a-z_]*clk[a-z0-9]*$") | |
| def strip_yosys_json(text): | |
| """The JSON Yosys outputs isn't acutally compliant JSON, as it contains C-style | |
| comments. These must be stripped.""" | |
| stripped = re.sub(r'\\\n', '', text) | |
| stripped = re.sub(r'//.*\n', '\n', stripped) | |
| stripped = re.sub(r'/\*.*\*/', '', stripped) | |
| return stripped | |
| def is_clock_name(name): | |
| """ | |
| Returns true if the port name correspond to a clock according to arbitrary | |
| regular expressions. | |
| >>> is_clock_name("data") | |
| False | |
| >>> is_clock_name("clk") | |
| True | |
| >>> is_clock_name("Clk") | |
| True | |
| >>> is_clock_name("Clk_Rst0") | |
| False | |
| >>> is_clock_name("Data_clk") | |
| True | |
| >>> is_clock_name("clk99") | |
| True | |
| >>> is_clock_name("bus_clk99") | |
| True | |
| >>> is_clock_name("busclk15") | |
| True | |
| >>> is_clock_name("clkb") | |
| True | |
| """ | |
| match = CLOCK_NAME_REGEX.match(name.lower()) | |
| return match is not None |