Re: Error in Intbv class?

Samuele Disegna <[email protected]> Thu, 3 Mar 2016 16:05:57 +0100
Newsgroups gmane.comp.python.myhdl
Message-ID <CADXD_Db2-UwSbjzoAweAu_GYGfUz3JFyU8Nx2vB2dL73r4CRAA@mail.gmail.com>
Hi again, while analyzing the _intbv code I noticed a related problem:

An Exception is Not risen when accessing a out of bound bit of a
constrained intbv.
This seems a real problem to me.

I tested it by using the example code at
http://docs.myhdl.org/en/stable/manual/hwtypes.html#bit-indexing and
modifing it for using a constrained intbv:

from myhdl import Signal, delay, Simulation, always_comb, instance, intbv,
bin

def bin2gray(B, G, width):
    """ Gray encoder.

    B -- input intbv signal, binary encoded
    G -- output intbv signal, gray encoded
    width -- bit width
    """

    @always_comb
    def logic():
        for i in range(width):
            G.next[i] = B[i+1] ^ B[i]

    return logic

def testBench(width):

    B = Signal(intbv(0)[3:])
    G = Signal(intbv(0)[3:])

    dut = bin2gray(B, G, width)

    @instance
    def stimulus():
        for i in range(2**width):
            B.next = intbv(i)[3:]
            yield delay(10)
            print("B: " + bin(B, width) + "| G: " + bin(G, width))

    return dut, stimulus

sim = Simulation(testBench(width=3))
sim.run()


On Thu, Mar 3, 2016 at 2:24 PM, Samuele Disegna <[email protected]> wrote:

> Hello, Last message was empty, my mistake.
>
> On Thu, Mar 3, 2016 at 2:10 PM, Samuele Disegna <[email protected]> wrote:
>
>>
>>
>> On Thu, Mar 3, 2016 at 1:14 PM, Forumulator Bing <[email protected]>
>> wrote:
>>
>>> Hello,
>>>
>>> I may have found a potential bug in intbv:
>>>
>>> >>> a=intbv(5)[4:0]
>>> >>> a[6:0]=20
>>> Traceback (most recent call last):
>>>   File "<stdin>", line 1, in <module>
>>>   File "/usr/local/lib/python3.4/dist-packages/myhdl/_intbv.py", line
>>> 180, in __setitem__
>>>     self._handleBounds()
>>>   File "/usr/local/lib/python3.4/dist-packages/myhdl/_intbv.py", line
>>> 77, in _handleBounds
>>>     (self._val, self._max))
>>> ValueError: intbv value 20 >= maximum 16
>>> >>> a
>>> intbv(20)
>>>
>>> It gives a ValueError, but still sets the value of a to 20. Would this
>>> be considered a bug since an exception is thrown?
>>>
>>>
>> From what I see on myhdl code min/max bounds handling is done later than
> assignment and it seems independent.
> Therefore I would say it is not a bug. We could document this behaviour.
> Is it possible to subclass the exception to a documented ValueBoundError
> that define the behaviour?
>
> You can find the related code at
> https://github.com/jandecaluwe/myhdl/blob/master/myhdl/_intbv.py
> def __setitem__(self, key, val):
>
> Regards
>

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140

_______________________________________________
myhdl-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/myhdl-list