Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

ad5932 programming problem...using verilog coding

Status
Not open for further replies.

reniflal

Newbie level 1
Joined
Jan 6, 2014
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
29
I have been trying to configure an ad5932 dds for a week......i could get the msb output....but i couldnt get any output from vout....i.e. i couldnt get sine/triangular wave...can u help me...i will post the code now.


Code Verilog - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
module t1(
    input clk,
    input reset,
     input start,
    output sclk,
    output sdata,
    output ss_n,
    output ctrl
    );
reg sclk_r;
reg sdata_r;
reg ss_n_r;
reg ctrl_r;
reg [4:0]counter;
reg [7:0]data_counter;
reg flag;
reg even;
reg [63:0] data;
reg [64:0] data_en;
reg i;
assign sclk=sclk_r;
assign sdata=sdata_r;
assign ss_n=ss_n_r;
assign ctrl=ctrl_r;
 
always@(posedge clk or posedge reset)//flag for transmission
    begin
        if(reset)
            flag<=0;
        else if(data_counter==8'd128)//resetting flag after configguring
            flag<=0;
        else if(start&& ~i)//once start is initiated,set flag
            flag<=1;
    end
always@(posedge clk or posedge reset)//counter for baudrate
    begin
        if(reset)
        begin
            counter<=5'd0;//counter to set baud rate at 1Mhz
        end
        else if(start)
        begin
            counter<=5'd0;//counter to set baud rate at 1Mhz
        end
        else if(counter==5'd25)
        begin
            counter<=0;
        end
        else 
        begin
            counter<=counter+1;
        end
    end
always@(posedge clk or posedge reset)//to config only once
    begin
        if(reset)
            i<=0;
        else if(data_counter==8'd128)
        i<=1;
    end
always@(posedge clk or posedge reset)//ctrl pin config
    begin
        if(reset)
            ctrl_r<=0;
        else if(data_counter==8'd130 &&(i))//after configuting , delay 1 data time and assert cntrl
            ctrl_r<=1;
        else if(data_counter==8'd131)//reset cntrl after 2 data perods
            ctrl_r<=0;
    end
 
always@(posedge clk or posedge reset)//sclk generation
    begin
        if(reset)
            sclk_r<=1;
        else if((counter==6'd25)&&flag)//sclk generation
            sclk_r<=~sclk_r;
        else if(!flag)
            sclk_r<=1;
    end
always@(posedge clk or posedge reset)//
    begin
        if(reset)
            even<=0;
        else if(counter==6'd20)//transmitting data 5 ticks before negedge of sclk 
            even<=~even;
    end
always@(posedge clk or posedge reset)//data counter
    begin
        if(reset)
            data_counter<=0;
        else if((counter==6'd25)&&(flag||i))//counting data transmitted
            data_counter<=data_counter+1;
        
    end
always@(posedge clk or posedge reset)//sdata sending
    begin
        if(reset)
            sdata_r<=0;
        else if( flag&&(counter==6'd24)&&(~even))//sending serial data
            sdata_r<=data[63];
    end
always@(posedge clk or posedge reset)//shifting data
    begin
        if(reset)
            data<=64'h0ff3ffffcfbad000;
        else if((flag)&&(counter==6'd01)&&(~even))//shifting serial data
            data<={data[62:0],data[63]};
    end
always@(posedge clk or posedge reset)//ss sending
    begin
        if(reset)
            ss_n_r<=1;
    
        else if( (flag)&&(counter==6'd10)&&(~even))//sending slave select signal
            ss_n_r<=data_en[64];
        else if(data_counter==129)
            ss_n_r<=1;
    end
always@(posedge clk or posedge reset)//shifting ss
    begin
        if(reset)
            data_en<=65'h00000ffff00000000;
        else if(flag&&(counter==6'd01)&&(~even))//shifting slave select signal
            data_en<={data_en[63:0],data_en[64]};
    end
 
endmodule



:-( cAn anyone help me
 
Last edited by a moderator:

Try this one...

Code:
module t1 (
          input  clk,
          input  reset,
          input  start,
          output sclk,
          output sdata,
          output ss_n,
          output ctrl
         );

reg sclk_r;
reg sdata_r;
reg ss_n_r;
reg ctrl_r;
reg [4:0]counter;
reg [7:0]data_counter;
reg flag;
reg even;
reg [63:0] data;
reg [64:0] data_en;
reg i;

assign sclk=sclk_r;
assign sdata=sdata_r;
assign ss_n=ss_n_r;
assign ctrl=ctrl_r;

always @ (posedge clk or posedge reset) begin
  if ( reset) begin
    flag          <= 1'b0;
    counter       <= 5'd0;//counter to set baud rate at 1Mhz
    i             <= 1'b0;
    ctrl_r        <= 1'b0;
    sclk_r        <= 1'b1;
    even          <= 1'b0;
    data_counter  <= 'h0;
    data          <= 64'h0ff3ffffcfbad000;
    ss_n_r        <= 1'b1;
    data_en       <=65'h00000ffff00000000;
  end
  else begin
    if ( start && ~i )
       flag <= 1'b0;
    else if ( data_counter == 8'd128 ) begin
       flag <= 1'b1;
       i    <= 1'b1;
    end
 
    if ( start )
       counter <= 5'd0;
    else if ( counter == 5'd25 )
       counter <= 5'd0;
    else
       counter <= counter + 1'b1;

    if ( data_counter == 8'd130 && i == 1'b1 )
       ctrl_r <= 1'b1;
    else if ( data_counter == 8'b131 )
       ctrl_r <= 1'b0;

    if ( counter == 5'd25 && flag == 1'b1 )
       sclk_r <= ~sclk_r;
    else if ( ~flag )
       sclk_r <= 1'b1;

    if ( counter == 5'd20 )
       even <= ~even;

    if ( counter == 5'd25 && (flag || i ) )
       data_counter <= data_counter + 1'b1;

    if ( flag && ( counter == 5'd24 ) && ~even )
       sdata_r <= data[63];

    if ( flag && ( counter == 5'd01 ) && ~even ) begin
       data <= { data[62:0], data[63] }
       data_en <= { data_en[63:0] , data_en[64] };
    end

    if ( flag && ( counter == 5'd10 ) && ~even )
       ss_n_r <= data_en[64];
    else if ( data_counter == 8'd129 )
       ss_n_r <= 1'b1;


  end //if
end //always
endmodule
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top