verilog implementation of gaussion random number generator using boxmuller method ,full verilog code

Upload: abhijeet-singh-katiyar

Post on 30-Oct-2015

170 views

Category:

Documents


1 download

DESCRIPTION

this code represents the pipeline structure of gaussion random number generator ,the pipeline structure having 4 stages ..,it follows the boxmuller method.full verilog code.....

TRANSCRIPT

  • //////////////////////////////////////////////////////////////////////////////////

    //SQUARE ROOT CALCULATIONG PROGRAM

    //combinational circuit of square root

    module SQUAREROOTLELO(outsquare,insquare

    );

    input [0:5] insquare;

    output [0:2] outsquare;

    assign outsquare[0]=(insquare[2] & insquare[3]) | insquare[1];

    assign outsquare[1]=((~insquare[1]) & (insquare[2] ^ insquare[3]));

    assign outsquare[2]=(insquare[5] | insquare[4]) & (((~insquare[1]) & (~(insquare[1]^insquare[3]))) |

    (insquare[2] & insquare[1]));

    endmodule

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    //p encoder

    //8bit p encoder

    module p_encoder8to3(outp,eout,inp,ein

    );

    input [0:7] inp;

    input ein;

    output [0:2] outp;

    output eout;

    assign outp[0]=ein & (inp[3] | inp[2] | inp[1] | inp[0]);

    assign outp[1]=ein & ((inp[5] & (~inp[3]) & (~inp[2])) | (inp[4] & (~inp[3]) & (~inp[2])) |inp[1] | inp[0]);

    assign outp[2]=ein & ((inp[6] & ~inp[5] & ~inp[3] & ~inp[1]) | (inp[4] & ~inp[3] & ~inp[1]) | (inp[2] &

    ~inp[1]) | inp[0] );

    assign eout=ein & ~inp[0] & ~inp[1] & ~inp[2] & ~inp[3] & ~inp[4] & ~inp[5] & ~inp[6] & ~inp[7];

    endmodule

  • //32 BIT P_ENCODER USING 4 8BIT P_ENCODER

    ////////////////////////////////////////////////////////////////////////////////////////////////////////

    module p_encoder32to5(outpt,inpt);

    input [0:31] inpt;

    output [0:4] outpt;

    wire [0:2] peo1,peo2,peo3,peo4;

    wire eout1,eout2,eout3,eout4;

    assign eout4=1;

    p_encoder8to3 pe1 (peo1,,inpt[24:31],eout1);

    p_encoder8to3 pe2 (peo2,eout1,inpt[16:23],eout2);

    p_encoder8to3 pe3 (peo3,eout2,inpt[8:15],eout3);

    p_encoder8to3 pe4 (peo4,eout3,inpt[0:7],eout4);

    assign outpt[4]=peo1[2] | peo2[2] | peo3[2] | peo4[2];

    assign outpt[3]=peo1[1] | peo2[1] | peo3[1] | peo4[1];

    assign outpt[2]=peo1[0] | peo2[0] | peo3[0] | peo4[0];

    assign outpt[1]= (~eout1) & ~(eout2 ^ eout3);

    assign outpt[0]= (~eout1) & (~eout2);

    endmodule

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //APPROX LOG CALCULATING ALGO USING P_ENCODER

    //LOG CALCULATING PROGRAM

    module LOGLELO(outlog,inlog

    );

    input [0:31] inlog;

    output [0:5] outlog;

    wire [0:4] outpet;

    p_encoder32to5 pe32 (outpet,inlog);

    assign outlog=44-7*outpet/5;

  • endmodule

    //////////////////////////////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////////////////////////////////

    //SINE WAVE GENERATOR

    module SINELELO(outs,signs,ins);

    input [0:31] ins;

    output [0:31] outs;

    output signs;

    //wire declaration

    wire [0:32] tmp;

    wire [0:31] twos1,twos2,ready;

    wire [0:31] outs,ins;

    wire [0:34] tmp1,ans;

    wire [0:67] tmp2;

    wire p;

    assign tmp[0]=(ins[0] & ins[1]);

    assign tmp[1]=((~ins[0]) | ins[1]);

    assign tmp[2:32] =0;

    assign signs=((ins[0] & ins[1]) |(ins[0] & (~ins[1])));

    twocmp tws1 (twos1,ins,((ins[0] & ins[1])|((~ins[0]) & ins[1])));

    assign twos2[0]=(((~ins[0])| (ins[1])) & twos1[0]);

    assign twos2[1:31]=twos1[1:31];

    assign ready=tmp+twos2;

    assign tmp1=7*ready;

    assign tmp2=12*ready*ready;

    assign ans=tmp1-tmp2[1:35];

    assign p=ready[0]| ready[2]| ready[3]| ready[4]| ready[5]| ready[6]| ready[7]| ready[8]|

    ready[9]|ready[10]|ready[11]|ready[12]|ready[13]|ready[14]|ready[15]|ready[16]|ready[17];

  • assign outs[1:31]=ans[2:33];

    assign outs[0]=((~p)& ready[1]);

    //first bit of out put id integer and other 31 bit if float

    endmodule

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////

    COS

    //COS CALCULATING PROGRAM , USING POLYNOMIAL METHOD

    module COSLELO(cosout,sign,in

    );

    input [0:31] in;

    output [0:31] cosout;

    output sign;

    wire [0:32] q;

    wire [0:31] in1,in2;

    wire [0:31] cosout;

    wire [0:63] a;

    wire [0:127] b;

    wire [0:191] c;

    wire [0:255] d;

    assign sign=in[0];

    assign in2[0]=in[0];

    assign in2[1]=in[0];

    assign in2[2]=in[0];

    assign in2[3]=in[0];

    assign in2[4]=in[0];

    assign in2[5]=in[0];

    assign in2[6]=in[0];

    assign in2[7]=in[0];

    assign in2[8]=in[0];

  • assign in2[9]=in[0];

    assign in2[10]=in[0];

    assign in2[11]=in[0];

    assign in2[12]=in[0];

    assign in2[13]=in[0];

    assign in2[14]=in[0];

    assign in2[15]=in[0];

    assign in2[16]=in[0];

    assign in2[17]=in[0];

    assign in2[18]=in[0];

    assign in2[19]=in[0];

    assign in2[20]=in[0];

    assign in2[21]=in[0];

    assign in2[22]=in[0];

    assign in2[23]=in[0];

    assign in2[24]=in[0];

    assign in2[25]=in[0];

    assign in2[26]=in[0];

    assign in2[27]=in[0];

    assign in2[28]=in[0];

    assign in2[29]=in[0];

    assign in2[30]=in[0];

    assign in2[31]=in[0];

    assign in1[0:31]=(32'h80000000 & in2)+((in[0:31] & 32'h7fffffff)^in2)+in[0];

    assign a=in1*in1*5;

    assign b=in1*in1*in1*in1*4;

    assign c=in1*in1*in1*in1*in1*in1*4/3;

    assign d=in1*in1*in1*in1*in1*in1*in1*in1/4;

    assign q=33'h100000000;

  • assign cosout=q-a[0:31]+b[0:31]-c[0:31]+d[0:31];

    endmodule

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    //2X1 MUX

    module mux2x1(outm,in1m,in2m,sm);

    output [0:31] outm;

    input sm;

    input [0:31] in1m,in2m;

    wire [0:31] in1m,in2m,outm;

    wire sm,smb;

    assign smb=~sm;

    assign outm[0]= (in1m[0] & smb )|(in2m[0] & sm);

    assign outm[1]= (in1m[1] & smb )|(in2m[1] & sm);

    assign outm[2]= (in1m[2] & smb )|(in2m[2] & sm);

    assign outm[3]= (in1m[3] & smb )|(in2m[3] & sm);

    assign outm[4]= (in1m[4] & smb )|(in2m[4] & sm);

    assign outm[5]= (in1m[5] & smb )|(in2m[5] & sm);

    assign outm[6]= (in1m[6] & smb )|(in2m[6] & sm);

    assign outm[7]= (in1m[7] & smb )|(in2m[7] & sm);

    assign outm[8]= (in1m[8] & smb )|(in2m[8] & sm);

    assign outm[9]= (in1m[9] & smb )|(in2m[9] & sm);

    assign outm[10]= (in1m[10] & smb )|(in2m[10] & sm);

    assign outm[11]= (in1m[11] & smb )|(in2m[11] & sm);

    assign outm[12]= (in1m[12] & smb )|(in2m[12] & sm);

    assign outm[13]= (in1m[13] & smb )|(in2m[13] & sm);

    assign outm[14]= (in1m[14] & smb )|(in2m[14] & sm);

    assign outm[15]= (in1m[15] & smb )|(in2m[15] & sm);

    assign outm[16]= (in1m[16] & smb )|(in2m[16] & sm);

  • assign outm[17]= (in1m[17] & smb )|(in2m[17] & sm);

    assign outm[18]= (in1m[18] & smb )|(in2m[18] & sm);

    assign outm[19]= (in1m[19] & smb )|(in2m[19] & sm);

    assign outm[20]= (in1m[20] & smb )|(in2m[20] & sm);

    assign outm[21]= (in1m[21] & smb )|(in2m[21] & sm);

    assign outm[22]= (in1m[22] & smb )|(in2m[22] & sm);

    assign outm[23]= (in1m[23] & smb )|(in2m[23] & sm);

    assign outm[24]= (in1m[24] & smb )|(in2m[24] & sm);

    assign outm[25]= (in1m[25] & smb )|(in2m[25] & sm);

    assign outm[26]= (in1m[26] & smb )|(in2m[26] & sm);

    assign outm[27]= (in1m[27] & smb )|(in2m[27] & sm);

    assign outm[28]= (in1m[28] & smb )|(in2m[28] & sm);

    assign outm[29]= (in1m[29] & smb )|(in2m[29] & sm);

    assign outm[30]= (in1m[30] & smb )|(in2m[30] & sm);

    assign outm[31]= (in1m[31] & smb )|(in2m[31] & sm);

    endmodule

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    //SIMPLE D FLIP FLOP WITH INITIAL CONDITION 1

    module flipflop1(qff,dff,resetff,setff,clkff);

    input clkff,dff,resetff,setff;

    output qff;

    reg qff;

    initial

    begin

    qff=1;

    end

    always @(posedge clkff or posedge resetff or posedge setff)

  • begin

    if (setff)

    qff=1;

    else if(resetff)

    qff=0;

    else

    qff=dff;

    end

    endmodule

    //////////////////////////////////////////////////////////////////////////////////////////////////

    ///SIMPLE D FLIP FLOP WITH INITIAL CONDITION 0

    module flipflop0(qff,dff,resetff,setff,clkff);

    input clkff,dff,resetff,setff;

    output qff;

    reg qff;

    initial

    begin

    qff=0;

    end

    always @(posedge clkff or posedge resetff or posedge setff)

    begin

    if (setff)

    qff=1;

    else if(resetff)

    qff=0;

    else

    qff=dff;

    end

    endmodule

  • // FIRST LSFR

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    //USING 43 FF,AND SELECT 32 BIT IN 43

    module LSFRone(outlsfr,resetlsfr,clklsfr);

    input clklsfr,resetlsfr;

    output [0:31] outlsfr;

    wire [0:31] outlsfr;

    wire [0:5] uga;

    wire setlsfr;

    assign setlsfr=0;

    xor (uga[0],outlsfr[0],outlsfr[31]);

    xor (uga[1],outlsfr[0],outlsfr[30]);

    xor (uga[2],outlsfr[0],outlsfr[29]);

    xor (uga[3],outlsfr[0],outlsfr[28]);

    xor (uga[4],outlsfr[0],outlsfr[27]);

    xor (uga[5],outlsfr[0],outlsfr[26]);

    flipflop0 ff1 (outlsfr[0],outlsfr[1],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff2 (outlsfr[1],outlsfr[2],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff3 (outlsfr[2],outlsfr[3],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff4 (outlsfr[3],outlsfr[4],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff5 (outlsfr[4],outlsfr[5],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff6 (outlsfr[5],outlsfr[6],resetlsfr,setlsfr,clklsfr);

    flipflop1 ff7 (outlsfr[6],outlsfr[7],setlsfr,resetlsfr,clklsfr);

    flipflop0 ff8 (outlsfr[7],outlsfr[8],resetlsfr,resetlsfr,clklsfr);

    flipflop0 ff9 (outlsfr[8],outlsfr[9],resetlsfr,resetlsfr,clklsfr);

    flipflop0 ff10 (outlsfr[9],outlsfr[10],resetlsfr,resetlsfr,clklsfr);

    flipflop0 ff11 (outlsfr[10],outlsfr[11],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff12 (outlsfr[11],outlsfr[12],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff13 (outlsfr[12],outlsfr[13],resetlsfr,setlsfr,clklsfr);

  • flipflop1 ff14 (outlsfr[13],outlsfr[14],setlsfr,resetlsfr,clklsfr);

    flipflop0 ff15 (outlsfr[14],outlsfr[15],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff16 (outlsfr[15],outlsfr[16],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff17 (outlsfr[16],outlsfr[17],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff18 (outlsfr[17],outlsfr[18],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff19 (outlsfr[18],outlsfr[19],resetlsfr,setlsfr,clklsfr);

    flipflop1 ff20 (outlsfr[19],outlsfr[20],setlsfr,resetlsfr,clklsfr);

    flipflop0 ff21 (outlsfr[20],outlsfr[21],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff22 (outlsfr[21],outlsfr[22],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff23 (outlsfr[22],outlsfr[23],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff24 (outlsfr[23],outlsfr[24],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff25 (outlsfr[24],outlsfr[25],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff26 (outlsfr[25],outlsfr[26],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff27 (outlsfr[26],outlsfr[27],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff28 (outlsfr[27],uga[3],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff29 (outlsfr[28],uga[2],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff30 (outlsfr[29],uga[1],resetlsfr,setlsfr,clklsfr);

    flipflop1 ff31 (outlsfr[30],uga[0],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff32 (outlsfr[31],outlsfr[0],resetlsfr,setlsfr,clklsfr);

    endmodule

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////

    // SECOND LSFR

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    //USING 43 FF, SELECT 32 BIT IN 43;

    module LSFRtwo(outlsfr,resetlsfr,clklsfr);

    input clklsfr,resetlsfr;

  • output [0:31] outlsfr;

    wire [0:31] outlsfr;

    wire [0:5] uga2;

    wire setlsfr;

    assign setlsfr=0;

    xor (uga2[0],outlsfr[0],outlsfr[31]);

    xor (uga2[1],outlsfr[0],outlsfr[30]);

    xor (uga2[2],outlsfr[0],outlsfr[29]);

    xor (uga2[3],outlsfr[0],outlsfr[28]);

    xor (uga2[4],outlsfr[0],outlsfr[27]);

    xor (uga2[5],outlsfr[0],outlsfr[26]);

    flipflop0 ff1 (outlsfr[0],outlsfr[1],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff2 (outlsfr[1],outlsfr[2],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff3 (outlsfr[2],outlsfr[3],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff4 (outlsfr[3],outlsfr[4],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff5 (outlsfr[4],outlsfr[5],resetlsfr,setlsfr,clklsfr);

    flipflop1 ff6 (outlsfr[5],outlsfr[6],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff7 (outlsfr[6],outlsfr[7],setlsfr,resetlsfr,clklsfr);

    flipflop0 ff8 (outlsfr[7],outlsfr[8],resetlsfr,resetlsfr,clklsfr);

    flipflop0 ff9 (outlsfr[8],outlsfr[9],resetlsfr,resetlsfr,clklsfr);

    flipflop0 ff10 (outlsfr[9],outlsfr[10],resetlsfr,resetlsfr,clklsfr);

    flipflop0 ff11 (outlsfr[10],outlsfr[11],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff12 (outlsfr[11],outlsfr[12],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff13 (outlsfr[12],outlsfr[13],resetlsfr,setlsfr,clklsfr);

    flipflop1 ff14 (outlsfr[13],outlsfr[14],setlsfr,resetlsfr,clklsfr);

    flipflop0 ff15 (outlsfr[14],outlsfr[15],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff16 (outlsfr[15],outlsfr[16],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff17 (outlsfr[16],outlsfr[17],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff18 (outlsfr[17],outlsfr[18],resetlsfr,setlsfr,clklsfr);

  • flipflop0 ff19 (outlsfr[18],outlsfr[19],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff20 (outlsfr[19],outlsfr[20],setlsfr,resetlsfr,clklsfr);

    flipflop0 ff21 (outlsfr[20],outlsfr[21],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff22 (outlsfr[21],outlsfr[22],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff23 (outlsfr[22],outlsfr[23],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff24 (outlsfr[23],outlsfr[24],resetlsfr,setlsfr,clklsfr);

    flipflop1 ff25 (outlsfr[24],outlsfr[25],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff26 (outlsfr[25],outlsfr[26],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff27 (outlsfr[26],outlsfr[27],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff28 (outlsfr[27],uga2[3],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff29 (outlsfr[28],uga2[2],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff30 (outlsfr[29],uga2[1],resetlsfr,setlsfr,clklsfr);

    flipflop1 ff31 (outlsfr[30],uga2[0],resetlsfr,setlsfr,clklsfr);

    flipflop0 ff32 (outlsfr[31],outlsfr[0],resetlsfr,setlsfr,clklsfr);

    endmodule

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////////////////////////////////////////

    //2'S COMPLEMENT GENERATOR;

    module twocmp(outad,inad,scmp);

    output [0:31] outad;

    input scmp;

    input [0:31] inad;

    wire [0:31] tmp3;

    assign tmp3[0]=scmp ^ inad[0];

    assign tmp3[1]=scmp ^ inad[1];

    assign tmp3[2]=scmp ^ inad[2];

  • assign tmp3[3]=scmp ^ inad[3];

    assign tmp3[4]=scmp ^ inad[4];

    assign tmp3[5]=scmp ^ inad[5];

    assign tmp3[6]=scmp ^ inad[6];

    assign tmp3[7]=scmp ^ inad[7];

    assign tmp3[8]=scmp ^ inad[8];

    assign tmp3[9]=scmp ^ inad[9];

    assign tmp3[10]=scmp ^ inad[10];

    assign tmp3[11]=scmp ^ inad[11];

    assign tmp3[12]=scmp ^ inad[12];

    assign tmp3[13]=scmp ^ inad[13];

    assign tmp3[14]=scmp ^ inad[14];

    assign tmp3[15]=scmp ^ inad[15];

    assign tmp3[16]=scmp ^ inad[16];

    assign tmp3[17]=scmp ^ inad[17];

    assign tmp3[18]=scmp ^ inad[18];

    assign tmp3[19]=scmp ^ inad[19];

    assign tmp3[20]=scmp ^ inad[20];

    assign tmp3[21]=scmp ^ inad[21];

    assign tmp3[22]=scmp ^ inad[22];

    assign tmp3[23]=scmp ^ inad[23];

    assign tmp3[24]=scmp ^ inad[24];

    assign tmp3[25]=scmp ^ inad[25];

    assign tmp3[26]=scmp ^ inad[26];

    assign tmp3[27]=scmp ^ inad[27];

    assign tmp3[28]=scmp ^ inad[28];

    assign tmp3[29]=scmp ^ inad[29];

    assign tmp3[30]=scmp ^ inad[30];

    assign tmp3[31]=scmp ^ inad[31];

  • assign outad=tmp3+scmp;

    endmodule

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //REGISTERS USER IN PIPELINE STRUCTURE

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //1st PART REGISTERS

    module part1reg(lsfrout1,lsfrout2,resetr1,clkr1);

    output [0:31] lsfrout1,lsfrout2;

    input clkr1,resetr1;

    reg [0:31] lsfrout1,lsfrout2;

    wire [0:31] lsfrr1,lsfrr2;

    wire clkh;

    initial

    begin

    lsfrout1=0;

    lsfrout2=0;

    end

    assign # 0.008 clkh=clkr1;

    LSFRone L1 (lsfrr1,resetr1,clkr1);

    LSFRtwo L2 (lsfrr2,resetr1,clkr1);

    always @ (posedge clkh)

    begin

    lsfrout1

  • //2nd PART PEGISTERS

    module part2reg(sqwout,cosout,sinout,csign,ssign,lsfrr21,lsfrr22,clkr2);

    input [0:31] lsfrr22,lsfrr21;

    output [0:31] cosout;

    output [0:31] sinout;

    output csign,ssign;

    output [0:2] sqwout;

    input clkr2;

    reg [0:31] cosout;

    reg [0:31] sinout;

    reg [0:2] sqwout;

    reg csign,ssign;

    wire [0:2] sqw;

    wire [0:5] logw;

    wire [0:31] cosr,lsfrr22,lsfrr21;

    wire [0:31] sinr;

    wire csign1,ssign1,clkh2;

    initial

    begin

    csign=0;

    ssign=0;

    sqwout=0;

    cosout=0;

    sinout=0;

    end

    COSLELO C1 (cosr,csign1,lsfrr21);

    SINELELO S1 (sinr,ssign1,lsfrr21);

    LOGLELO LO1 (logw,lsfrr22);

    SQUAREROOTLELO SQ1 (sqw,logw);

  • assign # 0.004 clkh2=clkr2;

    always @ (posedge clkh2)

    begin

    sqwout

  • grngc=0;

    grngs=0;

    csign=0;

    ssign=0;

    end

    assign # 0.002 clkh3=clkr3;

    assign multi=sqwr3*cosinr3;

    assign multis=sqwr3*sininr3;

    assign multi2=multi[1:15];

    assign multis2=multis[2:16];

    assign xsd=multi2*sd;

    assign xsds=multis2*sd;

    assign xsd32=xsd[22:53];

    assign xsd32s=xsds[22:53];

    always @ (posedge clkh3)

    begin

    grngc

  • reg [0:31] grnga1,grnga2;

    reg g1sign,g2sign;

    wire [0:34] cmp,cmps;

    wire [0:31] mean2,mean2s,xsd2,xsd2s,outgc,outgs;

    wire clkh4;

    initial

    begin

    grnga1=0;

    grnga2=0;

    g1sign=0;

    g2sign=0;

    end

    assign # 0.001 clkh4=clkr4;

    assign cmp=mean-xsdrc;

    assign cmps=mean-xsdrs;

    assign signgc=(csign & cmp[0]);

    assign signgs=(ssign & cmps[0]);

    twocmp tw1 (mean2,mean,signgc);

    twocmp tw2 (xsd2,xsdrc,(csign & (~cmp[0])));

    twocmp tw3 (mean2s,mean,signgs);

    twocmp tw4 (xsd2s,xsdrs,(ssign & (~cmps[0])));

    assign outgc=mean2+xsd2;

    assign outgs=mean2s+xsd2s;

    always @ (posedge clkh4)

    begin

    grnga1

  • g2sign
  • end

    endmodule

    //GAUSSION RANDOM NUMBER

    GENERATOR////////////////////////////////////////////////////////////////////////

    /////////////////////USING BOX MULLER METHOD

    /////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////

    module NEWGRNG(/*g1rng,g2rng,g1sign,g2sign,*/grngoutq,gsignq,numberofterm,mean,sd,resetg,clkg);

    //output [0:31] g1rng,g2rng;

    //output g1sign,g2sign;

    //if g1sign=0 => number is +ve,

    //if g2sign=1 => number is -ve,

    //sd=standard deviation

    output [0:31] grngoutq;

    output gsignq;

    input clkg,resetg;

    input [0:31] mean,sd,numberofterm;

    integer fp;

    reg [0:31] number;

    wire [0:31] lsfrp1,lsfrp2,cosh,grngch,grngsh;

    wire [0:31] sinh;

    wire [0:2] sqwh;

    wire csignh,ssignh,signch,signsh,g1sign,g2sign,gsignq;

    wire [0:31] g1rng,g2rng,grngoutq;

    initial

    begin

    fp=$fopen("getval.txt","w");

    number=0;

    end

  • //First Stage of pipeline

    //Generation of uniform random numbers

    part1reg pr1 (lsfrp1,lsfrp2,resetg,clkg);

    //Second stage of pipeline

    //Apply BOX MULLER TRANSFORMATION calculate cos,sin,log,squarw root

    part2reg pr2 (sqwh,cosh,sinh,csignh,ssignh,lsfrp1,lsfrp2,clkg);

    //third stage of pipeline

    //Multiplication of cos,sin unit to square root unit, and change sd

    part3reg pr3 (grngch,signch,grngsh,signsh,sd,cosh,sinh,csignh,ssignh,sqwh,clkg);

    //fourth stage of pipeline

    //Change mean of the system

    part4reg pr4 (g1rng,g1sign,g2rng,g2sign,mean,grngch,grngsh,signch,signsh,clkg);

    //fifth stage of pipeline

    //selection of best GRN

    part5reg pr5 (grngoutq,gsignq,g1rng,g2rng,g1sign,g2sign,mean,clkg);

    always @ (posedge clkg)

    begin

    if((numberofterm+3) ==number)

    begin

    $fclose(fp);

    $finish;

    end

    if (number==0)

    begin

    $fwrite(fp,"%x\n%x\n",mean,sd);

    end

    if(number > 2)

    begin

    $fwrite(fp,"%x\n%x\n",gsignq,grngoutq);

  • //$fwrite(fp,"%x\n%x\n",g1sign,g1rng);

    //$fwrite(fp,"%x\n%x\n",g2sign,g2rng);

    end

    number=number+1;

    end

    endmodule