verilog implementation of Gaussion Random Number Generator using boxmuller method ,full verilog Code

Embed Size (px)

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.....

Citation preview

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

    //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