upsilon/gateware/util.py

29 lines
881 B
Python
Raw Normal View History

2024-02-22 10:35:31 -05:00
# Copyright 2023-2024 (C) Peter McGoron
#
# This file is a part of Upsilon, a free and open source software project.
# For license terms, refer to the files in `doc/copying` in the Upsilon
# source distribution.
def minbits(n):
""" Return the amount of bits necessary to store n. """
from math import log2, floor
2024-02-22 10:35:31 -05:00
return floor(log2(n) + 1)
def round_up_to_pow_2(n):
""" Round up to nearest power of 2 if not already a power of 2. """
assert n > 0
# If n is a power of 2, then n - 1 has a smaller bit length than n.
# If n is not a power of 2, then n - 1 has the same bit length.
l = (n - 1).bit_length()
return 1 << l
def round_up_to_word(n):
""" Round up to 8, 16, or 32. """
if n <= 8:
return 8
if n <= 16:
return 16
if n <= 32:
return 32
raise Exception(f"{n} must be less than or equal to 32")