Shop OBEX P1 Docs P2 Docs Learn Events
What remains to be done for the Prop 2? — Parallax Forums

What remains to be done for the Prop 2?

JRetSapDoogJRetSapDoog Posts: 954
edited 2014-02-24 23:35 in Propeller 2
What features/things remain to be implemented/done for the Prop 2? For example, SerDes is one. What are the others? Maybe a list would be helpful.

Legend: Finished, Planned, Very likely, Likely, Being Considered, Increasingly Unlikely, Unlikely, Rejected, Suggested

1. [P] SerDes to be used for general purpose serial handling, such as USB {Chip is committed to adding this}
2. [L] Non-hub flags accessible by all cogs without going through the hub {Chip asked to be reminded about this}
3. [L] More Prop 1 style locks than the 8 existing in the Prop 1 {likely still hub-based, as opposed to the non-hub-based flags in #2}
4. Hardware-based Random Number Generator from thermal noise {Chip mentioned this possibility a while back}
5. [V] Hub slot sharing mechanism to allow cogs to yield/accept other cogs' time slots
6. [V] Preemptive multitasking facilities {already possible in some form and may be extended, plus debugging features may be added}
7. [V] USB FS helper instructions including a CRC generator (maybe simple bit-at-a-time instructions)
8. Instant Decoding of a pair of bits in D, SETZC D/#, #0..31 {see Cluso99's post below}
...

BTW, the intent of this list is to compile features that are known to be forthcoming or have been seriously talked about, not simply a list of desired features, such as features that might appear in a Prop 3. If you're providing a feature, feel free to give a brief phrase describing it. Also, layout, synthesis or other tasks/steps can be included in the list. BTW, Ken has provided an informative schedule update for the P2.

Comments

  • ctwardellctwardell Posts: 1,716
    edited 2014-02-21 05:50
    I'm still hoping for some non-hub flags and an increase in locks:

    http://forums.parallax.com/showthread.php/125543-Propeller-II-update-BLOG?p=1236832&viewfull=1#post1236832

    C.W.
  • evanhevanh Posts: 16,031
    edited 2014-02-21 18:59
    I presume points 2 and 3 can be one and the same. It's just a question of how many bits in total.
  • Dave HeinDave Hein Posts: 6,347
    edited 2014-02-22 04:22
    I'm hoping for hub sharing, but I can live without out. The shuttle run in April isn't that far away. It seems like the design should be frozen soon so that there will be time to do the layout. It would also be good to get some FPGA test time on a stable design.
  • cgraceycgracey Posts: 14,206
    edited 2014-02-22 10:55
    Dave Hein wrote: »
    I'm hoping for hub sharing, but I can live without out. The shuttle run in April isn't that far away. It seems like the design should be frozen soon so that there will be time to do the layout. It would also be good to get some FPGA test time on a stable design.

    That's right. There are a lot of things that could stand some real-world testing before we commit to silicon.
  • JRetSapDoogJRetSapDoog Posts: 954
    edited 2014-02-22 17:09
    @evan: Maybe you mean, for example, at least 64 bits (2*32), with the user deciding how to use them.

    ctwardell mentions in the link he gave having both signaling flags and the locks, but perhaps they could use the same atomic mechanism:
    What I would like to have is a shared long providing 32 flags that can be set, cleared, and tested by non-hub instructions.
    I would also like to see the locks increased as I mentioned earlier, 32 would be nice.
    Having the same number of locks and flags would be useful in the use cases I have in mind, but isn't required.

    Chip commented, "I'll see what I can do. This is pretty simple, but if you don't hear anything from me, please remind me." C.W.'s suggestion seems like a clean and convenient way of helping cogs/tasks communicate/cooperate (in addition to the more general way), knitting them closer together. Of course, every little bit (pun intended) we add does take space and time.

    Edit: Actually, I don't know if the flags would be atomic, and implementing atomic access outside of the round-robin access of the hub is likely more difficult.
  • mindrobotsmindrobots Posts: 6,506
    edited 2014-02-22 17:51
    cgracey wrote: »
    That's right. There are a lot of things that could stand some real-world testing before we commit to silicon.

    Chip, I was curious if there were any areas you felt might need extra testing. Critical timing paths, parts you might be less confident about, combinations that could raise issues, etc. in some cases uninformed users are good testers as they experiment in other cases some focus helps.
  • JRetSapDoogJRetSapDoog Posts: 954
    edited 2014-02-22 17:54
    @Dave Hein: Are you referring to a mechanism to allow cogs to yield hub access slots (I'm assuming so, for now)? I read the P2 blogs regularly, but have honestly lost track of whether that's in the mix.

    Just now, looking back, I see that Heater made an executive decision to go with straight round-robin access and suggested freezing the design, the latter of which was predictably echoed by Ken. But seeing all the delicious changes happening, Ken seems to be getting more tolerant these days (last 2-4 months). It must be a real challenge in self-control, though.

    About hitting the April shuttle run deadline, I hate to say it, but it's looking more-and-more doubtful. That's worrisome, but there's so much good "polishing" going on (if not outright addition of power) that one is reluctant to say anything. Edit: Check out Ken's thorough schedule update!

    I think it's all very understandable; it's hard to rush a work of art, especially one that has really just started to gel over the last four months. As I see it, Chip fully intends to add things like SerDes, but he's finalizing the underlying infrastructure (which is more than just tweaking effort, I'd say), and he'll knock off those remaining areas when the time is right. Time sure does fly, though.
  • Dave HeinDave Hein Posts: 6,347
    edited 2014-02-22 19:17
    I think I should have said hub slot sharing. All cogs would have priority over their own hub slot, but if they weren't using it another cog could use it if the mode was enabled. In the case of multiple cogs requesting hub access I would suggest that they be serviced in first-in-first-out order. Multiple requests received in the same cycle could be assigned to the cog with the longest time since it last accessed the hub. Ties could go to the hub with the longest time till it's own hub slot. If a cog is in the hub request queue, and it's hub slot comes up, it will be serviced immediately and its request will be removed from the queue.

    It would be a shame if the April shuttle run is missed, but it may be better to plan on a later fab run. Hopefully, the P2 design will stabilize soon and a significant amount of testing can be done with FPGAs (and possibly a simulator) to find any issues before casting the P2 in silicon. It seems like Parallax may be planning on this possibility by working on an FPGA board that would come out about the same time that P2 is planned on being fabricated in the April shuttle run.
  • JRetSapDoogJRetSapDoog Posts: 954
    edited 2014-02-22 20:10
    Thanks for the clarification/summary/comments, Dave. Regarding April, I hope it's still the target, but things take time.
  • Ken GraceyKen Gracey Posts: 7,395
    edited 2014-02-24 14:28
    JretSapDoog,

    Nice summary. You know I pay careful attention to the forum activity though I don't comment all the time on P2 topics in fear of discouraging contribution. One small change I'd make to your list is that:

    6. [R] Preemptive multitasking facilitation {this appears to have gone down in flames and will likely be rejected}

    becomes more like an [L] as Chip explained to me that it's really not the effort we think it is, and that we already have preemptive multitasking in place, but could easily be done a larger number of programs. Chip can explain it in terms that make sense to engineers pretty soon. I assure everybody he's under a strict deadline to wrap up the design right now.

    Ken Gracey
  • ctwardellctwardell Posts: 1,716
    edited 2014-02-24 14:42
    2. [L] Non-hub flags accessible by all cogs without going through the hub {Chip asked to be reminded about this}
    3. [L] More Prop 1 style locks than the 8 existing in the Prop 1 {#2 & #3 could be combined, --per evanh}

    I'm not sure about 2 & 3 being combined.

    The current lock system is a hub operation and we need the flags to be non-hub operations so that flags can be set/tested without wasting a hub slot.

    C.W.
  • jmgjmg Posts: 15,175
    edited 2014-02-24 15:16
    ctwardell wrote: »
    The current lock system is a hub operation and we need the flags to be non-hub operations so that flags can be set/tested without wasting a hub slot.

    I thought virtual pins (not bonded to physical pins) allowed this, or is this in addition to virtual/buried pins ?
  • ctwardellctwardell Posts: 1,716
    edited 2014-02-24 15:22
    jmg wrote: »
    I thought virtual pins (not bonded to physical pins) allowed this, or is this in addition to virtual/buried pins ?

    The flags would be separate from Port D.

    Port D has a good number of uses that may preclude having it available for flags.

    C.W.
  • Cluso99Cluso99 Posts: 18,069
    edited 2014-02-24 15:47
    Here is a link to a summary list I did some time ago. Some of these have been completed.
    http://forums.parallax.com/showthread.php/125543-Propeller-II-update-BLOG?p=1224661&viewfull=1#post1224661
    (Note I have removed those completed items from the quote below)
    Cluso99 wrote: »
    Chip,
    At the risk of getting shot by others here on the forum, here are the instruction fixes and adds that have been proposed and that you were interested in.
    While I scoured the recent forums, apologies to anything I missed.
    At least this puts it in one place for you. It's up to you to do with this what you like.

    BTW I have left the SERDES out of this.
    =======================================================================================================
    Reason: Add new pin-pair instruction for use with USB bit-banging receive (similar to GETP/GETNP)
            The S value (sub-instruction bits) "yyyyyyyy" would use the next available slot after CACHEX
    Thread: [URL]http://forums.parallax.com/showthread.php/151904-Here-is-the-update-from-the-Big-Change!!!?p=1222515&viewfull=1#post1222515[/URL]
    1111111 ZC L CCCC DDDDDDDDD xyyyyyyyy       GETXP   [#]D [WZ],[WC]  ' set flags for the pin-pair for usb bit-banging  
                                                                        '   D = PINx (0..127), PINy := PINx XOR $1 (it's complementary pin-pair)
                                                                        '   C = C XOR PINx via WC
                                                                        '   Z = !(PINx OR PINy) via WZ (ie ZERO if both PINx and PINy are both ZERO == SE0 in USB)
    PINx and PINy are a pair of pins. If PINx is even then PINy := PINx + 1 else if PINx is odd then PINy := PINx - 1
    The allowance for the PINx/PINy pair to be reversed is for USB LS & HS where J/K are effectively swapped between D-/D+.
    WZ & WC would normally be used.
    =======================================================================================================
    Reason: Add new instruction(s) for calculating/accumulating CRC for 1-bit using the Polynomial set in "ACCA"
            The S value (sub-instruction bits) "yyyyyyyy" would use the next available slot after CACHEX
            
    Thread: [URL]http://forums.parallax.com/showthread.php/151992-CRC-generation?p=1222728&viewfull=1#post1222728[/URL]
    1111111 xx x CCCC DDDDDDDDD xyyyyyyyy       CRCBIT  D   ' accumulate CRC
                                                            '   C    = current data bit (to be accumulated)
                                                            '   D    = CRC Register
                                                            '   ACCA = polynomial
    The CRCBIT instruction performs the following...
    (1) X := C XOR D[0]
    (2) D := D >> 1
    (3) if X == 1 then D := D XOR ACCA
    Alternately, a special register to hold the polynomial "POLY" could be used, requiring the instruction(s)
    1111111 x0 x xxxx DDDDDDDDD xyyyyyyyy       CRCBIT  D   ' accumulate CRC
    1111111 x1 x xxxx DDDDDDDDD xyyyyyyyy       SETPOLY D   ' set the polynomial to be used in 
    =======================================================================================================
    Reason: Add new pin-pair variants for use with complementary/differential I/O 2 wire protocols
    Thread: [URL]http://forums.parallax.com/showthread.php/151904-Here-is-the-update-from-the-Big-Change!!!?p=1222689&viewfull=1#post1222689[/URL]
    
    For reference only...
    ZCL-            1111111 ZC L CCCC DDDDDDDDD x00111000           SETZC   D/#             (D[1:0] into Z/C via WZ/WC)
                                                                presume this really means...(D[1:0] into !Z/C via WZ/WC)
    Currently
    ZCL-            1111111 ZC L CCCC DDDDDDDDD x00110000           GETP    D/#             (pin into !Z/C via WZ/WC)
    ZCL-            1111111 ZC L CCCC DDDDDDDDD x00110001           GETNP   D/#             (pin into Z/!C via WZ/WC)
    --L-            1111111 xx L CCCC DDDDDDDDD x10011000           OFFP    D/#
    --L-            1111111 xx L CCCC DDDDDDDDD x10011001           NOTP    D/#
    --L-            1111111 xx L CCCC DDDDDDDDD x10011010           CLRP    D/#
    --L-            1111111 xx L CCCC DDDDDDDDD x10011011           SETP    D/#
    --L-            1111111 xx L CCCC DDDDDDDDD x10011100           SETPC   D/#
    --L-            1111111 xx L CCCC DDDDDDDDD x10011101           SETPNC  D/#
    --L-            1111111 xx L CCCC DDDDDDDDD x10011110           SETPZ   D/#
    --L-            1111111 xx L CCCC DDDDDDDDD x10011111           SETPNZ  D/#
    Replace with...
    ZCL-            1111111 00 L CCCC DDDDDDDDD x00110000           GETPP   D/#     (pin-pair PINy:PINx into !Z/C)
    ZCL-            1111111 ZC L CCCC DDDDDDDDD x00110000           GETP    D/#             (pin into !Z/C via WZ/WC)
    ZCL-            1111111 00 L CCCC DDDDDDDDD x00110001           GETNPP  D/#     (pin-pair PINy:PINx into Z/!C)
    ZCL-            1111111 ZC L CCCC DDDDDDDDD x00110001           GETNP   D/#             (pin into Z/!C via WZ/WC)
    These could share opcodes???
    --L-            1111111 00 L CCCC DDDDDDDDD x10011000           OFFP    D/#             (pin#=0???  , dir#=0)
    --L-            1111111 01 L CCCC DDDDDDDDD x10011000           NOTP    D/#             (pin#=!pin# , dir#=1)
    --L-            1111111 10 L CCCC DDDDDDDDD x10011000           CLRP    D/#             (pin#=0     , dir#=1)
    --L-            1111111 11 L CCCC DDDDDDDDD x10011000           SETP    D/#             (pin#=1     , dir#=1)
    These could share opcodes???
    --L-            1111111 00 L CCCC DDDDDDDDD x10011001           SETPC   D/#             (pin#=C     , dir#=1)
    --L-            1111111 01 L CCCC DDDDDDDDD x10011001           SETPNC  D/#             (pin#=!C    , dir#=1)
    --L-            1111111 10 L CCCC DDDDDDDDD x10011001           SETPZ   D/#             (pin#=Z     , dir#=1)
    --L-            1111111 11 L CCCC DDDDDDDDD x10011001           SETPNZ  D/#             (pin#=!Z    , dir#=1)
    New pin-pair instructions...(could use x10011010-x10011111 if freed above, or use new sub-opcodes avail following CACHEX)
    --L-            1111111 00 L CCCC DDDDDDDDD x10011010           OFFPP   D/#     (pin-pair PINy:PINx=00???       , dir#=00)
    --L-            1111111 01 L CCCC DDDDDDDDD x10011010           NOTPP   D/#     (pin-pair PINy:PINx=!PINy:!PINx), dir#=11)
    --L-            1111111 10 L CCCC DDDDDDDDD x10011010           CLRPP   D/#     (pin-pair PINy:PINx=00          , dir#=11)
    --L-            1111111 11 L CCCC DDDDDDDDD x10011010           SETPP   D/#     (pin-pair PINy:PINx=11          , dir#=11)
    --L-            1111111 00 L CCCC DDDDDDDDD x10011011           SETPPLH D/#     (pin-pair PINy:PINx=01          , dir#=11)
    --L-            1111111 01 L CCCC DDDDDDDDD x10011011           SETPPHL D/#     (pin-pair PINy:PINx=10          , dir#=11)
                                                                      Note: SETPPHL could be achievd by using SETPPLH PINy
    I don't really see the need for these 2, but put it here in case you think it desirable...
    --L-            1111111 10 L CCCC DDDDDDDDD x10011011           SETPPZC D/#     (pin-pair PINy:PINx=!Z/C        , dir#=1)
    --L-            1111111 11 L CCCC DDDDDDDDD x10011011           SETPPNF D/#     (pin-pair PINy:PINx=Z/!C        , dir#=1)
    D/# specifies PINx (0..127). PINy := PINx XOR #1 (ie it's twin pin-pair)
     (ie PINx and PINy are a pair of pins. If PINx is even then PINy := PINx + 1 else if PINx is odd then PINy := PINx - 1)
    =======================================================================================================
    
    So we need to add

    7. [V] USB FS helper instructions including a CRC generator (maybe simple bit at a time instruction)

    At one time I suggested the following (but I think it went MIA)
    http://forums.parallax.com/showthread.php/125543-Propeller-II-update-BLOG?p=1229521&viewfull=1#post1229521
    Cluso99 wrote: »
    Chip has generally asked about extra instructions because there is silicon space. Here is one group that I regularly use..

    SETZC D/# [WZ],[WC]

    It currently exists and sets the Z & C flags via WZ & WC according to D[1:0]

    What would be nice is to extend this instruction to...

    SETZC D/#,#0..31 [WZ],[WC]

    where it first rotates right (NR) #0:31, then sets the Z & C flags via WZ & WC according to the resulting D[1:0]; The result D is not written.
    This also allows for the case where the bits are in b0 & b31 which would use ror of #31
    Obviously a rotate of #0 is the default and acts like the original instruction.

    This permits the instant decoding of a pair of bits anywhere in D. I often use SHR with NR to decode 2 bits but we no longer have the NR option.
  • JRetSapDoogJRetSapDoog Posts: 954
    edited 2014-02-24 23:35
    @Ken: Thanks for the information. Actually, I had already removed the "flames" comment prior to seeing your post. But, now, I see that you're saying PM is more possible than it seemed (or seemed advisable under the time gun). While my first thought after reading your post was to give PM a positive-sounding for "Being Considered" or creating a new category for partially implemented features, I've deferred to your [V] classification (as I hear you often rub elbows with the "cook"). Also, thanks for providing the excellent schedule projections. It seems like you've taken a middle course between wishful thinking and being overly conservative, which I like (as it will motivate all to stay on track without discouraging them with an impossible deadline).

    @ctwardall: Thanks. I revised the wording. And, yes, it seems that we should assume that Port D will be kept busy in many designs.

    @Cluso99: Thanks. I added your addition for the USB FS helper instructions, as well as your suggestion for the decoding instruction for D.
Sign In or Register to comment.