XSOC Known Issues

Home

xr16 >>
<< XSOC Talk


News Index
2002
  Jan Feb Mar
  Apr May Jun
  Jul Aug Sep
2001
  Jan Feb Mar
  Apr May Jun
  Jul Aug Sep
  Oct Nov Dec
2000
  Apr Aug Sep
  Oct Nov Dec

Links
Fpga-cpu List
Usenet Posts
Site News
Papers
Teaching
Resources
Glossary
Gray Research

GR CPUs

XSOC
  Launch Mail
  Circuit Cellar
  LICENSE
  README
  XSOC News
  XSOC Talk
  Issues
  xr16

XSOC 2.0
  XSOC2 Log

CNets
  CNets Log
Google SiteSearch
issues -- issues database

Copyright (C) 2000, Gray Research LLC.  All rights reserved.
The contents of this file are subject to the XSOC License Agreement;
you may not use this file except in compliance with this Agreement.
See the LICENSE file.

open issues (12): 
  2 not-impl lcc-xr16 long integers are not implemented 
  3 not-impl xr16asm  far branch displacements are not implemented 
  4 not-impl libxr16  most kinds of mul div and mod are not implemented 
  5 not-impl libxr16  variable bit-count shifts are not implemented 
  6 defect   xsoc     VGA only displays 560 pixels/line, not 576 
  7 wish     libxr16  xr16 needs a C runtime library 
  8 not-impl lcc-xr16 lcc-xr16 needs a test suite 
  9 not-impl xr16asm  xr16 assembler/simulator needs a test suite 
 11 defect   xsoc     timespecs do not include async RAM delay offsets 
 14 wish     xsoc     XSOC/xr16 refloorplanned for XC4010XL 
 16 defect   doc      xspecs.pdf: b<cond> a,-32768 broken 
 17 defect   xr16iss  b<cond> a,-32768 broken 

assigned issues (1): 
 10 not-impl xr16cpu  xr16 cpu needs a test suite 

resolved issues (1): 
 20 defect   xsoc     problems building under Foundation 2.1i. 

closed issues (6): 
  1 note     doc      how to use the issues tracking system 
 12 wish     misc     issues tracking should include version number info 
 13 defect   xsoc     XSOC did not run on a v1.4+ board 
 15 defect   lcc-xr16 some unsigned hex consts promoted to long 
 18 defect   xr16asm  cmpi reg,-32768 broken 
 19 defect   xr16asm  cmpi reg,0 broken 


Issue:  1 note doc how to use the issues tracking system
Opened: 02/26/00 jan-@fpgacpu.org
    See file issues-howto
Closed: 02/26/00 jan-@fpgacpu.org


Issue:  2 not-impl lcc-xr16 long integers are not implemented
Opened: 02/26/00 jan-@fpgacpu.org
    1. May need to revise long int pseudo-ops specification in xspecs.pdf.
    2. Need to modify lcc-xr16's xr16.md to emit proper long int pseudo-ops.
    3. Need to modify xr16asm to implement those pseudo-ops.
    4. Need to write long int test suite.


Issue:  3 not-impl xr16asm far branch displacements are not implemented
Opened: 02/26/00 jan-@fpgacpu.org
    Repro: lcc-xr16 -o 3.hex -Wl-lst=3.lst 3.c
    Errors:
    xr16: branch displacement overflow at 0084 target 'L3'
    xr16: branch displacement overflow at 01A2 target 'L2'


Issue:  4 not-impl libxr16 most kinds of mul div and mod are not implemented
Opened: 02/26/00 jan-@fpgacpu.org
    Currently only unsigned multiply is implemented.
    Repro: lcc-xr16 -o 4.hex -Wl-lst=4.lst 4.c
    Errors:
    xr16: undefined symbol '_muli2'
    xr16: undefined symbol '_divi2'
    xr16: undefined symbol '_modi2'
    xr16: undefined symbol '_divu2'
    xr16: undefined symbol '_modu2'
    xr16: undefined symbol '_muli4'
    xr16: undefined symbol '_divi4'
    xr16: undefined symbol '_modi4'
    xr16: undefined symbol '_mulu4'
    xr16: undefined symbol '_divu4'
    xr16: undefined symbol '_modu4'


Issue:  5 not-impl libxr16 variable bit-count shifts are not implemented
Opened: 02/26/00 jan-@fpgacpu.org
    Repro: lcc-xr16 -o 5.hex -Wl-lst=5.lst 5.c
    Errors:
    xr16: undefined symbol '_sllr'
    xr16: undefined symbol '_slllr'
    xr16: undefined symbol '_srar'
    xr16: undefined symbol '_srlr'
    xr16: undefined symbol '_sralr'
    xr16: undefined symbol '_srllr'


