Find the phase difference of a sine wave in verilog . Sine wave is represented in 16 bit binary in 60 address location of the ram . Brief alogarithm

84 views Asked by At

frequency of the sine wave is 1 khz .

Max Amplitude of the sine wave is 4.97 V in IEEE 754 floating point format

Similarly other values values of the wave which is converted in to 16 bit binary .

Want some ideas to create an alogarithm at first to use this values to find phase difference of the sine wave .

The LUT created till know to read the values :

Memory Created :

module ram_memory_2(clk,add,data);

    input [5:0]add;
    input clk;
    output reg [15:0]data;
   

    always @ (*)
    begin
       case(add)
            0  : data <= 16'b0011011010010011;
            1  : data <= 16'b0011011011111010;
            2  : data <= 16'b0011011011111010;
            3  : data <= 16'b0011011101110001;
            4  : data <= 16'b0011011110101010;
            5  : data <= 16'b0011011111010111;
            6  : data <= 16'b0011011111100111;
            7  : data <= 16'b0011011111110100;
            8  : data <= 16'b0011011111011111;
            9  : data <= 16'b0011011111001111;
            10 : data <= 16'b0011011110011110;
            11 : data <= 16'b0011011101101101;
            12 : data <= 16'b0011011100110011;
            13 : data <= 16'b0011011011100001;
            14 : data <= 16'b0011011001111111;
            15 : data <= 16'b0011011000100001;
            16 : data <= 16'b0011010110100010;
            17 : data <= 16'b0011010100100011;
            18 : data <= 16'b0011010010011100;
            19 : data <= 16'b0011010000001100;
            20 : data <= 16'b0011001011100001;
            21 : data <= 16'b0011000110100010;
            22 : data <= 16'b0011000001010010;
            23 : data <= 16'b0010111000101011;
            24 : data <= 16'b0010101010101110;
            25 : data <= 16'b0010000110100010;
            26 : data <= 16'b1010100000001011;
            27 : data <= 16'b1010110010011000;
            28 : data <= 16'b1010111100111011;
            29 : data <= 16'b1011000011101110;
            30 : data <= 16'b1011001000111101;
            31 : data <= 16'b1011001101011100;
            32 : data <= 16'b1011010001001010;
            33 : data <= 16'b1011010011011101;
            34 : data <= 16'b1011010101100000;
            35 : data <= 16'b1011010111010011;
            36 : data <= 16'b1011011001000010;
            37 : data <= 16'b1011011010101000;
            38 : data <= 16'b1011011011111010;
            39 : data <= 16'b1011011101001100;
            40 : data <= 16'b1011011110001101;
            41 : data <= 16'b1011011110111010;
            42 : data <= 16'b1011011111010011;
            43 : data <= 16'b1011011111011011;
            44 : data <= 16'b1011011111101100;
            45 : data <= 16'b1011011111100011;
            46 : data <= 16'b1011011111000011;
            47 : data <= 16'b1011011110011110;
            48 : data <= 16'b1011011101011100;
            49 : data <= 16'b1011011100100011;
            50 : data <= 16'b1011011011001001;
            51 : data <= 16'b1011011001101010;
            52 : data <= 16'b1011011000000100;
            53 : data <= 16'b1011010110001101;
            54 : data <= 16'b1011010100001010;
            55 : data <= 16'b1011010001111011;
            56 : data <= 16'b1011001111010111;
            57 : data <= 16'b1011001010011000;
            58 : data <= 16'b1011000101011000;
            59 : data <= 16'b1011000000011001;
            default: data <= 16'b0000000000000000; // default case if address not listed
        endcase
    end
endmodule


1

There are 1 answers

0
Mogwaika On

You can search this table to find positions and subtraction of two addresses give you phase difference. Next time you can use some linear approximation for more precise results.