[Libre-soc-dev] Div bugs

Luke Kenneth Casson Leighton lkcl at lkcl.net
Wed Aug 26 00:47:25 BST 2020


On Tuesday, August 25, 2020, Jacob Lifshay <programmerjake at gmail.com> wrote:

> On Tue, Aug 25, 2020 at 9:48 AM Luke Kenneth Casson Leighton
> <lkcl at lkcl.net> wrote:
> >
> > On Tuesday, August 25, 2020, Jacob Lifshay <programmerjake at gmail.com>
> wrote:
> >
> > > On Tue, Aug 25, 2020, 07:08 Luke Kenneth Casson Leighton <
> lkcl at lkcl.net>
> > > wrote:
> > >
> > > > change of topic: jacob the DIV FSM is not producing correct output
> and
> > > > needs some high priority attention.  the incorrect output means i
> cannot
> > > > test anything on the FPGA because the DIV pipe is way too large.
> > >
> > >
> > > I'm planning on working on that today
> >
> >
> > thanks jacob.  i added an example test case at the top of the div unit
> test.
>
> I fixed it.


star


>  I also found another case where the python instruction
> simulator is wrong


sigh.


>  -- all of the FSM, power-instruction-analyzer, and
> what I expect from reading the instruction description agree:
>     def case_divw_regression(self):
>         # simulator is wrong, FSM and power-instruction-analyzer are
> both correct
>         lst = [f"divw 0, 1, 2"]
>         initial_regs = [0] * 32
>         initial_regs[2] = 0x2
>         initial_regs[1] = 0x80000000
>         with Program(lst, bigendian) as prog:
>             self.add_case(prog, initial_regs)
>
> the correct result is 0xC0000000, the simulator gives 0x40000000


that iiiis... not detecting that the number is negative, i bet.

0x8000_0000 is the -ve limit.


> I'll leave that up to you to fix


need some more cases, just to be sure.

i suspect divd is wrong for 0x8000_0000_0000_0000 as well.

l.



-- 
---
crowd-funded eco-conscious hardware: https://www.crowdsupply.com/eoma68


More information about the Libre-soc-dev mailing list