Issue:  6 defect xsoc VGA only displays 560 pixels/line, not 576
Opened: 02/26/00 jan-@fpgacpu.org
    There's something wrong with horizontal blanking with respect
    to the video pixel shift pipeline, and so the VGA display does not
    display the last 16 pixels/line.


Issue:  7 wish libxr16 xr16 needs a C runtime library
Opened: 02/26/00 jan-@fpgacpu.org
    This project needs a C runtime library.  We need one with full source,
    that is 16-bit portable, and is compatible with the lcc C compiler.
    The last time I looked most of the available CRTs depended upon
    some GCC language extensions...


Issue:  8 not-impl lcc-xr16 lcc-xr16 needs a test suite
Opened: 02/26/00 jan-@fpgacpu.org
    There is no lcc-xr16 cross-compiler test suite yet.  Surely one could
    be built using the xr16 simulator.


Issue:  9 not-impl xr16asm xr16 assembler/simulator needs a test suite
Opened: 02/26/00 jan-@fpgacpu.org
    There is no xr16 assembler/simulator test suite yet.


Issue:  10 not-impl xr16cpu xr16 cpu needs a test suite
Opened: 02/26/00 jan-@fpgacpu.org
    There is no xr16 test suite yet.  There should be a minimal one that
    could be run in the Foundation simulator, and another, built upon
    the first, that could be run in the actual hardware.
Owner:  04/01/00 jan-@fpgacpu.org
    tests/xr16.s is a start.  It runs in the xr16 instruction set sim,
    and in a Verilog simulator.  It still needs a test harness to run
    in hardware.


Issue:  11 defect xsoc timespecs do not include async RAM delay offsets
Opened: 02/27/00 jan-@fpgacpu.org
    The various xsoc-*.ucf constraint files include timespecs which are
    essential for optimizing placement and routing and for ensuring
    the resulting design passes static timing analysis.
    Current the XSOC UCF timespecs are not correct, because they do not
    include OFFSET timings to account for the delay from the FPGA
    address and control signals, through the RAMs, and back into the FPGA.
    Even if trce reports the worst case cycle time is <41 ns, this does
    not guarantee the design will run at the target cycle time of 80 ns
    if we do not factor in this external delay through external RAM.


Issue:  12 wish misc issues tracking should include version number info
Opened: 02/27/00 jan-@fpgacpu.org
    It would be nice if each resolved or closed issue included the
    XSOC version number in which the issue was first resolved.
Resolv: 03/17/00 fixed 0.92 jan-@fpgacpu.org
    Done!
Closed: 03/17/00 jan-@fpgacpu.org


Issue:  13 defect xsoc XSOC did not run on a v1.4+ board
Opened: 03/17/00 jan-@fpgacpu.org
    Someone reports that XSOC (xsoc-10xl-13.bit) doesn't work on his XS40
    v1.4+ board.  This is troubling because it works on mine.
Owner:  03/17/00 jan-@fpgacpu.org
    It may have something to do with which version of XSTOOLS you are running.
