Кіріспе

Көп өзекті микробасқарушы Parallax P8X32A Propeller - сегіз 32 битті қысқартылған нұсқаулар жиынтығының компьютерлік (RISC) орталық өңдеу блогының (CPU) өзектері бар көп өзекті процессорлық қатарлы компьютерлік архитектурасы микробасқарушы чип. 2006 жылы таныстырылды, оны Parallax, Inc. компаниясы жобалап, сатады. Пропеллер микробасқарушысы, Пропеллер құрастыру тілі және Спин интерпретаторы Parallax-тың негізін қалаушы және президенті Чип Грейсимен жобаланған. Spin бағдарламалау тілі мен Propeller Tool интеграцияланған даму ортасын (IDE) Чип Грейси мен Parallax бағдарламалық жасақтамасының инженері Джефф Мартин жасаған. 2014 жылдың 6 тамызында Parallax Inc. барлық Propeller 1 P8X32A аппараттық және құралдарды GNU General Public License (GPL) 3.0 лицензиясы бойынша ашық бастапқы кодты аппараттық және бағдарламалық қамтамасыз ету ретінде шығарды. Бұған Verilog коды, жоғарғы деңгейдегі аппараттық сипаттама тілі (HDL) файлдары, Spin интерпретаторы, PropellerIDE және SimpleIDE бағдарламалау құралдары мен компиляторлары кірді.

Көп өзекті архитектура

Сегіз 32 битті өзектің әрқайсысында (тіркеме деп аталады) 512 32 биттік сөздер (2 КБ) нұсқаулар мен деректерге қол жеткізетін орталық өңдеу блогы (CPU) бар. Өзін-өзі өзгерту коды мүмкін және ішкі түрде қолданылады, мысалы, жүктеуші жүктемесі Spin Interpreter арқылы өз-өзіне ауысады. Spin-дегі (объектке негізделген жоғары деңгейдегі код) ішкі бағдарламалар қоңырауды қайтару механизмін қолданады, бұл қоңырау стегін пайдалануды талап етеді. Ассембле (PASM, төменгі деңгей) кодына қоңырау стегі қажет емес. Ортақ жадқа қол жеткізу (32 КБ кездейсоқ қолжетімділік жады (RAM); 32 КБ тек оқу жады (ROM)) дөңгелек робинді жоспарлау арқылы орталық деп аталатын ішкі компьютерлік автобус контроллері арқылы басқарылады. Әрбір тіректің екі арнайы аппараттық есептегіштері мен PAL, NTSC, VGA, сервомеханизмді басқару және басқалар үшін уақыт сигналдарын өндіруге арналған арнайы бейне генераторы бар.

Жылдамдық пен қуатты басқару

Пропеллер ішкі, чиптік осцилляторды (жалпы бөлшектер санын азайтады, бірақ белгілі бір дәлдігі мен жылу тұрақтылығын құрбан етеді) немесе сыртқы кристалл осцилляторды немесе керамикалық резонаторды (жоғары жалпы шығынмен жоғары дәлдігі бар жоғары жылдамдықты қамтамасыз етеді) пайдалана отырып, сағатталуы мүмкін. Тек сыртқы тербелісті 1x, 2x, 4x, 8x немесе 16x орнатылатын, чиптегі фазалық бұғатталған цикл (PLL) сағаттық мультипликаторы арқылы өткізуге болады. Борттағы осциллятордың жиілігі (егер қолданылса) және PLL көбейтушінің мәні жұмыс уақытында өзгертілуі мүмкін. Егер дұрыс қолданса, бұл қуат тиімділігін арттыра алады; мысалы, PLL көбейтушісін уақыт мақсаттары үшін ұзақ күту қажет болмай тұрып, кейіннен арттырып, процессордың энергиясын аз пайдалануына әкелуі мүмкін. Алайда, бұл техниканың пайдалылығы басқа бір тіректің уақытқа тәуелді кодты орындамауы (немесе өзгерістерге сай мұқият жасалған) жағдайларына ғана шектеледі, өйткені тиімді сағат жылдамдығы барлық тіректерге ортақ. Нақты такс жиілігі 32 кГц-тен 80 МГц-ке дейін (динамикалық басқару үшін нақты мәндері жоғарыда сипатталғандай, қолданылатын конфигурацияға байланысты). 80 МГц жылдамдықта жұмыс істегенде, меншік құқығына ие интерпретацияланған Spin бағдарламалау тілі әрбір өзекте секундына шамамен 80,000 нұсқаулық белгісін орындайды, бұл секундына 640,000 жоғары деңгейдегі нұсқаулық үшін 8 есе 80,000 береді. Машиналық тілдегі нұсқаулардың көпшілігі орындалуы үшін 4 сағат циклін алады, нәтижесінде секундына 20 миллион нұсқау (MIPS) немесе 8 тіректік винт үшін 160 MIPS. Электр қуатын пайдалануды сағат жылдамдығын қажетті деңгейге дейін төмендету арқылы, қажетсіз тіректерді (содан кейін аз энергияны пайдаланады) сөндіру арқылы және қажетсіз немесе қауіпсіз түрде жоғары импеданстық күйге (жағымсыз) орналастырылатын I / O тіректерді кіру ретінде қайта конфигурациялау арқылы азайтуға болады. Шеңберлер динамикалық түрде қайта конфигурациялануы мүмкін, бірақ бұл өзгеріс барлық тіректерге қатысты, сондықтан синхрондау белгілі бір дизайн үшін маңызды. Бір өзек шынаны шығыс ретінде, ал екіншісі кіріс ретінде пайдалануға тырысқан жағдайларда белгілі бір қорғаныс бар; бұл Parallax техникалық анықтамалық нұсқаулығында түсіндірілген.

