Shop OBEX P1 Docs P2 Docs Learn Events
Does The Propeller Chip Have Built-In DRAM ? — Parallax Forums

Does The Propeller Chip Have Built-In DRAM ?

I would like to know if the built-in RAM on the propeller chip is DRAM ?

If yes, I could implement a True Random Numbers Generator:
http://ieeexplore.ieee.org/document/4733087/

Also, is it possible to have more than one cog simultaneously access the input-output pins ?

Comments

  • The built-in RAM is static RAM.

    Yes, it is possible to have more than one cog access the I/O pins. You have to synchronize one or more cogs to the same system counter value, then maintain the time to the I/O access as your code executes. This is straightforward since most instructions take 4 clock cycles. You can repeatably use WAITCNT to resynchronize with specific system clock values or WAITPNE/WAITPEQ to synchronize with I/O pin transitions.
  • If yes, I could implement a True Random Numbers Generator:
    Chip has already implemented a true RNG on the Prop:

    http://obex.parallax.com/object/498

    -Phil
  • Clock LoopClock Loop Posts: 2,069
    edited 2017-10-31 10:16
    An EXCELLENT object.


    bit salad tossing

    Everyone loves to toss bit salad every now and then.

    And when you do, you keep chaos at bay by using a bit of the universe's chaos balance on meaningless computer chaos.
    {{
    ┌───────────────────────────────────────────┬────────────────┬───────────────────────────────────┬───────────────┐
    │ Real Random v1.2                          │ by Chip Gracey │ Copyright (c) 2007 Parallax, Inc. │ 23 March 2007 │
    ├───────────────────────────────────────────┴────────────────┴───────────────────────────────────┴───────────────┤
    │                                                                                                                │
    │ This object generates real random numbers by stimulating and tracking CTR PLL jitter. It requires one cog and  │
    │ at least 20MHz.                                                                                                │
    │                                                                                                                │
    ├────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
    │ Background and Detail:                                                                                         │
    │                                                                                                                │
    │ A real random number is impossible to generate within a closed digital system. This is because there are no    │
    │ reliably-random states within such a system at power-up, and after power-up, it behaves deterministically.     │
    │ Random values can only be 'earned' by measuring something outside of the digital system.                       │                                                                                     
    │                                                                                                                │
    │ In your programming, you might have used 'var?' to generate a pseudo-random sequence, but found the same       │
    │ pattern playing every time you ran your program. You might have then used 'cnt' to 'randomly' seed the 'var'.  │
    │ As long as you kept downloading to RAM, you saw consistently 'random' results. At some point, you probably     │
    │ downloaded to EEPROM to set your project free. But what happened nearly every time you powered it up? You were │
    │ probably dismayed to discover the same sequence playing each time! The problem was that 'cnt' was always       │
    │ powering-up with the same initial value and you were then sampling it at a constant offset. This can make you  │
    │ wonder, "Where's the end to this madness? And will I ever find true randomness?".                              │                                                              
    │                                                                                                                │
    │ In order to have real random numbers, either some external random signal must be input, or some analog system  │
    │ must be used to generate random noise which can be measured. We're in luck here, because it turns out that the │
    │ Propeller does have sufficiently-analog subsystems which can be exploited for this purpose -- each cog's CTR   │
    │ PLLs. These can be exercised internally to good effect, without any I/O activity.                              │                                                                   
    │                                                                                                                │
    │ This object sets up a cog's CTRA PLL to run at the main clock's frequency. It then uses a pseudo-random        │
    │ sequencer to modulate the PLL's target phase. The PLL responds by speeding up and slowing down in a an endless │
    │ effort to lock. This results in very unpredictable frequency jitter which is fed back into the sequencer to    │
    │ keep the bit salad tossing. The final output is a truly-random 32-bit unbiased value that is fully updated     │
    │ every ~100us, with new bits rotated in every ~3us. This value can be sampled by your application whenever a    │ 
    │ random number is needed.                                                                                       │
    │                                                                                                                │
    ├────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
    │ Revision History                                                                   v1.0 released 21 March 2007 │
    │                                                                                                                │ 
    │ v1.1  Bias removal has been added to ensure true randomness. Released 22 March 2007.                           │
    │ v1.2  Assembly code made more efficient. Documentation improved. Released 23 March 2007.                       │
    │                                                                                                                │
    └────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
    
    }}
    
Sign In or Register to comment.