Resolv: 03/17/00 fixed 0.92 jan-@fpgacpu.org
    The problem does indeed have to do with which version of XSTOOLS
    you are using.  In this case, we test XSOC with v1.2, v1.3, and
    v1.4+ boards, but we had been doing so using a single installation
    of XSTOOLS, apparently corresponding to a v1.3 board.  (Oops.)

    For v1.4+ boards, the 0.91 design lets XA<15> and XA16 float high
    via default weak pullups, and this worked because the (v1.3)
    XSLOAD also let XA<15> and XA16 float high during load of the
    .hex memory image.  The XSOC 0.91 design, which ran out of
    logical address 0x0000, was actually running out of 'physical
    address' 0x18000.

    However, the user was (correctly) using the XSTOOLS for v1.4+
    to XSLOAD his v1.4+ board, and this version drives A15/A16 and so
    correctly uploads the .hex memory image to 'physical address' 0x00000.
    When the 0.91 configuration was loaded, it once again ran code at
    'physical address' 0x18000, which crashes unpredictably.

    The fix was to modify the XSOC.sch design to tie XA16 to ground,
    and modify the xsoc*.ucf files to apply pin LOCs (XA<15>=P28,
    XA16=P16) so as to properly drive the v1.4+ board's 128 KB SRAM
    address lines A15 and A16.

    As a bonus, this now provides an almost full 64 KB of RAM
    (0000-FEFF) on v1.4+ boards.  (Recall FFxx is the I/O control
    register space).

    Now that XA16=P16 is being driven, the new xsoc-*-14.bit MUST NOT
    be run on pre-v1.4 XS40 boards, because they also drive P16 with
    the output of the inverter U3C (see p.17 of XS40-manual-v1_3.pdf).
    Therefore there will be yet another set of UCF files that drive
    XA16=P? (v1.2, v1.3) or XA16=P16 (v1.4, v1.4+).  (On a v1.4
    (not +) board, it should be benign to drive XA<15>=P28 and
    XA16=P16 even though there these signals do not drive pins on
    the 32 KB SRAM).

    UCF File             Target
    --------             ------
    xsoc-05xl-13.ucf     XS40 v1.2 or v1.3,  4005XL
    xsoc-10xl-13.ucf     XS40 v1.2 or v1.3,  4010XL
    xsoc-05xl-14.ucf     XS40 v1.4 or v1.4+, 4005XL
    xsoc-10xl-14.ucf     XS40 v1.4 or v1.4+, 4010XL

    We also need new kinds of prebuild xsoc.bit files:
    Bitstream            Target
    --------             ------
    xsoc-05xl-12.bit     XS40 v1.2,  4005XL
    xsoc-10xl-12.bit     XS40 v1.2,  4010XL
    xsoc-05xl-13.bit     XS40 v1.3,  4005XL
    xsoc-10xl-13.bit     XS40 v1.3,  4010XL
    xsoc-05xl-14.bit     XS40 v1.4 or v1.4+, 4005XL
    xsoc-10xl-14.bit     XS40 v1.4 or v1.4+, 4010XL
Closed: 04/04/00 jan-@fpgacpu.org


Issue:  14 wish xsoc XSOC/xr16 refloorplanned for XC4010XL
Opened: 03/20/00 jan-@fpgacpu.org
    XSOC/xr16 is currently floorplanned for a 14x14 CLB XC4005XL.
    When built on a XC4010XL, it retains the same floorplan, with the
    result that the datapath is placed on rows 7-14.  In an '4010, it
    would be better if the datapath were placed on rows 13-20.
    There is no convenient way to do this using schematics, however.
    Hopefully we can do better with the Verilog version.


Issue:  15 defect lcc-xr16 some unsigned hex consts promoted to long
Opened: 03/31/00 jan-@fpgacpu.org
    Repro: lcc-xr16 -S 15.c (and review 15.s)
    Problem report:
        From: Jamie R. Chinn (jamiechi-@fultonscrossing.com)
        Sent: Friday, March 31, 2000 1:42 AM
        To: fpga-cpu@egroups.com
        Subject: [fpga-cpu] Constants in LCC-XR16 compiler
        A constant such as 0x8000 is by default treated as a four byte long.
        This creates lots of errors. (Such as zexl and leal not found.)
        To work around this, explicitly cast the constant to unsigned.
            (unsigned)0x8000   or    0x8000u
        Shouldn't the default be the two byte int or unsigned int? (I believe
        the int is defined as 16 bits for the XR16.)
    Indeed this is an error.  The type of 0x8000 should be unsigned int
    per C standard:
        Section 3.1.3.2. Integer Constants
        "The type of an integer constant is the first of the corresponding
        list in which its value can be represented: ... unsuffixed octal or
        hexadecimal: int, unsigned int, long int, unsigned long int ..."

    While 0x8000 (32768) is not representable as an int, it is representable
    as an unsigned int, but lcc mistakenly promotes it to long.

Resolv: 03/31/00 fixed 0.93 jan-@fpgacpu.org
    Problem lay in function icon in src/lex.c.  Quote:
        static Symbol icon(unsigned long n, int overflow, int base) {
            ...
            } else if (overflow || n > longtype->u.sym->u.limits.max.i)
                tval.type = unsignedlong;
            else if (n > inttype->u.sym->u.limits.max.i)
                tval.type = longtype;
            else if (base != 10 && n > inttype->u.sym->u.limits.max.i)
                tval.type = unsignedtype;
            else
                tval.type = inttype;
            ...
    Fix was to change this to

        static Symbol icon(unsigned long n, int overflow, int base) {
            ...
            } else if (overflow || n > longtype->u.sym->u.limits.max.i)
                tval.type = unsignedlong;

        #if 1 /* 00/03/31 jan-@fpgacpu.org XSOC issue #15 fix added */
            else if (base != 10 &&
                 n > inttype->u.sym->u.limits.max.i &&
                 n <= unsignedtype->u.sym->u.limits.max.i)
                tval.type = unsignedtype;
        #endif
            else if (n > inttype->u.sym->u.limits.max.i)
                tval.type = longtype;
        #if 0 /* 00/03/31 jan-@fpgacpu.org XSOC issue #15 fix deleted */
            else if (base != 10 && n > inttype->u.sym->u.limits.max.i)
                tval.type = unsignedtype;
           }
        #endif
            else
                tval.type = inttype;
            ...
