| // Copyright lowRISC contributors. | 
 | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
 | // SPDX-License-Identifier: Apache-2.0 | 
 | ${gencmd} | 
 | <% | 
 | import topgen.lib as lib | 
 |  | 
 |  | 
 | def camelcase(str): | 
 |     """Turns a string from 'snake_case' to 'CamelCase'.""" | 
 |     return "".join([part.capitalize() for part in str.split("_")]) | 
 |  | 
 |  | 
 | def get_dio_pin_enum_literal(sig, start_idx): | 
 |     """Returns the DIO pin enum literal with value assignment""" | 
 |     if "width" in sig and sig["width"] > 1: | 
 |         return_str = "" | 
 |         for i in range(int(sig["width"])): | 
 |             if i > 0: | 
 |               return_str += "\n    " | 
 |             return_str += camelcase("top_{}_dio_pin_{}_{} = {},".format( | 
 |             top["name"], sig["name"], i, start_idx + i)) | 
 |         return return_str | 
 |     return camelcase("top_{}_dio_pin_{} = {},".format( | 
 |         top["name"], sig["name"], start_idx)) | 
 | %>\ | 
 | package top_${top["name"]}_pkg; | 
 | % for name, region in helper.modules(): | 
 |   /** | 
 |    * Peripheral base address for ${name} in top ${top["name"]}. | 
 |    */ | 
 |   parameter int unsigned ${region.base_addr_name().as_c_define()} = 32'h${region.base_addr[2:]}; | 
 |  | 
 |   /** | 
 |    * Peripheral size in bytes for ${name} in top ${top["name"]}. | 
 |    */ | 
 |   parameter int unsigned ${region.size_bytes_name().as_c_define()} = 32'h${region.size_bytes[2:]}; | 
 |  | 
 | % endfor | 
 | % for name, region in helper.memories(): | 
 |   /** | 
 |    * Memory base address for ${name} in top ${top["name"]}. | 
 |    */ | 
 |   parameter int unsigned ${region.base_addr_name().as_c_define()} = 32'h${region.base_addr[2:]}; | 
 |  | 
 |   /** | 
 |    * Memory size for ${name} in top ${top["name"]}. | 
 |    */ | 
 |   parameter int unsigned ${region.size_bytes_name().as_c_define()} = 32'h${region.size_bytes[2:]}; | 
 |  | 
 | % endfor | 
 |   // Enumeration for DIO pins. | 
 |   typedef enum { | 
 |   <% pin_cnt = 0 %>\ | 
 |   % for sig in reversed(top["pinmux"]["dio"]): | 
 |   ${get_dio_pin_enum_literal(sig, pin_cnt)} | 
 |   <% pin_cnt += int(sig["width"]) if "width" in sig else 1 %>\ | 
 |   % endfor | 
 |   ${camelcase("top_{}_dio_pin_count".format(top["name"]))} = ${pin_cnt} | 
 |   } top_${top["name"]}_dio_pin_e; | 
 |  | 
 |   // TODO: Enumeration for PLIC Interrupt source peripheral. | 
 |   // TODO: Enumeration for PLIC Interrupt Ids. | 
 |  | 
 | endpackage |