Propeller boot up sequence
In an effort to better understand the inner workings of the Prop before I undertake trying to learn PASM, I have started reading the Propeller manual a bit more thoroughly. I have an interesting (to me anyhow) question about the boot up sequence of the prop. And as always, one question only leads to others... so heregoes....
I understand that after the prop cannot find a host connection to the computer it locates an EEPROM with some nifty program in it and loads the whole 32k into hub RAM, then dumps the command interpreter into COG 0. What I am trying to figure out is if since COG 0 is also running a command interpreter, does this mean that COG 0 has *slightly* less RAM available, and does *slightly* more work than the remaining 7 cogs? Plus, how does COG 0 interact with the other COGs to do the interpreting? Is this done through the HUB, or is there special-case circuitry to give COG 0 a bit more priority while assisting it's brethren?
I know the difference would not be very much at all, if any. But after reading how some of you speed freaks love to monkey with your code to get every last electron through the pipe as fast as possible, would it make sense to put your most time-sensitive code in COGs other than 0? It seems to me that I am either wrong, or this is kind of a klunky way of doing things, and the command interpreter would have been better off residing somewhere else in the chip.
I understand that after the prop cannot find a host connection to the computer it locates an EEPROM with some nifty program in it and loads the whole 32k into hub RAM, then dumps the command interpreter into COG 0. What I am trying to figure out is if since COG 0 is also running a command interpreter, does this mean that COG 0 has *slightly* less RAM available, and does *slightly* more work than the remaining 7 cogs? Plus, how does COG 0 interact with the other COGs to do the interpreting? Is this done through the HUB, or is there special-case circuitry to give COG 0 a bit more priority while assisting it's brethren?
I know the difference would not be very much at all, if any. But after reading how some of you speed freaks love to monkey with your code to get every last electron through the pipe as fast as possible, would it make sense to put your most time-sensitive code in COGs other than 0? It seems to me that I am either wrong, or this is kind of a klunky way of doing things, and the command interpreter would have been better off residing somewhere else in the chip.
Comments
After that which COGs run and when is entirely up to your program.
If your program starts another COG to run some Spin code then that COG is loaded with another copy of the interpreter which then runs the given Spin method.
Else you start some PASM code in a COG. No interpreter required.
At all times all COGs have equal access to HUB ram through the round robin cycle of the HUB access mechanism.
The only differences between the cogs is the length of the "wiring" on the surface of the chip from the cog's circuitry to the pin pad where the wire from the pin connects. There's a tiny little bit of crosstalk between adjacent cogs' I/O wiring and a small difference (maybe 1-2ns) in signal propagation time between cogs because of the gates between the cogs and the I/O connections (see the Prop functional diagram of the I/O connections). Neither of these make much difference except in some cases of analog to digital and digital to analog conversions where these differences can result in a little excess noise that varies depending on the cogs used. EFX-TEK's AP-16+ uses specific cogs for its audio outputs for this reason and stereo audio input should use non-adjacent cogs for the two channels to get the best results.
Hrm... never thought crosstalk in something like the Prop would ever be an issue, but I see where you are coming from. It would have to be a very special case. One would hope they got most, if not all of that taken care of in the designing of the die.
Thanks guys. as always, you are the best.
I have not run across the prop noise/crosstalk problem and I push the prop pretty hard including overclocking to 104MHz as standard and am trying 114.5MHz atm.