Closed: 04/04/00 jan-@fpgacpu.org


Issue:  16 defect doc xspecs.pdf: b<cond> a,-32768 broken
Opened: 04/03/00 jan-@fpgacpu.org
    The instruction set specification uses comparisons with the negation
    of the b operand to describe the behavior of all b<cond>s.  Example:
        Format: blt label
        ...
        Operation: pre
                   if ((signed)a < (signed)-b)
                       pc += 2*sign_ext(disp8) + 2;
        ...
    The problem here is (signed)-b is undefined for b==-32768 (0x8000).


Issue:  17 defect xr16iss b<cond> a,-32768 broken
Opened: 04/03/00 jan-@fpgacpu.org
    The ISS works as documented in issue #16, which disagrees with the
    Verilog model.


Issue:  18 defect xr16asm cmpi reg,-32768 broken
Opened: 04/03/00 jan-@fpgacpu.org
    The xr16 assembler turns cmpi reg,imm into addi r0,reg,-imm.
    This is OK for cmpi/beq and cmpi/bne, but it doesn't work
    for cmpi/b<other> if imm==-32768, because -imm==32768 is not
    representable in 16-bit 2's complement.  It should use something like:

        cmpi reg,imm => addi r0,reg,-imm  if imm != -32768

                     => lea  r1,-32768    if imm == -32768
                        cmp  reg,r1
                     => imm  0x8000
                        addi r1,r0,0
                        and  r0,r0     ; nop
                        sub  r0,reg,r1 

Resolv: 04/03/00 fixed 0.93 jan-@fpgacpu.org
    Fixed as above.
Closed: 04/04/00 jan-@fpgacpu.org


Issue:  19 defect xr16asm cmpi reg,0 broken
Opened: 04/03/00 jan-@fpgacpu.org
    The xr16 assembler turns cmpi reg,0 into addi r0,reg,0.
    This doesn't set carry-out properly.  Contrast
        lea  r2,2  => addi r2,r0,2
        cmpi r2,1     addi r0,r2,-1  ; sets carry-out
        bltu label    bltu label     ; carry-out set, so branch cond is false
    with
        lea  r2,2  => addi r2,r0,2
        cmpi r2,0     addi r0,r2,0   ; clears carry-out
        bltu label    bltu label     ; carry-out clear, so cond is true, WRONG
    Here the addi of 0 fails to set carry-out, whereas if we generated
        lea  r2,2  => addi r2,r0,2
        cmpi r2,0     sub  r0,r2,r0  ; => add 0002 + ~0000 + 1, sets carry-out
        bltu label    bltu label     ; carry-out set, so cond is false, RIGHT
    So it's a little tricky, but the fix is to map
        cmpi reg,0 => sub r0,reg,r0
Resolv: 04/03/00 fixed 0.93 jan-@fpgacpu.org
    Fixed as above.
Closed: 04/04/00 jan-@fpgacpu.org


Issue:  20 defect xsoc problems building under Foundation 2.1i.
Opened: 04/03/00 jan-@fpgacpu.org
    Reported by jamiechi-@fultonscrossing.com (Jamie R. Chinn):
    "Version 2.1i doesn't like the three 'unbonded' outputs
    that were in the configuration file. I had to assign them to
    specific pins."
Resolv: 04/04/00 fixed 0.93 jan-@fpgacpu.org
    Fixed.  For the v1.2 and v1.3 boards, the UCF files
    xsoc-05xl-13.ucf and xsoc-05xl-14.ucf now constrain these
    unused outputs to device pins that drive 8031 I/Os:
        NET XA<0>   LOC = P7; # P1.0 (unused)
        NET XA<15>  LOC = P8; # P1.1 (unused)
        NET XA16    LOC = P9; # P1.2 (unused)
    For the v1.4 and v1.4+ boards, the UCF files
    xsoc-05xl-14.ucf and xsoc-10xl-14.ucf now constrain these
    unused outputs to device pins that drive 8031 I/Os:
        NET XA<0>   LOC = P7; # P1.0 (unused)
    This should eliminate all unbonded outputs, and hence the problem
    F2.1i has with them.

Copyright © 2000-2002, Gray Research LLC. All rights reserved.
Last updated: Feb 03 2001