Борттағы шеткі құрылғылар

Әрбір тірекке арнайы таймерлік аппараттық құрылғы және арнайы уақыт сигналын генератор қол жетімді, бұл бейне шығару сатыларын, мысалы, композиттік PAL немесе NTSC дисплейлерін (хабар тарату үшін модуляцияны қоса алғанда) және бейне графика массиві (VGA) мониторларын қарапайымдастыруға арналған. Осылайша Parallax видео сигналдарын (мәтін және аздап төмен резолюциялы графикалық) шығаратын үлгі кодты ұсынады. Бұл кодты шығаратын бөлшектер санының ең аз бөлігі Propeller, кристаллдық осциллятор және бірнеше резисторлар болып табылады. Осциллятордың жиілігі маңызды, өйткені видео уақытын анықтау аппараттарының түзету қабілеті сағат жылдамдығымен шектеледі. Бір видео сигналды шығару үшін бірнеше тікұшақты қатар қолдану мүмкін. Жалпы алғанда, уақыт аппараттық әр түрлі импульс ені модуляциясы (PWM) уақыт сигналдарын іске асыру үшін пайдаланылуы мүмкін.

Spin байт-код интерпретаторының құрамында

Spin - Parallax компаниясының Чип Грейси жасаған, сонымен қатар Propeller микробасқарушысын жасаған, Propeller микробасқарушыларының желісі үшін жұмыс істейтін көп тапсырмалы жоғары деңгейдегі компьютерлік бағдарламалау тілі. Спин коды Propeller Tool-те, Windows XP үшін жазылған GUI-ге бағдарланған бағдарламалық жасақтама әзірлеу платформасында жазылған. Бұл компилятор Spin кодын (осы құралмен) негізгі 32 КБ оперативті жадыға және, мүмкін болса, Propeller чипінің I2C жүктеудің электрлік өшірілетін бағдарламалық оқуға арналған жадыға (EEPROM) жүктеуге болатын байт-кодтарға айналдырады. Пропеллерді іске қосқаннан кейін байт-код интерпретаторы ROM-дан негізгі COG-ның 2 КБ оперативті жадысына көшіріледі. Бұл COG 32 КБ RAM-дағы байт кодтарын түсіндіруді бастайды. Байт-код интерпретаторының бірден көп көшірмесі басқа COG-да орындалуы мүмкін, сондықтан бірнеше спиндік кодтар бір мезгілде орындалуы мүмкін. Спин кодтық бағдарламаның ішінде құрастыру кодтық бағдарламаны (((s) желіде енгізуге болады. Бұл құрастырушы бағдарламалар өздерінің COG-да жұмыс істейді. Python сияқты, Spin блокты шектеу үшін қисық жақшалар немесе кілт сөздер емес, ендік бос орынды пайдаланады. Propeller-дің өзінің меншік құқығына ие көп желілі Spin компьютерлік тілі үшін интерпретаторы байт-код интерпретаторы болып табылады. Бұл интерпретатор пайдаланушы кодынан бір байтқа бір нұсқауды құрастыратын нұсқаулар тізбесін декодтайды, ол редакцияланған, құрастырылған және Propeller-ге арнайы мақсаттағы интеграцияланған даму ортасынан (IDE) жүктеледі. Бұл IDE, Parallax The Propeller құралын атайды, Microsoft Windows операциялық жүйесімен пайдалануға арналған. Спин тілі - жоғары деңгейдегі бағдарламалау тілі. Ол бағдарламалық жасақтамада түсіндірілетіндіктен, таза Propeller құрастырудан баяу жүреді, бірақ кеңістікті тиімді пайдалана алады: Propeller құрастыру опкодтарының ұзындығы 32 бит; Спин директивалары 8 бит ұзындығында, оған 8 бит байттан кейін сол директиваның қалай жұмыс істейтінін көрсету үшін. Спин сонымен қатар құрастыру коды үшін қарастырылуы тиіс елеулі жад сегментация мәселелерін болдырмауға мүмкіндік береді. Басталғанда байт-код интерпретаторының көшірмесі (өлшемі 2 КБ-дан кем) арнаулы оперативті жадыға көшіріледі, содан кейін негізгі 32 КБ оперативті жадыда байт-кодты интерпретациялауды бастайды. Осы жерден қосымша тіректерді іске қосуға болады, интерпретатордың жеке көшірмесін жаңа тіректің арнайы оперативті жадысына жүктейді (осылайша, барлығы сегіз интерпретатор желісі бір мезгілде жұмыс істей алады). Бұл, атап айтқанда, барлық Propeller қолданбалары үшін бастапқы кодтың ең аз мөлшерінде Spin коды болуы керек дегенді білдіреді.

Пакеті мен I/O

Чиптің бастапқы нұсқасы (P8X32A деп аталады) екі желідегі пакет (DIP), 44 пинті LQFP немесе Quad Flat No leads package (QFN) технологиясының пакеті бойынша 40 пинті 0,6 32 биттік портын қамтамасыз етеді. Қол жетімді 40 шынаның 32-сі I/O үшін, төртеуі қуат пен жер шыналары үшін, екеуі сыртқы кристаллға (егер пайдаланылса), біреуі электр тогының үзілуін және қоңырлауын анықтау үшін, ал біреуі қалпына келтіру үшін қолданылады. Барлық сегіз өзек 32 биттік портқа (айырылған "А"; қазіргі уақытта "Б" жоқ) бір мезгілде кіре алады. Егер бір өзек I/O пинін шығыс ретінде, ал екіншісі кіріс ретінде пайдалануға тырысса, I/O қақтығыстарын болдырмау үшін арнайы басқару механизмі қолданылады. Бұл тіректердің кез келгенін жоғарыда сипатталған уақыт немесе импульс енін модуляциялау шығыс техникасы үшін пайдалануға болады. Parallax компаниясы Propeller-дің кейінгі нұсқаларында I/O тіректері мен/немесе жады көбірек болады деп күтеді.

Виртуалды I/O құрылғылары

Пропеллердің дизайнерлері оны "виртуалды I/O құрылғылары" тұжырымдамасы бойынша жасаған. Мысалы, HYDRA Game Development Kit (хобистерге арналған, ретро стильдегі бейнеойындарды әзірлеуді үйрену үшін жасалған компьютерлік жүйе) бағдарламалық жасақтамада VGA түсті суреттерді, PAL / NTSC үйлесімді түсті суреттерді шығаратын виртуалды графикалық өңдеу блогы генераторын құру үшін құрастырылған кейіпкер генераторын және бейне қолдау логикасын қолданады. Мұнда көрсетілген экран түсірілімі компьютерге сериялық сілтеме арқылы пиксель деректерін жіберетін виртуалды дисплей драйверін қолдану арқылы жасалған. Бағдарламалық кітапханалар бірнеше I / O құрылғыларын іске асыруға арналған, қарапайым UART және SPI, I2C және PS / 2 үйлесімді сериялық тышқан және пернетақта интерфейстері, робот жүйелері үшін мотор драйверлері, MIDI интерфейстері және ЖКД контроллерлері сияқты сериялық I / O интерфейстерден басталады.

Тоқтатулардың орнына арнайы өзектер

Пропеллердің жобалау философиясы - нақты уақыттағы көп өзекті архитектура арнайы үзіліс аппараттары мен құрастырудағы қолдауды жоққа шығарады. Дәстүрлі CPU архитектурасында сыртқы үзіліс желілері чиптегі үзіліс контроллеріне беріледі және бір немесе бірнеше үзіліс қызмет көрсету ретімен қызмет көрсетіледі. Тоқтату пайда болған кезде, тоқтату контроллері қалыпты процессорды өңдеуді тоқтатады және ішкі күйді (әдетте стекте) сақтайды, содан кейін белгіленген тоқтату қызметіне векторлар. Тоқтатуды өңдегеннен кейін қызмет режімі ішкі күйді қалпына келтіретін және CPU өңдеуді қайталайтын тоқтам нұсқаулығынан қайта оралады. Пропеллердегі сыртқы сигналдарды дереу өңдеу үшін 32 I/O желілерінің кез келгені кіріс ретінде конфигурацияланады. Содан кейін тіректі әрбір тірекке қол жетімді екі есептегіш схеманың бірін пайдалана отырып, сол кіруде өтпе (жағымды немесе теріс жиек) күтуге конфигурациялайды. Сигналды күтіп тұрған кезде, тірек төмен қуат режимінде жұмыс істейді, негізінен ұйықтап жатыр. Бұл әдісті кеңейту арқылы пропеллер сегіз тәуелсіз үзіліс желілеріне жауап беру үшін, негізінен, нөлдік кідіріспен жауап беруге болады. Бір жолды үзіліске сигнал беру үшін қолдануға болады, содан кейін оқиғаның сипатын анықтау үшін қосымша кіріс жолдарын оқуға болады. Басқа өзектерде орындалатын кодты үзілісті басқару тіректері әсер етпейді. Дәстүрлі көп тапсырмалы бір процессорлы үзіліс архитектурасынан айырмашылығы, сигналдың жауап беру уақыты болжамды болып қалады, және, шын мәнінде, үзіліс терминін осы жағдайда қолдану шатастыруға әкелуі мүмкін, өйткені бұл функция нөлдік цикл уақытымен сауалнама ретінде дұрыс қарастырылуы мүмкін.

Жүктілік механизмі

Қозғалтқанда, Браунутты анықтағанда, бағдарламалық жасақтаманы қалпына келтіргенде немесе сыртқы аппаратты қалпына келтіргенде, Propeller ішкі ROM-дан машина кодты жүктеуді бірінші (негізгі) тіректің RAM-ға жүктейді және орындайды. Бұл код I2C интерфейсін бағдарламалық жасақтамада эмуляциялайды, уақытша екі I/O пернесі қажетті сериялық сағатты және дерек сигналдарын сыртқы I2C EEPROM-дан пайдаланушы кодын жүктеу үшін пайдаланады. Сонымен қатар, ол бағдарламалық жасақтаманы тікелей RAM-ға (және мүмкін сыртқы EEPROM-ға) жүктеуге болатын басқа екі I / O пернелерін пайдалана отырып, сериялық портты эмуляциялайды. Егер Propeller сериялық порттан командаларды көрмесе, ол пайдаланушы бағдарламасын (жоғарыда сипатталғандай, кіру коды Spin-те жазылуы керек) сериялық EEPROM-тен 32 КБ RAM-ға жүктейді. Содан кейін ол Spin интерпретаторын ROM-дан бірінші тізбегінің арнайы RAM-ға жүктейді, бұл жүктеушілердің көпшілігін басып тастайды. Пайдаланушы бағдарламасының қалай жүктелуіне қарамастан, орындалу бастапқы пайдаланушының байт-кодын интерпретациялаудан басталады, Spin интерпретаторы негізгі тіректе жұмыс істейді. Осы бастапқы Spin коды орындалғаннан кейін, қосымша жаңа желі бастау үшін және/немесе ассемблері бар бағдарламаларды бастау үшін пайдаланылмаған кез келген тіректі іске қоса алады.

Сыртқы тұрақты жады

Пропеллер сыртқы сериялық EEPROM-тен іске қосылады; жүктеу кезеңі аяқталғаннан кейін бұл құрылғыға сыртқы шеткі құрылғы ретінде кіруге болады.

Басқа тілдердегі іске асырулар

Spin және Propeller төменгі деңгейлі құрастырғышынан басқа, оған басқа да бірқатар тілдер портталды.

C компиляторы

Parallax Propeller GCC-ді қолдайды, ол Propeller (branch release 1 0) үшін C және C++ бағдарламалау тілдері үшін GNU Compiler Collection (GCC) компиляторының порты. C компиляторы мен C кітапханасы ANSI C стандартына сәйкес келеді. C++ компиляторы ANSI C99 стандартына сәйкес келеді. Толық C++ сыртқы жадымен қолдау табады. SimpleIDE бағдарламасы пайдаланушыларға makefiles қажет етпей бағдарлама жазудың қарапайым тәсілін ұсынады. 2013 жылы Parallax Propeller GCC және Simple Libraries бағдарламаларын Propeller C Learn оқулықтар сериясына енгізді. GCC винті белсенді түрде ұсталып тұр. Propeller GCC және SimpleIDE Parallax бағдарламалық өнімдері ресми қолдау табады. Пропеллер C компиляторы үшін ImageCraft ICCV7 пайдалану мерзімі аяқталды. Catalina деп аталатын ANSI C тегін компиляторы бар. Ол LCC-ге негізделген. Каталина белсенді түрде сақталады.

BASIC компиляторы

PropBASIC - Parallax Propeller Microcontroller үшін BASIC бағдарламалау тілі. PropBASIC үшін Parallax Propeller-пен әзірлеуге арналған құралдар жиынтығы бар платформааралық құралдар жиынтығы Brad's Spin Tool (BST) қажет. 2015 жылдың тамызынан бастап BST i386 linux gtk2, PowerPC darwin (Mac OS X 10.4 - 10.6), i386 darwin (Mac OS X 10.4 - 10.6) және i386 Win32 (Windows 95 - Windows 7) жүйелерінде жұмыс істейді.

Пропеллермен алға

Propeller үшін коммерциялық және ашық бастапқы кодты бағдарламалық жасақтама ретінде кем дегенде алты түрлі Forth нұсқасы бар.

PropForth (Жұмыс орны)

PropForth кеңінен дамыған және қоғамдастық қолдауын алатын тегін нұсқа. Ол тірек архитектурасына сай келеді және Форт тұжырымдамасына сәйкес сәулет ерекшелігіне қатысты кез-келген жалпы стандарттан ауытқыйды. Forth интерпретаторынан басқа PropForth чиптің мүмкіндіктерін пайдаланатын көптеген мүмкіндіктерді ұсынады. Байланысты I/O - бұл ағынды процеспен байланыстыратын әдісті білдіреді, бұл бір процеске келесіге жылдам, қолданбаға айқын түрде қосылуға мүмкіндік береді. Бұл көптеген жағдайларда аппараттық жөндеу немесе JTAG интерфейсін қажет етпейді. Көп арналы синхронды сериялық (MCS) - тіректер чиптері арасындағы синхронды сериялық байланыс. 96 биттік пакеттер екі тірек арасында үздіксіз жіберіледі, нәтижесінде қосымшалар қосымша ресурстарды (+6 тірек әр қосымша микросхема үшін) жақсы салынған қосымшаның өткізу қабілетіне әсері аз немесе мүлдем әсер етпейді. LogicAnalyzer - логикалық талдауды іске асыратын кеңейту пакеті. EEPROM файл жүйесі мен SD файл жүйесі EEPROM және SD флештерді пайдалана отырып, бастапқы сақтауды іске асыратын кеңейтулер болып табылады. PagedAssembler - бұл ассемблері рутиналарын тез арада ауыстырып (және үстінен жазу арқылы) қолдануға мүмкіндік беретін оптимизациялар топтамасы, бұл қолданбаның шамамен шексіз мөлшеріне мүмкіндік береді. Скрипт орындалуы кеңейтулерді жылдам жүктеуге мүмкіндік береді, бағдарламаның көзін сақтау құралының өлшеміне дейін.

Пропеллер мен Java

Propeller-де Java виртуалды машинасын (JVM) орындау үшін күш-жігер жұмсалуда. Компилятор, жөндеуші және эмулятор әзірленуде.

Паскаль компиляторы мен орындалу уақыты

Паскальдың үлкен кіші жиынтығы компилятор мен интерпретатор арқылы жүзеге асырылады, ол p код машинасының P4 жүйесіне негізделген.

Графикалық бағдарламалау

PICo бағдарламаланатын логикалық контроллері (PLC, PICoPLC) Propeller процессорына шығысты қолдайды. Бағдарлама GUI сатылы логикалық редакторда құрылады және алынған код Spin көзі ретінде шығарылады. PICoPLC сонымен қатар P8X32-ді симуляциялы орындау функциясымен қолдайды. Мақсатты аппараттық жабдыққа шектеулер жоқ, өйткені осциллятордың жиілігі мен IO тіректері саты редакторда еркін конфигурацияланады. PICoPLC әзірлеушісінің веб-сайты .

Болашақ нұсқалары

2014 жылдан бастап Parallax жаңа Propeller құрастырып жатыр, оның әрбір тікұшағы 200 миль/сағат жылдамдықпен жұмыс істейді, ал қазіргі Propeller тікұшағы 20 миль/сағат жылдамдықпен жұмыс істейді. Жағдайдың жақсаруы ең жоғары таксовая жылдамдықтың 200 МГц-ке дейін өсуінен (80 МГц-тен) және нұсқауларды құбыржолға салып, сағат циклына орташа есеппен бір нұсқауды орындаудан (шамамен он есеге дейін) туындайды.