A MaverickCrunch egy lebegőpontos matematikai társprocesszor mag, amelyet digitális audiorendszerekben való felhasználásra terveztek. A Cirrus Logic mutatta be 2000 júniusában egy ARM920T fixpontos processzorral együtt, a -es órajelű EP9302, EP9307, EP9312 és EP9315 egylapkás rendszerű integrált áramköreiben. Mivel az egységet számos hardverhiba sújtotta és fordítóprogram-támogatása is igen gyenge volt, a koprocesszort ritkán használták az EP93xx csipeken alapuló eszközökben, és a termékvonalat végül 2008. április 1-én megszüntették.

Jellemzői A társprocesszor lebegőpontos formátuma az IEEE 754 szabványnak felel meg, egészeket és egyszeres és kétszeres pontosságú lebegőpontos számokat kezel. 16 64 bites regisztere (c0–c15), négy 72 bites akkumulátorregisztere (a0–a3) és egy állapot- és vezérlőregisztere (DSPSC) van. A 64 bites regiszterek a 32- vagy 64 bites fixpontos (egész) és lebegőpontos műveletekhez használhatóak, ezeken belül a konverziókhoz is, a 72 bites akkumulátorregiszterek a 32 bites szorzó-akkumuláló utasításokhoz használhatóak. Minden művelete beállítja az állapotregiszter megfelelő bitjeit. Az állapotregiszter beállításai vezérlik a számítási módokat, amelyek szerint műveleteit végezheti előjel nélküli vagy előjeles üzemmódban, és van szaturációs (telítő) módja is, amelyben nem lép fel túl- vagy alulcsordulás.

Saját utasításkészlettel rendelkezik, amelyben megtalálható a lebegőpontos összeadás, kivonás, szorzás, tagadás/negáció, abszolút érték számítás és összehasonlítások, valamint integereken végzett összeadás, szorzás és biteltolás (léptetés) műveletek. Vannak konverziós utasításai, amelyek egész és lebegőpontos értékek közötti átváltásokat végeznek, ezen felül vannak adatmozgató utasításai a társprocesszor és az ARM regiszterek vagy a memória közötti adatmozgatáshoz. A szorzás-összeadás művelet mellett van szorzás-kivonás művelete is. A szorzó-akkumuláló utasítása gyorsabb, mint a társított ARM920T natív MAC utasítása.

A MaverickCrunch egy valódi ARM920T társprocesszor. A társprocesszorsínen keresztül kommunikál az ARM920T főprocesszorral, és osztozik annak utasításfolyamán és memóriainterfészén. Az ARM920T mag órajelének frekvenciáján fut (FCLK vagy BCLK).

Párhuzamosan működik a fő processzorral, mindkét processzor egyetlen 32 bites utasításfolyamból kapja az utasításait. A hatékony használathoz az egész és lebegőpontos utasításoknak felváltva (átlapolva) kell szerepelniük az utasításfolyamban, hogy a végrehajtás mindkét processzort lefoglalja.

A társprocesszornak két elsődleges futószalagja van. Az egyik kezeli az ARM920T főprocesszorral folytatott kommunikációt, míg a másik, az „adatút” futószalag kezeli az összes aritmetikai műveletet – ez a futószalag a MaverickCrunch koprocesszor órajeleinek felével működik.

Az adatút-futószalag futhat szinkron vagy aszinkron módon az ARM utasítás­futószalaghoz képest. Aszinkron futás esetén az adatút a a főprocesszortól teljesen független, nagy áteresztőképességet tesz lehetővé, bár az aritmetikai kivételek nem szinkron módon lépnek fel. Ha szinkronban fut, a kivételek is szinkronban vannak, viszont ekkor az áteresztőképesség csökken.

Amennyiben nincsenek futószalag­elakadásokat okozó utasításközi függőségek, az aritmetikai utasítások két ARM920T órajelenként tudnak új eredményt produkálni, ezáltal a maximális áteresztőképesség egy adatútvonal-utasítás nyolc ARM920T órajelenként. Ez alól kivétel a 64 bites szorzóutasítások (CFMULD vagy CFMUL64), amelyek hat további ARM920T órajelet igényelnek az eredmény előállításához, így ezek maximális áteresztőképessége utasításonként nyolc ARM920T órajel.

Egy aritmetikai utasítás normál késleltetése körülbelül kilenc ARM920T órajel, a kezdeti dekódolásától az eredménynek a regiszterfájlba írásáig. Egy 64 bites szorzás 15 órajelet igényel.

Hardverhibák Az EP93xx csipeknek öt változata jelent meg: „D0” és "„D1”, „E0”, „E1” és "„E2” jelűek, nagyobb revízióval a MaverickCrunch magban a D0 és D1 verziók között, a legsúlyosabb hibák javítása érdekében. Mindegyikben legalább egy tucat hardverhiba van, amelyek pontatlan vagy értelmezhetetlen eredményeket adnak, vagy összezavarják a regisztereket és a memóriát, néhány utasítássorozat megfelelő sorrendben történő végrehajtása esetén.

Fordítóprogram-támogatás A Red Hat/Cygnus Solutions 2003-ban benyújtott egy sorozat javítást (patch) a GNU Compiler Collectionbe, amelyben egy kódgenerátort is kialakítottak a hibák megkerülésére és ezeket jelzőbitekkel ellátva. Ezek azonban nem működtek elég jól a társprocesszor használható módon történő programozásához. A GCC 4.8-ból 2012. szeptemberében eltávolították ezt a javítást.

Több próbálkozás is történt a csomag további javítására: Cirrus Logic Crunch tools,Crunch tools ami a bolgár Nucleusys által módosított GNU eszközök újracsomagolt változata (feltételezhető, hogy az eredeti javítást is ők készítették) A futaris javításaifutaris patches, binutils, gcc, glibc a gcc 4.1.2 és 4.2.0 verziókhoz, az OpenEmbedded keretrendszerhez csomagolva Martin Guy gcc-crunch javításai és natív fordítói,gcc-crunch patches and native compilers a futaris patchek továbbfejlesztése, ami megbízható kódot generál és minden tesztkészletben megfelelő eredményt produkál

Jegyzetek

Fordítás

Források

További információk Az EP9307 Users Guide Chapter 2 fejezete Optimizing Code Speed for the MaverickCrunch Coprocessor (Kódsebesség optimalizálása a MaverickCrunch koprocesszorhoz) Re: Building toolchain with Cirrus Logic MaverickCrunch support, cygwin levelezőlista, 2005 – problémák a csip működésével kapcsolatban Cirrus Logic hibajegyzék az EP93XX csipekhez – részletesen leírja a problémás funkciókat, a hardverhibákat és a GCC támogatás állapotát A GCC javított verziói, amelyek képesek megbízható MaverickCrunch kódot generálni MaverickCrunch gyorsítással újrafordított Debian csomagok Kapcsolódó szócikkek ARM9TDMI

Kategória:Digitális jelprocesszorok Kategória:Mikroprocesszorok