Hirdetés

Aktív témák

  • t3rm1nat0r

    csendes tag

    Elsőre az ember azt gondolná, hogy a szorzás ennél sokkal bonyolultabb lesz.
    Nem.
    Szinte ugyan ez a program kell hozzá.
    Kissé kell csak módosítani a hardvert, és már szorozhatunk is.

    Az egyik fontos módosítás, hogy két 8 bites szám szorzata lehet 16 bites, amihez a regisztereket szélesíteni kell.

    Binárisan szorozni ugyan úgy kell, mint decimálisan.
    Legyen a feladat 12x15 = 180. Hogy megy ez papiron?

    12x10x1 = 120 +
    12x5 = 60

    Mindig eltoljuk balra a számot a helyiértéknek megfelelően. Ha két számjeggyel toljuk el, akkor ez a 100-as szorzásnak felel meg. Erről már írtam a forgatásoknál és az eltolásoknál. A kettes számrendszerben annyi a külömbség, hogy itt két helyiérték eltolás balra 4-el történő szorzásnak felel meg. Ez ugyan az, mint amikor egy szám után teszünk két nullát, és azt mondjuk, szoroztunk százzal.

    Valójában felbontottam a szorzást eltolásokra és összeadásokra. Pont erre van most is szüksék. Az összeadó már kész, már csak ezt az eltologatást kell beleheggeszteni.
    Az első négy sor végzi ezt az eltolást, az utolsó 5 a szorzást. Ennek csak annyi a dolga, hogy ha nullával kellene szorozni az adott tagot, akkor lenullázza, és úgy adja tovább a 2bites összeadónak. Ez az üresjárat nem lassít semmit, hiszen a pipeline végén így is minden ciklusban kapunk majd eredményt.

    int d=k-bit_offset;
    if(d>=0 && d<8) bitb0=parameter[1][d];
    d++;
    if(d>=0 && d<8) bitb1=parameter[1][d];

    if(parameter[0][bit_offset]==0) //0-val szoroz
    {
    bitb0=0;
    bitb1=0;
    }

    /Azért leírom, ez a módszer nem fog egy programot felgyorsítani, csak és kizárólag hardveres megoldásoknál gyors../

Aktív témák