Hirdetés

Aktív témák

  • t3rm1nat0r

    csendes tag

    Egy vektorprocesszoros összeadó már bonyolultabb. Azért annyira nem, hiszen 1 nap alatt összehozható.

    void define_dflip2(int t,int l1,int l2)
    {
    int tr[]={
    t+0, t+1, t+2, t+3, t+4,
    t+sor+0, t+sor+1, t+sor+2, t+sor+3, t+sor+4,0};//5-9


    define_links(tr[0],link_5V,l1,0); //inverter
    define_links(tr[5],link_5V,l2,1);

    define_links(tr[1],l1,l2,0); define_links(tr[2],tr[7],tr[1],1);
    define_links(tr[6],l1,tr[5],1); define_links(tr[7],tr[2],tr[6],0);

    define_links(tr[3],tr[0],tr[2],1); define_links(tr[4],tr[9],tr[3],0);
    define_links(tr[8],tr[0],tr[7],1); define_links(tr[9],tr[4],tr[8],1);

    }
    void nand_gates()
    {
    int i,j,x,y;






    for(j=0;j<sor*sor;j++)
    {
    nand[j].in1=1;
    nand[j].in2=1;

    nand[j].link[0]=link_none;
    nand[j].link[1]=link_none;
    #ifdef random_nand
    nand[j].link[0]=j + (rand()%4) + (rand()%4)*sor;
    nand[j].link[1]=j + (rand()%4) + (rand()%4)*sor;
    #endif
    }

    nand[0].out=1;
    nand[sor].out=0;
    define_links(1,0,link_5V,0);//inv







    //counter
    int counter_bazis=2,dflip_out_offset=4;
    int tr=counter_bazis;
    define_dflip(tr,0); tr+=ketsor;
    define_dflip(tr,tr +dflip_out_offset-ketsor); tr+=ketsor;
    define_dflip(tr,tr +dflip_out_offset-ketsor); tr+=ketsor;
    define_dflip(tr,tr +dflip_out_offset-ketsor); tr+=ketsor;
    define_dflip(tr,tr +dflip_out_offset-ketsor); tr+=ketsor;
    define_dflip(tr,tr +dflip_out_offset-ketsor); tr+=ketsor;
    define_dflip(tr,tr +dflip_out_offset-ketsor); tr+=ketsor;
    define_dflip(tr,tr +dflip_out_offset-ketsor); tr+=ketsor;





    //adder
    int adder_bazis=8,adder_out_offset=34;
    int tr1=adder_bazis,
    tr_out1=counter_bazis +dflip_out_offset,
    tr_out_carry=link_0V;


    int u=7,tr_adder=0,tr2,
    adder_parm[]={link_0V,link_0V,link_0V,link_0V,link_5V,link_0V,link_5V,link_0V};//0001010=10




    tr2=tr1;

    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*0, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;
    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*1, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;

    define_dflip2(tr2, 0,tr1 +adder_out_offset ); tr2+=ketsor;
    define_dflip2(tr2, 0,tr1 +adder_out_offset +ketsor); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*2); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*3); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*4); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*5); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*6); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*7); tr2+=ketsor;

    define_dflip2(tr2, 0,tr_out_carry ); tr_out_carry=tr2 +dflip_out_offset;



    tr_out1=tr1 +dflip_out_offset +ketsor*2;
    tr1+=6;
    tr2=tr1;

    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*2, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;
    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*3, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;

    define_dflip2(tr2, 0,tr_out1 +ketsor*0); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*1); tr2+=ketsor;
    define_dflip2(tr2, 0,tr1 +adder_out_offset ); tr2+=ketsor;
    define_dflip2(tr2, 0,tr1 +adder_out_offset +ketsor); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*4); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*5); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*6); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*7); tr2+=ketsor;

    define_dflip2(tr2, 0,tr_out_carry ); tr_out_carry=tr2 +dflip_out_offset;



    tr_out1=tr1 +dflip_out_offset +ketsor*2;
    tr1+=6;
    tr2=tr1;

    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*4, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;
    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*5, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;

    define_dflip2(tr2, 0,tr_out1 +ketsor*0); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*1); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*2); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*3); tr2+=ketsor;
    define_dflip2(tr2, 0,tr1 +adder_out_offset ); tr2+=ketsor;
    define_dflip2(tr2, 0,tr1 +adder_out_offset +ketsor); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*6); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*7); tr2+=ketsor;

    define_dflip2(tr2, 0,tr_out_carry ); tr_out_carry=tr2 +dflip_out_offset;



    tr_out1=tr1 +dflip_out_offset +ketsor*2 ;
    tr1+=6;
    tr2=tr1;

    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*6, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;
    define_adder(tr2, adder_parm[u--], tr_out1 +ketsor*7, tr_out_carry); tr_out_carry=tr2 +adder_out_offset+1;tr2+=ketsor;

    define_dflip2(tr2, 0,tr_out1 +ketsor*0); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*1); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*2); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*3); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*4); tr2+=ketsor;
    define_dflip2(tr2, 0,tr_out1 +ketsor*5); tr2+=ketsor;
    define_dflip2(tr2, 0,tr1 +adder_out_offset ); tr2+=ketsor;
    define_dflip2(tr2, 0,tr1 +adder_out_offset +ketsor); tr2+=ketsor;

    define_dflip2(tr2, 0,tr_out_carry ); tr_out_carry=tr2 +dflip_out_offset;







    while(1)
    {
    //printf("%d.. %d %d \n",k,nand[0].out,nand[sor].out);



    draw_layer();

    for(i=0;i<100;i++)
    {
    //draw_layer();//ido kell mig minden beall, kirajzolhato a koztes allapot

    for(j=0;j<sor*sor;j++)
    if((j%sor))//elso sor nem kell
    {
    int link1=nand[j].link[0];
    int link2=nand[j].link[1];

    if(link1==link_5V) nand[j].in1=1;//fix input
    if(link2==link_5V) nand[j].in2=1;
    if(link1==link_0V) nand[j].in1=0;
    if(link2==link_0V) nand[j].in2=0;

    if(link1>=0) nand[j].in1=nand[link1].out;//out -> in1,2
    if(link2>=0) nand[j].in2=nand[link2].out;
    }
    for(j=0;j<sor*sor;j++)
    if((j%sor))//elso sor nem kell
    {
    nand[j].out=!(nand[j].in1 & nand[j].in2);//NAND muvelet
    }

    }



    int mask=0x80,bits=0;
    for(y=0;y<16;y+=2)
    {
    // for(x=0;x<6;x++) printf("%d ",nand[x+sor*y].out);

    int gate=nand[counter_bazis + dflip_out_offset + sor*(14-y)].out;//counter kimenet
    if(gate) bits+=mask;
    mask>>=1;

    printf("%d",gate);
    }
    printf(" = %d \n",bits);


    for(x=0;x<4;x++)
    {
    int bazis=adder_bazis+ dflip_out_offset +x*6 +ketsor*2,e;
    bits=0;mask=0x80;

    for(y=0;y<8;y++)
    {
    int gate=nand[bazis + (7-y)*ketsor ].out;
    if(gate) bits+=mask;
    mask>>=1;
    printf("%d",gate);
    }
    printf(" = %d \n",bits);
    }





    nand[0].out^=1;

    printf("\n");
    getchar();
    }
    }





    int main()
    {
    initialize();
    nand_gates();
    XFlush(disp);
    getchar();
    return 0;
    }

Aktív témák