Origin blog post is here.
This time it leaves a question…
In the previous post, I thought the point alignment of fixbv should be implemented in a short time. Soon I found myself wrong.
After fixing a compatibility bug in the unit test test_fixbv.py, the problem of point alignment has been revealed.
If point alignment only solved in _fixbv.py, in the case of a variable of Signal plus or minus a variable of fixbv, MyHDL simulator will throw a problem. So I have to implement both in Signal.__add__ and fixbv.__add__. Also, I have to consider if they plus or minus intbv.
So, it causes a problem of cross import. I posted this StackOverflow question and you may see the implementation.
Temporarily, my solution is (in fixbv.__add__):
def __add__(self, other):
if isinstance(other, fixbv):
iW = self._W + other._W
else:
# Solve the case if `type(other) is Signal`
return other.__radd__(self)
This implementation only considered fixbv and Signal. However, if I consider intbv, things might be more complex.
It leaves a question I am going to solve now.